Perl

3つのプログラミング言語での syslog の使い方メモ

C、Perl、Python でのsyslogのサンプル。 C #include <stdlib.h> #include <syslog.h> int main(int argc, char** argv){ openlog(argv[0], LOG_PID|LOG_PERROR, LOG_LOCAL0); syslog(LOG_INFO, "foo: %d", 123); closelog(); exit(EXIT_SUCCESS); } Perl #!/usr/bin/perl use st</syslog.h></stdlib.h>…

3つのプログラミング言語での getopt の使い方メモ

C、Perl、Python でのgetoptのサンプル。 とりあえず、help, version, user, password の4つのオプションを指定できるようにした。 使い方 % my_getopt --help % my_getopt -h % my_getopt --version % my_getopt -v % my_getopt --user=foo --password=abc …

いらないデーモンの一括削除(改)

Perl のワンライナーで、-a オプション(AWK風に使える)を使って以前書いた、「 いらないデーモンの一括削除 - Sleepless geek in Seattle」 を改良した。いらないデーモンを指定して削除するのではなく、必要なデーモンを指定してそれ以外を削除するように…

Web::Scraper を使ってテレビ番組表を毎日メールする

コマネチ大学数学科のような深夜番組を予約録画していると時々時間がずれていて非常に悲しいことになる。 かといって毎日番組表をチェックするのもめんどくさい。 そこで、Web::Scraper のお試しも兼ねて、番組表を見やすく加工して自分宛にメールするように…

CPAN の設定変更方法

CPANの起動 # perl -MCPAN -e shell モジュール ダウンロード用のFTP/HTTP サイトの追加 http://www.cpan.org/SITES.html から調子の良さそうなサイトを選んで、 cpan> o conf urllist push ftp://example.com/pub/CPAN cpan> o conf commitとやります。 モ…

画像を埋め込んだHTMLメールの出し方

