Perl

ifブロックとif修飾子でのスコープの違い

今更ながら気づいたのでメモ。まず、ブレースで処理文を囲んだ普通のif分岐。 my $flag = 1; if ( $flag ) { my $lexical_str = "hoge"; } print $lexical_str."\n";上記のコードはuse strictで以下のようなエラーになります。 Global symbol "$lexical_str"…

配列から重複があった要素のみを取り出す

「配列から他の要素と重複してる要素のみを取り出すってどうすればいい?」という質問を受けて、書いてみました。 #!/usr/bin/perl use strict; use warnings; # 元の配列 my @array = ( "a","c","b","b","e","a","c","c","c","d", ); my %count; my @result…

コードリファレンスの基本

コードリファレンス(orコードレフ)の基本的な使い方を学びました。とりあえずハッシュに格納して呼び出す感じです。 #!/usr/bin/perl use strict; use warnings; my %printer = ( with_nl => \&print_with_nl, without_nl => \&print_without_nl, all_capi…

コマンドライン引数で相対パス指定

Perlスクリプトにコマンドライン引数でディレクトリ指定を渡す場合、シェルスクリプトと違って自動で相対パスを判断してくれません。ググッたけど見つけられなかったので、とりあえず自前で暫定対処。 my $arg = $ARGV[0]; chomp (my $pwd = `pwd`); $arg = …

UNIXコマンドの結果には必ず改行文字がくっついている

