我在数组中有一个数据,如下所示。我想将所有内容复制到一个变量中。我怎么能这样做?
IFLADK
FJ
FAILED
FNKS
FKJ
FAILED
答案 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;