CODE
use warnings;
use strict;
my $mv = 41;
my $tmp =1;
while($tmp<26)
{
print chr (hex($mv++));
print "\n";
$tmp++;
}
输出 ABCDEFGHIPQRSTUVWXY`abcde
代码生成英文字符集
问题
很少有字符缺少“J-&gt; O&amp;&amp; Z”
原因J十六进制值为4a
如何以perl或其他任何方式递增十六进制值以生成字符集?
答案 0 :(得分:7)
根据您留下的评论,您的最终目标似乎是生成映射A = 1,B = 2。这是实现这一目标的代码:
my @symbols = 'A'..'Z';
my %map = map { $symbols[$_] => $_+1 } 0..$#symbols;
或(不太灵活):
my %map = map { $_ => ord($_)-ord('A')+1 } 'A'..'Z';
答案 1 :(得分:2)
你可能想要
for my $i (65..122) {
print chr($i);
}
您也可以
for my $char ("a".."z", "A".."Z") {
print $char;
}
答案 2 :(得分:1)
将实际规定的目标(字符映射到代码)放在一边,这里的问题是$mv
不是十六进制值,它是一个十进制值,您可以将其字符串化并视为十六进制。这意味着49之后的下一个值是50,而不是4a。如果$mv
从一开始就是十六进制,那么您就不会遇到此问题(并且您也不需要调用hex()
)。如果您将$mv
声明为:
$mv = 0x41;
然后你会发现值49正确后跟4a。使用您的代码示例:
my $mv = 0x41;
my $tmp = 1;
while ($tmp < 26)
{
print chr($mv++);
print "\n";
$tmp++;
}
您应该获得原始预期结果。
答案 3 :(得分:0)
尝试类似
的内容print chr for (65..90);