あなたが書くことを意味するのは
print "$ref->[2][3]";
また
print "@$ref[2]->[3]";
あなたの説明から、私はあなたが@Table
このような何かを宣言したと思います:
my @Table = ([1, 2, 3, 4],
['a', 'b', 'c', 'd'],
['e', 'f', 'g', 'h'],
['i', 'j' 'k' 'l']);
my
つまり、を使用していないので、中断したと確信していますuse strict;
。どうすればこれを知ることができますか?あなたがそれを使用したかどうかというメッセージを受け取ったでしょうGlobal symbol "@ref" requires explicit package name
。アクセスしようとして$ref[2]
いるのは、配列内の要素@ref
です。配列refの要素ではありません$ref
。角かっこ(および)の代わりにparens((
および)
)を使用して内部配列を囲むことも可能です。これは、Perlが配列をフラット化する原因となるため問題です。[
]
my @Table = (1, 2, 3, 4, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' 'k' 'l');
それはあなたが望むものではありません。
には複数の問題があります${$ref[2][3]}
。まず、配列ref内の要素にアクセスする適切な方法は$ref->[2]->[3]
、です。これは次のように書くこともできます$ref->[2][3]
(直感的ではないと思うので、通常はその表記を避けます)。その要素のフェッチに成功した場合${"h"}
、Perlがそれを文句を言うので、これは問題になりCan't use string ("h") as a SCALAR ref
ます。
編集:質問は私の答えの後でかなり変わったので、ここに記録のための適切な解決策があります:
#!/usr/bin/perl
use strict;
use warnings;
my $ref = [];
open (my $fh, "<", "file.txt") or die "Unable to open file $!\n";
push @$ref, [split] for (<$fh>);
close $fh;
print $ref->[1]->[2],"\n"; # print value at second row, third column
先日、SOの別の回答にこのPerlリファレンスのクイックリファレンスが投稿されているのを見ました。あなたはそれを見ることから利益を得るでしょう。また、。なしでPerlコードを記述しないでuse strict;use warnings;
ください。それはトラブルを求めています。