1月11日の作業履歴
22:00-1:00
環境変数%envはhashで保存されているらしい。
#!/usr/bin/perl
#
#


use strict;
use warnings;


foreach (keys %ENV) {
print "$_ -> $ENV{$_}\n";
}

~
~
~
[minako1@minako ~/tools]# perl temp_env.pl
HOST -> minako
MAKE_MODE -> unix
PS1 -> \[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$
CLIENTNAME -> Console
REMOTEHOST -> 127.0.0.1
PROGRAMFILES -> C:\Program Files
PWD -> /home/minako1/tools
GROUP -> ȵ
LOGNAME -> minako1

いろいろ出てくるけど、省略。

hashのvalもkeyも出力。バラバラだけど。
my %name_to_age = (
'hyuki' => 36,
'sato' => 22,
'tomura' => 21,
'takahashi' => 22,
);

##---print vals-----

my @keys = keys(%name_to_age);
my @values = values(%name_to_age);
print join(',', @keys), "\n";
print join(',', @values), "\n";

実行結果
hyuki,sato,tomura,takahashi
36,22,21,22

順番はバラバラに出てくるが、keysとvalues関数で出てくるアレイの順番は上下対応。
らしい、、
でも、今回別に順序バラバラにもなっていないので、なんか説得力無いけど。

###keysとeachについて
foreachはメモリーを食うらしい。
whileとeachを使ってkeyとvalueをひと組ずつ取った方がいい。

##----keys---each----

while (my($key, $value) = each(%name_to_age)) {
print "$key -> $value\n";
}

foreach my $key (keys(%name_to_age)) {
my $value = $name_to_age{$key};
print "$key -> $value\n";
}

実行結果
hyuki -> 36
sato -> 22
tomura -> 21
takahashi -> 22
同じ結果だから、
hyuki -> 36
sato -> 22
tomura -> 21
takahashi -> 22

##exists delete undef
exists keyに対応するvalが存在すれば真を返す。
delete keyに対応するvalを削除する。
undef keyとvalの全てを削除する。(@arrayでも使える。)

my %hash = (
'ichi' => 1,
'ni' => 2,
'san' => 3,
'shi' => 4,
'go' => 5,
);

my $number = 'san';
if (exists($hash{$number})) {
print "ok\n";
delete($hash{$number});
} else {
print "not\n";
}
while (my ($key, $value) = each(%hash)) {
print "$key -> $value\n";
}

undef%hash;

foreach my $key (keys(%hash)) {
my $value = $hash{$key};
print "$key -> $value\n";
}

[minako1@minako ~/hyuki_nyumon]# perl hash3_ex.pl
ok
ichi -> 1
shi -> 4
ni -> 2
go -> 5
後でのforeachでは何も出てこないはず。


みなのブログ
syntax onの機能。
sy on とする。
vimの./vimrcに書き込んでもいいけど。