MT::FileMgrでファイルの読み書きとか。
公開日 : 2008-06-03 14:30:30
発端はこれ。
何か古い記事が再掲載されてるということであれこれツッコミが入ってますね。
- ベアワードのファイルハンドルをつかわない方がいい理由 - TokuLog 改めChumbyとどきました日記
- 404 Blog Not Found:perl - 勝手に添削 - Perl入門#1@ITPro
- Perl 2008年のファイルオープン - てっく煮ブログ
ベアワードのファイルハンドルはグローバルということですね。とはいえ、Googleとかで調べると実際出てくるのは比較的古いものが多いようで。
Movable Type(4.1)はどうしているんだろうと思って覗いてみたらみたらこんなコードが(App:CMSのcreate_dashboard_stats_file部分)。
local *FOUT;
if ( !open( FOUT, ">$file" ) ) {
return;
}
「local *FOUT;」とな。で、まぁそれは本題ではなくて、MTの場合はFileMgrを使うということなんだろうな。
use lib $ENV{MT_HOME} ? "$ENV{MT_HOME}/lib" : 'lib';
use MT;
use MT::FileMgr;
my $src = 'Hello FileMgr!';
my $updata = 'Hello FileMgr! (Updated)';
my $out = 'hello.txt';
my $put = 'put.txt';
my $rename = 'rename.txt';
my $dir = 'directory';
$out = File::Spec->catdir( $dir, $out );
$put = File::Spec->catdir( $dir, $put );
$rename = File::Spec->catdir( $dir, $rename );
my $fmgr = MT::FileMgr->new( 'Local' ) or die MT::FileMgr->errstr;
print $fmgr->mkpath( $dir );
# directoryを作成する (成功した場合「1」)
print "¥n";
print $fmgr->exists( $dir );
# directoryが存在するか (存在する場合「1」)
print "¥n";
print $fmgr->can_write( $dir );
# directoryが書き込み可能か (書き込み可能な場合「1」)
print "¥n";
print $fmgr->put_data( $src, $out );
# directory/hello.txt に 'Hello FileMgr!' を書き込む (戻り値はバイト数)
print "¥n";
print $fmgr->put( $out , $put );
# directory/put.txt に hello.txt の中身を書き込む (戻り値はバイト数)
print "¥n";
print $fmgr->content_is_updated( $out, ¥$updata );
# directory/out.txt の中身(Hello FileMgr!)と $updata(Hello FileMgr! (Updated)) を比較する (値が異なる場合「1」)
print "¥n";
print $fmgr->rename( $put, $rename );
# directory/put.txt を directory/rename.txt にリネームする (成功した場合「1」)
print "¥n";
print $fmgr->get_data( $rename );
# directory/rename.txt の内容をprintする
実行結果
1
1
1
14
14
1
1
Hello FileMgr!
MT::FileMgr->new( 'Local' ) のところ、 MT::FileMgr->new( 'FTP',@args ) (@argsにFTPホスト、ログイン名、パスワードを入れる)とFTPサーバー上のファイル読み書きができる(らしい。そうなんだ...知らなかった)。
参考: