![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
最初にmyを付けない場合
@list=('a', 'aa', 'v', 'b', 'gg', 'x', 'def', 'ws', 'super', 'dd', 'wed', 'swd');
$key=grep{$list[$_] eq 'super'} (0 .. $#list);
print $key;
この時の実行結果は、1を示す。明らかに値は可笑しい。
次に、myを付けた場合
@list=('a', 'aa', 'v', 'b', 'gg', 'x', 'def', 'ws', 'super', 'dd', 'wed', 'swd');
my($key)=grep{$list[$_] eq 'super'} (0 .. $#list);
print $key;
この場合の実行結果は、8で正しい値を示します。
この両者の違いが分からない。何が原因をしているのだろうか。
その仕組を説明願います。
No.1ベストアンサー
- 回答日時:
> LIST の個々の要素に対して、BLOCK か EXPR を評価し ($_ は、ローカルに個々の要素が設定されます) 、
> その要素のうち、評価した式が真となったものからなるリスト値が返されます。
> スカラコンテキストでは、式が真となった回数を返します。
$key=grep{$list[$_] eq 'super'} (0 .. $#list);
my $key=grep{$list[$_] eq 'super'} (0 .. $#list);
これはスカラのコンテキストになるので、「式が真となった回数」 = 1 になります。
my($key)=grep{$list[$_] eq 'super'} (0 .. $#list);
これはリストのコンテキストになり、1要素のリストの要素0 である $key に grepの戻り値(リスト)の要素0 を代入します。
https://perldoc.jp/docs/perl/5.14.1/perldata.pod …
> リスト自身を構成する個々の要素すべてに代入が許される場合にのみ、 全体のリストに代入を行なうことができます:
> ($a, $b, $c) = (1, 2, 3);
> ($map{'red'}, $map{'blue'}, $map{'green'}) = (0x00f, 0x0f0, 0xf00);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- その他(プログラミング・Web制作) python 3.10で 同じlistに同じ構文で同じデータ代入した結果が異なる現象発生 7 2022/06/18 11:08
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/17 11:59
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- UNIX・Linux Linuxのbash環境下です。 1 2022/11/27 12:31
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- 洋楽 2000年以降の洋楽で皆様の好きな曲を1曲だけ教えてください 1 2022/09/10 21:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルで提出とは?
-
bashスクリプト
-
perlのrequireの動き方について...
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlについて
-
perlの構文でカンマの意味が分...
-
perlについての質問
-
perlのプログラミング 部分入れ...
-
ペプシコーラとコカ・コーラとD...
-
perlをバージョンアップしたら...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pythonにCでのexternはありますか
-
@color1 = ('0000ae',・・・,'$...
-
マクロの書き換え箇所がわかり...
-
チェックボックスのvalue値の取...
-
配列へのポインタの代入
-
VB2010での連立方程式の計算
-
高校数学のベーシック
-
なぜかわかりませんscanf()の戻...
-
Perlで変数中のエスケープされ...
-
格子運動の連立同次方程式
-
代入方法
-
変数内の文字の数
-
多元配列の0初期化
-
perlのプログラミングについて
-
なぜ?
-
算術演算子
-
CSVから構造体へ代入
-
漢字交じり文字列からのlocalti...
-
$template->output();の時に ...
-
VC6++ char配列の文字列をシリ...
おすすめ情報
myとは関係無く、my($key)の所を($key)にするだけで
正しい値を表示します。
ここで、再度の質問です。
括弧を付けた場合と、付けない場合とでは何が違うのでしょうか。
これは、私が思うには、括弧を付けない場合は得られた要素の数
を返しているのでしょうか。
括弧を付ける事で、$keyの所に要素の番号が得られると言う事でしょうか。