例えば、このようにして読み込むファイル名を使って出力ファイル名をつくるケースがあるとします。 my @files = `ls *.txt`; my ($r, $w) = (); for my $r_file (@files) { my $w_file = "ex_$r_file"; open $r, $r_file; open $w, $w_file; print $w "#".$_…

grepとmapの使い分け

「Effective Perl」でgrepとmapの使い分けについて学んだので簡単な纏めです。 #!/usr/bin/perl use strict; use warnings; chomp (my @list = `ls *.txt`); # 元の要素から抽出したものだけのリスト my @grepped = grep { /(.*)\.txt$/ } @list; print join…

ファイルテスト演算子を使って何かする

これまた非常に基礎的な話ですが「Effective Perl」にあった例文です。 for my $file (glob '*') { print "$file\n" if -T $file; }カレントディレクトリにある全てのテキストファイル名を標準出力に吐いてるだけですが、こういう例文だと実際にどういう場面…

玄箱debianでCatalyst稼動はさすがにムリ・・・なはずがない

既存の自鯖がFedoraで環境的にもどうにもならない感じだったので、玄箱買ってきてdebian sarge化してそこでCatalystを動かして使い方を覚えつつ、ちょっとしたウェブアプリをつくっていたのですが、少しアプリのボリュームが大きくなってきたところでmod_per…

ファイルを使って何かする

わざわざブログに書く事でもないけど、さっと書こうとしてなぜか一瞬詰まった事を反省・・・ #!/usr/bin/perl use strict; use warnings; my $fh; # filehandle chdir "/hoge/foo/var"; my @file = `ls`; for my $file ( @file ) { open $fh, "< $file"; pri…

1ページにリスト表示する件数をカスタマイズする

Catalystでよくある感じの「最新5件だけとってきて表示したい」みたいなのってどうやるんだろうと思い調べました。 sub index : Private { my ( $self, $c ) = @_; my $rs = $c->model('DBIC::Product'); $rs->{attrs}->{rows} = 5; $c->stash->{list} = [$r…

Perlのオブジェクト指向を一行で説明する名言

Wikipediaを読んでいたら、Perlのオブジェクト指向について以下のように断言してありました。 Perlにおいて、クラスはただのパッケージであり、オブジェクトはただのblessされたリファレンスであり、そしてメソッドは第一引数にオブジェクトをとるただのサブ…

とりあえずBookmarkサンプルを動かしてみた

Catalystの勉強にとりあえず「まるごとPerl!」のBookmarkアプリのサンプルを参考にしていたのですが、まだ初心者という事もあって若干はまりました。しかし、とりあえず動くものができたということで。全体の動きはだいぶつかんだかなと思います。あとはウェ…

Bookmarkサンプルをmod_perlで動かした

いつまでもCatalystのテストサーバだけで動かしていても何だし、Apacheのmod_perlで動かそうということでこちらを参考にhttpd.confを設定し無事起動しました。(多謝)http://d.hatena.ne.jp/Bayside/20060201/p1環境は↑と同様にApache1.3系です。最初、適当…

sar -uの結果をエクセル貼り付け用に編集するスクリプト

Debian GNU Linux限定ですが、sar -u 1 nで取得したcpu使用率をxlsでグラフ化するときに使ったツールです。タブ文字をセパレータにした形式でファイルに出力します。そのままxlsにはっつければグラフ化する作業がちょっとだけ楽です。時間とスキルがなかった…

大量のテストデータをつくるツール

csv形式の大量のテストデータをつくりたいときなどに使うツールのテンプレートです。 printfで対象項目の数値をインクリメントします。 #!/usr/bin/perl use strict; use warnings; use Fatal qw/ open close unlink /; { package FileMaker; my $fh; # file…

Perl正規表現の基本 3/3

置換演算子 s/パターン/文字列/ 置換演算子(substitution operator)を使うと、正規表現にマッチした部分を他の文字列に置換することができます。 s/正規表現(パターン)/ダブルクォート風の文字列/置換演算子s///は、ブール値を返却します。・・・と「初…

Perl正規表現の基本 2/3

パターンマッチ m/パターン/ 「/パターン/」は実際には「m/パターン/」のmを省略したショートカットです。ここで使っている「/」デリミタは他のものでも代用可能です。よく使用されるのは「{}(ブレース)」です。 オプション修飾子(option modifier) 動作…

Perl正規表現の基本 1/3

そもそも正規表現とは・・ 文字列に対してマッチさせられるテンプレートのこと。パターンとも呼びます。 メタ文字 「*」、「+」、「?」のように直前のものが現れる回数(=量)を指定するメタ文字を「量指定子(quantifier)」といいます。「^」、「$」のよ…

サブルーチン戻り値のセミコロン省略

「初めてのPerl」を読んでいたら、 Perlではブロックの最後のセミコロンを省略できるのですが、実際には、上のコード例のように、コードが単純でブロックが1行に収まる場合に限って、最後のセミコロンを省くのが普通です。初めてのPerl 第三版 P.74 この箇所…

代入先はリストかスカラーか

配列からの代入は代入先がスカラーコンテキストか、リストコンテキストかによって違います。まずスカラーコンテキストの場合は、配列の要素数が代入されます。この場合は要素が五個なので3が入ります。$#arrayの場合は、最後尾の要素のインデクスを取得する…

配列を操作する演算子

オープンソースのソースを読んではみようみまねで書くだけだと「何となくおまじない扱い」みたいな事が増えそうな気がしたので、基礎的なことからちゃんと技術書を読んで体系づけて消化しておこうと思います。 pop演算子、push演算子 Perlでは配列をデータの…

車輪を再発明して上達する

Perlオブジェクト指向の練習も兼ねて、空き時間にちょこちょこあった簡単な開発ツールのパッケージ化にトライしました。シェルスクリプトとかハードコードなPerlスクリプトなどです。個々はとても簡単なものが多いので、どういうものをどうやったらオブジェ…

PerlのOOPを学習する

仕事でメインで使うことはないのにも関わらず(自分用のツールは勝手にPerlで書いてるけど)、プライベートでPerl勉強中です。なぜってPerl書くのが楽しくて仕方なくなってきたからです!「続・初めてのPerl」を12章まで読み進めました。以下はPerlのオブジ…

IO::Fileのprintflushとファイルロック

「続・初めてのPerl」を読んでいて、IO::Fileモジュールが出てきたので、使い方を勉強しました。 #!/usr/bin/perl use strict; use warnings; use IO::File; use Fatal qw/ open close /; # ファイルの配列 my @files = ( "test_1.txt", "test_2.txt", "test…

Perlの関数引数は参照渡し

続・初めてのPerl 改訂版作者: Randal L. Schwartz,brian d foy,Tom Phoenix,吉川英興,伊藤直也,田中慎司,株式会社ロングテール/長尾高弘出版社/メーカー: オライリー・ジャパン発売日: 2006/10/21メディア: 大型本購入: 9人 クリック: 389回この商品を含む…

csvファイルを読んで配列の配列に格納するサブルーチン

たまに使うのでメモ。 #!/usr/bin/perl # read csv file to array in array use strict; use warnings; use Fatal qw/ open /; my $csv_file = "./test.csv"; my @csv = &readCsvFile($csv_file); print $csv[0][0]."\n"; print $csv[1][1]."\n"; print $csv…

yyyymmddhh24miss形式でカレント日時を返すサブルーチン

たまに使うのでメモ。 sub getSysdate { @da = localtime(time); $date = sprintf("%04d%02d%02d%02d%02d%02d", $da[5]+1900, $da[4]+1, $da[3], $da[2], $da[1], $da[0]); return $date; }

Net::DNSを使って遊ぶ

Geekなぺーじ : ドメイン用DNSの発見(Net::DNS) (http://www.geekpage.jp/programming/perl-network/net-dns-ns.php) 面白いと思ったので、自分でも試してみました。コマンドラインで引数にドメインを渡すと、IPアドレスとNSレコードをコンソール出力し…