是否可以在 perl 中创建一个字符串变量数组,而不必指定数组中的每个字符串?就像使用字母和数字的“..”快捷方式一样。
例如:
$v1 = "hey";
$v2 = "hello";
$v3 = "bye";
$v4 = "welcome";
@f = ("$v1" .. "$v4");
这样打印 $f[2]; 等于“再见”...
我对这种方法并不感到兴奋,但你可以这样做:
$v1 = "hey";
$v2 = "hello";
$v3 = "bye";
$v4 = "welcome";
@f = map{eval "\$v$_"}1..4;
是你的意思吗?
my @v = qw/hey hello bye welcome/;
print join "\n", @v;
创建ARRAY
后,您可以访问任何项目
print $v[0];
在我们的例子中, : hey0
的索引在哪里。ARRAY
我猜你可以用 eval 写一个程序来做这件事,但为什么要首先使用 $v1, $v2 呢?为什么不从数组开始?
或者,根据你真正需要做的事情,使用类似的东西
@f = qw(hey hello bye welcome);
这可以(但可能不应该)通过使用来解决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]
。也就是说,立即将值分配给数组。