打印数组变量

时间:2013-09-11 22:12:41

标签: arrays perl

我有一个如下脚本:

$x=1;
$y=2;
@test=($x,$y);

foreach (@test)
{
 print;
 print "\n";
}

它给出了输出:

1 2

但我希望输出与占位符相关联,例如:

$ x = 1 $ y = 2

有人可以提供一些提示吗?

3 个答案:

答案 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";
}