N88BASICとperlの順にサンプルプログラムを並べて記述しています。
7.1.算術関数
X=1.73205 $x = 1.73205; I=INT(X) $i = int($x); PRINT I print "$i\n"; 1
RND(3) rand(6)
RANDOMIZE 3 srand(6)
7.2.変換関数
一部perlのみ説明します。
$a = "ff"; $x = hex($a); print "$x\n"; 255
A$=HEX$(97) $a = sprintf("%2x",97);
PRINT A$ print "$a\n";
A$=HEX$(ASC("a")) $a = sprintf("%2x",ord("a"));
PRINT A $print "$a\n";
61
61
1996年10月5日13時20分30秒 土曜日
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdat) =
localtime(time);
$mon++;
print "$year/$mon/$mday $hour:$min:$sec $wday\n";
96/10/5 13:20:30 6
$a = "15"; $x = oct($a); print "$x\n"; 13
$a = "abc"; $x = ord($a); print "$x\n"; 97 aは(61)16
7.3.文字列関数
A$="abcdefg" $a = "abcdefg"; A$=LEFT$(A$,LEN(A$)-1) chop($a); PRINT A$ print "$a\n"; abcdef
A$="abcdefg" $a = "abcdefg"; I=INSTR(A$,"d") $i = index($a,"d"); PRINT I print "$i\n"; 4 3
A$="abcdefg" $a = "abcdefg"; I=LEN(A$) $i = length($a); PRINT I print "$i\n"; 7
X$="1234" $x = "1234"; A$=LEFT$(X$,3) $a = substr($x,0,3); #文字の最初は0番目 PRINT A$ print "$a\n"; 123
X$="1234" $x = "1234"; A$=MID$(X$,2,1) $a = substr($x,1,1); #文字の最初は0番目 B$=MID$(X$,3) $b = substr($x,2); #位置から最後まで PRINT A$ print "$a\n"; PRINT B$ print "$b\n"; 2 34
X$="1234" $x = "1234"; A$=RIGHT$(X$,2) $a = substr($x,-2); #右から2桁目の位置から最後まで PRINT A$ print "$a\n"; 34
I=3 $i = 3;
X$=RIGHT$("0000"+MID$(STR$(I),2),4) $x = substr("0000$i",-4);
PRINT X$ print "$x\n";
0003
7.4.配列関数とリスト関数
perlのみ説明します。
@x = (10,20,30,40,50)があらかじめ設定されているとして説明します。
$y = join(".",@x);
print "$y\n";
10.20.30.40.50
pop(@x);
foreach (@x) {
print "$_,";
}
10,20,30,40,
$a = 60;
push(@x,$a);
foreach (@x) {
print "$_,";
}
10,20,30,40,50,60,
foreach (reverse(@x)) {
print "$_,";
}
50,40,30,20,10,
shift(@x);
foreach (@x) {
print "$_,";
}
20,30,40,50,
splice(@x,1,2);
foreach (@x) {
print "$_,";
}
10,40,50,
splice(@x,2);
foreach (@x) {
print "$_,";
}
10,20,
$x = "u3001.orange.or.jp";
($ip1,$ip2,$ip3,$ip4) = split('\.',$x);
print "$ip2\n";
orange
$a = 70;
unshift(@x,$a);
foreach (@x) {
print "$_,";
}
70,10,20,30,40,50,
7.5.ファイル操作
A$="PERLLIB" $a = "perllib"; CHILD "MD "+A$ mkdir($a,0755);
A$="PROG1.TXT" $a = "prog1.txt"; B$="PROG1.BAK" $b = "prog1.bak"; CHILD "REN "+A$+" "+B$ rename($a,$b);
A$="PERLLIB" $a = "perllib"; CHILD "RD "+A$ rmdir($a);
A$="TEST.PL" $a = "test.pl"; KILL A$ unlink($a);
7.6.ファイル入出力
OPEN "COUNT.TXT" AS #1 open(IN,"count.txt"); CLOSE #1 close(IN);
1000 OPEN "COUNT.TXT" FOR INPUT AS #1 open(IN,"count.txt");
1010 IF EOF(1) THEN CLOSE:END while(!eof(IN)) {
1020 LINE INPUT #1,A$ chop($a = <IN>);
1030 PRINT A$ print "$a\n";
1040 GOTO 1010 }
close(IN);
open(ML,"|/usr/bin/mail -s 'Hello!' pingu@foo.co.jp"); print ML <<EOF; Dear kibitaro EOF close(ML);
read(STDIN,$dat,$ENV{'CONTENT_LENGTH'});
A=10 $a = 10;
B$="ab" $b = "ab";
PRINT USING "[### @ @]";A,B$ $x = sprintf("[%3d %3s]",$a,$b);
print "$x\n";
[ 10 ab ] [ 10 ab] 文字列は右詰め
1996年10月5日13時20分30秒のとき
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdat) = localtime(time);
$year += 1900; $mon++;
$date = sprintf("%04d/%02d/%02d %02d:%02d", $year,$mon,$mday,$hour,$min);
print "$date\n";
1996/10/05 13:20
%m.nx
mはフィールドの長さ,nは指数表示の場合の長さ,xはフィールドタイプ
s:文字列, c:文字, d:10進数, x:16進数, o:8進数, e:指数形式, f:固定小数点形式など
数値の場合,mの前に0を書くと桁数分を0でパディング(埋め合わせ)する
%04d 値が12だと0012 1だと0001
7.7.ファイルテスト演算子
perlのみ説明します。
| 演算子 | 内容 | サンプル |
|---|---|---|
| -e | ファイルがある | if (-e $file) { print "有り\n"; } if (!(-e $file)) { print "無し\n"; } |
| -z | ファイルの大きさが0である | if (-z $file) { print "サイズ0\n"; } |
| -s | ファイルがあり大きさが0でないときサイズを返す | $s = -s $file; print "SIZE=$s Bytes\n"; |
| -M | ファイルの内容が最後に変更されてからの日数 | $u = -M $file; |
| -A | ファイルが最後にアクセスされてからの日数 | $r = -A $file; |
ファイルの内容が最後に変更された日時を求めるには
-rw-r--r-- 1 kibita users 4219 Oct 3 20:05 RMAIL
$file = "RMAIL";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdat) =
localtime(time - (-M $file) * 24 * 3600);
$mon++;
print "$year/$mon/$mday $hour:$min:$sec\n";
96/10/3 20:5:52
7.8.システム呼び出し
A$="FILEA" $a = "filea";
CHILD "TYPE "+A$ system("cat $a");
Copyright (c)1996-99 GOMASUKE
Since 09/15/1996, Last Updated 01/10/1999