是否可以在 perl 中创建一个字符串变量数组,而不必指定数组中的每个字符串?就像使用字母和数字的“..”快捷方式一样。

例如:

$v1 = "hey";
$v2 = "hello";
$v3 = "bye";
$v4 = "welcome";

@f = ("$v1" .. "$v4");

这样打印 $f[2];等于“再见”...

最佳答案

这可以 - 但可能不应该 - 通过使用 no strict 'refs' 来解决。也巧合的是 no strict 'vars' :

use strict;
use warnings;
use Data::Dumper;

{
    no strict 'vars';
    $v1 = "hey";
    $v2 = "hello";
    $v3 = "bye";
    $v4 = "welcome";

    no strict 'refs';
    my @f = map ${'v'.$_},1..4;
    print Dumper \@f;
}

输出:(无警告)
$VAR1 = [
          'hey',
          'hello',
          'bye',
          'welcome'
        ];

我们需要 no strict 'vars' 因为我们实际需要引用的变量(实际上)被命名为 $main::v1 等。我们实际上可以通过使用完整名称来绕过对 no strict 'vars' 的需求。如果您根本不使用严格,这甚至不是问题。尽管不使用 strict 与通过在警告灯上贴上贴纸来解决汽车发动机问题一样聪明:它不会挽救您的发动机故障。

你应该这样做吗?几乎不。总有办法绕过它。但是,这样做并没有什么大错,假设您不会像这样作弊过火。

正确的 方法是代替使用 $v1 , ... $v1000 ,使用 $v[0] , ... $v[1000] 。也就是说,立即将值分配给数组。

关于arrays - Perl 数组快捷键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13056915/

10-12 19:24