arrays - perl 中 [ 和 ( 的以下两个代码之间的区别?
问题描述
当我想将输入文件分配给数组时,出现此错误。
while (<>) {
my @tmp = split;
push my @arr,[@tmp];
print "@arr\n";
}
output: ARRAY(0x7f0b00)
ARRAY(0x7fb2f0)
如果我更改[
为,(
那么我将获得所需的输出。
while (<>) {
my @tmp = split;
push my @arr,(@tmp);
print "@arr\n";
output: hello, testing the perl
check the arrays.
(@tmp)
和之间的区别是什么[@tmp]
?
解决方案
普通括号()
除了改变优先级之外没有特殊的功能。它们通常用于限制列表,例如my @arr = (1,2,3)
方括号返回数组引用。在您的情况下,您将构建一个二维数组。(如果您的代码没有损坏,您会这样做)。
你的代码也许应该这样写。请注意,您需要在循环块之外声明数组,否则它将不会保留先前迭代的值。另请注意,您不需要使用@tmp
数组,只需split
将push
.
my @arr; # declare @arr outside the loop block
while (<>) {
push @arr, [ split ]; # stores array reference in @arr
}
for my $aref (@arr) {
print "@$aref"; # print your values
}
该数组将具有以下结构:
$arr[0] = [ "hello,", "testing", "the", "perl" ];
$arr[1] = [ "check", "the", "arrays." ];
例如,如果您想防止输入行混淆,这是一个好主意。否则,所有值最终都位于数组的同一级别。
推荐阅读
- javascript - 如何根据角度的行内容在摩纳哥编辑器中打开上下文菜单
- spring-boot - 具有可变查询参数的 Spring Security pathMatchers
- jquery - 显示最后检查 + 两个(来自数组)
- python - 熊猫将文本附加到行中
- python - 匹配熊猫数据框中的日期时间 YYYY-MM-DD 对象
- java - 线程“Thread-2”中的异常 java.lang.NoSuchMethodError: kotlin.io.ByteStreamsKt.readBytes(Ljava/io/InputStream;) 用于 PACT 测试
- javascript - 使用反应上下文 api 从帮助函数显示加载器
- azure-devops - 基于 Azure Devops 中的特定状态冻结工作项的表单或页面上的所有字段的技术
- angular - Angular combineLatest:combineLatest 中允许多少订阅?订阅数量有限制吗?
- node.js - Node.js 中多人游戏的时机