たまにド忘れするので、書くうちに覚えるだろうと。
my $num = 123456;
my $digit1 = $num – int( $num / 10 ) *10
「スクリプト」カテゴリーアーカイブ
MySQL文のエスケープ
基本的に使うのはMySQLなので。
mysql_escape_string()は非推奨で、
mysql_real_escape_string()がお勧めだったのか。
バイナリ使わないから、あんまり関係ないみたいだけど、
非推奨だと無くなるかもしれないし、切り替えますか。
PHP:日付から曜日を求める
いい加減覚えないと。
PHPなら一発で出来る関数ありそうだけど。
$date = ‘2008-09-01’;
$wday = strftime( ‘%a’, strtotime( $date ) );
echo $wday;
> Mon
Perl:PerlMagickのannotateでrotateを指定する場合
図形をrotate する場合は普通に左下が始点だけど、
annotateのパラメータとしてrotateを使う場合は、
左のベースラインが基準になるので、微妙な位置に描かれてしまう。
ベースラインは文字の高さの12.5%の位置。つまり72ptなら
72 * 0.125 = 9
左下から9ptの位置になる。
しかしここを基準に回転させるので実際には、
72 – 9 = 63
63pt分、上にシフトさせてやれば希望の位置に収まる。
XML::Simpleのインストール
新しい環境を用意してます。
XML::Simpleはいつも怒られますね。
cpan> install XML::Simple
Running install for module XML::Simple
Running make for G/GR/GRANTM/XML-Simple-2.18.tar.gz
Is already unwrapped into directory /root/.cpan/build/XML-Simple-2.18
Makefile.PL returned status 65280
Running make test
Make had some problems, maybe interrupted? Won't test
Running make install
Make had some problems, maybe interrupted? Won't install
まぁ、よくわかんないので、yumのおまじないを唱えることにします。
perlのモジュール系でエラーが出たら、perl-[モジュール名]でインスコできることを最近知りました。
# yum install perl-XML-Simple
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
* base: ftp.nara.wide.ad.jp
* updates: ftp.nara.wide.ad.jp
* addons: ftp.nara.wide.ad.jp
* extras: ftp.nara.wide.ad.jp
base 100% |=========================| 1.1 kB 00:00
updates 100% |=========================| 951 B 00:00
addons 100% |=========================| 951 B 00:00
extras 100% |=========================| 1.1 kB 00:00
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package perl-XML-Simple.noarch 0:2.14-4.fc6 set to be updated
--> Processing Dependency: perl(XML::Parser) for package: perl-XML-Simple
--> Running transaction check
---> Package perl-XML-Parser.i386 0:2.34-6.1.2.2.1 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-XML-Simple noarch 2.14-4.fc6 base 68 k
Installing for dependencies:
perl-XML-Parser i386 2.34-6.1.2.2.1 base 210 k
Transaction Summary
=============================================================================
Install 2 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 278 k
Is this ok [y/N]: y
Downloading Packages:
(1/2): perl-XML-Simple-2. 100% |=========================| 68 kB 00:00
(2/2): perl-XML-Parser-2. 100% |=========================| 210 kB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: perl-XML-Parser ######################### [1/2]
Installing: perl-XML-Simple ######################### [2/2]
Installed: perl-XML-Simple.noarch 0:2.14-4.fc6
Dependency Installed: perl-XML-Parser.i386 0:2.34-6.1.2.2.1
Complete!
わーい、わーい
XML::LibXMLを使ってみる
XML::Simpleが遅いというか重いというか。
調べてみるとXML::LibXMLが便利らしい。
それなら使ってみようかと調べてみるが・・・
XML系モジュールのベンチマーク盗用記事しか見つからない。
まともに使い方を説明しているところが無かったので、ソースを読む羽目になる。
とりあえず、WCGのデータからLastUpdatedを取得する方法
my $parser = XML::LibXML -> new();
my $dom = $parser -> parse_file( $set{'target'} );
my $lastUpdated = ( $dom -> getElementsByTagName( 'LastUpdated' ) )[0] -> findnodes( '.' );
しかし命名法則としてXML::LibXMLはいいのだろうか。
PostScript::Simple(PerlでPostScriptのファイルを作成する)
ただの画像を作成するには、ImageMagickというツールがありますが、
印刷に関係する図形や文字を作成するには、適していません。
ページ記述言語であるPostScriptを利用することが出来れば、印刷にも利用できます。
なお、PostScriptで作成したものをImageMagickに変換するには、
GhostScriptというツールがありますが、日本語等の2バイト文字への扱いが不完全です。
使用したPostScript::Simpleモジュールのバージョンは0.07でした。
CPANには登録されていませんが、Windowsであれば、ppmからインストールできます。
はじめに
PostScriptは、ページ記述言語です。
これを利用することで、様々な図形などを記述することが出来ます。
座標や単位についての解説は、また後述しますが、
基本的に左下を0,0とし、右上に向かうほど大きくなります。
なお、PostScripの画像は、ImageMagickを利用して以下のコマンドでpng画像に変換してあります。
また、画像はトリミングしてありますので、ご注意ください。
一部オプションは文章の説明のみとさせていただいております。
convert sample.ps -trim sample.png
平行移動や回転、拡大縮小の使い勝手はあまりよくないといういか、
まだ未実装のようです。(バージョン0.07現在)
ただ、EPSファイルの埋め込みが出来ますので、その機能が必要で使用しました。
なお、モジュールで使用している変数に直接追加することで、補うことが出来ます。
末尾の改行を忘れると、PostScriptとして記述エラーになることがありますので、
必ず記述しておくようにしましょう。
$ps -> {'pspages'} .= "1.2 1 scale\n";
空のファイルを作成する
何も表示されない空のファイルを作成します。
use PostScript::Simple; $ps = new PostScript::Simple(papersize => "A4", colour => 1, eps => 0, units => "in"); $ps -> newpage; # ページ宣言 $ps -> output( 'sample.ps' ); # ファイル保存
直線を描く
線を引くには、始点と終点を指定します。
太さと色は、指定しなくても可能です。
引数は左から「始点のx座標」「始点のy座標」「終点のx座標」「終点のy座標」です。
また、色を直接指定することもできますが、継承されるので注意が必要です。
引数は先のものに、「r色の10進表記」「g色の10進表記」「b色の10進表記」を加えます。
use PostScript::Simple; $ps = new PostScript::Simple(papersize => "A4", colour => 1, eps => 0, units => "in"); $ps -> newpage; # ページ宣言 $ps -> setlinewidth( 0.01 ); # 線の太さを指定 $ps -> setcolour( 255, 0, 0 ); # 線の色を指定 $ps -> line( 1, 1, 3, 3 ); # 直線を描く $ps -> line( 2, 1, 1, 2, 0, 0, 255 ); # 色を指定して直線を描く $ps -> output( 'sample.ps' ); # ファイル保存
このようになります。

