Perlではifの中に別の変数スコープを持つという認識でいいのか・・・?
Perlでこんなコードを書いたら怒られますね。外からは見えないのよ。
#!/usr/bin/env perl use strict; use warnings; if (1){ my $strings = '外から見えるのよ'; } print $strings;
Global symbol "$calar" requires explicit package name at - line 9. Execution of - aborted due to compilation errors. シェルが値を返しました 255
でもRubyで同じようなコードを書いてみたら怒られません。
#!/usr/bin/env ruby if true strings = '外から見えるのよ' end p strings
外から見えるのよ
このことからこのような発言をしたわけですね。
大変なことに気づいてしまった・・・・ Rubyは・・・ if文に・・・ 変数のスコープが・・・ ない!!!!!!
これは大きな勘違い、、、なのか・・・?
さきほどのコード、「use strict;」をコメントアウトして、myを外して変数宣言すれば怒られませんよね。
#!/usr/bin/env perl #use strict; use warnings; if (1){ $calar = '外から見えるのよ'; } print $calar;
外から見えるのよ
、、、というのが勘違いで、Perlだとmy付けないで作った変数はグローバル変数になるんだそうです。(いまさら知った)
@studio3104 はい。perlではmyせずに使った変数は自動的にグローバル変数になります(use strictしてれば怒られてそれができないので安全)
2012-11-27 14:54:25 via YoruFukurou to @studio3104
ということで結論
・Perlはifで別の変数のスコープを持つ
https://gist.github.com/4152579
#!/usr/bin/env perl use strict; use warnings; use Data::Dumper; my $x = 3; if (1) { my $x = 2; } else { my $x = 1; } warn Dumper +{x => $x};
$VAR1 = { 'x' => 3 };
・Rubyは持たない。Pythonもjsも持たない。
・Perlが異端
参考: http://blog.livedoor.jp/sasata299/archives/51312057.html
@tagomorisさん、色々教えていただいてありがとうございました。