MIME::Lite を使えば簡単に画像埋め込みのHTMLメールが出せる。 use strict; use warnings; use MIME::Lite; my $img = "foo.gif"; my $msg = MIME::Lite->new( From =>'yoshifumi1975@example.com', To =>'yoshifumi1975@example.com', Subject =>"HTML mai…

Perl でsetuid されたCGIの実行

CentOS5.1で、setuidされたPerlのCGIを実行したところ、見慣れないエラーが出て失敗する。 Can’t do setuid (cannot exec sperl)ググったところ、どうやら、CentOSに付属されているperlでは、setuidされたCGIは実行できず、別途、setuid用のperlをインストー…

qpsmtpd のインストール メモ

PerlでできたSMTPサーバー qpsmtpd をCentOS5.1にインストールした時のメモ。これを使えば、SpamAssassinや、ClamAVなどをプラグインしたり、自分で書いたプログラムを簡単にプラグインできる。 インストール # yum -y install postfix system-switch-mail #…

Web-to-Ticketの続き

Web-to-Ticket の続き Web-to-Ticket を実現する簡単なCGIを作成した。 #!/usr/bin/perl use strict; use CGI; use TracTicket; my $q = new CGI; print $q->header; # for Basic Authentication my $ticket = TracTicket->new('https://trac.rukatan.com/ne…

基数変換

10進数と16進数と2進数の変換例 # perl -e '$n=12345; $s = unpack("H*", pack("N*", $n)); $s=~s/^0*//g; $n=$hex; print $s;' 3039 # perl -e '$n=12345; $s = unpack("N*", pack("N*", $n)); $s=~s/^0*//g; $n=$hex; print $s;' 12345 # perl -e '$n=1234…

TracTicket.pm のCentOS4.x対応版

TracTicket.pm のCentOS4.x対応版。 CentOS4.x で使える、LWP::UserAgentでは以下のほうを使ってください。 package TracTicket; use warnings; use strict; use LWP::UserAgent; use HTTP::Headers; use HTTP::Request::Common; use MIME::Base64; use Data…

Mail-to-Ticket and Web-to-Ticket メールまたはWEBからチケット簡単自動作成

問い合わせフォームなどからの入力を自動でTracのチケットにあげたいので、Trac をハックしてみたら、簡単なプログラムを書けばいけそうなことがわかった。とりあえず、PerlでTicketを登録するプログラムを書いてみた。うーん、すごく汚い。 URLなどは、自分…

Encode.pm で、nkf もどき

#!/usr/bin/perl use strict; use Encode qw(from_to); use Encode::Guess; my $s = do {local $/; <STDIN>}; my $enc = Encode::Guess::guess_encoding ( $s ); #from_to( $s, $ARGV[0], $ARGV[1] ); from_to( $s, $enc, $ARGV[0] ); print $s, "\n";</stdin>

ビット演算時の注意

Perlでのbit演算をしようとしているときに、変数がどうしても文字列扱いされてしまい非常に苦労したが、hex()を使えば、確実に数値として扱われる。 print 0xFF ^ CB; 255 print 0xFF ^ pack("H*",CB); 255 $a="CB"; print 0xFF ^ pack("H*",$a); 255 print …

ゴミ置き場

CGI.pm、CGI::Session、HTML::Template、Digest::MD5を使ったサンプル 書いている最中に仕様が変わってしまい無駄になってしまったが今後も使うかもしれないのでメモとして残しておく。 #!/usr/bin/perl -T use strict; use CGI; use CGI::Session; use HTML…

Perl Hacks

warn: STDERR に出力するので便利 Smart::Comments; use Smart::Comments; my $call = "26, 17, 22, hut!"; ###$call my $play_calls = split /\s*,?\s*/, $call; ###require: @play_calls == 4

1秒未満でsleepする方法

select(undef, undef, undef, 0.1);

日付 HTTP::Date

use HTTP::Date; $string = time2str($time); $time = str2time($string);

PerlでSMTP Authメールの送信

use Net::SMTP_auth; sub smtpauthsend{ my($filename) = @_; $smtp = Net::SMTP_auth->new($smtpserver); $smtp->auth('LOGIN', $username, $password); $smtp->mail('aaa@aaa.aaa.com'); $smtp->to('aaa@aaa.aaa.com'); $smtp->cc('aaa@aaa.aaa.com'); $sm…

関数メモ

pack, unpackの使い方 print unpack('H*', '@gmail.com'); 40676d61696c2e636f6d print pack('H*', '40676d61696c2e636f6d'); @gmail.com print unpack('h*', '@gmail.com'); <--hだとエンディアンが逆になる。 0476d61696c6e236f6d6 print pack('h*', '0476…

Apache2::Reload で自動リロード

/etc/httpd/conf.d/ の適当な設定ファイルに以下を追加。 PerlModule Apache2::Reload PerlInitHandler Apache2::Reload PerlSetVar ReloadDirectories "/var/www/mod_perl" PerlSetVar ReloadDebug On

文法メモ

Tag Name Contains Substitution Perl that is evaluated and sent as output % ... Perl line A single line of Perl code perl> ... Perl block Perl code Component call A call to another component, possibly with arguments ... init block Perl code…

Masonの設定

/etc/httpd/conf.d/mason.conf を以下のように作成 PerlModule HTML::Mason::ApacheHandler <LocationMatch "\.html$"> SetHandler perl-script PerlHandler HTML::Mason::ApacheHandler </LocationMatch>これで、拡張子が.htmlのファイルがMasonで処理される。

Perl ワンライナー メモ

複数行にまたがる文字列置き換え 例: 以下から <select name="timezone"> <option value="a">... <option value="b">... <option value="c">... </select> ここまでをfooに置き換える。 以下は置き換えない。 <select name="other"> <option value="a">... <option value="b">... <option value="c">... </select>以下のスクリプトでok perl -p -0777 -i.bak -e "s#

Fedora Core 5 上でのmod_perlのセットアップ

オリジナルは、naoyaの「10分で完了、mod_perl 2.0 で Hello, World!」d:id:naoya:20060108:1136692447/etc/httpd/conf.d/naoya.conf という名前で以下を作成 NameVirtualHost *:80 <VirtualHost *:80> ServerName fc5:80 PerlModule mod_perl PerlRequire /var/www/mod_perl/s</virtualhost>…

Perlメモ

@array = (1, 3, 5); # 配列 $ref = [1, 3, 5]; # 配列の参照 @array == @{$ref} == @$ref; # 全部等しい \@array と $ref は、値は同じ。 デバッグ用 use Data::Dumper; print Dumper( @array ); perl -d のxコマンド相当 データの永続化 use Storable; sto…

perl -MCPAN -e shell メモ

ワンライナー 置き換え

==OEM== を ABC に、 ==OEM_TITLE_LABEL== を ABC.COM に置き換え。 perl -p -i.bak -e "s/==OEM==/ABC/g; s/==OEM_TITLE_LABEL==/ABC.COM/g;" test.txt