memo.xight.org

日々のメモ

カテゴリ : Perl

6ページ目 / 全7ページ

XML::Parser

使用法

use XML::Parser;

my $parser = new XML::Parser(Style=>'Stream');
$parser->parsefile($ARGV[0]);

sub StartDocument {
	print qq(StartDocument\n);
}
sub EndDocument {
	print qq(EndDocument\n);
}

sub StartTag {
	print qq(StartTag $_[1]\n);
}
sub EndTag {
	print qq(EndTag $_[1]\n);
}

sub Text {
	print qq($_\n);
}

注意

  Textはテキストの開始と終了で呼び出される.
  StartTextとEndTextサブルーチンに分かれていればいいのに.

Reference

  XML-Parserモジュール (日本語チョウ訳)
  http://member.nifty.ne.jp/hippo2000/perltips/xml/parser.htm

多次元連想配列

Perl

%PREF = (
	'kyoto' => {
		'NAME'	 => '京都',
		'JINKOU' => '200万',
		'MEISAN' => '豆腐',
	},
	'osaka' => {
		'NAME'	 => '大阪',
		'JINKOU' => '500万',
		'MEISAN' => 'たこやき',
	},
);

$PREF{'kyoto'}{'NAME'} = 京都


PHP

$PREF = array(
	"kyoto" => array(
		"NAME"   => "京都",
		"JINKOU" => "200万",
		"MEISAN" => "豆腐",
	),
	"osaka" => array(
		"NAME"   => "大阪",
		"JINKOU" => "500万",
		"MEISAN" => "たこやき",
	),
);

$PREF["kyoto"]["NAME"] = 京都


Reference

  PHPマニュアル - 配列
  http://www.php.net/manual/ja/language.types.array.php

via

  PHP-users ML - 13954
  http://ns1.php.gr.jp/pipermail/php-users/2003-March/014486.html
  PHP-users ML - 13956
  http://ns1.php.gr.jp/pipermail/php-users/2003-March/014488.html

Unicode の Property を利用した正規表現

\p{Han}

  漢字にマッチ

\p{Hiragana}

  ひらがなにマッチ

\p{Katakana}

  カタカナにマッチ

Reference

  perl5.8のUnicodeサポート
  http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
  module.jp - 日本語に絡むUnicodeブロックとスクリプト (正規表現)
  http://module.jp/blog/regex_unicode_prop.html
  Script と実際のコードポイントとの対応表
  http://www.unicode.org/Public/UNIDATA/Scripts.txt

PAR - Perl のスクリプトから実行形式のファイルを生成

Summary

  Perl のスクリプトから実行形式のファイルを生成することができる.([2004-10-26] 追記: Windowsに限らない)
  PARファイル(zip)として必要なスクリプト,モジュールをパッケージ化できる.
  JavaのJARファイルのような使い方ができる.
  HTTPサーバ上にあるPARファイルをリモートから取得する機能があり,Java Web Startに近い使い方もできるらしい.

Reference

  PAR Homepage
  http://par.perl.org/
  Open Alexandria - PAR
  http://www.openalexandria.com/item_306.html
  いやな日記 - 2004-07-16
  http://namazu.org/~satoru/diary/20040716.html#p01
  Naney's Web Site - nDiki - PAR
  http://www.naney.org/diki/dk/PAR.html

via

  たつをのChangeLog - 2004-07-16
  http://chalow.net/2004-07-16.html#2004-07-16-3

Perl の真偽値

一覧

偽になるもの
空の文字列 "" ''
文字の0 "0" '0'
数値の0 0 0.0 3-3
空のリスト ()
未定義値
それ以外は真.

注意

  "0.0" は 真 (true)
  length() を用いて長さを得れば,文字列 '0' でも真となる.

Reference

perlsyn

連想配列の走査

キーでソート

foreach $key (sort(keys %hash)) {
	print "$key => $hash{$key}\n";
}


キーでソート (逆順)

