perl -v
This is perl 5, version 32, subversion 1 (v5.32.1) built for x86_64-linux-thread-multi
(with 53 registered patches, see perl -V for more detail)
Copyright 1987-2021, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
この場合バージョンは v5.32.1 になります。
$out = array('aaa','bbb','ccc','ddd','eee');
eval 'use List::Util qw/shuffle/';
my @out2 = shuffle(@out);
これでランダムに並びかえられるので、スカラー値を1つ抽出したいときは
my $data = $out2[0];
でOKです。
cgiスクリプトを実行しようとすると Internal Server Error となり、error.log を見ると
Premature end of script headers
となっている時があります。
これはPerl が suexec で動くサーバだとたまにでる事がありますが、原因を特定することが
困難なため対処方法が非常にやっかい。
個人的には以下の作業でなおる事が多いのでメモ。
1. cgiスクリプトをバイナリモードでアップロードする。 2. 改行コードを「LF」(unix) にする 3. スクリプトの最後に「1; (改行)(改行)」を付け足す
それでも直らないときはこちら
1行目 #!/usr/bin/perl ↓ #!/usr/bin/perl - という風に半角スペースとハイフンを追加する
なお「ヘテムル」などのレンタルサーバでは .htaccess の内容が間違っていると 500 エラーとなることがあります。
こちらも要注意
結局CPANモジュールをダウンロードしている時間に下記コードをコピペした方が早い時があるので置いておきます。
my @wd = ("日","月","火","水","木","金","土");
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$year += 1900;
$mon += 1;
printf("今日は %04d 年 %02d 月 %02d 日(%s)\n",$year,$mon,$mday, $wd[$wday]);
printf("時刻は %02d 時 %02d 分 %02d 秒\n",$hour,$min,$sec);
■ HTML::TreeBuilder
http://search.cpan.org/~petek/HTML-Tree-3.23/lib/HTML/TreeBuilder.pm
HTML::TreeBuilder は本来 htmlパーサなのですが、閉じ忘れた htmlタグを自動で補完してしてくれる便利なオプションを発見したので紹介します。
サンプルソース
#!/usr/bin/perl -w print "Content-type: text/html;\n\n"; use strict; use lib qw( ./lib ); use CGI::Carp qw(fatalsToBrowser); use Data::Dumper; $Data::Dumper::Sortkeys = 1; use HTML::TreeBuilder; ### html2 タグの途中で切れてしまった validでない html my $html2=<<HTML; <html> <body> <h1>test</h1> <table> <tr> <td>test1</td> <t HTML my $tree = HTML::TreeBuilder->new; $tree->p_strict(1); $tree->parse($html2); $tree->dump; print "And here it is, bizarrely rerendered as HTML:\n", $tree->as_HTML, "\n"; $tree = $tree->delete;
と。これだけで閉じ忘れた $html2 を直してくれます。
便利!
Perlでテンポラリファイルを作成するときは
というモジュールを使用すると、安全な(衝突しない)ランダムなファイル名でテンポラリファイルを作成してくれます。便利。
■ 使い方
my($tmp_fh, $tmp_filename) = tempfile();
戻り値
$tmp_fh:オープンしたテンポラリファイルのファイルハンドル
$tmp_filename:オープンしたテンポラリファイルのファイル名
■ 使い方 例1
my($tmp_fh, $tmp_filename) = tempfile( DIR => './data/tmp' );
ディレクトリ ./data/tmp 以下にテンポラリファイルを作成します。
■ 使い方 例2
my($tmp_fh, $tmp_filename) = tempfile( TEMPLATE => 'file_XXXXXX' );
ファイル名 file_XXXXXX(Xのところはランダムな文字列)でテンポラリファイルを作成します。
■ 使い方 例3
my($tmp_fh, $tmp_filename) = tempfile(); close $tmp_fh;
0バイトのテンポラリファイルを作成して保存します。
◆ Text::Mecab
http://search.cpan.org/~dmaki/Text-MeCab-0.17/lib/Text/MeCab.pm
インストールはCPANから
perl -MCPAN -e shell install Text::MeCab
でインストール完了。(XSなのでコンパイルしないとインストール出来ません。)
コードはこんな風に書きます。
#! /usr/bin/perl -w
use strict;
use warnings;
use Text::MeCab;
my $m = Text::MeCab->new();
my $s = "日本語の形態素解析のテストを行ってみます";
my $n = $m->parse($s);
while ($n = $n->next) {
printf("%s?t%s?t%d?n",
$n->surface, # 表層
$n->feature, # 現在の品詞
$n->cost # その形態素までのコスト
);
}
実行結果
日本語 名詞,一般,*,*,*,*,日本語,ニッポンゴ,ニッポンゴ -569
の 助詞,連体化,*,*,*,*,の,ノ,ノ 5
形態素 名詞,一般,*,*,*,*,形態素,ケイタイソ,ケイタイソ 3062
解析 名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ 6884
の 助詞,連体化,*,*,*,*,の,ノ,ノ 7963
テスト 名詞,サ変接続,*,*,*,*,テスト,テスト,テスト 9944
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 9720
行っ 動詞,自立,*,*,五段・ワ行促音便,連用タ接続,行う,オコナッ,オコナッ 11787
て 助詞,接続助詞,*,*,*,*,て,テ,テ 10289
み 動詞,非自立,*,*,一段,連用形,みる,ミ,ミ 15340
ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス 12780
BOS/EOS,*,*,*,*,*,*,*,* 10261
htmlファイルなどから不要なタグを除去したい事があります。
正規表現で記述してもいいのですが、<script>タグが入れ子になっている場合などに対応できません。
そこで
CPANモジュールの
◆ HTML::Scrubber
http://search.cpan.org/dist/HTML-Scrubber/Scrubber.pm
を利用します。
◆ HTML::Scrubber のインストール
例によって
perl -MCPAN -e shell
で cpanシェルに入ってから
install HTML::Scrubber
でインストールします 。
◆ 使い方
使い方はいたってシンプル。
$htmlという変数に htmlページの内容が入っている場合は
use HTML::Scrubber; my $scrubber = HTML::Scrubber->new(); print $scrubber->scrub($html);
として使用します。
簡単、便利。
■1. DBIx::Classのインストール
例によってCPANコマンドでインストールします。
unixのシェルから
perl -MCPAN -e shell cpan > install DBIx::Class cpan > install DBIx::Class::Schema::Loader
でOK。
(何か入力が促されたらそのままEnterを押せばいいです)
■ 2.テーブルスキーマの自動生成
unixのシェルでプログラムを作成するディレクトリに移ってから
perl -MDBIx::Class::Schema::Loader=make_schema_at,dump_to_dir:./lib -e 'make_schema_at "Hoge::Schema", {relationships => 1, debug => 1}, ["dbi:mysql:hoge","user","password"]'
でディレクトリ「lib」が自動生成され、そのなかにテーブルスキーマのクラスファイルが
自動生成されます。
上記例は DBタイプ:mysql DB名:hoge DBユーザー名:user DBパスワード:password 生成されるクラス名:Hoge です。(適宜書き換えること)
参考:http://d.hatena.ne.jp/amachang/20061010/1160495437
■ 3.リレーションの設定
例として 【1対多】のリレーションを設定してみます。
「./lib/Hogehoge/Schema/」の中の【テーブル名.pm】をそれぞれ開いて下記の通り追加します。
◆1 【1対多】の「1」の方のテーブルには
__PACKAGE__->has_many(
class => 'Hogehoge::Schema::Test2Dt', 'data_id'
);
◆2 【1対多】の「多」の方のテーブルには
__PACKAGE__->belongs_to(
class => 'Rss::Schema::Test1Dt' , { 'data_id' => 'data_id' }
);
と記述します。
■ 4. 実行テスト用Perlファイルの作成
test.pl を下記のように作成します。
#!/usr/local/bin/perl
use strict;
use Data::Dumper;
use warnings;
use lib qw(./lib);
use Hoge::Schema;
# DB接続
my $schema = Hoge::Schema->connect("dbi:mysql:hoge", "user", "password");
# utf8 対応
$schema->storage->dbh->do("SET names utf8");
# 実際に実行するSQL文を STD_ERR に表示させるようにする。
$ENV{DBIC_TRACE} = 1;
my $rs = $schema->resultset('Test1Dt')->search;
while (my $row = $rs->next) {
print Dumper($row);
print Dumper($row->class);
}
実行してみます
perl test.pl
参考:http://blog.mag2.com/m/log/0000222814/108463283.html
参考:http://www.ornithopter.jp/archives/2006/10/dbixclassdbic_d.html
PHPのテンプレートエンジン Smarty には foreachelse という便利な構文があります。
{ foreach from=$item_loop key="key" item="value"}
id: {$value.id}
{foreachelse}
データがありません
{/foreach}
これをTemplateToolkitで実現するには
[%FOREACH value=itemloop%] id:[%value.id%] [%END%] [%UNLESS itemloop.0%]データがありません[%END%]
と記述します。
HTML::Fillinformは有名ですが、TTで使えるプラグインがあるみたいです。
http://search.cpan.org/~miyagawa/Template-Plugin-FillInForm-0.04/
まだまだPerl5.6以下の環境では使う事が多い、HTML::Template。
少しでも開発効率を上げるためにプラグインを調べてみる。
◎HTML::Template::Ex
<TMPL_EX>perlコード</TMPL_EX> という書き方ができる。
<TMPL_SET NAME='...' value='...'> で値のセットが可能 (TMPL_VAR で参照できる)。
TMPL_LOOP で参照可能な TMPL_SET も可能。
<TMPL_VAR NAME="env_http_referer"> などと環境変数の参照が可能。
◎HTML::Template::Expr
TMPL_IF で真偽以上の判定が可能。
<TMPL_IF EXPR="banana_count > 10">ほげ</TMPL_IF>
TMPL_VAR で値の加工が可能。
<TMPL_VAR EXPR="sprintf('%d', foo)">
関数が使用可能
<TMPL_IF EXPR="myfunc('hoge')">
myfunc の中で TMPL_VAR は使えるのか?
◎HTML::Template::HTX
◎HTML::Template::HashWrapper
param で指定するのではなく、new で全パラメータを
指定できるようにする。
参考:http://68user.blog27.fc2.com/blog-entry-28.html
検索エンジン等の入力で「Perl テスト 方法」と入力すると「Perl」「テスト」「方法」全てにマッチする結果が表示されるが、こういうのをやっているcpanモジュール探してみたのだけれど見つからなかったので、簡単に書いてみる(超簡易バージョン)
# usage
# listmatch($data,$search_str_not_separated);
# listmatch(検索されるデータ(文字列), スペースで区切られた検索したい単語(文字列))
# 戻り値 1:マッチした 0:マッチしない
sub listmatch{
my ($data, $search_str_not_separated)=@_;
$search_str_not_separated=~s/ / /g;
my @search_list=split(/?s/,$search_str_not_separated);
my $s; my $flag=1;
foreach $s(@search_list){
unless($data=~m/?Q$s?E/i ){ $flag=0; }
}
if ($flag==1){ return 1; }
else { return 0; }
}
入力されたデータのタグをエスケープするには例えば下記のようなルーチンで
やったりしますが
sub escape_tag() {
my ($str) =@_ ;
return unless(defined $str);
$str =~s/&/&/g;
$str =~s/</</g;
$str =~s/>/>/g;
$str =~s/"/"/g;
$str =~s/,/,/g ;
return $str;
}
これだと全てのタグがエスケープされてしまいます。
そこで特定のタグ(例えば<a> <img>)のみエスケープしないようなモジュールがCPAN
にないかと探したところ。。。
こんなの発見
■ HTML::EscapeEvil (Testクリア 6件)
http://search.cpan.org/~holly/HTML-EscapeEvil-0.05/
■ Tripletail::TagCheck (Testクリア なし?)
http://search.cpan.org/~mikage/Tripletail-0.17/lib/Tripletail/TagCheck.pm
■ Template-Toolkitを使う場合は
http://logic.moo.jp/memo.php/archive/318/
[% USE TagRescue %]と最初に書いて
[% FILTER html_except_for('b') -%]
Bold! and Italic!
[%- END %]
# Output:
# Bold! and Italic!
[% 'Bold! and Italic!
' | html_except_for('i','br') %]
# Output:
# Bold! and Italic!
[% taglist = ['b', 'br']; 'Bold! and Italic!
' | html_except_for(taglist) %]
# Output:
# Bold! and Italic!
【Template-Toolkit】(以下TT)をメインで使っていても、サーバ上のPerlのバージョンが低いとどうしても【HTML::Template】を使わざるをえなくなるときがある。
逆に普段【HTML::Template】だがTTの方が便利だという噂を聞いて使ってみたいという人がいるかもしれない…。
という事で TT <-> HTML::Template のテンプレートファイルの変換方法。
■1.変数
TTのテンプレートファイル内での変数記述方法は
[%data%]
HTML::Templateのテンプレートファイル内での変数記述方法は
%data%
簡単。(両サイドのカッコをトルだけ)
(※注 HTML::Template をnew するときに『vanguard_compatibility_mode => 1』とする必要がある。)
■2.ループ
TTのテンプレートファイル内でのループ記述方法は
[%FOREACH value=itemloop%] [%value.data%] [%END%]
HTML::Templateのテンプレートファイル内でのループ記述方法は
<!--tmpl_loop name="itemloop"--> %data% <!--/tmpl_loop-->
簡単!。
■3.条件分岐
HTML::Templateの条件分岐は値が「TRUE」か「FALSE」しか判断できないので
TTでこれ以外の条件分岐を行っているときはあきらめる。。。
「TRUE」「FALSE」でのみ条件分岐を行っているときは
TTのテンプレートファイル内での条件分岐記述方法は
[% IF file_1 != '' %] <img src="[%file_1%]"> [% END %]
HTML::Templateのテンプレートファイル内での条件分岐記述方法は
<!--TMPL_IF NAME="file_1"--> <img src="%file_1%"> <!--/TMPL_IF-->
Template-Toolkit(以下TT)での
一般的なループのさせ方は
[%FOREACH value=loop%] 名前は:[%value.name%]です。 [%END%]
このループのループ回数を利用して何か処理をしたい場合は予約オブジェクト「loop」というのが使用できる。
loop.size リストの要素数
loop.max 最後の要素のインデックス (size - 1)
loop.index 0からmax()のうちの、現在の繰り返し処理のインデックス
loop.count 1からsize()のうちの、現在の繰り返し処理のカウント(index() + 1)
loop.first 現在の処理が一番最初の処理であれば真
loop.last 現在の処理が一番最後の処理であれば真
loop.prev リストのうち、一つ前のアイテムを返す
loop.next リストのうち、一つ次のアイテムを返す
では、この変数を用いて「3回繰り返すごとに改行タグを入れる」といった
処理はどう行うかというと
[%FOREACH value=loop%] 名前は:[%value.name%]です。 [%IF (loop.count mod 3)==0 %]<br>[%END%] [%END%]
※注意
○ [%IF (loop.count mod 3)==0 %] × [%IF (loop.count%3)==0 %]
なので注意。
http://search.cpan.org/~autrijus/YAML-Syck-0.01/lib/YAML/Syck.pod
hoge: aaa: value1 bbb: value2 mage: aaa: value1 bbb: value2 これは、こう書ける。 hoge: &hoge aaa: value1 bbb: value2 mage: <<: *hoge
またはこうも書けます
mage: *hoge
PHPには配列の要素にある値が存在するか確認する in_array() という関数があるのですが、
Perlには標準ではないので下記に書いてみます。
sub in_array() {
my ($val,$array_ref) = @_;
foreach my $elem(@$array_ref) {
if ($val=~m/^[0-9]+$/){
if ($val == $elem) { return 1; }
}
else{
if ($val eq $elem) { return 1; }
}
}
return 0;
}
■ 使い方
in_array("検索したい値", 配列へのリファレンス); とします
my @array=('apple','blueberry','orange');
my $data='apple';
if ( in_array( $data, ?@array) ){
print ("$dataはすでに配列の中にあります");
}
まず最初にCPANの設定を行う。コマンドラインから次のように打ち込む
perl -MCPAN -e shell
いろいろと設定の質問をされるが基本的に[enter]をそのまま押していくだけでよい。 地域と国を聞かれたら Asia Japan を選択しておけばOK!
CPANのインストールが完了したら
install モジュール名
(例: install Jcode)
でモジュールがインストールできる。(その時に必要なモジュールがあった場合も自動的にインストールされる) 便利!!
インストール済みのCPANモジュールを表示させるには
cpan -a
とする
cpanを再設定するには cpanシェルから
o conf init
MacOSXにインストールするときはあらかじめ「デベロッパーツール(Xcode Tools)」をインストールしておくこと。
Perl::Tidy
http://search.cpan.org/~shancock/Perl-Tidy-20060719/
インストールは Per-Tidy-2xxxxxxx.tar を解凍して
perl Makefile.PL make make install
で完了
インストールするとシェルコマンドもインストールされる
perltidy -b -dac xxxxxxx.pl
参考:http://d.hatena.ne.jp/toton/20050613
文字コードをUTF8にするフィルターをかます場合
use strict;
use HTML::Template;
use Jcode;
my $t = HTML::Template->new(
filename => 'my.t',
filter => sub { Jcode::convert(shift,'utf8') },
);
だそう。便利。
詳しくはこちら:http://d.hatena.ne.jp/charsbar/20051229/1135864604
use CGI::Application::Plugin::Redirect;
return $self->redirect('http://www.example.com/');
参考:http://blog.nomadscafe.jp/archives/000468.html
便利なプラグイン:
Template::Plugin::TruncateJp
http://search.cpan.org/search?query=TruncateJp&mode=all
Template::Plugin::Filter::HTMLScrubber
Template::Plugin::Clickable
なお文字列の連結はダブルクォーテーションでかこう。
[%hoge%]-----[%fuga%] ↓ [% "$hoge-----$fuga" %]
ダウンロードはThe CPAN Search Site - search.cpan.orgからどうぞ
参考:
(フィルタ機能一覧)http://www.template-toolkit.org/docs/default/Manual/Filters.html
(配列へのアクセス)http://www.drk7.jp/MT/archives/000867.html
参考:http://cyberlib.enterbrainz.com/1167736804.html
■ データベースへのデータのINSERT my $obj = Class->insert(¥%data); ■ データのSELECT(オブジェクトを返す) $obj = Class->retrieve( $id ); $obj = Class->retrieve( %key_values ); ■ データのSELECT(全件の配列を返す ※使ってはダメ) @cds = Music::CD->search(year => 1990); @cds = Music::CD->search(title => "Greatest Hits", year => 1990); ■ Pagerを使ったデータのSELECT use Class::DBI::Pager; my $pager = Object->pager(20,1);#(1ページの個数,ページ) my @page1 = $pager-> retrieve_all
ドキュメント:http://search.cpan.org/dist/Class-DBI/lib/Class/DBI.pm
日本語訳:http://bulknews.net/lib/doc-ja/Class-DBI.ja.html
関連モジュール:http://blog.nomadscafe.jp/archives/000457.html
Class::DBI::Iterator
http://search.cpan.org/~tmtm/Class-DBI-v3.0.14/lib/Class/DBI/Iterator.pm
Class::DBI::Plugin::Iterator
http://www.annocpan.org/~ASAKURA/Class-DBI-Plugin-Iterator-0.11/lib/Class/DBI/Plugin/Iterator/Nihongo.pod
Class::DBI::View
http://search.cpan.org/~miyagawa/Class-DBI-View-0.07/lib/Class/DBI/View.pm
Class::DBIとTime::Piece
perl -M「モジュール名」 -e 'print $「モジュール名」::VERSION'
perl -MDBI -e 'print $DBI::VERSION'
cgiパラメータを %form に代入するには以下のようにする
■1. ReadParseを使う(古い)
use CGI qw/:cgi-lib/; &CGI::ReadParse(?%form);
■2. param() を使う
use CGI;
my $query = CGI->new;
foreach ($query->param() ){
$form{$_}=$query->param($_);
}
■3. Vars() を使う
use CGI qw(Vars); %form=Vars();
Ver2.7日本語訳:http://homepage3.nifty.com/hippo2000/perltips/Cgi.htm#SETTING_THE_VALUE_S_OF_A_NAMED_
参考:http://d.hatena.ne.jp/naoya/20051116/1132106196
日本語訳:http://digit.que.ne.jp/files/perldoc/CGI-Application-4.04/Application.htm
■CGI::Application で path_info を渡す
PATH_INFO で、run_mode 判定は、mode_param() メソッドに、path_info=> 1 って渡してあげると自動的にそっちで判定するみたいです。
$webapp->mode_param( path_info=> 1, param =>'rm' );
確かにこれでいけます。
ただし ランモード以外のCGIパラメータは下記のように記述するみたい。
webapp.cgi/list_mode/?category=category01
と記述すると
webapp.cgi?rm=list_mode&category=category01
と記述したのと同じ動作になります
参考:http://blog.nomadscafe.jp/archives/000474.html
File::Pathのrmtreeを使用する
use File::Path
my $num = rmtree('/home/test/dir');
参考:http://hail2u.net/blog/coding/file-path_module.html
use Net::Ping;
my $host="192.168.0.1";
my $timeout=0.1;
my $p = Net::Ping->new("icmp");
if $p->ping($host, $timeout){
print "$host is alive.?n";
}
$p->close();
root ユーザになれる環境でないと実行できないみたい
引用元:http://www.augustus.to/blog/3128/archives/000042.html
■ アバウトなプログラム実行時間の取得
my($starttimes_user) = (times())[0]; # 実行時間を計測したい処理をここに記述 my($endtimes_user) = (times())[0]; my $exectimes_user=$endtimes_user-$starttimes_user; print "[$exectimes_user]秒";
■ 詳細なプログラム実行時間の取得
use Time::HiRes qw(gettimeofday); my ($sec, $microsec) = gettimeofday; printf "%d %d?n", $sec, $microsec;
HTML::Parser ( http://search.cpan.org/~gaas/HTML-Parser/ )
http://homepage3.nifty.com/hippo2000/perltips/html/LinkExtor.htm
http://homepage3.nifty.com/hippo2000/perltips/html/Parser.htm
http://www.geocities.co.jp/SiliconValley-Sunnyvale/6128/perl/htmlpaser.html
#!/usr/local/bin/perl
$|=1;
use strict;
use lib qw(./extlib);
my $start_uri='http://www.yahoo.co.jp/';
my $base_uri=$start_uri;
require HTML::LinkExtor;
my $p = HTML::LinkExtor->new(?&cb, $base_uri);
sub cb {
my($tag, %links) = @_;
print "[tag:$tag] [link:@{[%links]}]?n";
}
my $data=`curl $start_uri`;
$p->parse($data);
$p->eof
use module;
require module.pm
eval "use module";
■ DateTime
use DateTime; my $dt = DateTime->today; print $dt->ymd; print $dt->add(months => +1)->ymd;
■ Time::Piece (内部でDatetimeがrequireされているもよう)
http://d.hatena.ne.jp/naoya/20051031/1130710931
#!/usr/local/bin/perl
use strict;
use warnings;
use Time::Piece;
my $lt = localtime;
printf "%s %s?n", $lt->ymd('/'), $lt->hms;
■ Date::Pcalc
Perlしか使えない環境なら(Pure Perl)モジュールを使用する
使いやすくもあるので個人的にはおすすめ。
use Date::Pcalc;
my($t_year,$t_month,$t_day) = &Date::Pcalc::Today();
my($hour,$min,$sec) = &Date::Pcalc::Now();
my($year,$month,$day, $hour,$min,$sec) = &Date::Pcalc::Today_and_Now();
my $datetime=sprintf("%04d%02d%02d%02d%02d%02d",$year,$month,$day, $hour,$min,$sec);
ある日(2008/12/10)の2ヶ月後の日付を求めるには
my($t_year,$t_month,$t_day) = &Date::Pcalc::Add_Delta_YMD(2008,12,10, 0,2,0);
ある日(2008/12/10)の60日後の日付を求めるには
my($t_year,$t_month,$t_day) = &Date::Pcalc::Add_Delta_YMD(2008,12,10, 0,0,60);
曜日の数字を求めるには・・・・・
my $dow = &Date::Pcalc::Day_of_Week(&Date::Pcalc::Today()); #1〜7の数が返る
my $dow = &Date::Pcalc::Day_of_Week($year,$month,$day);
my $youbi = ('dummy', '月', '火', '水', '木', '金', '土', '日' )[$dow]; # 曜日を取得
日付の比較(どちらの日付が古いか?)を行うには
my $days = Date_to_Days($year,$month,$day)
my $days2 = Date_to_Days($year2,$month2,$day2)
if ( $days < $days2 ){
'days2の方が新しい日付です';
}
Date::Pcalcのマニュアル↓
http://search.cpan.org/dist/Date-Pcalc/Pcalc.pm
■ Date::Simple (非XS環境では自動的にpureperl版を呼び出すもよう?)
文字通り超シンプルでわかりやすい。
http://search.cpan.org/search?query=date%3A%3ASimple+&mode=all
日本語訳:http://perldoc.jp/docs/modules/Date-Simple-2.03/Simple.pod
use Date::Simple;
my $today = Date::Simple->new();
my $tommorow = $today->next;
my $yesterday = $today->prev;
# 曜日の出力
print(('Sun','Mon','Tues','Wednes','Thurs','Fri','Satur')[$today->day_of_week]);
ただし
Date::Simpleは、時分秒、時間帯は取り扱いません。
です。
1.「.pm ファイルのルーチン記述前に下記3行を追加」
use AutoLoader 'AUTOLOAD'; 1; __END__
2.「コマンドラインから以下のコマンドを実行」
perl -e 'use AutoSplit; autosplit($ARGV[0], $ARGV[1], 0, 1, 1)' xxxxxxxxxx.pm auto
参考
http://www-06.ibm.com/jp/developerworks/linux/041119/j_l-optperl.html#IDAR0RUF
■File::Copyモジュールを使用する。
■ファイルのコピー
use File::Copy; copy "foo.txt", "bar.txt";
■ファイルの移動
use File::Copy; $foo = '/home/yokota/hoge.txt'; $bar = '/tmp/hoge.txt'; move $foo, $bar;
ハッシュへの挿入順序を覚えておくようにするには以下のモジュールを使用します
http://search.cpan.org/search?query=Tie%3A%3AIxHash&mode=all
use Tie::IxHash tie %hash, "Tie::IxHash"; # 後は通常の代入でOK!