カレッヂ |
質問者 なで
投稿日 1/11(木) 17:02:05
またまた質問にきましたが、表題以外にも、質問があるのです。。。。。 すいません。 1)「$_」について 私が調べた限りでは、 『「$_」は、特に変数名を指定しない時に、 代わりとして使われる特殊変数』 <たとえば。。。。。 foreach (@list){ print $_; } 配列「@list」に登録されている要素が 一つずつ省略されたスカラー変数に格納され、 printするときに、その省略されたスカラー変数を 「$_」と表している。 > って感じで、使われる事が分かったんです。 (あってますよねぇ〜??????) が、次の様な場合は、 「$_」は何の変数が省略されたものなのでしょうか? 1. foreach $list (@list) { 2. @data = (); 3. @key = split(/\,/,$list); 4. foreach $key (@key) { 5. @num = split(/,/,$TBL{'$and'}); 6. last if (@num eq "0"); 7. if (@result eq "0") { 8. @result = @num; 9. next; 10. } 11. %MARK = (); 12. grep($MARK{$_}++, @result); ↑これ 13. @result = grep($MARK{$_}, @num); ↑これ 14. last if (@result eq "0"); 15. } 16. } 2)また、2行目 & 11行目の「=()」で、 左辺には何が入るのでしょうか? 3)それと、もう一つ… (あつかましくってすいません) 6行目と7行目のif文の使い方が違うのは、どうしてでしょうか? 内容の意味は、同じだと理解してるのですが、 あってるんでしょうか? もう、質問盛りだくさんで、すいません。 1)って分かりますかね? ソース自体をよんでくれぇ〜!って感じになってしまったんですけど… ホントすいません。 あぁ、誤ってばっかりだけど、ホントすいません。 私、文章力ないので、理解できたらで結構なので、 よろしくお願いします。 |
回答者 しあわせのツボ
[削除]
投稿日 1/11(木) 19:47:06
1) ちょっとパスさせて下さい。わかる方、フォローお願いします(^^; 2) ()は「空のリスト」になります。 左辺の変数の内容をクリアするのによく使われます。 3) どちらでも同じです。読みやすさ・書きやすさ・気分等で使い分けて下さい。 (私はif内の処理が1文なら後付、2文以上かelseが続く時は前付にしています) |
質問者 なで
[削除]
投稿日 1/12(金) 09:57:17
回答、ありがとうございました。 (2),(3)に関しては、理解できました。 (1)は、もう少し、調べてみます。 (っていうか、質問の仕方がまずかったですか??? それなら、すいませぇ〜ん。) で、それとは、別にまた質問が出てきてしまいました。 12行目の「grep」のところに関して、疑問が… というのは、私の知識のなかでは、 @foo = grep(!/^#/, @bar); って感じで、 要素 = grep(式,値リスト) だと理解していたのですが… これは、左辺側が なぁぁ〜いぃぃぃぃ〜。 という事は、 grep($MARK{$_}++, @result); の処理は何を意味しているのでしょうか? また、同じような形のものを良く見かけるのですが… 『@date;』とか、『%data;』とか、『$data;』というように、 言い切りで書いてあったんです。 これも同じようにつかわれてるんでしょうか? sub AAA { open (FH,"aaa.txt"); @list=<FH>; foreach $line (@list) { if ($line=~ /^$input/){ push(@data,$line); } } @data; ↑これ } こんな感じであったんです。 上手く伝わったでしょうかね? すいません。ヘンなことばっかり質問して… よろしくお願いします。 |
回答者 しあわせのツボ
[削除]
投稿日 1/12(金) 11:54:55
一般に、左辺がないのは「その結果を必要としない」からです。 例の場合、$MARK{$_}++ の処理だけが必要で、grepされた配列は使わないので代入する変数を指定しない、ということだと思います。 たとえば、よく見る s/a/b/g; も、実は $match = s/a/b/g; とすると、置換された数が$matchに入ります。 それを必要としないことが多いので、左辺のない方が見慣れてるだけのことで。 サブルーティンの最後に変数だけが書いてあるのは、明示的に返り値を指定するものです。 例の場合、どこかで @array = &AAA(); と書くと、sub AAA内の@dataの値が@arrayに入ります。 サブルーティンを「自作の関数」と考えればわかりやすいでしょうか。 |
質問者 なで
[削除]
投稿日 1/12(金) 16:32:10
いつも、分かりやすい回答をありがとうございます。 ちょっと、つっかえが取れた感じです。 これで、落ち着いて週末を迎えられます。 ありがとうございます。 また、よろしくお願いいたします。 |
このページは終了したので返信(回答)は書きこめません
Web裏技 |