--- title: スクリプト起動時に引数をもらう author: kazu634 date: 2007-12-08 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";s:1:"1";s:5:"delay";s:1:"0";s:7:"enabled";s:1:"1";s:10:"separation";i:60;s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:3423;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - Perl ---
とりあえず現状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";