Warning: Use of undefined constant WpNicodo - assumed 'WpNicodo' (this will throw an Error in a future version of PHP) in /home/tcpiptan/www/ptan.info/wp-content/plugins/wp-nicodo/wp-nicodo.php on line 492

Warning: Use of undefined constant register_uninstall_hook - assumed 'register_uninstall_hook' (this will throw an Error in a future version of PHP) in /home/tcpiptan/www/ptan.info/wp-content/plugins/wp-nicodo/wp-nicodo.php on line 498
p t a n . info » perl

Posts tagged perl

WWW::Mechanize::Pluggableのppmが無かったので

自作してみた。make_ppmマンセー
5.10.x用です。
インストールしたい人は下記コマンドでできると思うよ。

ppm install http://ptan.info/downloads/ppm/5.10/WWW-Mechanize-Pluggable.ppd

つくりかた:
CPANから作成したいモジュールのtar.gzとってきて、下記を実行

perl Makefile.PL
nmake
nmake test
make_ppm

make_ppmコマンドはPPM::Makeモジュールに入ってます。
nmakeはここから取ってくるといいんじゃないかな。

nmakeのリンクが変わってたので更新しました(2013/7/3)

一晩中悩んでたのに…

FireFoxのクッキー情報がperlから取得できない件で一晩中悩んでたんですが…
あっけなく解決しました…

(さらに…)

Perlgolfとか。

技術的な話題につき、興味ない人はヌルーしてね☆

最近よく視聴してるPerl放送の生主さんとこでGolf(ショートコーディング)なるものをやってたので、その場でリスナーとして勝手に参戦してみました。

お題:
引用元:(・3・)ぷぅログラミング

・ルール通ればなんでもおk。言語もなんでもおk。

・内容
入力:1以上の整数の数値
出力:入力された長さを1辺とする四角形で、外側は1、内側は0とする。

・例
入力:3
出力:
111
101
111

入力:5
出力:
11111
10001
10001
10001
11111

言語/バージョンはActivePerl 5.10.0で参戦。こういう変態的な事するにはやっぱりperl便利ねw

こんな感じになりました(51Bytes)。

$i=<>;print$_%$i<2?1x$i:(1,0 x($i-2),1),$/for 1..$i

さらにperl6対応にするとこんな感じに(48Bytes)。

$i=<>;say$_%$i<2??1x$i!!(1,0 x($i-2),1)for 1..$i

perl 5.10対応版の方で軽く説明すると、キモはprintの引数になっている3項演算子のこの部分:

$_%$i<2?1x$i:(1,0 x($i-2),1)

この部分がややこしいですが、見やすくなるように書き直すと

$_ % $i < 2
    ? 1 x $i
     : (1, 0 x ($i - 2), 1)

ってことですね。
$_ は後置forの一時変数なので、

「1行目から(入力)行目まで処理を繰り返す際、Nを処理中の行数としたとき、N÷(入力)の余りが0または1(つまり「<2」)のときは1を(入力)個出力し、それ以外の場合は先頭が1、続いて0を(入力-2)個、最後に1を出力する」

という事になります。
「余りが0または1(つまり「<2」)」とは一体なんぞや?については、例を挙げて説明するとわかりやすいと思うのですが、
例えば(入力)が5のとき:

1(行目)÷5(入力)の余り・・・1
2(行目)÷5(入力)の余り・・・2
3(行目)÷5(入力)の余り・・・3
4(行目)÷5(入力)の余り・・・4
5(行目)÷5(入力)の余り・・・0

となるので、この1行目と5行目の処理をまとめた論理式になるわけですね!
というわけで

1(行目)÷5(入力)の余り・・・1なので「11111」を出力
2(行目)÷5(入力)の余り・・・2なので「10001」を出力
3(行目)÷5(入力)の余り・・・3なので「10001」を出力
4(行目)÷5(入力)の余り・・・4なので「10001」を出力
5(行目)÷5(入力)の余り・・・0なので「11111」を出力

となるわけです。
・・・良くこんな発想できたな自分w

いやぁ、楽しませてもらいました。
感謝感謝です!

ページのトップへ