まずは竹中さんのページを参照
ループを途中で終わる
last;
次のループに行く
next;
5/1/04
if( $j != $SET){….;}
$j /= $SET ではコンパイル時にエラーが出ないが、間違い。
$jを$SETで割った商が加算される…! 5/20/04
exit;
8/26’04 文書の先頭
for( $mm = 1; $mm<=12; $mm++ ) {
$MM = sprintf( "%02d", $mm);
}
8/26’04 文書の先頭
@D_NUM=qw( 0 31 28 31 30 31 30 31 31 30 31 30 31 ); #配列は0からなので最初の1列目はダミー
for( $i = 1; $i<= $D_NUM[$mm]; $i++ ) { #mmは月
}
foreach(@ken) {
}
とやると、$_ に@kenの要素が順番に入る。
8/26’04 文書の先頭
連想配列全体を表すには、名前の前に%をつける。
%iradar = (qw( otob 02 nisi 05 mono 06 sira 07 taka 11 yaks 13 ));とか
%radarname = (qw( mono 物見山 sira 白鷹山 nisi 西岳 ));
など。
$radar=”mono”;とすると
$radarname{$radar}に「物見山」がはいる。
use File::Basename;
を宣言しておき
if( ! -e $inpf ) {
print basename($inpf)," がありません\n";
next;
}
等とする。
#!/usr/moc/bin/perl
while(<>)
{
print $_;
}
とやると読み込んだファイルの中身がそのまま出てくる。
9/3’04 文書の先頭
ファイルから読むときはopen文を与える。 竹中先生のページ
open ( INPUT, $source_dir.$input_file );
書き出すときは>が必要なので注意!
$kstatus = open ( OUT, ">$ouput_dir$input_file" );
2/12/05
fortranの基礎(大阪府立大学 薮先生のページ)systemを参照
fujitsu sunではシステムコールがサービスルーチンに入っているので
use service_routines,ONLY:system
が必要。
iret=system(“ls”)
今のところ引数を変数で与えるのはうまくいかない
つまり、
iret=system(“perl_shell 111”)
は期待した結果が返ってくるけど、
n=111
iret=system(“per_shell n”)
はうまくない。
プログラムの中で引数をファイルに出力し、シェルはファイルを参照する事でエラーを回避した。
2/12/05
$ARGV[0]に入る。
引数が必要なプログラムでは
if( $ARGV[0] eq "" ) {
exit;} ##文字の比較のときは”==”でなく、”eq”を使う。
等とするとよい。
文字変数の長さを求める
$nagasa =length($moji);
おしりの文字を除く(test.Z -> test) (2文字除くとき)
$result = substr $org_file, 0, $nagasa-2 ;
9/12’04 文書の先頭
読み込み文字中に「/」があると@dammy=(/,/,$line);などで取り出せない。
例えば「2005/09/04 06:03:03,805,2005/09/04 06:03:21,晴れ」など。
$date =~ s/(\d{4})\/(\d\d)\/(\d\d)/$1年$2月$3日/g;
$date =~ s/(\d\d )\:(\d\d)\:(\d\d)/$1月$2時$3分/g;
/と:を変換する。
竹中さんのページにあった。 2/7’6
>/dev/null
2>&1
を追加する
$target = $out_datapath.$o_sub_dir;
mkdir $target,0775 if ! -d $target;
@buf = `cat $inp`; chop @buf; shift @buf;
ファイルから1行ずつ入力し、keyとなる文字があったら置換する。
ファイルからよむところは竹中さんのページを参照する。
open (FILE, "$target_file");#入力ファイルのオープン
open
(NEW, ">$result_file");#出力ファイルのオープン
while ($line = <FILE>)
{ # ファイルハンドル FILE を介して一行読む.
chomp $line;
$line =~
s/$key1/@date_start[$i]/g;
#文字列 =~ s/正規表現で書かれたパターン/置換する文字列/
print
$line,”\n”; # 行番号,タブ,行の内容.
}
close(FILE);
close(NEW);
11/9’5
時間の大小の比較。
はじめに次の文を宣言する。
require "/home/koshida/take/lib/perllib/hzk.pl";
たとえば開始、終了の配列を次の文で受け取る。
foreach $kouu(@kouu) {
$kouu =~ s/ 1 DUMMY//;
( $ts[0],$ts[1],$ts[2],$ts[3],$ts[4], $te[0],$te[1],$te[2],$te[3],$te[4] ) = split(/ +/,$kouu);
Tsとte間の10分間の数を調べる
$nj = hzk( @ts, @te, 10 ); # 10 min.cycle
2/1’6
一行ごとにwhileで取り込み
while($line=<INP>){
空白で区切られた場合は
($name, $height, $weight) = split (/\s+/, $line);
コンマ区切りの場合は
($name, $height, $weight) = split (/,\s*/, $line);
参照竹中さん
1/11’7