我需要Perl的auto-increment magic作为字符串,但是一些字符串(例如那些完全由数字组成的字符串)被解释为数字,而是执行正常的增量。我如何强制Perl将传递给++
的值视为字符串?
答案 0 :(得分:2)
以下是关于自动递增的相关问题:Autoincrementing letters in Perl
就像解释的docs一样,基本上你需要变量
/^[a-zA-Z]*[0-9]*\z/
和因为您的变量与正则表达式不匹配,所以这些变量将被视为数字。您可以编写自己的增量函数来获得所需的功能。以下是关于如何帮助您入门的想法。
#!/usr/bin/perl
use strict;
use warnings;
my $test = "1000";
for (0..100) {
$test = increment($test);
}
print $test . "\n";
$test = "M2V3";
for (0..100) {
$test = increment($test);
}
print $test . "\n";
sub increment {
my ($str) = @_;
my @letters = reverse split //, $str;
my $add = "";
my $increment = 1;
my $result = "";
for my $let (@letters) {
if ( $increment == 1 ) {
++$let;
}
if ( $let =~ /(.)(.)/ ) {
$add = $2;
$increment = 1;
} else {
$add = $let;
$increment = 0;
}
$result = $add . $result;
}
return $result;
}
输出:
1101
M3F4
我没有计算确认M3F4
是正确的结果,但似乎很接近。