png画像、146×146ピクセル
折れ線を描く
折れ線を描くには、2通りの方法が用意されています。
一本ずつ個別に指定する
直線を引いた後に次の座標を指定します。
lineメソッドを利用しないままlinextendメソッドを呼び出すと、警告が表示されます。
太さと色は、指定しなくても可能です。
引数は継続して線を描く、「次のx座標」「次のy座標」です。
use PostScript::Simple; $ps = new PostScript::Simple(papersize => "A4", colour => 1, eps => 0, units => "in"); $ps -> newpage; # ページ宣言 $ps -> setlinewidth( 0.01 ); # 線の太さを指定 $ps -> setcolour( 255, 0, 0 ); # 線の色を指定 $ps -> line( 1, 1, 3, 3 ); # 直線を描く # 続きの線を描く $ps -> linextend( 2, 3 ); $ps -> linextend( 3, 2 ); $ps -> output( 'sample.ps' ); # ファイル保存
このようになります。

png画像、146×146ピクセル
一度に指定する
折れ線を描くには、直線を引いた後に次の座標を指定します。
lineメソッドを利用しないままlinextendメソッドを呼び出すと、警告が表示されます。
太さと色は、指定しなくても可能です。
引数は、「始点のx座標」「始点のy座標」「終点のx座標」「終点のy座標」です。
平行移動させるには、「offset => [ (x座標), (y座標) ]」オプション、
塗り潰すには「filled => 1」オプション、
回転させるには、「rotate => (角度)」オプションもあります。
use PostScript::Simple; $ps = new PostScript::Simple(papersize => "A4", colour => 1, eps => 0, units => "in"); $ps -> newpage; # ページ宣言 $ps -> setlinewidth( 0.01 ); # 線の太さを指定 $ps -> setcolour( 255, 0, 0 ); # 線の色を指定 $ps -> polygon( 1, 1, 2, 3, 3, 2, 2, 1, 1, 3 ); # 折れ線を描く $ps -> output( 'sample.ps' ); # ファイル保存
このようになります。

