Hatena::ブログ(Diary)

エンジニアきまぐれTips

2008-05-01

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なのでほぼ無理。

連想配列(ハッシュ)の実体と参照

http://d.hatena.ne.jp/Bayside/20080430/p1

より。

なるほど、Perl の記号の違いがようやく分かってきた。

なぜ連想配列の変数に値を代入しする場合、右辺は波括弧"{}"ではなく丸括弧 "()" を使うのか、ずっと疑問に思っていたけれど、"%"記号で始まる左辺(連想配列)に丸括弧"()"で表す右辺(配列)のデータをペアでコピーしているようなものだったんだ。もし、右辺が変数の場合は"@"記号から始まる変数名を指定する。

ペアを表すのに "=>" を使うわけだが、 "," でも同じ意味になる。

 my %hash = @array; # または、('key1', 'value1', 'key2', 'value2')

一方、参照渡しをするときは、"$"記号で始まる左辺、スカラー変数(でいいのかな?)に波括弧"{}"で表す右辺(連想配列)のポインタを渡していことになる。もし、右辺が変数の場合は、"\%"から始まる変数名を指定する。

 my $ref = \%hash; # または、{'key1' => 'value1', 'key2' => 'value2'}

う〜む・・・とても複雑。実体が生成されるタイミングが分かりにくい・・・。

otsuneotsune 2008/05/03 01:15 s{my $ref = %hash;}
{my $ref = ¥%hash;}

かな。(¥はbackslash)

okinakaokinaka 2008/05/03 08:51 指摘ありがとうございます。
修正しました。