2012年11月1日木曜日

フォルダ配下のファイルをgrep

"findでxargs使うのはしょぼいっすよね"
みたいなツウィートを見て
"ぬ、xargs使うオレかっけーって思っているおれがいるのは内緒…"
と思いながらxargs使わないでfindとgrepを組み合わせる方法を探してみました。
いつもはこんな感じ。

find . | grep "*.pl" | xargs grep "takuan"

でもfindだけでいけた。

find . -type f -name "*.pl" -exec grep -n "takuan" {} \; -print

ふええええ(´・ω・`)

2012年10月23日火曜日

Perlで文字コード判別

たまにnkf入っていないサーバーとかあるので、そんな時はPerlで文字コードを調べる。。こともあるかも。

今こんな感じで書いているけど、おかしいorもっと簡潔にかけるなら修正する。
と、見せかけnkfがないならpiconv使えばいいじゃない!

PerlでQuotedPrintをデコード/エンコードするワンライナー

MIME::QuotedPrintを使う

QuotedPrintにエンコード

$ echo "エンコード文字" | perl -M'MIME::QuotedPrint' -e 'while (<STDIN>) { print encode_qp($_); }'
=E3=82=A8=E3=83=B3=E3=82=B3=E3=83=BC=E3=83=89=E6=96=87=E5=AD=97

QuotedPrintのデコード

$ echo "=E3=82=A8=E3=83=B3=E3=82=B3" | perl -M'MIME::QuotedPrint' -e 'while (<STDIN>) { print decode_qp($_); }'
エンコ

Base64操作はコマンドで

Base64は、Linuxのcoreutilsに含まれているので素直にそれ使う。方が楽だと思う。

Base64エンコード

$ echo "べーすろくよん" | base64
44G544O844GZ44KN44GP44KI44KTCg==

Base64デコード

$ echo 44G544O844GZ44KN44GP44KI44KTCg== | base64 -d
べーすろくよん

ついでにヘッダーで使うエンコードのフォーマット

=?{charset}?{B or Q}?{Encoded String}?=

例.
=?utf8?B?44G544O844GZ44KN44GP44KI44KTCg==?=

結果.
「べーすろくよん」と表示される。

ワンライナー

っていいね!

2012年8月28日火曜日

PerlBeginners #4 行ってきました

お疲れ様でした!初参加でした!

今回のテーマは「オブジェクトとパッケージ」でした。
一応、概念は別の言語で理解しているつもりなのでPerlでもいけるだろう、と思いましたがPerlのオブジェクト指向よくわからない/(^o^)\

あと、Acme全集2012を入手しました。

メモ

Perlのオブジェクト指向で気になったところをメモると
  • use parent 'Animal'; で継承
  • use parent ('Cat', 'Bird'); 多重継承可能!
  • lib/ 配下に置くのが主流のよう
  • ファイルの最後には「1;」を書く(trueな値を書く)
  • Mouse使うのもあり。
  • Mixin的な事をしたい場合、Exporterを使う
    • 基本構文ではない
  • URI::httpは演算子のオーバーロードをしている
    • なるほど、use overload ('""'     => sub { ${$_[0]} },)で文字列として評価しようとした時の動きを変えている様子。
    • ${$_[0]} } の意味がよくわからない…オブジェクト自身($_[0])を${}で囲んでいる。するとなぜか値が返ってくる
      • 確かに「warn Dumper ${ $res->{link} };」の様に${}で囲めばうまくいく!
    • 多分blessの値を返してる。
      • インスタンス変数のイメージでOK?
    • ${$_[0]} } は、オブジェクト自体をデリファレンスしているということ??
    • 色々試してみました

@ytnobodyさんのgithubからLTで使っていたサンプルコード入手して、ゴニョゴニョ触ってみました。blessでインスタンスを作るなどして、なんとなくちょっと分かってきた気がしてます。

ググった

  • my $class = shift; で何をshiftしているのか分からなかったけど、$_;  @_;が省略されているっぽい。
    • 【追記】@toku_bass さんに$_ではなく@_が省略されていることを教えてもらいました!
  • $オブジェクト->サブルーチン(); で呼ぶときは第一引数にはオブジェクト自身が入る。
なるほど。

ビギナーズセッション

@__papix__さんの発表
pappixさん、次は別のpmにも行かれるようで行動力に驚きました。

発表内容

オブジェクトやパッケージの概念を理解するのに役だったモジュールは?
⇛ @ytnbodyさんの回答
・以下のピンク色のページが役に立った
http://www.rwds.net/kuroita/program/Perl_oo.html
・LWP::UserAgentを操作してオブジェクトの操作に慣れるのもオススメ

懇親会

ハワイ料理でした。



初参加でしたが、色々と話してくれたので楽しめました。
「Hachioji.pmはすごくたのしい!」とすっごい押していました。Hachioji.pmは凄いところらしいです…!