Perl

ハッシュのマージ Hash::Merge

ハッシュをマージするには %h3 = (%h1, %h2) で簡単にできる #!/usr/bin/perl use strict; use warnings; use YAML; my %hash1 = ( a => 1, b => 2, c => 3, ); my %hash2 = ( a => 1, b => 4, d => 5, ); my %hash3 = (%hash1, %hash2); print Dump \%hash1…

CGI

ポイント :standardすると関数ベースになる。 デバッグ用にエラーを表示するには fatalsToBrowser ファイルを転送するには enctype="multipart/form-data #!/usr/bin/perl use strict; use warnings; use CGI qw/ :standard /; use CGI::Carp qw(fatalsToBro…

CentOS5.6にImage::Magick、Image::ExifTool

perlメモ Image::Magick Image::ExifToolを使って一括画像縮小&画像方向補正スクリプト Image::Magickによるサムネイル生成高速化 - はかますたいる!【きょろの技的雑記】 Image::ExifTool で写真の EXIF 時刻をまとめてずらす - てっく煮ブログ exiftoolは…

LevelDBを使ってみる

いち早くモジュールが公開されてたので Tie::LevelDB 使ってみる。 インストール(※local::lib導入済み) // 手動 $ wget http://search.cpan.org/CPAN/authors/id/S/SA/SARFY/Tie-LevelDB-0.01.tar.gz $ tar xzvf Tie-LevelDB-0.01.tar.gz $ cd Tie-LevelDB-0…

AnyEventについて調べる

AnyEventでイベント駆動プログラミング gihyo.jp 技術評論社 1/3 2/3 3/3 AnyEvent::Handleで通常のファイルを扱ってはいけない この問題は誤解でした。 hidekiy blog: 今日から始めるAnyEvent Perl 非同期プログラミング 名前空間AnyEvent vs AE …

Headerを表示する

