我有一个如下脚本:
$x=1;
$y=2;
@test=($x,$y);
foreach (@test)
{
print;
print "\n";
}
它给出了输出:
1 2
但我希望输出与占位符相关联,例如:
$ x = 1 $ y = 2
有人可以提供一些提示吗?
答案 0 :(得分:3)
您没有将变量放入数组中;它包含值。分配变量或将其放入数组时,此值将复制。我们可以证明这一点:
$x = 1;
$y = $x; # here a copy
$x = 42; # reassigns $x, does not change $y
print "$x\n"; # 42
print "$y\n"; # 1
当我们将$x
和$y
放入数组时,会发生同样的事情:它现在只包含以前的值。没有办法找出它们来自哪个变量。
数组是一组编号的东西。还有另一个有趣的数据结构: hash 。哈希是带有标签的东西的集合。我们可以使用标签来访问值$hash{$label}
,就像我们可以通过索引$array[$index]
访问数组中的东西一样。
keys
函数返回散列的所有标签列表,sort
函数按字母顺序排列列表。
我们可以创建像
这样的哈希%hash = (
x => $x, # the label "x" has the value of $x, but copied
y => $y,
);
现在我们可以像
一样打印出所有内容foreach (sort keys %hash) {
print "$_ = $hash{$_}\n";
}
但是因为我们编写了现代Perl,我们use strict; use warnings;
声明了我们所有的变量,use 5.010
(或者更高,因为perl并没有完全过时,所以我们可以使用say
功能)。然后我们可以做到:
use strict; use warnings; use 5.010;
my $x = 1;
my $y = 2;
my %hash = (
x => $x,
y => $y,
);
for my $key (sort keys %hash) {
say "$key = $hash{$key}"; # say is like print, but adds a newline
}
输出:
x = 1
y = 2
答案 1 :(得分:2)
你可以使用哈希来做到这一点:
#!/usr/bin/perl
use warnings;
use strict;
my %test = ( x => '1',
y => '2');
while ( my ($key, $value) = each(%test) ) {
print "$key => $value\n";
}
输出:
y => 2
x => 1
答案 2 :(得分:0)
@ user2684591
因为问题指向数组 -
$x=1;
$y=2;
@test=($x,$y);
for my $i (0 .. $#test) {
print "\$test[$i]: $test[$i]\n";
}