タグ別アーカイブ: perl

CPAN の IO/Uncompress/RawInflate.pm でエラー


CPAN を更新しようとしたら次のようなエラーが出た。

# cpan
cpan> install CPAN
..中略..
can’t call method “value” on an undefined value at /usr/local/lib/perl5/5.8.8/IO/Uncompress/RawInflate.pm line 64.

どうも展開に失敗しているようで、パッケージのインストール、更新ができなくなってしまっていた。
調べたところ, perl 用の Raw-Zlib 圧縮ライブラリに問題があるようだったので

pkg_deinstall p5-Compress-Raw-Zlib bsdpan-Compress-Raw-Zlib

で削除し、その後通常通り cpan コマンドを走らせたところ無事動作しました(*)。
Ubuntu なら libcompress-raw-zlib-perl を削除すればいいとのこと。
 


(*)実際には

# pkg_deinstall p5-Compress-Raw-Zlib

だけでは途中でエラーになったため

pkg_deinstall bsdpan-Compress-Raw-Zlib bsdpan-Compress-Zlib bsdpan-IO-Compress-Zlib bsdpan-IO-Zlib

で関係ありそうな port をいったん全て削除しました。
参考:
yclog: Can’t call method “value” on an undefined value at /usr/share/perl5/IO/Uncompress/RawInflate.pm line 64

簡単に CRLF を LF に変換する(CRLF2LF)


次のように入力することで、sjis.txt の CR+LF を LF だけに変換し、out.txt として保存することができます。

$ cat sjis.txt | perl -pe ‘s/\r$//’ > out.txt

CGI やシェルスクリプトを、Windows などで書いた場合などは末尾に CR が入っていると, 一行目を正しく認識できないために “bad interpreter” と出るので、その対策によく使います。
 
追記:
(2006-08-08) /usr/games/fortune freebsd-tips で、次の方法も紹介されてました。

col -bx < dosfile > newfile

(2007-07-13) ↑の、col は日本語には対応していないようで、SJIS の日本語文字を含んでいると化けてしまいました。

配列、連想配列まわりの参照型とデータ型


ややこしい…
$foo は配列(参照型)も格納でき,

$foo = @boo;

も有効な式となる。
これを再び配列として扱うには,

@woo = @$foo;

のようにする. 連想配列も同じ.
“$” で始まる変数でしかうけとれない場合はこれを使わないといけない.

ex)
%members = (‘1’ => {‘name’ => ‘Joe’, ‘age’ => ’35’},
‘2’ => {‘name’ => ‘John’, ‘age’ => ’23’});
while(($id, $member) = each(%members)){
print “$id: ” . %$member . “\n”; # dump
print “$${member{‘name’}}” .
    “($${member{‘age’}})”;
}