如何将数组的内容复制到Perl中的单个变量中?

时间:2012-02-18 10:42:47

标签: perl

我在数组中有一个数据,如下所示。我想将所有内容复制到一个变量中。我怎么能这样做?

IFLADK
FJ
FAILED
FNKS
FKJ
FAILED

4 个答案:

答案 0 :(得分:4)

您可以指定对数组的引用

my $scalar = \@array;

...或者将数组中的所有字符串连接在一起

my $scalar = join "\n", @array;

答案 1 :(得分:2)

$whole = join(' ', @lines)

但如果您正在从文件中读取文本,则通过(本地)取消定义记录分隔符,更容易在一个块中读取它:

local $/ = undef;
$whole = <FILE>

答案 2 :(得分:2)

参考上一个问题How to read n lines above the matched string in perl?在数组中存储多个匹配:

while (<$fh>) {
    push @array, $_;
    shift @array if @array > 4;
    if (/script/) {
        print @array; 
        push @found, join "", @array;   # <----- this line
    }
}

你可以使用一个标量,例如$found = join "", @array,但是你只会在循环中存储最后一个匹配。

假设循环已完成,现在您拥有数组@found中的所有匹配项。如果你想要它们在标量中,只需再次加入:

my $found = join "", @found;

或者你可以在循环中一次性添加它们:

$found .= join "", @array;

这完全取决于您打算如何处理数据。将数据放在标量中比在数组中使用数据更有益。例如,如果要打印它,则没有区别,因为print $found等同于print @found,因为print采用了参数列表。

如果您的意图是将匹配插入字符串:

print "Found matches: $found";
print "Found matches: ", @found;

答案 3 :(得分:1)

取决于您要执行的操作,但如果您想将数组打包到标量中以便以后可以检索,那么您可能需要Storable

use Storable;

my @array = qw{foo bar baz};

my $stored_array = freeze \@array;

...

my @retrieved_array = @{ thaw($stored_array) };

然后,可能只需存储对数组的引用即可满足您的需求。

my @array = qw{foo bar baz};

my $stored_array = \@array;

...

my @retrieved_array = @$stored_array;