約 2,967,601 件
https://w.atwiki.jp/janexeno/pages/78.html
URLExec.dat † 強制的に再読み込みさせるには † Nida080105 設定を「よろし」で閉じたとき、ReplaceStr.txt/URLExec.datが更新されて いれば再読み込みするようにした(元ネタ JaneStyle) 仕様 † -------------------- 以下JaneStyle.txtから引用 -------------------- ・条件が一致するURLをURLクリック・マウスオーバーで外部プログラムに送る機能を追加 URLやファイル名、拡張子ごとに個別のアプリケーションを起動させる事が出来ます。 Jane Styleをインストールしたフォルダに「URLExec.dat/URLExec2.dat」があれば 起動時にこれらを読み込み、この機能を有効にします。 ※SHIFTキー押下時はこの機能を一時的に無効にします。 =========================================================================== URLExec.dat…URLクリック時に機能を動作させるのに必要なファイル URLExec2.dat…URLマウスオーバー時に機能を動作させるのに必要なファイル =========================================================================== ・URLExec.dat/URLExec2.datの書式(正規表現を使用) URLマッチングパターン[TAB]置換パターン[TAB]開くコマンド ※[TAB]はキーボードの【Tab】キーでインデントして下さい。 ・コマンドに使用可能な置換文字列 $URL 置換後のURL $BASEPATH アプリケーションのフォルダ $POSX マウスのX座標 $POSY マウスのY座標 ・記述例 =========================================================================== 例:http // で始まり.zipまたは.lzhで終わるアドレスをIrvineで開く http //.+\.(zip|lzh)$[TAB]$ [TAB]"C \Program Files\irvine\irvine.exe" $URL swfファイルをFlash Player EXで開く http //.+\.(swf)$[TAB]$ [TAB]"C \Program Files\FlashPlayerEx\fpex.exe" $URL YouTubeの動画をTubePlayerで開く http //(? www\.)?youtube\.com/watch\?v=[TAB]$ [TAB]"C \Program Files \TubePlayer\TubePlayer.exe" $URL =========================================================================== --------------------------- 引用終わり ---------------------------- 以上はNida070419より搭載。 ・URLExec.datのコマンドで使用可能な置換文字列に「$BROWSER」を追加。 設定の「ブラウザを指定する」がオンならば指定した「ブラウザのパス」、 オフならば標準ブラウザのパスで$BROWSERを置換する(元ネタ JaneStyle) ・設定を「よろし」で閉じたとき、ReplaceStr.txt/URLExec.datが更新されて いれば再読み込みするようにした(元ネタ JaneStyle) 以上はNida080105より搭載。
https://w.atwiki.jp/atwikimyj/pages/39.html
本当にいまさらなのだが、パスワードはハッシュで保存しないとだめよ。 平分で通信、保存なんて絶対ダメよ。 ということで、ハッシュ化。 cpan使います。 install Digest でDigestをインストール。 perl スクリプトで use Digest SHA1; my $pwd_hash = sha1_hex($pwd); これで終わり。 http //www.slogical.co.jp/tech/perl_digestsha1.html
https://w.atwiki.jp/atwikimyj/pages/40.html
普通の変数とは違い、メモリのアドレスの値を やり取りして効率のよいデータの参照を行うこと。 $a = $hoge; だと$hogeの分だけメモリを使う。そのため$hogeが 巨大だとその分無駄にメモリを使用することになる。 そこで、$hogeが保存されているアドレスの値を使って 効率的に値を参照させる。 $ref = $hogeのメモリのアドレス; ならば、$hogeがどんなに大きな文字列でもそのアドレスの値の 分しかメモリを消費しない。つまり処理速度も速くなる。 スカラーではあんまり使い道がないかもしれないが、 ハッシュなどでは威力を発揮する。 @hogearray = ( $hoge1, $hoge2 , $hoge3 ); と代入するととっても無駄なのでリファレンスを使うと いいかもしれません。 @hogearray = ( \$hoge1, \$hoge2 , \$hoge3 ); ※あとからリファレンスを実際の値に戻さないといけないけど。 リファレンスを変数に代入する方法 $ref_hoge = \@hoge; ちなみに、リファレンスを画面に表示させると print $ref_hoge HASH(X898303) のような表示になる。上記はハッシュリファレンスの場合。 普通のスカラー変数の場合は SCHOLAR(X898303) などとなる。値取れなくて困ったら printで値をとりましょう。 リファレンスから値を変数に代入する方法 リファレンスの値の取得方法は スカラー、オブジェクトの場合 $hoge = $$ref_hoge 配列の場合は @hoge = @$ref_hoge ハッシュの場合は %hoge = %$ref_hoge リズムファクトリー http //www.rfs.jp/sb/perl/02/10.html
https://w.atwiki.jp/sevenlives/pages/250.html
Perl 読み:ぱーる 英語:Perl, Practical Extraction and Report Language 別名: 意味: パールとはLarry Wall?氏が開発したインタプリタ?のプログラミング言語のこと。 テキストの検索、レポートの作成などを目的として作られたため、強力な正規表現を備えており、テキストの成形には抜群の威力を発揮する。 またインターネットの技術にはテキストベースの技術が多いためCGIに最も適した言語として広く使われるようになった。 最近ではwebの開発言語はPerlに変わってwebの機能に絞った専用の言語で容易な開発が可能なPHPなどに成り代わってきているがそれでもまだまだ現役で活躍できる柔軟性のある言語である。 C言語?やシェルスクリプト?に似た文法でUNIX系のコンピュータを使い慣れている人には使いやすい。 「CPAN」など多くのライブラリが充実しており、ほとんどの汎用な機能が手に入れられる。 一つのプログラムに対して書き方が何種類もあり、正規表現など記号も多いので洗練されたコードは短縮できる反面、可読性に乏しいといわれる。 したがって少人数の開発に向いている。 2009年11月10日 CGI TMTOWTDI? Larry Wall? ヒア・ドキュメント? スカラー変数 配列(perl) ハッシュ(perl) 特殊変数(perl)?デフォルト変数 コンテキスト(perl) ファニー文字 RTTI? サブルーチン 型グロブ? package? 名前空間 ローカル変数(perl)? グローバル変数(perl)? レキシカル変数(perl)? パッケージ変数(perl)? クロージャ(perl)? 条件分岐(perl)? 繰り返し(perl) リファレンス(perl) デリファレンス(perl) POD? コア・モジュール(Perl)? CPAN mod perl? ActivePerl pod? perlxs PerlIOレイヤ UTF8フラグ? コマンドライン・ハッシュ? 演算子(Perl) ■ モジュール(Perl) .pm? @EXPORT? @ISA? Exporter? プラグマ・モジュール ■ オブジェクト指向(Perl)? bless? インボカント? プライベート・メソッド? 間接オブジェクト構文? インサイドアウトオブジェクト? ■ ファイル ファイルハンドル? format(perl)? ■ 入出力 STDIN STDOUT? ■ 正規表現【RegExp】 マッチ メタキャラクタ ■Perlフレームワーク Catalyst?
https://w.atwiki.jp/karate405/pages/18.html
Perl module checker #!/bin/sh PERL_MODULE_LIST="/Template /AppConfig /Text/Wrap /File/Spec /Data/Dumper \ /DBD/mysql /DBI /Date/Parse /CGI/Carp /GD/ /Chart/Base \ /XML/Parser /MIME/Parser" find_perl_modules() { find `perl -e foreach(@INC){ next if( ! -d $_); print "$_ " unless /^\.$/} ` -name *.pm -print|grep "$1" /dev/null if [ $? -ne 0 ]; then echo "not found $1"; fi } for W in $PERL_MODULE_LIST do find_perl_modules $W done http //hp.vector.co.jp/authors/VA013241/webapp/bugzilla/freebsd51.html
https://w.atwiki.jp/studymcl/pages/34.html
Perl Perl perl_5.6.1-8.3-5_arm.ipkをインストール。 (このパッケージには,以下のモジュールが既に含まれている) libCGI-perl_5.6.1-2.97_arm.ipk libClass-perl_5.6.1-030721_arm.ipk libFile-perl_5.6.1-030721_arm.ipk libTime-perl_5.6.1-030721_arm.ipk インストール後に「インストールエラー」と出て「このソフトウェアは、他のソフトウェア(ライブラリなど)を必要としています~」とあるが無視してOK。 正しくインストールされていれば,次のコマンドでPerlのバージョン情報が出る。 bash-2.05$ perl -v This is perl, v5.6.1 built for arm-linux Copyright 1987-2001, 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.com/, the Perl Home Page. Perl実行時に以下のようなwarningが出ることがある。 perl warning Setting locale failed. perl warning Please check that your locale settings LANGUAGE = (unset), LC_ALL = (unset), LANG = "ja" are supported and installed on your system. perl warning Falling back to the standard locale ("C"). 実害はないが,気になる場合は「/home/zaurus/.bashrc」と「/home/root/.bashrc」に以下を追加する。 export PERL_BADLANG=0 (これだけではエラーがなくならなかったので,パーミッションを775に変えてみたがどうなんだろう……) Perlの実行 /home/zaurusにhello.plを作る。 # vi ./hello.pl my $message = "Hello, World!\n"; print $message; これを実行。 $ perl hello.pl Hello, world! 次に,ファイル名だけで実行するようにする。 !#/usr/bin/perl my $message = "Hello, World!\n"; print $message; とし, # chmod 775 ./hello.pl でパーミッションを与えて実行すると $ ./hello.pl Hello, world! これでOK。 CGI実行環境 Apacheを参照。 ref ハッキングLinuxザウルス Walrus, Visit.さん
https://w.atwiki.jp/prepress-tips/pages/139.html
最終更新日時: 2009/06/24 サクラエディタ の アウトライン解析 を使う ieから日本語perlスクリプトを使う perlスクリプトを exeにする( PAR-Packer ) ieから日本語perlスクリプトを使う その2 Edit サクラエディタ の アウトライン解析 を使う 数百行程度のperlスクリプトの構造をすばやく把握するために サクラエディタのアウトライン解析が とても役立つ。ルールファイルを作って 適当なところに置き、設定-タイプ別設定-アウトライン解析方法 で選ぶ。 F11キーで アウトライン解析を実行する( escキーで閉じる )。 ルールファイル #--- /// lv3 #-- /// lv2 #- /// lv1 sub /// lv4 サンプルスクリプト # find_cols.pl #- このプログラムの目的は? # 指定されたpdfを 1頁ずつpsに変換し # 色情報を抽出して ファイルに保存する。 #- プログラムの構造は? #-- pdfの名前 my $pdf = $ARGV[ 0 ]; #-- pdfの頁数を調べる my $pnum = get_pnum( $pdf ); #-- 1頁ごとに 頁と色の情報を抽出する my @pn_and_cols; for ( my $pn = 1 ; $pn $pnum + 1; $pn++ ) { #--- 頁番号を記録する push @pn_and_cols, page $pn\r\x0a ; #--- psに変換して my @ps; get_ps( $pdf, $pn, \@ps ); #--- 色情報を抽出・記録する my @cols; get_cols( \@ps, \@cols ); push @pn_and_cols, @cols; } #-- ファイルに保存する $pdf =~ /\.pdf$/i; my $cols_fn = $`. _cols.txt ; put_cols( \@pn_and_cols, $cols_fn ); #-- 終了 print \x0a ; exit( 0 ); #- 主要なサブルーチンは ‥ #-- pdfの頁数を調べる sub get_pnum { my ( $pdf, ) = @_; my $pages = 0; my $info = `\ $pdfinfo\ \ $pdf\ `; $info =~ /(^|\x0a)Pages \s*(\d+)/i && ( $pages = $2 ); return $pages; } #-- pdfをpsに変換する sub get_ps { my ( $pdf, $pn, $ps, ) = @_; $pdf =~ /\.pdf$/i; my $out = $`. _ .$pn. .ps ; -e $out && unlink( $out ); my $opt = -level2sep -noshrink ; print `\ $pdftops\ $opt -f $pn -l $pn \ $pdf\ \ $out\ `; open( PS, .$out ) || err( open error PS , $out ); binmode( PS ); @$ps = <PS>; # <>は半角に直してください。 close( PS ); unlink( $out ); } #-- psから色情報を抽出する sub get_cols { my ( $ps, $cols, ) = @_; map do { ( /^%%DocumentProcessColors /i && ! /\(atend\)/i || /^%%\+ *[0-9.]+ +[0-9.]+ +[0-9.]+ +[0-9.]+ *\(\w+\) */i ) && ( push @$cols, $_ ); }, @$ps; } #-- ファイルに保存する sub put_cols { my ( $cols, $fn, ) = @_; open( COLS, .$fn ) || err( open error COLS $fn ); binmode( COLS ); print COLS @$cols; close( COLS ); } #- 定型サブルーチンは ‥ sub BEGIN { $pdfinfo = C \\Program Files\\xpdf\\pdfinfo.exe ; $pdftops = C \\Program Files\\xpdf\\pdftops.exe ; }; sub err { map do { print .$_. \x0a ; }, @_; print \x0a ; exit( 1 ); } sub mes { map do { print .$_. \x0a ; }, @_; } アウトライン解析の結果 日本語が使われているperlスクリプトを サクラエディタから マクロで実行するためのperlスクリプト。このサンプルでは 同じフォルダにある msg.pl を呼び出す。 call_pl.pls ExpandParameter( $M ) =~ /^((? \\|[\00-\x7f\xa0-\xdf]|..)*\\)([^\\]+\.pls?)$/i # , MsgBox( $1 , 0 , script folder ) && -d $1 && do{ push @INC, $1 ; require msg.pl } ; ieから日本語perlスクリプトを使う ieの中で 日本語のperlスクリプトを使うときは script type="text/perlscript" src="init_html.pl" /script ではなくて requireで呼び出せばよい。 script type="text/perlscript" require "init_html.pl"; /script requireで呼び出すので plの最後には 1; が必要。環境によっては @INC への追加設定が必要。 このとき perlスクリプトが日本語名のフォルダにあると 少し厄介。回避法は photoshopスクリプティング を参照のこと。( ieから日本語perlスクリプトを使う その2 にもまとめなおしました。) 次のサンプルは exec_cmd.pl を ブラウザとbatの両方から動かす。 exec_from.html 全角の < をすべて半角の に置換してから 試してみてください。 <html <meta http-equiv= Content-Type content= text/html; charset=Shift_JIS <head <title 日本語perlスクリプトの実行</title </head <body <h3 style= margin-left 1.5em; 日本語perlスクリプトの実行</h3 <span id= P </span <!-- パネル -- <br <span id= B </span <!-- ボタン -- <br <br <span id= S </span <!-- 入力 -- <br <br <span id= M </span <!-- 表示 -- </body <script type= text/perlscript $window- location- href =~ m,^file ///(.*/)[^/]*$,i; push @INC, $1; </script <script type= text/perlscript require init_html.pl ;</script <script type= text/perlscript require exec_from_html.pl ;</script </html init_html.pl #- このプログラムは ? # HTMLを初期化します。 { initPanel( P ); initButton( B ); initString( S ); initMessage( M ); } #- 初期化のルーチン sub initPanel { my ( $id, ) = @_; my $str = join , ( \x3ctable , cellpadding= 0 , cellspacing= 0 , style= margin-left 1.5em; , , ( map do { my $y = $_; join , ( \x3ctr , ( map do { my $x = $_; join , ( \x3ctd , \x3cspan , id= .$id.$x. - .$y. , style= , background-color #E8E8E8; , font-size 24; , , , \x26nbsp; x 4, \x3c/span , \x3c/td , ); }, ( 0 .. 5 ) ), \x3c/tr , ); }, ( 0 .. 1 ) ), \x3c/table , ); id( $id )- { innerHTML } = $str; } sub initButton { my ( $id, ) = @_; my $str = join , ( \x3cinput , type=button , id= .$id. button , value= 実行 , # ボタン名 style= , margin-top -0.5em; , margin-left 2em; , , onclick= javascript , click_button(); , , , ); id( $id )- { innerHTML } = $str; } sub initString { my ( $id, ) = @_; my $str = join , ( $id. :\x26nbsp; , \x3cinput , type= text , id= .$id. str , size= 53 , style= margin-top -1.2em; , value= , # 初期メッセージ , ); id( $id )- { innerHTML } = $str; } sub initMessage { my ( $id, ) = @_; my $str = join , ( $id. :\x26nbsp; , \x3cdiv , id= .$id. msg , style= , margin-top -1.2em; , margin-left 1.5em; , padding-left 0.2em; , , , 実行を押してみてください。 , # 初期メッセージ \x3c/div , ); id( $id )- { innerHTML } = $str; } #- 定型ルーチン sub id { return $window- document- getElementById( $_[0] ); } 1; exec_from_html.pl #- このプログラムは ? # ブラウザ/コマンドライン共用のスクリプトを # ブラウザ側から使うためのスクリプト。 require exec_cmd.pl ; #- 実行のルーチン sub click_button { my $cmd = id( Sstr )- { value }; my $msg = exec_cmd( $cmd ); msg( $msg ); id( Sstr )- { value } = ; } #- 定型ルーチン sub id { return $window- document- getElementById( $_[0] ); } sub popup { $window- alert( join \x0a , @_ ); } sub msg2html { join \x3cbr \x0a , map do { split \x0a , $_; }, @_; } sub msg { id( Mmsg )- { innerHTML } = msg2html( @_ ); } #- 表示のルーチン sub dispPanel { # パネルを表示する my ( $panel, ) = @_; my @cols = ( # 色の一覧 #E8E8E8 , #FF0000 , #00FF00 , #0000FF , #00FFFF , #FF00FF , #FFFF00 , #A00000 , #008000 , #0000A0 , #00A0A0 , #A000A0 , #C0C000 , ); for my $y ( 0 .. 1 ) { for my $x ( 0 .. 5 ) { id( P$x-$y )- style- { backgroundColor } = $cols[ $$panel[ $y ][ $x ] ]; } } } 1; exec_from.html ←→ init_html.pl ↓ exec_from_html.pl ↓ exec_cmd.pl exec_cmd.pl #- 実行のルーチン sub exec_cmd { my ( $cmd, ) = @_; my $msg = ; if( $cmd =~ /^\s*$/ ) { # ヘルプ・メッセージ $msg = help(); } elsif( $cmd =~ /^t$/i ) { $msg = 色・記号の一覧 ; my $panel = newPanel(); fillPanel( $panel ); dispPanel( $panel ); } elsif( $cmd =~ /^c$/i ) { $msg = パネルの初期化 ; dispPanel( newPanel() ); } return $msg; } #- 補助のルーチン sub help { # ヘルプ・メッセージ join \x0a , ( コマンド一覧 , 空 コマンド一覧を表示 , t パネルに色( 記号 )を一覧表示 , c パネルのクリア , ); } sub newPanel { # パネルの初期化 [ [ 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ] ]; } sub fillPanel { # パネルを埋める my ( $panel, ) = @_; my $x_max = 6; for( my $x = 0; $x $x_max; $x++ ) { $$panel[ 0 ][ $x ] = $x + 1; $$panel[ 1 ][ $x ] = $x + $x_max + 1; } } 1; exec_cmd.pl ↑ exec_from_bat.pl ↑ exec_from.bat exec_from_bat.pl #- このプログラムは ? # ブラウザ/コマンドライン共用のスクリプトを # コマンドライン側から使うためのスクリプト。 require exec_cmd.pl ; #- 実行のルーチン { msg( Enterを押してみてください。 ); while( 1 ) { my $cmd = ; { print \x0a , cmd ?( 終了は q )\x0a ; $cmd = ( =~ /^\s*(.*)\s*$/ ) ? $1 ; } $cmd =~ /^q(uit)?$/i && last; my $msg = exec_cmd( $cmd ); msg( $msg ); } } #- 定型ルーチン sub popup { print join \x0a , * x20, @_, * x20, , ; } sub msg { print msg , @_, \x0a ; } #- 表示のルーチン sub dispPanel { # パネルを表示する my ( $panel, ) = @_; my @cols = ( # 記号の一覧 , I , L , Y , P , N , V , T , U , F , Z , X , W , ); my $str = ; for my $y ( 0 .. 1 ) { $str .= . ; for my $x ( 0 .. 5 ) { $str .= $cols[ $$panel[ $y ][ $x ] ]; } $str .= \x0a ; } print $str; } exec_from.bat @echo off cd /d %~dp0 echo/ perl -I. exec_from_bat.pl if errorlevel 1 pause perlスクリプトを exeにする( PAR-Packer ) perlで作ったスクリプトを exeに変えて 得意先の環境でも動くようにしたい ── そう思って調べてみたら、PAR というものがあるらしいことを発見。ブログを検索すると いろいろ不安なことも書いてあったが、実際に試してみると簡単にインストールできて 起動も早く とても快適に使える。 使っているperlのバージョンを調べる。perl -v を実行。 結果 This is perl, v5.8.8 built for MSWin32-x86-multi-thread (with 50 registered patches, see perl -V for more detail) Binary build 820 [274739] provided by ActiveState http //www.ActiveState.com Built Jan 23 2007 15 57 46 PARのMainPage から incomplete compatibility list を見て調べると、私の使っているperlのバージョンでは PAR Packer 0.975 が動くらしい。 Perl Package Manager を起動して調べるとPAR-Packer 0.976 PAR Packger というのが 既にある。リポジトリは theoryx5 このパッケージに installのマークを付けて Run marked actions を実行。 インストールが終わったら コマンドプロンプトから pp を実行。確かに動いているよう。 Set up gcc environment - 3.4.2 (mingw-special) C \Perl\site\bin/pp No input files specified 使い方は pp -o ファイル名.exe ファイル名.plあとは Active perl の Documentaion の Pragmas pp を参照してください。 ieから日本語perlスクリプトを使う その2 javascriptのデバッグにperlスクリプトが使えると とても便利なのでそのためのスクリプトをまとめました。ブラウザの中から windowsのコマンドを実行できます。 使うときは 全角の & < > をすべて半角に変えてください。 perlscript_test.html html2 plugin Error このプラグインで利用できない命令または文字列が入っています。 cmd_exe.pl $window- alert( perl load ok ); sub cmd_exe { my $r = `$_[0]`; $r =~ s/\&/&/g; $r =~ s/</</g; $r =~ s/>/>/g; <pre $r ; } ある変数の内容を result.txtに追記するスクリプト。スクリプトを読み込んだとき result.txtを削除し、msg_pl( 変数 ) を実行したとき 変数の内容を result.txtに追記する。 msg.pl { # result.txtを削除 $fn = $window- { script_folder }result.txt ; -f $fn && unlink $fn; # ロードの確認 $window- alert( perl load ok ); } $fn; sub msg_pl { my $r = undef; # 配列のとき my $l = %{$_[0]}- { length }; if( ref( $_[0] ) && $l && $l + 1 == scalar keys %{$_[0]} ) { $r = ; for( my $i = 0; $l && $i $l; $i++ ) { $r .= %{$_[0]}- {$i}. \x0a ; } } # ハッシュのとき if( ! defined( $r ) && ref( $_[0] ) ) { $r = ; for( sort keys %{$_[0]} ) { /^length$/ || ( $r .= $_ .%{$_[0]}- {$_}. \x0a ); } } # 文字列のとき if( ! defined( $r ) ) { $r = $_[0]. \x0a ; } # 結果ファイルに追記 open( OUT, .$fn ) || $window- alert( open error ( 結果ファイル ) .$fn ); print OUT $r; close OUT; } Edit
https://w.atwiki.jp/atwikimyj/pages/59.html
emplate-Toolkitでのはまり、TIPSを記録する。 ◆リンク集 <参考> TTdoc 和訳ページ http //www.hakoniwa.net/tt/index.html TT超入門。これで基本がわかった http //www.sea-bird.org/doc/Solaris8/Perl_2.html サンプル http //bob.marlboro.edu/~msie/2001/ipl/perl/code/jan27/TemplateToolkit/ TTで使える関数プチ一覧。なんでもできそうだ。 http //hwat.sakura.ne.jp/hpod/200604/06-140134/ DBマガジンのサンプルプログラム 紙だけど、相当参考になった。 ◆TIPS (1)インストールにきをつけろ perlのサンプルスクリプト上では template というモジュール名になっているので PPMで template と指定してインストール。しかしこれはTTとは別のモジュールなのだ。 本当は template-toolkit でsearchして、この名前でインストールする必要があった、、、。 (2)イテレイト型のオブジェクトをそのままTTにぶんなげる $Sale_prod_list = MAGCLASS ObjectsTable - search( [ $criteria1 , $criteria2 , $criteria3, $criteria4 ],{ order_by = prod_sellrank } ); こんなふうに雑誌情報のオブジェクトを取得して、 my $template = Template- new; my $output; $template- process( teiki_make_index.html ,{ Sale_prod_list = $Sale_prod_list } ,$output); こうする。複数の雑誌情報を持つオブジェクトが teiki_make_index.html に投げられる。 これを受け入れる書式は [% WHILE ( sp = Sale_prod_list.next) -%] [% IF sp.prod_price != %] /価格:[% sp.prod_price %]円 [% END %] [% IF sp.prod_toku != %] /(特典あり) [% END %] [% END %] こんな感じ。まずWHILEでperlから渡されたSale_prod_listを受けるわけだけど 1つ1つ順番に読み込むようにSale_prod_list.nextと記述し、その1つ1つの オブジェクトはsp = Sale_prod_list.nextとすることでspに入る。 sp.prod_noなどとすることでオブジェクト内のハッシュを読み取れる。 注意点: ・WHILEやENDなどの書式は必ず大文字 ・条件式は必ずENDで閉めよう (3)作製されたHTMLについて $template- process( teiki_make_index.html ,{ Sale_prod_list = $Sale_prod_list } ,$output); と記述すると、$outputに作製されたHTMLが入る。 (テンプレート ,{ エイリアス= オブジェクト } , $出力先変数) という書式。注意点として、$outputではだめで、$outputとしなければならない) また、出力先変数を省略して $template- process( teiki_make_index.html ,{ Sale_prod_list = $Sale_prod_list } ); とすると自動的にprintされる。 以下いろんなサイトからのメモ ■HTMLファイルのエスケープ HTMLタグのエスケープしろという命令をテンプレートに記述できます。フィルター機能についてはTemplate Toolkit Manual Filtersに詳しく書いてありますが、例えば、 [% foo | html %]でfooの中身のHTMLタグをエスケープして出力してくれますし、 [% bar | html_line_break %]
https://w.atwiki.jp/naobe/pages/110.html
言語に戻る 配列の代入 $b = \@b; @a = @{$b}; push @a,10; 上記では、@bをコピーしたものを@aに設定する(@aと@bはアドレスが異なる)。よって、10は@bには挿入されない。 perldoc 項目 説明 perldoc perl 調査項目のリストアップ perldoc perlrun 起動オプションを調べる perldoc perlsyn 文法を調べる perldoc Class Struct モジュールを調べる perldoc -m Class Struct モジュールのソースコードを表示する perldoc -l Class Struct モジュールのディレクトリを調べる perldoc -f open ビルトイン関数を調べる perlpod perlのドキュメントフォーマット。マークアップ言語。Podのマークアップは3種類のパラグラフからなる。 ordinary, verbatim, command。 Ordinary Paragraph パッケージ モジュールのディレクトリを調べる for $path ( @INC ) { print $path, "\n"; } 時刻関連 1 #!/usr/bin/perl 2 3 use strict; 4 use Time Local; 5 use Time localtime; 6 7 # 現在の時刻を求める 8 my $tmref = localtime(); 9 printf( "本日 %d/%d/%d %d %d %d\n", $tmref- year()+1900,$tmref- mon()+1,$tmref- mday(),$tmref- hour(),$tmref- min(),$tmref- sec()); 10 print "\n"; 11 # 通算秒を求める 12 my $time = timegm(0,0,0,1,0,1970); 13 print "1970/1/1 00 00 00 GM 通算秒 ", $time,"\n"; 14 print "\n"; 15 # 指定日の1日前を求める 16 $time = timelocal(0,0,0,1,2,2016); 17 $tmref = localtime($time); 18 printf( "指定日 %d/%d/%d %d %d %d\n", $tmref- year()+1900,$tmref- mon()+1,$tmref- mday(),$tmref- hour(),$tmref- min(),$tmref- sec()); 19 20 $time -= 60 * 60 * 24; 21 $tmref = localtime($time); 22 printf( "1日前 %d/%d/%d %d %d %d\n", $tmref- year()+1900,$tmref- mon()+1,$tmref- mday(),$tmref- hour(),$tmref- min(),$tmref- sec()); 【実行結果】 [suna@athlon4 perl]$ ./time.pl 本日 2013/5/18 9 20 49 1970/1/1 00 00 00 GM 通算秒 0 指定日 2016/3/1 0 0 0 1日前 2016/2/29 0 0 0 Carp 警告を出力する。例外を出力して停止する。 use Carp qw(croak); sub sub1 { print "aaa\n"; croak( "Exception occured."); print "bbb\n"; } sub1; 【実行結果】 [foo@athlon4 perl]$ ./7.pl aaa Exception occured. at ./7.pl line 7 main sub1() called at ./7.pl line 11 構造体 構造体のフィールドは、種類を示す。$ スカラ、@ 配列、% ハッシュ 1 #!/usr/bin/perl -w 2 # 構造体を使う 3 4 use Class Struct; 5 use Data Dumper; 6 use strict; 7 8 struct Person = { 9 name = $ , 10 father = $ , 11 mother = $ 12 }; 13 14 my $p1 = new Person; 15 $p1- name( john ); 16 $p1- father( tom ); 17 $p1- mother( karen ); 18 19 print $p1- name(),"\n"; 20 print $p1- father(),"\n"; 21 print $p1- mother(),"\n"; 22 23 my $p2 = new Person; 24 $p2- name("mery"); 25 $p2- father("startk"); 26 $p2- mother("guiness"); 27 28 print Dumper($p2); 配列の場合は、$p1- child(0, merry );$p1- child(1, ann );のように使う。ハッシュの場合は、$p1- note( key , value );のように使う。 オブジェクト指向 パッケージがクラス。newサブルーチンでインスタンスを作成する。newの中で無名のハッシュ参照を作成し、最初の引数のクラス名(パッケージ名)とblessする。blessは、ハッシュ参照とクラス名を関連付けた参照を返す。これがインスタンスの参照となる。インスタンスの参照からクラス内のサブルーチンを呼び出せる。 @ISAにスーパークラスを書き込むと、サブクラスになる。@ISAは、単に自分にないメソッドを探す順番を決めるために使われる。メソッドの探索は再帰的に行われる(親に親があれば、親の兄妹より先に探す)。フィールドは継承しない。複数のスーパークラスを継承できる。 【oo.pl】 1 #!/usr/local/bin/perl 2 # オブジェクト指向 3 4 # パッケージがクラスになる 5 use strict; 6 use util Person; # パーソンクラスを使う 7 use util Engineer; # エンジニアクラスを使う 8 9 # パーソンクラスを作成 10 my $ref = util Person- new("suna"); 11 12 # 名前を表示する 13 print "name ",$ref- getName,"\n"; 14 15 # 名前を変える 16 $ref- setName( "nao"); 17 18 # 名前を表示する 19 print "name ",$ref- getName,"\n"; 20 21 # エンジニアクラスを作成する 22 my $eref = util Engineer- new("nori"); 23 24 # 名前を表示する 25 print "name ",$eref- getName,"\n"; 26 27 # 名前を変える 28 $eref- setName( "non"); 29 30 # 名前を表示する 31 print "name ",$eref- getName,"\n"; 32 33 # スキルを設定する 34 my $skillref = ["db2","java","perl"]; 35 $eref- setSkill($skillref); 36 37 # スキルを表示する 38 my $eeref = $eref- getSkill; 39 for my $skill ( @$eeref ) { 40 print $skill,"\n"; 41 } 【util/Person.pm】 1 #!/usr/local/bin/perl 2 3 package util Person; 4 5 sub new { 6 my $clas = shift; 7 bless { 8 name = shift 9 }, $clas; 10 } 11 12 sub getName { 13 my $self = shift; 14 return $self- {name}; 15 } 16 17 sub setName { 18 my $self = shift; 19 $self- {name} = shift; 20 } 25 26 1; 【util/Engineer.pm】 1 #!/usr/local/bin/perl 2 3 package util Engineer; 4 5 @ISA = ("util Person"); 6 7 sub setSkill { 8 my ($self, $skillref) = @_; 9 $self- {skill} = $skillref; 10 } 11 12 sub getSkill { 13 my $self = shift; 14 return $self- {skill}; 15 } 16 17 1; 【実行結果】 [suna@athlon4 perl]$ ./oo.pl name suna name nao name nori name non db2 java perl 固定長ファイルの扱い 【asciiのみ】 fix.dat 11223334444555552122333444455555 上記ファイルを16バイト/レコードとして読み込む。 #!/usr/bin/perl # 固定長レコードのファイルを読み込む use strict; my $FILE = "fix.dat"; open IN, $FILE or die "file open error!! $FILE"; binmode IN; my $rec; my $TEMPLATE = "A1A1A2A3A4A5"; while( 1 ) { my $size = read IN, $rec, 16 ; if( $size == 0 or $rec == "\n") { last; } my @t = unpack $TEMPLATE, $rec; for my $term (@t) { print $term, ","; } print "\n"; } close IN; 実行結果 [foo@athlon4 perl]$ 3.pl 1,1,22,333,4444,55555, 2,1,22,333,4444,55555, 【Shift-JIS込み】 bin.dat 123山田太郎12345123磯野一郎12345 #!/usr/bin/perl # 固定長レコードのファイルを読み込む(Shift-JIS込み) use strict; use Encode; use encoding "utf-8"; my $FILE = "bin.dat"; open IN, $FILE or die "file open error!! $FILE"; binmode IN; my $rec; my $TEMPLATE = "A3a8A5"; while( 1 ) { my $size = read IN, $rec, 16 ; if( $size == 0 or $rec == "\n") { last; } my @t = unpack $TEMPLATE, $rec; my $i = 0; for my $term (@t) { $i++; if( $i == 2 ) { $term = decode("cp932", $term); } print $term, ","; } print "\n"; } close IN; 実行結果 [foo@athlon4 perl]$ 4.pl 123,山田太郎,12345, 123,磯野一郎,12345, Win -- Unixファイル変換 perl -pe s/\r\n/\r/ winfile unixfile ShiftJiSを使う http //www.fl.reitaku-u.ac.jp/~schiba/perl/perlEncoding.html より perl5.8.1以上 use encoding "shiftjis"; binmode STDERR, " encoding(shiftjis)"; use Encode decode ; while ( IN ) { # ファイルからの入力にエンコードを指定する。ここでは shiftjis を指定しているが, # 入力ファイルのエンコードにあわせ,euc-jp なども指定可能。 $line = decode( shiftjis , $_); print $line; # 標準出力なので encoding プラグマにより Shift JIS に自動変換される。 } close (IN); #!/usr/bin/perl use Encode; open IN, "/home/suna/tmp/wiki.txt"; while( $line = IN ) { $line = decode( cp932 , $line); # Shift-JIS(cp932)をutf-8に変換 chomp $line; print $line, "\n"; } close IN; pack, unpackの TEMPLATE TEMPLATEは、 型 説明 a 任意のバイナリデータ。null(\0?)がパディングされる A ASCII文字。空白がパディングされる。 b ビット文字。昇順のビットオーダ。 B ビット文字。降順のビットオーダ。 h 16進文字。低位の4ビットが先。 H 16進文字。高位のの4ビットが先。 c サイン付キャラクタ。 C サインなしキャラクタ。 s signed short S unsigned short i signed integer I unsigned integer l signed long L unsigned long ENCODING 以下を使って求めた。perldoc Encode参照 #!/usr/bin/perl use Encode; @with_jp = Encode- encodings("Encode JP"); for $encoding (@with_jp) { print $encoding, "\n"; } 項目 説明 7bit-jis ascii ascii-ctrl cp932 euc-jp iso-2022-jp iso-2022-jp-1 iso-8859-1 jis0201-raw jis0208-raw jis0212-raw MacJapanese null shiftjis utf-8-strict utf8 関数 項目 説明 read FILEHANDLE,SCALAR,LENGTH[,OFFSET] FILEHANDLEからLENGTHバイト読み込んで変数SCALARに保管する。OFFSET指定するとSCALARの先頭からOFFSET位置から更新する。読み込んだバイト数を返す。ファイル終端では0を返す。 pack TEMPLATE,LIST LISTをTEMPLATEに指定した形式で変数に格納し返す。 unpack TEMPLATE, EXPR 変数EXPRをTEMPLATEに従って配列に展開する。 Encode encode(ENCODING, $string [, CHECK]) ENCODINGに従って$stringをエンコードして返す。CHECK?? Encode decode(ENCODING, $string [, CHECK]) ENCODINGに従って$stringをデコードして返す。 その他 項目 説明 複数行に渡るコメント コメントの最初:=pod,コメントの最後:=cut
https://w.atwiki.jp/soraka/pages/18.html
ある文字をファイルの中から探す #!/usr/local/bin/perl -w use strict; if(@ARGV != 1){ print "USAGE ./prob18_0207.pl fileName\n"; exit 1; } if(open(FILE, $ARGV[0])){ while(my $line = FILE ){ if($line =~ /[a-zA-Z]{8,}?/){ print $line; } } }else{ print "$ARGV[0] $!\n"; print "USAGE ./prob18_0207.pl fileName\n"; exit 1; } ID=数字 の数字を抜き出す 1 #!/usr/local/bin/perl -w 2 use strict; 3 4 open(FILE, sample.txt ); 5 while(my $line = FILE ){ 6 while($line =~ /ID=(\w+)/g){ 7 print $1,"\n"; 8 } 9 } 数字3つを別々に抜き出す 1 #!/usr/local/bin/perl -w 2 use strict; 3 4 open(FILE, sample.txt ) or die "$!"; 5 while(my $line = FILE ){ 6 if($line =~ /(\d+), (\d+), (\d+)/){ 7 print "height = $1\n"; 8 print "weight = $2\n"; 9 print "age = $3\n"; 10 } 11 } perlワンライナー perl -i -pe s/aaa/ccc/g test.pl i でそのファイル自体を書き換え。-eで、そのあとに続くものをperlプログラムと認識する