No.1
- 回答日時:
スカラー変数が変数名の前に「$」をつけて表すのに対し、配列変数では変数名の前に「@(アットマーク)」をつけて表します。
例)
@a = (1,2,3);
@b = (@a,4,5);
@c = @b;
@d = 1;
@d = (@d,2,3);
($a,$b) = ($b,$a);
($e,@c) = @c;
($a,$b,$c) = @c;
($a,$b,$c) = (1);
意味)
@aに(1,2,3)がセットされる
@bに(1,2,3,4,5)がセットされる
@cに@bを複写する
@dに(1)がセットされる
@dの末尾に2と3を追加する
$aと$bを入れ替える
@cの1つめの要素(この場合は「1」)を
取り除いて、$eにセットする。
@c==(1,2,3,4,5)だが、左辺には3つ分の
変数しかないので、初めから3つ分の要素を
左辺の変数にそれぞれ代入して、残りの2つ
の要素は捨てられる。
($a==1,$b==2,$c==3となる)
左辺の変数の方が多い場合、余った変数には
undef値が代入される。
($a==1,$b==undef,$c==undefとなる)
No.2ベストアンサー
- 回答日時:
スカラーコンテキストと、リストコンテキストの違いであり、
配列の要素と、配列のスライスの違いでもあります。
とにかく、Perlを学びたければ、「コンテキスト」を極めること。
「コンテキスト」がわからなければ、エレガントな記述は不可能です。
1)$abc[5] = 20;
まず、コンテキストをみます。
$abc[5]
~~~~~~~
これはスカラーコンテキストを持ちます。 $がついているのはそのためです。
それだけではなく、
$abc[5]
~~
ここの[ ] の中もスカラーコンテキストを持ちます。
※重要項目
「スカラーコンテキスト中では、値が1つだけ採用される。
スカラーコンテキスト中に、リストを投げ込んだ場合、リストの最期の値が
採用される」
$abc[5,1,3]=(20,10,5);
すなわち、上の記述は一応OKです。しかし、実際には、
$abc[ 3]=( 5);
と等価となります。
以上が、「配列の要素」です。
2)@abc[5] = 20;
まず、コンテキストをみます。
@abc[5]
~~~~~~~
これはリストコンテキストを持ちます。 @がついているのはそのためです。
それだけではなく、
@abc[5]
~~
ここの[ ] の中もリストコンテキストを持ちます。
※重要項目
「リストコンテキスト中では、値が複数採用され得る。
(一般的には0個以上であるが、配列のスライスの中などでは1つ以上必要)
リストコンテキスト中に、1つの値をなげこんだ場合は、要素が1つだけのリストと見なされる」
@abc[5,1,3]=(20,10,5);
すなわち、上の記述は以下と同様です。
$abc[5]=20;
$abc[1]=10;
$abc[3]=5;
上のことより、[]の中のスライスがひとつの場合、
@abc[5] = 20;
すなわち、上の記述は以下と同様です。
$abc[5] = 20;
以上、$abc[5]=20; と @abc[5]=20; は仕組みとしては上述のように
違いますが、結果としては同じになります。
以上、Perl/CGI 学習の参考にしてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでMysqlにデータがあるかどうか判別したい 1 2023/03/02 11:48
- その他(開発・運用・管理) 【至急】.htaccessによるディレクトリ単位でのリダイレクト 2 2023/08/10 13:46
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/08 09:05
- その他(プログラミング・Web制作) PythonでLoopを使って配列内の文字列を結合する。そして [] を削除する 1 2022/03/31 23:28
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/03/09 14:24
- 数学 ブール代数 式の簡略化 3 2023/08/19 23:09
- Excel(エクセル) Excelのセル内の特定の文字列を別のセルへ抽出したいです 2 2022/07/06 16:10
- 英語 現在完了で「(最近)~したところだ」の意味となる動詞の特徴について 8 2022/10/12 05:47
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/09 10:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Can't use string ("0") as an ...
-
画面を強制的に再描画させる方法
-
VBのReturnの使い方
-
VBAで3秒だけ時間を止めたい
-
データベースから取得したデー...
-
VBA for i=1 to lastrow
-
VBAでの一時停止と再開の方法
-
CSVファイルの特定の行だけを読...
-
アクティブセルから、A列最終行...
-
VBAのautofilter、criteriaの配...
-
vb.netです。2次元配列の要素を...
-
Application->Run();の機能につ...
-
DoEventsが必要な理由について
-
vbscriptでIE自動入力(途中で...
-
一巡伝達関数と開ループ伝達関数
-
perlで2つの配列を比較する方...
-
ダイアログのテキストにマウス...
-
素数であるかどうかを判定する...
-
vb.netからエクセル関数書き込み
-
GIFアニメをループさせたくない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Can't use string ("0") as an ...
-
PerlでCSV形式のファイルの一部...
-
perlの引数が不安定になります。
-
perlの比較、ループの使い方に...
-
レキシカル変数について
-
画面を強制的に再描画させる方法
-
VBAでの一時停止と再開の方法
-
データベースでユーザーのパス...
-
VBのReturnの使い方
-
ループ7回目の悪役令嬢は、元敵...
-
UWSCの終了の仕方
-
Escキーを押すと、中断する時と...
-
エクセルの当番表を作っていま...
-
GIFアニメをループさせたくない
-
VBAで3秒だけ時間を止めたい
-
どなたかこのプログラミングを...
-
VBA for i=1 to lastrow
-
文字列を変数名として扱う方法
-
ハッシュ検索はなぜ速い
-
DOSコマンドのループ内のTIMEコ...
おすすめ情報