如何使用加入?
How to use join?
基于 及其 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.
join
在 manual 中加入单独的数组字符串。
这里的代码试图将逗号显然与数组项的每个散列 (@$_
) 连接起来。
然而,这似乎正在发生。
为什么最小代码这里会出现这个错误?
好的,你在这里做什么:
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 );
。
my @x = qw/10 20 30 40/;
my @y = qw/60 70 8 90 10/;
my @input_list = (@x, @y);
这相当于:
my @input_list = qw/10 20 30 40 60 70 8 90 10/;
要创建数组数组,请使用引用:
my @input_list = (\@x, \@y);
您的其余代码将按预期工作。
基于 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.
join
在 manual 中加入单独的数组字符串。
这里的代码试图将逗号显然与数组项的每个散列 (@$_
) 连接起来。
然而,这似乎正在发生。
为什么最小代码这里会出现这个错误?
好的,你在这里做什么:
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 );
。
my @x = qw/10 20 30 40/;
my @y = qw/60 70 8 90 10/;
my @input_list = (@x, @y);
这相当于:
my @input_list = qw/10 20 30 40 60 70 8 90 10/;
要创建数组数组,请使用引用:
my @input_list = (\@x, \@y);
您的其余代码将按预期工作。