連想配列(ハッシュ)の実体と参照
http://d.hatena.ne.jp/Bayside/20080430/p1
より。
なるほど、Perl の記号の違いがようやく分かってきた。
なぜ連想配列の変数に値を代入しする場合、右辺は波括弧"{}"ではなく丸括弧 "()" を使うのか、ずっと疑問に思っていたけれど、"%"記号で始まる左辺(連想配列)に丸括弧"()"で表す右辺(配列)のデータをペアでコピーしているようなものだったんだ。もし、右辺が変数の場合は"@"記号から始まる変数名を指定する。
ペアを表すのに "=>" を使うわけだが、 "," でも同じ意味になる。
my %hash = @array; # または、('key1', 'value1', 'key2', 'value2')
一方、参照渡しをするときは、"$"記号で始まる左辺、スカラー変数(でいいのかな?)に波括弧"{}"で表す右辺(連想配列)のポインタを渡していことになる。もし、右辺が変数の場合は、"\%"から始まる変数名を指定する。
my $ref = \%hash; # または、{'key1' => 'value1', 'key2' => 'value2'}
う〜む・・・とても複雑。実体が生成されるタイミングが分かりにくい・・・。
8.04 の smbmount で文字化け
うかつだった・・・。オプションで codepage って指定が出来なくなってしまっていた。
そのまま smbmount すると、日本語のファイル名が文字化けしてしまう。個人的にはかなり影響が大きかったりする。
確認方法:
man smbmount man mount.smbfs
で、codepage の説明がなくなっていた。
(追記)
- smbmount の man が mount.cifs に差し代わっている。
- /usr/bin/smbmount は、/sbin/mount.smbfs のシンボリックリンク。
- mount.smbfs は、シェルスクリプト。その中で mount.cifs を呼んでいる。
- mount.cifs は、 codepage を設定する機能はもともと持っていない。
あらら・・・。サーバー側で codepage 指定がなくても文字化けしないように対応するしかないのだが、古いNASなのでほぼ無理。