perl

マスタリングPerlって本がオライリーから出てた

マスタリングPerl作者: brian d foy,菅野良二出版社/メーカー: オライリージャパン発売日: 2009/03/23メディア: 大型本購入: 3人 クリック: 23回この商品を含むブログ (14件) を見る 内容(「BOOK」データベースより) 本書は、Perl構文の基本を指南する『初…

perlの正規表現 /x修飾子でうっかり

PBPに見習って/msxを常につけるようにしてるんだけど、先頭が"#"の場合はコメントなconfigを読み込んで処理しようとして while (my $line = <$fh>) { next if $line =~ m/^#/msx; } としたら全部の行がregexにマッチして何も処理しなくなってた。おや〜と悩…

busyboxで使用可能なコマンドのsymlinkを作るperl

chroot用のユーザに環境を用意するときに、個々のバイナリファイルをコピーするよりbusybox使うほうが楽かなと思ってやったメモ。static-linkなbusyboxだと/lib以下のライブラリコピーしなくていいし。 $ busybox --help BusyBox v1.01 (2006.05.04-09:21+00…

perlの正規表現の修飾子

/mあたりを良く忘れるのでmemo。 /i 大文字小文字を無視 /m 複数行マッチモード。^と$を改行の前後でマッチさせる。/m修飾子が有効な状態で本当に文字列の先頭と末尾にマッチさせたい場合は、\Aと\Z\zを使う。 /s "."を改行にマッチさせる。 /x 空白を無視。…

au - BREWのCIDR情報

auのBREWの端末のIPは通常のezwebがアクセスしてくる帯域とは違うことを最近知った。 http://www.au.kddi.com/ezfactory/tec/spec/ezsava_ip.html http://www.kddi.com/business/otoiawase_support/support/tec/index.html で、BREWアプリのサイトのapacheに…

Net::CIDR::MobileJP::Scraper::Plugin::Vodafone.pmが動かなくなった

dsasの中の人が作ったperlで、SoftbankのIPだけが取得できなくなったので調べてみた。どうやらSoftbankのIP帯域が載ってるURLが変わったのが原因で、Net::CIDR::MobileJP::Scraper::Plugin::Vodafone.pmが古いままだかららしい。適当に修正したら動くように…

File::Copyのmoveはパーティションをまたがってディレクトリを移動できない?

ファイルは異なるパーティション間でも移動できたけど、ディレクトリはダメだった。perldoc File::Copyしても、それらしい記述は見つけられなかったんだけどどうなんだろ。 パーティションの状態 /rootと/tmpが/dev/md0、/var/は/dev/md3。 # df -k Filesyst…

Web::ScraperとXPathの知識を深める効率の良い方法

エロblogから画像 or 動画をdownloadするscriptを書けばいいわけですね http://d.hatena.ne.jp/naoya/20070509/1178686816 http://e8y.net/mag/013-web-scraper/ http://blog.cles.jp/item/2003

ack - App::Ackでソースコード検索

http://techtalk.jp/2008/08/-tech-meeting.html Linuxカーネルの読み方 - 伊藤直也‐ニコニコ動画(夏) を見てApp::Ackの存在を知った。確かに便利そうだ。 cpan -i App::Ackするとackというコマンドがインストールされる。 でも色つけるだけなら、(GNUの)grep…

範囲演算子って数値で範囲指定したとしても文字列リストが返るのか?

use bigintしてるのに有効数字が小さいから、なんで?と思って調べた。範囲演算子が文字列を返してるからなのかな。 範囲演算子 use bigint; for my $n (16..20) { print $n ** $n, "\n"; } 実行結果 1.84467440737096e+19 8.27240261886337e+20 3.934640807…

perlで標準より大きい有効数字の整数、小数を扱う

$ perl -le 'print 2 ** 100' 1.26765060022823e+30 整数 bigint or bignumプラグマ Math::BigIntのwrapper。 use bigint; print 2 ** 100, "\n"; # => 1267650600228229401496703205376 Math::BigIntモジュール use Math::BigInt; print 2 ** 100, "\n"; # …

文字列から特定桁の数字を抜き出す

project eulerの8問目を見てて、ふと疑問に思った。この場合、まず数値列(文字列)から全ての5桁の数字を取ってきたいとする。簡単にするために、20桁の数値列で考える。 $str = '0123456789' x 2; while ($str =~ m/(\d{5})/g) { print $1, "\n"; } これだと…

perlで繰り返しマッチをする

文字列から数字だけ抜き出したいときとか ex) "123foo456bar789baz000"から123,456,789,000をとりたい/g修飾子を使ってマッチさせる。思いついた方法は2つ。 まとめて取得(リストコンテキスト) $str = "123foo456bar789baz000"; @arr = $str =~ m/(\d+)/; 1…

Debianでsetuidしたperlを動かす

ちゃんと調べてないから良くわかってないけど。source installしたものじゃなくて、標準packageで入ってるperl。そのままだとsetuidしたものは動かせない? # echo '#!/usr/bin/perl' > suid.pl # echo 'print "hello\n"' >> suid.pl # chmod u+s suid.pl # …

perlでpingってどうやるの?

Net::Pingみたいな名前のモジュール使うのかな?そんなのあるの?と思ってたら標準モジュールにあった。 system関数でpingを呼び出すのが許されるのは小学生まで?

Redhatのperl-5.8.0でHTML::Parserがインストールできない

コンパイルエラーが出るこんちくしょう。どうやら5.8.0は古すぎてダメみたい。 http://www.mail-archive.com/libwww@perl.org/msg06423.html Parser.xsにパッチ当てたら良いらしい。

いつまで経ってもlocaltimeの戻り値の順番が覚えられない

何かいい語呂合わせとかないもんですかね。logの抽出のために年月日を取得することは良くするので、さすがにそれらの配列の位置ぐらいは覚えましたけど。 my ($day,$mon,$year) = (localtime(time))[3,4,5]; ## 指摘を受けたので追加 $day = sprintf("%02d",…

1秒以下の細かい単位で時間を測定したいとき

use Time::HiRes を使えばよいらしい。

CPANモジュールのバージョンを簡単に確認する関数

コマンドプロンプトでちょっとバージョン確認したいときに $ perl -MEncode -le "print $Encode::VERSION" いちいちこんなの打つのめんどくせー。 どうやら関数を作るほうがよさそうだ。ってことで.bashrcあたりに書いた。 function cpanv (){ perl -M$1 -le…

Perlの範囲演算子の不思議

不思議に思ってたのは俺だけかもしれませんが。 forループで大きいファイルを処理しようとすると、全行読み込んでtemporaryのリストを作るので、ファイルサイズの2倍ぐらいのメモリを食ってしまう。なのでforじゃなくてwhileのほうが良いってのは知ってまし…

Perlでhostを指定してHTTPアクセスする

apacheで名前ベースのVirtualHost設定したときとかにperlあたりで楽に確認する方法ないかなーと思ってた。さすがにいちいちtelnetするのは古臭い。ってか面倒。 $ telnet example.com 80 GET / HTTP/1.1 host: vhost1.example.com たぶん一番てっとり早いの…

cpanの設定

かすかな記憶を頼りにやったmemo。 o confでpopとpush使う。 ex) urllistを編集する # cpan > o conf # 設定一覧表示 > o conf urllist # urllistの一覧表示 > o conf urllist pop # urllistの末尾を削除 > o conf urllist push http://cpanmirror.example.c…

perlのライブラリのお勉強 level 1

初級メモ。 サブルーチンを他のファイルに書く 読みこむときはrequireを使う。# hogelib.pl sub hello { print "hogehoge\n"; } # main require 'hogelib.pl'; &hello; package化 上の方法だと、複数のライブラリを読み込んだときに、関数名が重複してしまっ…

perl書いててハマッたこと

system関数でコマンド実行させて、失敗したらdieをさせようとして、 system "command" or die; って書いてしまってた。何もエラー起きてないのに、何でdieしとんねん!!と30分ほど悩んでしまった。system関数の戻り値は"command"の戻り値、unix系ではコマン…

YAPC::ASIA 2007のチケット予約した

YAPC::Asia 2007 Tokyo - April 4-5 2007 (Japanese) http://tokyo2007.yapcasia.org/blog/ja/ 「お前最近perlの勉強してるし、こういうの行ってみたら?」と先輩に言われ、中身も良く知らないまま二つ返事で行くことに(ノ∀`) 勉強してると言っても"初めての…

初めてのPerl(第3版)買った

続・初めてのPerl⇒無印という明らかに逆の読み方してますが。一から真面目に勉強したいなーと思ったので。初めてのPerl作者: ランダル・L.シュワルツ,トムフェニックス,Randal L. Schwartz,Tom Phoenix,近藤嘉雪出版社/メーカー: オライリージャパン発売日: …

遅ればせながらplaggerデビュー

追記 インストールはCPAN経由ではなくsubversionのほうが良い。最新版がすぐ手に入るから。 plaggerインストール編 数ヶ月前に挑戦しようとしたときはCPANのCの字も知らなかったので、インストールの時点でドン詰まりでしたが、今はモジュールのインストール…

dbmハッシュの便利さに改めて驚く

ハッシュ使わなかったら(アルゴリズムが変わるってのも大きいけど) めちゃめちゃ早くなった。ハッシュ最高。

dbmopenでファイルを新規作成したくない時

dbmopen(%hash,"filename",$mode) $modeのところにundefを指定したらいいらしい

exists - ハッシュに指定したキーに対応する値があるか調べる関数

exists関数 exists($hash{$key}) $keyに対応する値があれば真を返して、なければ偽を返す。へー。 でもdbmファイルからオープンしたハッシュには使えなかった*1。二日間かけて作ったプログラムを根底から覆しかねない事件。しゃーないので、ださい方法で回避…