png画像、146×146ピクセル
四角形を描く
線を描くのと同じように、四角形を構成する始点と終点を指定します。
太さと色は、指定しなくても可能です。
引数は、「始点のx座標」「始点のy座標」「終点のx座標」「終点のy座標」です。
塗り潰すには「filled => 1」オプションがあります。
use PostScript::Simple; $ps = new PostScript::Simple(papersize => "A4", colour => 1, eps => 0, units => "in"); $ps -> newpage; # ページ宣言 $ps -> setlinewidth( 0.01 ); # 線の太さを指定 $ps -> setcolour( 255, 0, 0 ); # 線の色を指定 $ps -> box( 1, 1, 3, 3 ); # 四角形を描く $ps -> output( 'sample.ps' ); # ファイル保存
このようになります。

png画像、146×146ピクセル
円を描く
円を描くには、中心と半径を指定します。
太さと色は、指定しなくても可能です。
引数は、「中心のx座標」「中心のy座標」「半径の長さ」です。
use PostScript::Simple; $ps = new PostScript::Simple(papersize => "A4", colour => 1, eps => 0, units => "in"); $ps -> newpage; # ページ宣言 $ps -> setlinewidth( 0.01 ); # 線の太さを指定 $ps -> setcolour( 255, 0, 0 ); # 線の色を指定 $ps -> circle( 2, 2, 1 ); # 円を描く $ps -> output( 'sample.ps' ); # ファイル保存
このようになります。

png画像、146×146ピクセル
孤を描く
孤を描くには、中心と半径、そして開始角と終了角を指定します。
太さと色は、指定しなくても可能です。
引数は、「中心のx座標」「中心のy座標」「半径の長さ」「開始角度」「終了角度」です。
角度は右が始点、つまり座標では「(中心のx座標) + (半径の長さ), 中心のy座標」になります。
塗り潰すには「filled => 1」というオプションがありますが、
あらかじめ孤を描いておかないと利用できないなど、使い勝手がよろしくありません。
use PostScript::Simple; $ps = new PostScript::Simple(papersize => "A4", colour => 1, eps => 0, units => "in"); $ps -> newpage; # ページ宣言 $ps -> setlinewidth( 0.01 ); # 線の太さを指定 $ps -> setcolour( 255, 0, 0 ); # 線の色を指定 $ps -> arc( 2, 2, 1, 0, 270 ); # 孤を描く $ps -> output( 'sample.ps' ); # ファイル保存
このようになります。

png画像、146×146ピクセル
文字を描く
文字を書くには、フォントの指定が必要になります。
日本語を扱う場合には、特にフォントに関する知識が必要となります。
画像に変換する場合には、GhostScriptの設定が必要です。
インストールしたままの状態では、フォントが見つからないという警告が表示され、
画像に変換できませんので、注意してください。
設定の方法については、別に機会にいたします。
フォントの太さを指定するメソッドが別にありますので、線の太さを指定するメソッドは必要ありません。
配置を指定する「align => (left/center/right)」オプションと、
回転を指定する「rotate => (角度)」オプションがあります。
use PostScript::Simple; $ps = new PostScript::Simple(papersize => "A4", colour => 1, eps => 0, units => "in"); $ps -> newpage; # ページ宣言 $ps -> setcolour( 255, 0, 0 ); # 線の色を指定 $ps -> setfont( 'MS-Mincho-90ms-RKSJ-H', 36 ); # フォントをエンコード方法なども含めて指定 $ps -> text( 1, 1, 'ぺんラボ' ); # 文字はShift_JISで指定 $ps -> output( 'sample.ps' ); # ファイル保存
このようになります。

