3.5 KiB
3.5 KiB
title | author | date | wordtwit_post_info | categories | ||
---|---|---|---|---|---|---|
スクリプト起動時に引数をもらう | kazu634 | 2007-12-08 |
|
|
とりあえず現状isbn10を決めうちして、isbn13のチェックデジットを求めるスクリプトまではできています。今回は、スクリプトを起動したときにisbn10の入力をもらって、計算できるようにしてみました(ただしエラー処理だとか、もらった値が厳密に10桁の数字なのかどうかとかは検討していません)。
調べてみた結果、perlスクリプトが起動時にもらった引数は「@ARGV」という配列に格納されるということなので、そいつを活用してやれば大丈夫そうでした。ちなみに
perl temp.pl 1406556601 1406556602
とした場合には
1 | |
---|---|
1406556601 | 1406556602 |
というように@ARGVには格納されます。その点だけ注意かな。というわけで、こんな感じになりました。
use strict; use warnings; # 変数の宣言 my $temp_isbn; my $_odd; my $_even; my $c_degit; my $temp; print @ARGV[0]; # 適当なisbn10を代入して、978をつける $temp_isbn = '978'; $temp_isbn = $temp_isbn . $ARGV[0]; print "isbn: " . $temp_isbn . "\n"; # 一桁ずつばらして配列@fooに代入 my @foo = split(//, $temp_isbn); # 奇数の処理 # @fooには13桁のisbnが入っている。配列は0-12まで。 # @foo[12]はチェックデジットなので、無視する。 print 'Odd Number: '; for (my $i = 0; $i <= 11; $i = $i + 2){ $_odd += $foo[$i]; print $foo[$i] . " "; } print "\n"; # 偶数の処理。以下同文。 print 'Even Number: '; for (my $i = 1; $i <= 11; $i = $i + 2){ $_even += $foo[$i]; print $foo[$i] . " "; } print "\n"; $temp = $_odd + ($_even * 3); print "calculating ...: " . $_odd . "+ (" . $_even . " * 3) = " . $temp . "\n"; $temp = $temp % 10; $c_degit = 10 - $temp; print $c_degit . "\n";