Perl

CPANのダウンロードが異常に遅い時の対処法

LWPがファイアーウォールにブロックされてタイムアウトが起こってるのが原因だった。 パッシブモードで接続に行くように環境変数をセットすれば解決した。 export FTP_PASSIVE=1

UNIXタイムスタンプが1234567890になった瞬間

ちょうどさっきUNIXタイムスタンプが1234567890になった。カウントダウンに使ったコマンド watch -n 1 "perl -e 'print 1234567890-time, \"\n\n\", time;'" 1234567890になった瞬間! わーい。

Perlのsystem関数で外部コマンドを呼ぶときのエラーキャッチ

バッククォートで呼ぶとエラーが起きたどうか分からないのでsystem関数を使う。 my $cmd = 'ls test_dir'; if( (system "$cmd") != 0){ die "Error detected\n"; } エラーが起きたらdieする関数 sub run_cmd{ my ($cmd) = @_; print "$cmd\n"; if( (system "…

PerlのUTF-8処理

UTF-8のテキスト処理をする時はまず入り口でUTF-8フラグを立てる。 最後の出力(出口)ではUTF-8フラグを落とす。 my $str = "日本語"; #UTF-8フラグを立てる utf8::decode($str); #UTF-8かどうかをチェック print utf8::is_utf8($str); #・・・なにかの処理…

PerlのDOM操作

XML::DOMモジュールを使ってXMLをパース XML タイトル1 作者B 作者C 2004/10/21 Perlコード: の値を取り出す。 use strict; use XML::DOM; my $dom = new XML::DOM::Parser; my $doc = $dom->parsefile('books.xml'); my $nodes_book = $doc->getElementsBy…

Perlで日本語メールを送信する。

SubjectとBodyをISO-2022-JP (JIS)に変換、 プラスSubjectをBase64エンコードしないと文字化けする。 (注) 最近のメーラーのほとんどはUTF-8のメールを認識できる。*以下のファイルはUTF-8で保存 use strict; use MIME::Base64; use Encode qw(encode); my …

Perlワンライナーで正規表現の文字列抽出

.cppファイルを探して行数でソート。 Perlのワンライナーで行数を抜き出す。 find . -name "*\.cpp" -exec wc -l {} \; | perl -ne 's/ .*//; print' | sort -gr cutコマンドでもいける find . -name "*\.cpp" -exec wc -l {} \; | cut -d " " -f 1 | sort -…

Perlで文字列をMD5のハッシュ化をする

use Digest::MD5; my $str = "test"; my $md5_str = Digest::MD5->new()->add($str)->hexdigest;

PerlのHTML::EntitiesでHTML特殊文字をデコードする

Web::ScraperでHTMLをパースした時に&や'がHTML特殊文字に置き換わることが分かったので HTML::Entitiesのdecode_entities関数で元に戻す。 サンプル use HTML::Entities; my $html = "--&#39;--<a href='localhost'>test</a>--&#39;--&#38;--&#34;--"; print decode_entities($html)…

PerlからPHPにJSONを使ってデータを引き渡す

ハッシュやオブジェクトなどの複雑なデータ構造のものを引き渡すのにJSONを使うのが最適です。 PerlにJSONモジュールをインストール cpan cpan> install JSON PHP4にJSONモジュールをインストール(PHP5にはディフォルトで入ってる) PEAR版とPecl版があるが今…

Perlには複数行コメントがあったらしい・・・

=podと=cutで括れば複数行コメントの完成 perldoc用の記述方らしいです。 =pod print $val1; print $val2; =cut

Perlのリファレンス参照

Perlでは変数などのアドレスは名前の前に\を付ければとる事が出来る。 アドレスからデータを参照する場合は$を付ける。 例1 my $name = "sodomojo"; my $address = \$name; print "$name $address $$address\n"; #結果 #sodomojo SCALAR(0x9406bf0) sodomojo…

Perlでハッシュの配列をソートする。

ハッシュの配列をsort関数でソートする。 サンプル use strict; use Date::Dumper; # データ my @array = (); $array[0] = { "id"=> 1, "time"=> 1213011545 }; $array[1] = { "id"=> 2, "time"=> 1213012384 }; $array[2] = { "id"=> 3, "time"=> 121300129…

PerlのWeb::ScraperでHTMLを簡単パース

PerlのScraperモジュールを使えばHTMLを簡単にパースできる。 Scraperをインストール #cpan cpan>> install Web::Scraper サンプルコード use Web::Scraper; use URI; use Data::Dumper;my $scraper = scraper { #tag内のテキストを抽出 process 'a', 'value…

Perlのハッシュプリント

ハッシュをforeachでトラバース sub print_hash(){ my(%hash) = @_; foreach my $key (keys %hash){ print "key:$key\tval:$hash{$key}\n"; } } というかDumperモジュールを発見。 use Data::Dumper; print Dumper %hash;

Perlのユーザーエージェントで自動情報収集

PerlのLWP::UserAgentを使ってHTTPリクエストを投げて情報収集を自動化できる。 例: HTMLの<a>タグの全てリンク先を取得 #!/usr/bin/perl use strict; use LWP::UserAgent; #Send HTTP Request my $url = "localhost/index.html"; my $method = 'GET'; my $ua =</a>…