强制自动增量将其参数视为字符串

时间:2015-03-04 02:32:30

标签: perl

我需要Perl的auto-increment magic作为字符串,但是一些字符串(例如那些完全由数字组成的字符串)被解释为数字,而是执行正常的增量。我如何强制Perl将传递给++的值视为字符串?

1 个答案:

答案 0 :(得分:2)

以下是关于自动递增的相关问题:Autoincrementing letters in Perl

就像解释的docs一样,基本上你需要变量

  1. 匹配正则表达式/^[a-zA-Z]*[0-9]*\z/
  2. 仅用于字符串上下文。
  3. 因为您的变量与正则表达式不匹配,所以这些变量将被视为数字。您可以编写自己的增量函数来获得所需的功能。以下是关于如何帮助您入门的想法。

    #!/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是正确的结果,但似乎很接近。