かわいいは正義
ただの日記ですよ(・ω・)
ラベル
Perl
の投稿を表示しています。
すべての投稿を表示
ラベル
Perl
の投稿を表示しています。
すべての投稿を表示
2021年12月7日火曜日
Python で終了する時の呼び出し関数,行番号を報告する
タイトル通り.inspect モジュールを利用する.
import sys, inspect def my_exit(): frame = inspect.currentframe().f_back path = frame.f_code.co_filename.split('/') print("file:"+path[-1] +" in:"+frame.f_code.co_name+", line:"+str(frame.f_lineno)) sys.exit()
Perl でもできる(さらにエラーメッセージを引数としてもらう).
sub my_exit { my ($arg_str) = @_; my ($pkg, $file, $line) = caller; chomp($arg_str); print "Error $arg_str, in $file line $line\n"; die; }
Perl の方が記述はシンプルなんだよなぁ.
2020年7月25日土曜日
Perlの二次元配列の走査
よく忘れるのでメモ.
#!/bin/perl my @ARRAY=(["A1", "A2", "A3"], ["B1", "B2", "B3"]); for(my $i=0;$i<=$#ARRAY;$i++){ for(my $j=0;$j<=$#{$ARRAY[0]};$i++){ printf STDERR ("$ARRAY[$i][$j], "); } }
2016年8月27日土曜日
PerlでNaNを使う.
Perlで数値解析をする際,ゼロ除算を適切に扱う必要がある.Perlはv5.6.1以上であればNaNを使える.NaNはどんな演算をしてもNaNとなるが,実数NaN共にゼロ除算ではエラーを吐いて止まってしまう.ゼロ除算時にNaNを発生し伝搬させるためには,分母が0であればNaNとなる様な関数を書いてやればよい(下の例ではsub DivNaN).
ちなみに無限も'inf'として使える.
#!/bin/perl $value = 10; $value = &DivNaN($value , 20); printf("10/20= $value\n"); $value = &DivNaN('inf' , 20); printf("inf/20= $value\n"); $value = &DivNaN('nan' , 20); printf("nan/20= $value\n"); $value = &DivNaN(10 , 0); printf("10/0= $value\n"); $value = &DivNaN('nan' , 'nan'); printf("nan/nan= $value\n"); $value = &DivNaN('nan' , 0); printf("nan/0= $value\n"); sub DivNaN { my ($numerator, $denominator) = @_; if ($denominator eq 0){ return 'nan'; } else { return $numerator / $denominator; } }
% perl test.pl 10/20= 0.5 inf/20= inf nan/20= nan 10/0= nan nan/nan= nan nan/0= nan
前の投稿
ホーム
登録:
投稿 (Atom)