---
name: "Device::Gsm::Pdu"
section: "3pm"
platform: "linux"
package: "perl-device-gsm"
version: "1.61-6"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Device::Gsm::Pdu"
---

# Device::Gsm::Pdu(3pm)

library to manage PDU encoded data for GSM messaging

## NAME

Device::Gsm::Pdu - library to manage PDU encoded data for GSM messaging

## WARNING

```
   This is C<BETA> software, still needs extensive testing and
   support for custom GSM commands, so use it at your own risk,
   and without C<ANY> warranty! Have fun.
```

## NOTICE

```
    This module is meant to be used internally by C<Device::Gsm> class,
    so you probably do not want to use it directly.
```

## SYNOPSIS

```
  use Device::Gsm::Pdu;
  # DA is destination address
  $DA = Device::Gsm::Pdu::encode_address('+39347101010');
  $number = Device::Gsm::Pdu::decode_address( $DA );
  # Encode 7 bit text to send messages
  $text = Device::Gsm::Pdu::encode_text7('hello');
```

## DESCRIPTION

`"Device::Gsm::Pdu"` module includes a few basic functions to deal with SMS in PDU mode, such as encoding GSM addresses (phone numbers) and, for now only, 7 bit text.

## FUNCTIONS

### decode\_address( pdu\_encoded\_address )

Takes a PDU encoded address and decodes into human-readable mobile number. If number type is international, result will be prepended with a \`+' sign.

Clearly, it is intended as an internal function.

*Example*

```
    print Device::Gsm::Pdu::decode_address( '0B919343171010F0' );
    # prints `+39347101010';
```

### encode\_address( mobile\_number )

Takes a mobile number and encodes it as DA (destination address). If it begins with a \`+', as in \`+39328101010', it is treated as an international number.

*Example*

```
    print Device::Gsm::Pdu::encode_address( '+39347101010' );
    # prints `0B919343171010F0'
```

### encode\_text7( text\_string )

Encodes some text ASCII string in 7 bits PDU format, including a header byte which tells the length is septets. This is the only 100% supported mode to encode text.

*Example*

```
    print Device::Gsm::Pdu::encode_text7( 'hellohello' );
    # prints `0AE832...'
```

### pdu\_to\_latin1($pdu)

Converts a PDU (without the initial length octet) into a latin1 string.

*Example*

```
    my $pdu = 'CAFA9C0E0ABBDF7474590E8296E56C103A3C5E97E5';
    print Device::Gsm::Pdu::pdu_to_latin1($pdu);
    # prints `Just another Perl hacker'
```

### latin1\_to\_pdu($text)

Converts a text string in latin1 encoding (ISO-8859-1) into a PDU string.

*Example*

```
    my $text = "Just another Perl hacker";
    print Device::Gsm::Pdu::latin1_to_pdu($text);
    # prints `CAFA9C0E0ABBDF7474590E8296E56C103A3C5E97E5'
```

## AUTHOR

Cosimo Streppone, cosimo@cpan.org

## COPYRIGHT

This library is free software; you can redistribute it and/or modify it only under the terms of Perl itself.

## SEE ALSO

**Device::Gsm**(3), [**perl**(1)](/perl/1.md)