foreach $key (sort {$b cmp $a} keys %hash){
	print "$key => $hash{$key}\n";
}


値 (数値) でソート (昇順)

foreach $key (sort { $hash{$a} <=> $hash{$b} } keys %hash) {
	print "$key => $hash{$key}\n";
};


値 (文字列) でソート (昇順)

foreach $key (sort { $hash{$a} cmp $hash{$b} } keys %hash) {
	print "$key => $hash{$key}\n";
};


値 (数値) でソート (降順)

foreach $key (sort { $hash{$b} <=> $hash{$a} } keys %hash) {
	print "$key => $hash{$key}\n";
};



値 (文字列) でソート (降順)

foreach $key (sort { $hash{$b} cmp $hash{$a} } keys %hash) {
	print "$key => $hash{$key}\n";
};

曜日を算出するには

Summary

  ツェラーの公式を利用する

サンプルソース 2000年1月1日の曜日を算出する

$y = 2000;
$m = 1;
$d = 1;
# 1月は13月,2月は14月とみなす
if ($m < 3) {
	--$y;
	$m+=12;
}
$w = ($y + int($y/4) - int($y / 100) + int($y/400) + int((13 * $m + 8) / 5) + $d) % 7;
print "\$w = $w\n";
# $w=6 つまり土曜日で正解です

Reference

  とほほのWWW入門 - ラウンジ - 2000年01月 - perlで曜日を算出するには
  http://tohoho.wakusei.ne.jp/lng/200001/00010015.htm

Shibuya Perl Mongers 1周年記念テクニカルトーク 発表資料

Summary

  Shibuya Perl Mongers 1周年記念テクニカルトークで発表された資料が閲覧できる!
  行きたかったイベントだけに嬉しい限り.

Reference

  Shibuya Perl Mongers : 1周年記念テクニカルトーク 発表資料とレビューリンク集
  http://shibuya.pm.org/blosxom/techtalks/techtalks_200310_slides_and_reviews.html

DBD/DBI モジュール と Data-ShowTable

インストール

# aptitude install libdbd-mysql-perl libdata-showtable-perl

- 使用法

use DBI;
$db  = DBI->connect('DBI:mysql:データベース名:サーバ名', ユーザー名, パスワード);
$sth = $db->prepare("SQL文");
$sth->execute;
$num_rows = $sth->rows;
print "該当 $num_rows 件\n";
for ($i = 0; $i < $num_rows; $i++) {
	@a = $sth->fetchrow_array;
	print "id=$a[0], name=$a[1] memo=$a[2] \n";
}
$sth->finish;
$db->disconnect;

Reference

@IT - Linux Square - 快速MySQLでデータベースアプリ! - 第4回 PerlでMySQL操作CGIを作ろう
http://www.atmarkit.co.jp/flinux/rensai/mysql04/mysql04a.html

変数に値が設定されていなかったら値を設定する

問題例

  $name が設定されていなかったら $name='nobodyさん';

解答例1

$name ||= 'nobodyさん';

  ただし $name = 0; のときも $name = 'nobodyさん'; となってしまう罠

解答例2

$name = 'nobodyさん' unless defined $name;


自分なら

if (!(defined $name)){
	$name = 'nobodyさん';
}

結局 好みみたい.

参考

  2ch - WebProg板 - Perl コーディング初心者質問コーナー Part28 - 326
  http://pc2.2ch.net/test/read.cgi/php/1063562491/326
  2ch - WebProg板 - Perl コーディング初心者質問コーナー Part28 - 335
  http://pc2.2ch.net/test/read.cgi/php/1063562491/335

Shibuya Perl Mongers

Summary

  Shibuya Perl Mongers は東京地区とくに渋谷周辺のインターネット関連企業に勤務している Perl ユーザのコミュニティ形成を目指す非営利の団体

主な活動内容

  プログラミング言語 Perl に関係するメンバー主催の勉強会やインターネット上での啓蒙活動や情報交換

Reference

  Shibuya Perl Mongers
  http://shibuya.pm.org/