png画像、140×32ピクセル
解説していないメソッドについて
以下のメソッドについては、
モジュールの使い方というよりもPostScriptの解説になりますので、
このページではただいま解説は行っておりません。
詳しくは、PostScriptの解説を行っているサイトや、PostScript::Simpleモジュールをご覧下さい。
- newpage
- putput
- get
- geteps
- circletext
- curve
- curveextend
- newpath
- moveto
- importepsfile
- importeps
更新履歴
- 2008-06-22
- 一部のメソッドについて解説を追加
- 2008-06-15
- 公開
Date::Simple(Perlで日付の使いに困ったら)
日付は様々なフォーマットで表示され、その扱いの困ることも多いでしょう。
月を跨いだ期間を求める場合などが、その例です。
使用したDate::Simpleモジュールのバージョンは3.02でした。
便利なモジュールですが、Perlのバージョンが5.8の場合には、追加でインストールしなければいけません。
現時点ではインストール方法のみのご紹介となっております。
なお、Date::Simpleモジュールでは手に負えなかったり、時間を含む場合には、HTTP::Dateモジュールをお勧めします。
インストール方法
Windowsの場合
OSがWindowsの場合には、新しいバージョンのバイナリが用意されているので、ppmを利用してインストールできます。
ppm install Date-Simple
Linuxの場合
OSがLinuxの場合には、パッケージをダウンロードして手動でインストールを行うべきです。
なぜなら、CPANシェルからインストールできるものは、バージョンが古いままだからです。
また、CPANシェルを利用して通常の方法でインストールを行うと、以下のエラーメッセージが表示されるかもしれません。
なお、この状況は改善されるかもしれませんので、問題が確認された場合に活用してください。
Failed 1/1 test scripts, 0.00% okay. 1/227 subtests failed, 99.56% okay.
エラーメッセージが表示される場合には、以下の手順でインストールを行います。
「export LANG=C」という1行が必要です。
なお、この手順が必要だったOSがCentOS5.0でした。
make distclean perl Makefile.PL export LANG=C make test make install
Perlで10進数を変換する
10進の整数を変換する方法です。
10進数→2進数
packとunpackを利用する。
print unpack( 'B8', pack( 'C', 31 ) ); # 正値
00011111
print unpack( 'B8', pack( 'C', -31 ) ); # 負値
11100001
10進数→8進数
printfを利用する。
printf( '%o', 31 );
37
10進数→16進数
packとunpackを利用する。
print unpack( 'h3', pack( 'C', 31 ) );
1f
sprintfを利用する。
printf( '%x', 31 );
1f
10進数→文字列
packを利用する。
print pack( 'C', 97 );
a
packはまとめて利用することも出来ます。
print pack( 'C*', 97, 98, 99 ); print pack( 'C*', 227, 129, 130 );
abc あ # UTF-8の場合
更新履歴
- 2014-10-21
- 固定ページから投稿に変更
- 2008-06-13
- 公開
Net::FTP(PerlでFTPによるファイル送信を行う)
PerlでFTPを利用したい場合、Net::FTPモジュールを利用することになるでしょう。
Net::FTPモジュールについて、説明や翻訳ページは検索すれば沢山見つかります。
しかし、送信するときに重要な「転送モード」について、説明してあるところは多くありません。
なぜかというと、Net::FTPモジュールのドキュメントには転送モードについては記述されていないからです。
ということで、このページでは、転送モードについてご紹介したいと思います。
使用したNet::FTPモジュールのバージョンは2.77でした。
Perlのバージョンが5.8であれば、インストールされています。
使い方
何はともあれ、次のコードを見てください。
Net::FTPモジュールを使おうという方にとっては、コードを見たほうが簡潔だと思います。
use strict; use Net::FTP; # FTP設定 my %ftp = ( addr => 'exsample.com', # FTPアドレス user => 'user_name', # ユーザー名 pass => 'pass_word', # パスワード dir => '/public_html', # 送信先ディレクトリ ); my $ftp = Net::FTP -> new( $ftp{'addr'}, Debug => 0 ) or die; $ftp -> login( $ftp{'user'}, $ftp{'pass'} ) or die; # カレントディレクトリの変更 $ftp -> cwd( $ftp{'dir'} ); # アスキーモード $ftp -> type( 'A' ); # ファイルの送信 $ftp -> put( 'string.txt' ); # バイナリモード $ftp -> type( 'I' ); # ファイルの送信 $ftp -> put( 'image.jpg' ); # 接続切断 $ftp -> quit(); exit;
転送モードにアスキーを指定する場合は、typeに「A」を指定します。
$ftp -> type( 'A' );
転送モードにバイナリを指定する場合は、typeに「I」を指定します。
$ftp -> type( 'I' );
備考
ドキュメントに記載されていないという意味では、今後変更になるかもしれません。
また、ソースコードを読めば判りますが、バイナリを指定する「I」以外に「E」や「L」も用意されているようです。
おわりに
翻訳サイトだけを読んで満足してはいけないということです。
実際に使っているからこそ、気がつくこともあるのです。
疑問に思った事について検索はもちろんのこと、
実際に動作しているモジュールのソースコードに目を通してみましょう。
更新履歴
- 2008-06-03
- 公開