1

私はこれを行う方法を知っていました。より大きな文字列から部分文字列を取得して、それをスカラーに割り当てたいだけです。だから、これが私がハッキングしたPerlスクリプトです...

#!/usr/local/bin/perl 
use warnings;
use strict;

my $thing = "thing1 thing2 thing3 thing4 thing5 thing6 thing7 thing8";
my $thing4 = ${@{split (/ /, $thing)}[3]};
print "thing4 is $thing4\n";

...私が得る出力はこれです...

Use of uninitialized value $_ in split at ./perlex.pl line 6.
Can't use string ("0") as an ARRAY ref while "strict refs" in use at ./perlex.pl line 6.

...出力が...

thing4 is thing4

ここで何が間違っていますか?

4

2 に答える 2

6

あなたはsplitラインを大幅にオーバーエンジニアリングしました。次のようにする必要があります。

my $thing4 = (split / /, $_)[3];
于 2013-09-19T21:18:02.767 に答える
4

この表現

${@{split (/ /, $_)}[3]}

意味:

  • $_変数をすべてのスペースで分割します。これはスカラー コンテキストで発生するため、フィールドの数に評価されます。5
  • @{ ... }内部式を配列参照として扱い、それを配列として逆参照し@5ます。
  • @{ ... }[3]は、非常に疑わしい構文で、その配列の 4 番目の要素を選択します。たとえば@5[3]、これは かもしれませんが"foo"、おそらく ですundef
  • ${ ... }それをスカラー参照として扱い、逆参照します。例えば${foo}

結果:騒乱。あなたは実際に欲しかった:

my $some_thing = (split)[3];
于 2013-09-19T21:19:15.073 に答える