30

書く代わりに:

@holder = split /\./,"hello.world"; 
print @holder[0];

スプリットの最初の要素を取得するためにワンライナーを実行することは可能ですか?何かのようなもの:

print (split /\./,"hello.world")[0]

2番目の例を試すと、次のエラーが発生します。

print (...) interpreted as function at test.pl line 3.
syntax error at test.pl line 3, near ")["
4

3 に答える 3

74

あなたはあなたの予感を試してみるべきだった。それがその方法です。

my $first = (split /\./, "hello.world")[0];

最初のフィールドのみを取得するリストコンテキスト割り当てを使用できます。

my($first) = split /\./, "hello.world";

印刷するには、

print +(split /\./, "hello.world")[0], "\n";

また

print ((split(/\./, "hello.world"))[0], "\n");

構文があいまいなため、プラス記号があります。これは、以下のすべてがへの引数であることを示しますprint。のperlfuncドキュメントでprint説明しています。

対応する右括弧でprintの引数を終了させたくない場合を除いて、printキーワードの後に​​左括弧を付けないように注意してください。すべての引数を括弧で囲みます(またはを挿入し+ますが、見栄えはよくありません)。

上記のケースでは、+書き込みと読み取りがはるかに簡単なケースを見つけました。YMMV。

于 2012-05-29T12:42:16.920 に答える
4

これに使用することを主張する場合はsplit、長い文字列を複数のフィールドに分割して、最初のフィールドを除くすべてを破棄する可能性があります。3番目のパラメーターsplitは、文字列を分割するフィールドの数を制限するために使用する必要があります。

my $string = 'hello.world';

print((split(/\./, $string, 2))[0]);

しかし、正規表現はあなたがやりたいことをよりよく説明し、この問題を完全に回避すると思います。

また

my $string = 'hello.world';
my ($first) = $string =~ /([^.]+)/;

また

my $string = 'hello.world';
print $string =~ /([^.]+)/;

ドット以外の文字の最初の文字列を抽出します。

于 2012-05-29T17:34:40.260 に答える
3

2番目の例を試してみると、次のエラーが発生します。「test.plの3行目、「)[」の近くの構文エラー

いいえ、必要に応じて警告を有効にしている場合は、次のようになります。

print (...) interpreted as function at test.pl line 3.
syntax error at test.pl line 3, near ")["

これはあなたの問題に関する大きな手がかりになるはずです。

于 2012-05-29T13:00:04.670 に答える