Perl

PerlでのDNS逆引き

IPv4の場合の逆引き use Socket; gethostbyaddr(pack('C4',split('\.', $ip)), AF_INET); IPv6の場合の逆引き use Socket6; gethostbyaddr(inet_pton(AF_INET6, $ip), AF_INET6); とりあえず、やり方だけ記録。

SpeedyCGI使ってみた

さっそくハマった。 ハマったとは言ってもmod_perlにもあったような問題で、単にそんなことを忘れていた自分がアホだったという話。 SpeedyCGIを使って自作スクリプトを動かしていたのですが、何か調子が良くない。 よくよく調べてみると、POSTやGETで送るパ…

FizzBuzz by perl

for(my $i=1;$i<101;++$i){ print $i%3 && $i%5 ? $i : ($i%3 ? "" : "Fizz", $i%5 ? "" : "Buzz"), "\n"; } foreach((1...100)){ print $_%3 && $_%5 ? $_ : ($_%3 ? "" : "Fizz", $_%5 ? "" : "Buzz"), "\n"; } print map{ $_%3 && $_%5 ? $_ : ($_%3 ? ""…

PerlでEmail::Send::Gmailを使ってメール送信

Email::Send::Gmail - Send Messages using Gmail - metacpan.org 超簡単。 ただしマルチバイト文字をEmail::Simple::Creatorのオブジェクトに設定する時は適切な文字コード(日本語ならiso-2022-jp)へ変換し、utf-8フラグを落としておくこと。

文字コードのあれこれ

あれこれって言っても入力と出力の所について。 文字コード変換はこちら 「Perlの俺ルール - 足跡」で入力と出力の部分についての俺ルールを書きましたが、やはり独りよがりな俺ルールでした。 UTF8文字列での正しい入出力処理はこちら: 404 Blog Not Found…

ヒアドキュメント

javascript - 無し。ライブラリを使う。 Perl - 以下の3パターン my $text = "あいうえお"; # 変数展開あり print <

Perl5的な文字コード変換

use strict; use warnings; use utf8; use Encode; my $str = "あういえお"; # utf8フラグ付きのutf8文字列を他文字コードへ非破壊的に変換する。 my $enc = Encode::find_encoding('Shift_JIS'); my $converted = $enc->encode($str); # 文字コードAから文…

Perlのライブラリパスの追加

use lib '/path' を使う。 環境変数PERL5LIB(Perl5の場合)にパスを放り込む。export PERL5LIB=/path1:/path2って感じ。これを~/.bashrcとか/etc/bash.bashrcに書いておく。 @INCにスクリプトの中でパスを突っ込む。 諦めて@INCに最初から入ってるパスから…

標準モジュールの調べ方

CPANからModule::CoreListをインストールする。 あとはPerlスクリプトからModule::CoreListをuseしてデータもらったり、コンソールからcorelistコマンドを打ち込んで調べればいい。$ corelist モジュール名 $ corelist -v バージョン番号ただし5.8.8などのバ…

PerlでのHTTPレスポンスヘッダ制御のあれこれ

Perlスクリプトにアクセスされた時に404とか返して嘘つくにはどうしたらいいんだろうと思ったのでメモ。 レスポンス行: Status: (ステータスコード) (補足テキスト) \n って感じでprintとかで出力。ヘッダ行: とりあえずそのまんまprintとかで出力してみる…

EPICの設定

EPICを使っててツールチップが出ると何故かエディタからフォーカスが外れてそのまんまになる。 結構ストレスが溜まる症状なのでツールチップを出さないようにする設定を行います。 Windows > Preferences と進んで出てきた設定ダイアログで以下の操作を行う…

DBI使うときの鉄板

RaiseErrorを有効にしてDBIにdieさせてevalでキャッチ。 AutoCommitは切る。SELECT文だけしか使わない時はどっちでもいい。 問題なく全てが終了したときだけcommitする。他は全部rollbackして元に戻す。 外部から入力された値をSQL文に組み込むときは必ずプ…

ディレクトリ内のファイルを全て削除

my $DirectoryPath = '/hogehoge/hogehoge'; opendir(DIR, $DirectoryPath); unlink map { $DirectoryPath.'/'.$_ } grep { -f $DirectoryPath.'/'.$_ } readdir DIR; closedir(DIR); ディレクトリは削除されません。

Perlの俺ルール

Perlでプログラミングする際の俺ルール。文字コード編。 内部的に扱う文字コードはutf8で統一。 プラグマはuse utf8のみ。 入力されたデータは必要に応じてutf8::decodeしてutf8で扱う。 出力するデータはutf8::encodeしてから出力。 ---- 2009/09/19 追記 -…

Perlでファイルアップロード

Perlでアップロードファイルを受け取る時の最小よりちょっと色々おまけが付いてるコード。 post.cgi UTF-8で記述。 #!/usr/bin/perl -w use strict; use warnings; use utf8; use CGI; use File::Copy; use File::Basename; &main(); sub main{ # CGIオブジ…

mapとgrepの違い

Perlではmapとgrepというぱっと見よく似た関数があります。 mapが対象リストの各要素に対して行う処理は式。その結果のリストを返す。 grepが対象リストの各要素に対して行う処理は条件式。合致した要素だけからなるリストを返す。

ディレクトリ中のファイル一覧取得

opendir(DIR, $DirectoryPath); @DirectoryIndex = grep { !m/^(\.|\.\.)$/g } readdir DIR; closedir(DIR); . と .. 以外のファイル一覧が取得出来ます。

ubuntuでのApache2へのmod_perl2導入

インストール $ sudo apt-get install libapache2-mod-perl2 で、mod_perl2はインストール完了。 設定 apache2.confとかがincludeしてくれる位置に、適当な設定ファイルを作っておくといい。 mods-enabledの中にperl.confとして作っておくと他のmodと似たよ…