NTシステムデザインの技術メモ
Perlメモ
最終更新:
ntaka206
-
view
UNIXのプロセスについて
Unix Programming Frequently Asked Questions 日本語訳 - 1 プロセス制御
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_2.html
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_2.html
Unix Programming Frequently Asked Questions 日本語訳
Unix Programming Frequently Asked Questions 日本語訳 - Table of Contents
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_toc.html
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_toc.html
バッファリング
Perlで出力のバッファリングを無効にするには - Sakura scope
http://www.nishishi.com/blog/2006/05/perl_buffer_flu.html
http://www.nishishi.com/blog/2006/05/perl_buffer_flu.html
コアテクの路地: 標準出力のバッファリング
http://blog.miraclelinux.com/ctd/2006/09/post_1b11.html
http://blog.miraclelinux.com/ctd/2006/09/post_1b11.html
マニュアル
コマンドラインで
perldoc Net::Telnet
perldoc Net::Telnet
Perl/Tk テキストウィジット 改行するには
文字列に改行コード入れる"\n"
3種類の改行コードに対応しているよう。
CR LF
CR
LF
CR LF
CR
LF
お約束
use strict;
use warnings;
use warnings;
単純文
func() if EXPR;
例
func() if $a == 1;
func() if ($a == 1); <-ダメ
例
func() if $a == 1;
func() if ($a == 1); <-ダメ
型グロブ
型グロブは、様々な変数型のエントリを持つ一種のハッシュである。
*pkg::sym{SCALAR} # \$pkg::symと同じ *pkg::sym{ARRAY} # \@pkg::symと同じ *pkg::sym{HASH} # \%pkg::symと同じ *pkg::sym{CODE} # \&pkg::symと同じ *pkg::sym{GLOB} # \*pkg::symと同じ *pkg::sym{FILEHANDLE} # 内部的なファイルハンドル 直接に等価な書き方はない *pkg::sym{NAME} # "sym" リファレンスではない *pkg::sym{PACKAGE} # "pkg" リファレンスではない
変数未定義の判定など
- Ippiki - PerlにおけるNULLの扱い
if ($s == NULL) ×
ソケット通信
ネットワークプログラミングの基礎知識
Perlの漢字コード扱い
文字列をPerlの内部文字列(utf8フラグの付いた文字列)として扱うと、lengthやsubstr等の関数や正規表現などでもバイト単位でなく文字単位で操作することができる。
PerlのスクリプトがUTF-8で書かれていることを示すために、スクリプトの初めに入れる。
use utf8;
use utf8 をすることで、perl にソースコード中の文字列がUTF8で書かれていることを教えます。
このことにより、ソースコード中の文字列には、UTF8フラグがつく。
このことにより、ソースコード中の文字列には、UTF8フラグがつく。
* STDIN, STDOUTにUTF-8を使うなら、binmodeを使って指定する。
binmode STDIN, ":utf8"; binmode STDOUT, ":utf8";
読み込むファイルがUTF-8で書かれているなら、次のようにopenで指定する。
open(FH, "<:utf8", $filename);
読み込むファイルがshift-jisなど、UTF-8以外のコードで書かれているなら、次のようにencodingをopenで用いて指定する。
open(FH, "<:encoding(shiftjis)", $filename);
処理手順
- ソースコードをUTF-8で書き、先頭で宣言する。
use utf8;
- ファイルを開く場合は文字コードを指定する。
open(FH, "<:utf8", $filename); open(FH, "<:encoding(shiftjis)", $filename);
- ストリーム等から入力した文字列は、内部表現(UTF-8)に変換する。
$s = decode('utf8', $s); # UTF-8 $s = decode('shiftjis', $s); # SHIFT JIS $s = decode('euc-jp', $s); # EUC
- STDOUTにUTF-8を出力するなら、binmodeで指定する。
binmode(STDOUT, "utf8");
内部表現(UTF-8)に変換した文字列は、漢字でもバイト単位ではなく文字単位で扱える。以下のコードで、内部表現になっていない文字列では漢字が正しく表示されない。
$s = decode('utf8', $s); # UTF-8 foreach $byte (split //, $s) { print $byte; }
UTF-8フラグとは
スカラー変数の内部表象の状態を示すものとして UTF8 フラグというものがある
スカラー変数には文字列として下記のものを格納できる
(A) 文字列(内部表象: UTF-8)
(B) 文字列(内部表象: ISO-8859-1)
スカラー変数には文字列として下記のものを格納できる
(A) 文字列(内部表象: UTF-8)
(B) 文字列(内部表象: ISO-8859-1)
文字列にUTF-8フラグが付いているかどうか確認するには。
Encode::is_utf8($tmp);
Encode::is_utf8($tmp);
Perl内部の文字コード
UTF-8/Shift JIS/EUCの入力コード例
UTF-8/Shift JIS/EUCの文字列をPerlに読み込み、標準出力とパイプに出力する
UTF-8/Shift JIS/EUCの文字列をPerlに読み込み、標準出力とパイプに出力する
use encoding "utf-8"; use Encode; use utf8;
子プロセス側
{ binmode(PARENT_WTR, "utf8"); my $s = $telnet->get(Timeout => 3600); #$s = decode('utf8', $s); # UTF-8 #$s = decode('shiftjis', $s); # SHIFT JIS $s = decode('euc-jp', $s); # EUC print $s; print PARENT_WTR $s; }
親プロセス側
{ sysread(PARENT_WTR, $curline, 1024); # 子プロセスからUTF-8で送られてきた文字列を、内部表現(フラグ付きUTF-8)に変換する $curline = decode('utf8',$curline); }
use utf8; と use encoding;
参考
UTF8 フラグあれこれ - daily dayflower
http://d.hatena.ne.jp/dayflower/20080219/1203493616
http://d.hatena.ne.jp/dayflower/20080219/1203493616
Perlの文字コード変換の話 其の参 - It_lives_vainlyの日記
http://d.hatena.ne.jp/It_lives_vainly/20080306/1204629364
http://d.hatena.ne.jp/It_lives_vainly/20080306/1204629364
Perl 5.8.x Unicode関連
http://www.rwds.net/kuroita/program/Perl_unicode.html
http://www.rwds.net/kuroita/program/Perl_unicode.html
Perlでクリップボードを使う
CAPN Clipboardモジュールを使う
Clipboard - Copy and paste with any OS - search.cpan.org
# cpan > install Clipboard
Perlにコードを書いて実行するとxclipが無いと怒られる
freshmeat.net: Project details for xclip
freshmeat.net: Project details for xclip
# aptitude install xclip
Tk::clipboardを使う
Tk::clipboard - Manipulate Tk clipboard - search.cpan.org
実行時にエラーが出る
Tk::Error Failed to AUTOLOAD 'MainWindow::clipboardGet'
Tk::Error Failed to AUTOLOAD 'MainWindow::clipboardGet'
Tkのクリップボード機能を使う
$widget->clipboadrClear(); $widget->clipboadrAppend('add to clipboard'); $m_mainWindow->SelectionGet(-selection => 'CLIPBOARD');
クリップボードの内容を取り出し
Net::SSHモジュールについて
WindowsのActivePerlにもある。 Ver0.08
ただし、中身はopen2またはopen3でsshコマンドを呼び出している。
ただし、中身はopen2またはopen3でsshコマンドを呼び出している。
Perl参考書
プログラミングPerl 第2版
最新版は第3版なので注意!
第3版は、2冊に分かれているのでいまいち使いにくい、最新の機能を使わないならば第2版でも十分だと感じます。
中古だと安いし(^.^)
第3版は、2冊に分かれているのでいまいち使いにくい、最新の機能を使わないならば第2版でも十分だと感じます。
中古だと安いし(^.^)