camel

404 Blog Not Found:perl - 勝手に添削 - each vs. spliceへの追記ですまそうと思ったけど、大事なことなのでentryを改めて。

はてなブックマーク - Yuichirouの投げやりクリッピング
keys => sub { my $value; foreach my $key ( keys %hash ) { $value = $hash{$key}; } } # こうじゃないかな?

何度でも違うって、そう言い返せます。

while(my $var){ #… }foreach my $var () { #… }$varのスコープはどちらになるでしょう?はい、lleval君!

use strict;
use warnings;
my $k = 'qb';
my $v = 'incubator';
print "outer: $k => $v\n";
my %h = (
    m => 'Kriemhild Gretchen',
    s => 'Oktavia von Seckendorff',
);
while ( my ( $k, $v ) = each %h ) {
    print "  while: $k => $v\n";
}
for my $k ( keys %h ) {
    my $v = $h{$k};
    print "  foreach: $k => $v\n";
}
print "outer: $k => $v\n";

そのとおり、どっちでも、内側。

宣言するのが{}の外側なので勘違いしやすいのですが、スコープは{}の内側です。これは私にとってperl++な要素。

Rubyは1.9でPerlと同じになりましたが…

k = 'qb'
v = 'incubator'
print "outer: #{k} => #{v}\n"
h = {
    m:'Kriemhild Gretchen',
    s:'Oktavia von Seckendorff',
}
h.each{ |k, v|
    print "  each: #{k} => #{v}\n"
}
print "outer: #{k} => #{v}\n"

Python 3は昔のまま…

k = 'qb'
v = 'incubator'
print("outer:", k, "=>", v)
h = {
    'm':'Kriemhild Gretchen',
    's':'Oktavia von Seckendorff',
}
for k, v in h.items():
    print("  items:", k, "=>", v)
print("outer:", k, "=>", v)

わけがわからないよ!

Dan the Perl Monger