是否可以在 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/