ZetCode

Perl chr 函数

最后修改于 2025 年 4 月 4 日

Perl的chr函数将ASCII或Unicode码点转换为它们对应的字符。它是Perl的ord函数的逆函数。

chr接受一个数字,并返回该数字在当前字符集中表示的字符。它同时支持ASCII和Unicode值。

chr 的基本用法

使用chr最简单的方法是将ASCII值转换为字符。

basic.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my $char = chr(65);
print "Character for ASCII 65: '$char'\n";

$char = chr(97);
print "Character for ASCII 97: '$char'\n";

我们演示了chr将ASCII值转换为其对应字符。ASCII码65是'A',97是'a'。

$ ./basic.pl
Character for ASCII 65: 'A'
Character for ASCII 97: 'a'

生成字母表

chr可用于生成字符序列。

alphabet.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

print "Uppercase alphabet: ";
for my $i (65..90) {
    print chr($i);
}
print "\n";

print "Lowercase alphabet: ";
for my $i (97..122) {
    print chr($i);
}
print "\n";

此脚本使用ASCII值生成英文字母表。大写字母范围是65-90,小写字母范围是97-122。

$ ./alphabet.pl
Uppercase alphabet: ABCDEFGHIJKLMNOPQRSTUVWXYZ
Lowercase alphabet: abcdefghijklmnopqrstuvwxyz

处理 Unicode

当Perl处于Unicode模式时,chr可以处理Unicode字符。

unicode.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;
use utf8;

my $euro = chr(0x20AC);
my $heart = chr(0x2665);
my $smiley = chr(0x1F600);

print "Euro symbol: $euro\n";
print "Heart symbol: $heart\n";
print "Smiley face: $smiley\n";

我们使用十六进制码点生成几个Unicode字符。use utf8编译指示启用Unicode支持。

$ ./unicode.pl
Euro symbol: €
Heart symbol: ♥
Smiley face: 😀

创建特殊字符

chr对于创建控制字符和特殊符号非常有用。

special.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my $newline = chr(10);
my $tab = chr(9);
my $bell = chr(7);

print "This ends with newline$newline";
print "This\tuses\ttabs$newline";
print "Bell sound: $bell\n";

此示例创建了常见的控制字符。ASCII码10是换行符,9是制表符,7是响铃符。

$ ./special.pl
This ends with newline
This    uses    tabs
Bell sound: 

生成二进制数据

chr可以通过转换数值来帮助生成二进制数据。

binary.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my $binary = '';
for my $i (0..255) {
    $binary .= chr($i);
}

open(my $fh, '>', 'data.bin') or die $!;
print $fh $binary;
close($fh);

print "Generated binary file with all 256 byte values\n";

我们创建一个包含所有可能字节值(0-255)的二进制文件。每个数字都使用chr转换为其对应的字节。

$ ./binary.pl
Generated binary file with all 256 byte values

生成密码

chr可以作为随机密码生成算法的一部分。

password.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

sub generate_password {
    my $length = shift;
    my $password = '';
    
    for (1..$length) {
        # Generate random printable ASCII (33-126)
        my $char = chr(33 + int(rand(94)));
        $password .= $char;
    }
    
    return $password;
}

print "Your password: ", generate_password(12), "\n";

此脚本使用可打印的ASCII字符生成随机密码。chr将随机数转换为其对应的字符。

$ ./password.pl
Your password: kL9#mX@2qP$5

十六进制字符串转换

chr可以将十六进制字符串表示转换为字符。

hex.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my $hex_str = "48656c6c6f20576f726c64";  # "Hello World" in hex
my $string = '';

while ($hex_str =~ /(..)/g) {
    $string .= chr(hex($1));
}

print "Converted string: $string\n";

我们将一个十六进制字符串转换为其ASCII表示。每对十六进制数字都使用chr转换为一个字符。

$ ./hex.pl
Converted string: Hello World

最佳实践

来源

Perl chr 文档

本教程介绍了Perl的chr函数,并通过实际示例演示了其在各种场景下的用法。

作者

我叫Jan Bodnar,是一名热情的程序员,拥有丰富的编程经验。我从2007年开始撰写编程文章。至今,我已撰写了1400多篇文章和8本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 Perl 教程