gpt4 book ai didi

arrays - 如何使用加入?

转载 作者:行者123 更新时间:2023-12-01 15:48:07 26 4
gpt4 key购买 nike

基于 this answer 的最少代码及其 join 语句

my @x = qw/10 20 30 40/;
my @y = qw/60 70 8 90 10/;
my @input_list = (@x, @y);

print "Before join @input_list \n";

print join ",", @$_ for @input_list ;

print "After join @input_list \n";

给出

Before join 20 40 60 80 120 140 16 180 20 
After join 20 40 60 80 120 140 16 180 20

但是在use strict;

Can't use string ("10") as an ARRAY ref while "strict refs" in use at test4.pl line 10.

joinmanual 中加入单独的数组字符串.这里的代码试图将逗号显然与数组项的每个散列 (@$_) 连接起来。然而,这似乎正在发生。

最小代码为什么会出现这个错误?

最佳答案

好的,你在这里做什么:

print join ",", @$_ for @input_list ;

不起作用,因为它是:

  • 迭代 @input_list 将每个元素提取到 $_ 中。
  • 取消引用 $_ 假装它是一个数组 @$_

这基本上与尝试相同:

print join ( ",", @{"10"} );

这没有意义,所以不起作用。

my $string = join ( ",", @input_list );
print $string;

会成功的。

我认为您在这里缺少的是:

use Data::Dumper; 
my @x = qw/10 20 30 40/;
my @y = qw/60 70 8 90 10/;
my @input_list = (@x, @y);
print Dumper \@input_list;

不生成多维列表。这是一个单一的维度。

$VAR1 = [
'10',
'20',
'30',
'40',
'60',
'70',
'8',
'90',
'10'
];

我猜你可能想要的是:

my @x = qw/10 20 30 40/;
my @y = qw/60 70 8 90 10/;
my @input_list = (\@x, \@y);

或者也许:

my $x_ref = [ qw/10 20 30 40/ ];
my $y_ref = [ qw/60 70 8 90 10/ ];
my @input_list = ($x_ref, $y_ref );

这使得@input_list:

$VAR1 = [
[
'10',
'20',
'30',
'40'
],
[
'60',
'70',
'8',
'90',
'10'
]
];

然后你的'for'循环工作:

print join (",", @$_),"\n" for @input_list ;

因为那时,@input_list 实际上是 2 个项目 - 两个数组引用,您可以随后取消引用和加入。

不过,作为一个小小的警告——这样做时可能会遇到的陷阱之一:

my @input_list = (\@x, \@y);

因为您要插入对 @x@y 的引用 - 如果您重复使用其中任何一个,那么您将更改 @input_list 的内容 - 这就是为什么最好使用 my @input_list = ( $x_ref, $y_ref );

关于arrays - 如何使用加入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30239416/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com