Perl の split についての質問です。


my($hoge0,$hoge1,$hoge2,$hoge3,$hoge4,$hoge5) = (split/<>/,$line)[0..4];

↑この様な書き方があります。

この後に続く処理で必要なのが $hoge0 $hoge1 $hoge4 のみだった場合、これをもっと効率的に書く方法はないでしょうか?
$hoge2 $hoge3 $hoge5 が不要だという事です。

誤りなのですが、イメージとしてはこの様な感じです。
        ↓
  (split/<>/,$line)[0..1,4];
  (split/<>/,$line)[0..1][4];

※ 頂いた回答は全てオープン致しますが、最初に正解を書いて下さった方に傾斜配分致します事をご了承下さい。

回答の条件
  • 1人2回まで
  • 登録:2009/02/05 05:48:35
  • 終了:2009/02/05 21:53:15

ベストアンサー

id:imo758 No.1

imo758回答回数121ベストアンサー獲得回数192009/02/05 06:47:11

ポイント80pt

普通にそれではいけませんか?

prompt%perl -e "my(@x)=(split/#/,'1#2#3#4#5#6#7')[0..1,4];print join' ',@x;

1 2 5

prompt%perl -v

This is perl, v5.8.8 built for MSWin32-x86-multi-thread

(with 25 registered patches, see perl -V for more detail)

Copyright 1987-2006, Larry Wall

Binary build 817 [257965] provided by ActiveState http://www.ActiveState.com

Built Mar 20 2006 17:54:25

以下略

id:Reiaru

確認してきました。


my($hoge0,$hoge1,$hoge2,$hoge3,$hoge4,$hoge5) = (split /<>/ ,$line)[0..1,4];


これで間違いなく期待通りの動作をしておりました。

一体、私は何をしていたのでしょうか(^-^;


何はともあれ回答頂きましてありがとうございました。

2009/02/05 21:52:17
  • id:Reiaru
    imo758 様、回答ありがとうございます(^-^)

    あらあら…。
    先程食うに困りまして(?)、やっつけ半分で…

    $line = "0<>1<>2<>3<>4<>5";
    my($hoge0,$hoge1,$hoge2,$hoge3,$hoge4,$hoge5) = (split/<>/,$line)[0..1,4];

    とした表記してみた所、

    $hoge0 = 0
    $hoge1 = 1
    $hoge2 = 不明 (値無し)
    $hoge3 = 不明 (値無し)
    $hoge4 = 2

    という結果となってしまった様な気がしたのです。
    時間に追われておりましたので、私が何か勘違いしているのかもしれません。

    --------------------------------------
    現在、酔っぱらっていてどうにもなりませんので、後ほど再度確認してみようと思います。
    その際にも同様の結果になった場合には、Perl のバージョンなども併せて表記致します。

    ここで一旦締め切らせてください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません