最初に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ランキング
-
多元配列の0初期化
-
ポインター引数の関数でコンパ...
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
COBOLのCOMP形式について
-
number 改行が追加できない
-
エクセルシート名の制限を変更...
-
ビットスワップとバイトスワッ...
-
バイナリとBCDコード
-
memcmp バイナリデータの比較方法
-
char str[256]の256の意味は?
-
DataGridViewの特定列に入力さ...
-
Javaで日本語1文字のバイト数
-
Excel VBA メール作成について ...
-
機種依存文字をチェックしたい。
-
3バイト文字(UTF-8)をprintfで...
-
unicode←→JISコード
-
ビットからバイトへの変換
-
2byte文字の判定
-
データの値の近いものをグルー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pythonにCでのexternはありますか
-
python 3.10で 同じlistに同じ...
-
CSVから構造体へ代入
-
VBScriptでカレントディレクト...
-
マクロの書き換え箇所がわかり...
-
Perlで変数中のエスケープされ...
-
UWSCにおける変数の扱い方
-
VB2010での連立方程式の計算
-
なぜかわかりませんscanf()の戻...
-
c言語 グローバル変数
-
ポインター引数の関数でコンパ...
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
Excel VBA メール作成について ...
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
stable diffusionのエラー
-
COBOLのCOMP形式について
-
Excel 1セル当りの文字数が2...
-
DataGridViewの特定列に入力さ...
おすすめ情報
myとは関係無く、my($key)の所を($key)にするだけで
正しい値を表示します。
ここで、再度の質問です。
括弧を付けた場合と、付けない場合とでは何が違うのでしょうか。
これは、私が思うには、括弧を付けない場合は得られた要素の数
を返しているのでしょうか。
括弧を付ける事で、$keyの所に要素の番号が得られると言う事でしょうか。