gpt4 book ai didi

perl - 方括号在Perl中遵循以下推式语法表示什么?

转载 作者:行者123 更新时间:2023-12-04 16:32:55 25 4
gpt4 key购买 nike

我在阅读脚本时遇到了这种语法。我不确定方括号有什么用。

push @data, [ split //, $line ]; #printing this array gives crap values

或者换句话说,以上和以下之间有什么区别?
push @data, (split//, $line); #printing this gives actual values

有什么建议么?

最佳答案

编码:

push @data, (split//, $line);

将当前行中的所有项目插入 @data

push @data, [split //, $line]; 

将对包含这些项的匿名数组的引用插入 @data
如果您只处理'$ line'的一个值,则使用前者* 1可能更有效,但是,如果您正在处理包含多行的文件,并且想要区分内容所在的行,后者更有效。

考虑:
my @data; 
while( my $line = <$fh> ){
push @data , ( split //, $line );
}
use Data::Dumper;
$Data::Dumper::Indent = 0;
$Data::Dumper::Terse = 1;
print Dumper( \@data );

这将产生作为单独字符读取的所有字节,单个
包含所有元素的数组,即:
[ "a", "b" , "c" , "\n", "d", "e", "f" ]

相反,这将做完全不同的事情:
my @data; 
while( my $line = <$fh> ){
push @data , [ split //, $line ];
}
use Data::Dumper;
$Data::Dumper::Indent = 0;
$Data::Dumper::Terse = 1;
print Dumper( \@data );

而是将行分组,如下所示:
[ [ "a", "b", "c" , "\n" ], [ "d" , "e", "f" , "\n" ] ]

因此,您以后可以通过编程方式更轻松地遍历它。

笔记:
 push @data, ( split  //, $line ); 


  push @data, split //, $line; 

是等效的。

还,
my @other  = ( 1,2,3 );
push @data, @other ;


push @data, 1,2,3; 

是等效的。

来自 perldoc -f push
推阵列,列表

将ARRAY视为堆栈,并将LIST的值压入ARRAY的末尾。 ARRAY的长度增加LIST的长度。与...具有相同的效果

为$ value(LIST){
$ ARRAY [++ $#ARRAY] = $ value;
}

但效率更高。返回完成的“推”之后数组中元素的数量。

* 1:实际上,待定,半个头脑的人可能会想要 @data = split //, $line

关于perl - 方括号在Perl中遵循以下推式语法表示什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1122886/

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