数年前にハッシュのデータをforeachで取り出す時、$_をいじると、$_はハッシュのデータと直接つながっているので、ハッシュのデータ(keyは変わらずvalueのほう)が書き換わってしまうと聞き、実際にやってみて書き換わってしまった覚えがあります。
%hash = ("red" => "aka", "green" => "midori", "blue" => "ao", "black" => "kuro");
foreach (%hash){
print "$_<br>\n";
$_ = "modify";
}
print "<hr>\n";
foreach (values %hash ){
print "$_<br>\n";
}
↓↓↓↓↓↓html↓↓↓↓↓↓↓
blue
ao
green
midori
red
aka
black
kuro
------------------------------------
modify
modify
modify
modify
↑となったはず
先日それを試してみたら書き換わりませんでした。
以前は確かに書き換わった覚えがあります。
perlの仕様が変わったのでしょうか。それとも私が何か間違っているのでしょうか。
詳しい方にお教えいただければと質問しました。
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
> 最初に試したのはniftyのアットホームページのサーバーだったのですが、
あー、あそこのPerlは 5.003とか4のあたりの骨董品のままじゃなかったでしたっけ?
しかも標準モジュールすらないという。
ということで5.005_04のソースを引っ張り出してビルドしてから試してみました。
blue<br>
ao<br>
green<br>
midori<br>
red<br>
aka<br>
black<br>
kuro<br>
<hr>
ao<br>
midori<br>
aka<br>
kuro<br>
どうも途中で仕様が変わったみたいですね。
5.6とか5.8に上がったタイミングかなあ?
度々のご回答ありがとうございます。
な、なるほどぉ。
確かにniftyはperl5としか書いてなく、モジュールも使えません。
わざわざ試してくださったんですね。
>どうも途中で仕様が変わったみたいですね。
5.6とか5.8に上がったタイミングかなあ?
合点がいき、スッキリしました。
どうもありがとうございました。
No.3
- 回答日時:
ちなみに5.6でも$_は実体を共有してます.
この手のことがあるので
$_とか@_は値を変えないか
明示的にコピーですね
回答ありがとうございます。
そうですね。
一見、別の器に入れているように見えて
実は仮の姿と言う感じですね。
早合点で質問してしまいましたが、
これはこれでまた勉強になりました。
ありがとうございました。
No.1
- 回答日時:
今手元の5.8.8と5.10.0で試しましたけど、
green
midori
black
kuro
blue
ao
red
aka
------
modify
modify
modify
modify
こんな感じですが。
テストしたときに何か勘違いしてたりしませんか?
回答ありがとうございます。
回答を見て、あわてて他のサーバー(land.to)で確かめて見た所、確かに書き換えられてました。私の早合点でした。
ただ、新たな疑問が・・・。
最初に試したのはniftyのアットホームページのサーバーだったのですが、相変わらずこちらで試すとデータが書き換わりません。
なぜなんでしょうか・・・うぅ。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- Perl perlをバージョンアップしたら、今まで正常に動いていたプログラムが、エラーになってしまった 3 2022/10/05 15:44
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- その他(パソコン・周辺機器) Windows10でXBOX360用RAPVX-SA用の非公式ドライバがインストール出来ない 1 2023/01/10 19:37
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- その他(Microsoft Office) PCを買い換えました。 今使っているノートパソコンが10年以上使っており新しく買い換えました。Win 5 2023/03/26 00:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
まったく同じファイルのハッシ...
-
ハッシュ値が一致したデータは...
-
列挙型と連想配列の違いを教え...
-
文字列を変数名として扱う方法
-
ハッシュ値を取ったらその取っ...
-
ハッシュのキーを変数で
-
UTF-8で書かれたJSPの日本語文...
-
英語でのシャープとコメの呼び...
-
Perlのサブルーチンの引数に配...
-
チェックデジットについて
-
画面を強制的に再描画させる方法
-
VBAのautofilter、criteriaの配...
-
VBAで3秒だけ時間を止めたい
-
vba
-
リストボックスに縦スクロール...
-
二次元配列のインデックスについて
-
二次元配列における要素数のは...
-
Escキーを押すと、中断する時と...
-
perlで2次元配列をサブルーチ...
-
DoEventsが必要な理由について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースでユーザーのパス...
-
文字列を変数名として扱う方法
-
ハッシュ検索はなぜ速い
-
まったく同じファイルのハッシ...
-
列挙型と連想配列の違いを教え...
-
ハッシュ値が一致したデータは...
-
重複ファイルを削除したいので...
-
*(アスタリスク)の意味
-
UTF-8で書かれたJSPの日本語文...
-
チェックデジットについて
-
ハッシュマーク以降のアドレス取得
-
ハッシュリストって単にハッシ...
-
一意(ユニーク)かつ、ソート...
-
多次元連想配列の削除
-
英語でのシャープとコメの呼び...
-
perlで配列名を動的に作り出したい
-
連想配列のサイズ制限
-
ハッシュ値によるファイルの同...
-
全ての変数を初期化する方法は...
-
文字列をハッシュにしなければ...
おすすめ情報