use strict; use warnings; use LWP::UserAgent; use YAML; print Dump get_header($ARGV[0]); sub get_header { my ($url) = @_; my %hash; my $res = LWP::UserAgent->new(timeout => 10)->head($url); if ($res->is_success) { foreach my $line (split /…

多重起動禁止

シェルスクリプトの多重起動を防ぎたい! - ”improve it!” (IT四重奏) # 多重起動停止 if ($$ != `/usr/bin/pgrep -fo $0`) { print STDERR "process running!\n"; exit 1; } node.jsからの起動だと親プロセスのシェルが引っかかるので使えない。。作る。 my…

Perl救命病棟より無名ハッシュのプライマリーキー

use strict; use warnings; use Data::Dumper; my %aa; $aa{primary_key}{key1} = 100; $aa{primary_key}{key2} = 200; my %bb; $bb{primary_key} = { key1 => 100, key2 => 200, }; print Dumper \%aa; print Dumper \%bb; __END__ $VAR1 = { 'primary_key'…

無名配列のリファレンス

use strict; use warnings; my $list_ref = ['a', 'b', 'c', 'd']; print "@$list_ref \n"; print scalar @$list_ref . "\n"; foreach my $n (1 .. scalar @$list_ref) { print "$n $list_ref->[$n - 1]\n"; } ____ a b c d 4 1 a 2 b 3 c 4 d

チンチロリン

カイジでチンチロリンをちょうどやってたので役の割合を調べてみた。 子(または親)に番が回ってきたときに出る役の割合。 use strict; use warnings; my $MENASHI = 0; my $MEARI = 1; my $SHIGORO = 2; my $ZOROME = 3; my $PINZORO = 5; my $HIHUMI = -2…

RFC1867について調べてみる(ファイルをアップロードする方法)

[Studying HTTP]Form-based File Upload in HTML フォームを利用したファイルのアップロード RFC 2854 が新しい技術 RFC日本語版リスト RFC番号順 実用! CGI.pmのファイルアップローダ - perl-mongers.org perlでアップロードする方法hack HTTP::Reque…

デーモンプログラムを書いてみる

whileで無限ループなものを書くのならいっそデーモンにしてしまえということで Proc::Daemonというのがいいらしい perldoc perlfaq8 にものってるし。 という安易な考えで調べて見てたら結構深い。 素直にモジュール使うのがいいかもしれない。 App::Daemon…

配列から一部の要素を覗いた配列を作る

use strict; use warnings; my @aaa = qw/ a123 b123 c123 /; my @bbb = grep {$_ ne "a123"} @aaa; printf "%s\n", join ",", @aaa; printf "%s\n", join ",", @bbb; __END__ a123,b123,c123 b123,c123

List::MoreUtilsのapplyを調べてみた

List::MoreUtilは配列操作の便利な関数をまとめたモジュールでそこに apply というサブルーチンがある。docより使い方は以下の通り。 つまり第一引数にサブルーチン、残りに配列を渡すとその配列に対してサブルーチンを適用してその結果を返してくれる。map…

してはいけない書き方

配列に対してdeleteを使う 要素は消えないし、perl-5.12.1 のperldoc perlfunc より”非推奨” use strict; use warnings; my @list = qw( a b c d e ); delete($list[1]); print "@list\n"; __END__ Use of uninitialized value in join or string at a.pl li…

udpサーバーでtracerouteの送信文字を見る

tcpならtelnetでポート指定すればいいけど、udpをポート指定して簡単に送れるコマンドがないか探してたらtracerouteがあった use strict; use warnings; use IO::Socket::INET; my $s = IO::Socket::INET->new( LocalAddr => "0.0.0.0", LocalPort => 9000, …

aaaを送ったら終わるサーバー

telnet localhost 9000 use strict; use warnings; use IO::Socket::INET; my $s = IO::Socket::INET->new( #LocalAddr => "localhost", LocalAddr => "0.0.0.0", LocalPort => 9000, ReuseAddr => 1, ) or die $!; $s->listen or die $!; while (my $c = $s…

Address already in useを回避する

Address already in useを起こしてみる 以下のサーバースクリプトを起動 telnet localhost 9000としてアクセスする 待ち受け状態になるので適当な文字を入れてEnter コネクションが切れる。 サーバースクリプトをCtrl+Cで落とす。 再度起動しようとすると Ad…

#!/usr/bin/perl use strict; use warnings; use IO::Socket; my $udpa = IO::Socket::INET->new( Proto => 'tcp', PeerAddr => 'localhost', PeerPort => 5000, ); unless ($udpa) { die "$!"; } $udpa->print("aaaaaaaaaaaaaaaaaaa\n"); print $udpa->getl…

openは3引数で

ファイルオープンの2種類の記述方法 - サンプルコードによるPerl入門

ファイルハンドルとか

安全なファイル書き換えにはディレクトリも fsync すべき。だけど Perl でどう書くか - kazuhoのメモ置き場 IO::Handle - search.cpan.org ファイルハンドルをめぐる冒険(ただしマニア向け) - daily dayflowerファイルハンドルはどれがベターか O_SYNC で…

オブジェクト指向を勉強してみる4

perlのロギング用モジュールを作ってみる。なぜかPPでローテートを備えているモジュールがないみたいなので。いまのところ要求仕様は以下のとおり。 とにかくログに書けて、それをローテートできること。 ローテートしたファイルをgzでcompressできるとなお…

オブジェクト指向を勉強してみる3

package Log; # Thank you for # - http://search.cpan.org/~gng/File-Log-1.05/Log.pm # - http://perldoc.jp/docs/modules/File-Log-1.02/Log.pod # - http://www.jp-z.jp/perlmemo/file_FindBin.html # - File::Temp use strict; use warnings; use File:…

オブジェクト指向を勉強してみる2

package Foo; use strict; use warnings; sub new { my $class = shift; my $self = { piyo => 1, cnt => 0, }; bless $self, $class; return $self; } sub bar { my $self = shift; $self->{cnt}++; return $self->{cnt}; } package main; use strict; use …

オブジェクト指向勉強してみる 一ファイルに複数のパッケージを持つ方法

xxx.pm をいちいち分割してつくりはじめるのも面倒なので一ファイルに書く方法 404 Blog Not Found:perl - 複数パッケージを含むファイル package Foo; use strict; use warnings; sub bar { my ($class, $msg) = @_; print "$class $msg\n"; return; } pack…

kvmclone.pl コードリーディング

2010-11-27 - kj-kiのはてなダイアリー経由、IBM Linux at IBM | RHEL5.4 KVM 仮想マシンの自動複製のkvmclone.plをリーディングしてみる。 #!/usr/bin/perl # # kvmclone.pl for RHEL5.4 KVM # # 2009/12/22 ver1.0 # ### モジュール及び、グローバル変数の…

Ubuntu 上に IS01 の開発環境構築 #1 Android SDK 編 - Born Too Late Ubuntu 上に IS01 の開発環境構築 #2 PhoneGap 編 - Born Too Late Ubuntu 上に IS01 の開発環境構築 #3 実機にデプロイ編 - Born Too Late Perl embarking on new era (perl 5.13.7 fea…

non-pythonプログラマーのためのpythonコード解説図がわかりやすかった - IDEA*IDEA 〜 百式管理人のライフハックブログ 「Google ショッピング」日本版スタート - スラッシュドット・ジャパン なにこれ恐ろしく反応速度いいんですけど! さくらのVPSのDebia…

if-elsif-elseの話が聞こえた

if-elsif-else の書き方 - punitanのメモ 同じくPerlBestPracticeに載ってた。三項演算子結構好き。 my $color = <STDIN>; my $value = $color =~ /red/i ? 0xff0000 : # if $color =~ /green/i ? 0x00ff00 : # elsif $color =~ /blue/i ? 0x0000ff : # elsif 0x000</stdin>…

Shift_JISのperlスクリプトでは”表”という文字を使えない件 5C問題

文字コードに起因する脆弱性とその対策 Shift_JISでは”表”という文字の2バイト目は"\"にマッチする。 ということで検証コード。Windows上のactiveperlでやってみた。 use strict; use warnings; # ”表”をスクリプト上に書くとエラー(\を認識してしまうみた…