blog/content/post/2007/12/08/2007-12-08-00000674.md

110 lines
3.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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
---
<div class="section">
<p>
 とりあえず現状isbn10を決めうちして、isbn13のチェックデジットを求めるスクリプトまではできています。今回は、スクリプトを起動したときにisbn10の入力をもらって、計算できるようにしてみましたただしエラー処理だとか、もらった値が厳密に10桁の数字なのかどうかとかは検討していません
</p>
<p>
調べてみた結果、perlスクリプトが起動時にもらった引数は「@ARGV」という配列に格納されるということなので、そいつを活用してやれば大丈夫そうでした。ちなみに
</p>
<blockquote>
<p>
perl temp.pl 1406556601 1406556602
</p>
</blockquote>
<p>
とした場合には
</p>
<table border="1">
<tr>
<th>
</th>
<th>
1
</th>
</tr>
<tr>
<td>
1406556601
</td>
<td>
1406556602
</td>
</tr>
</table>
<p>
というように@ARGVには格納されます。その点だけ注意かな。というわけで、こんな感じになりました。
</p>
<pre class="lang:perl decode:true">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 &lt;= 11; $i = $i + 2){
$_odd += $foo[$i];
print $foo[$i] . " ";
}
print "\n";
# 偶数の処理。以下同文。
print 'Even Number: ';
for (my $i = 1; $i &lt;= 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";</pre>
<h4>
関連記事
</h4>
<ol>
<li>
<a href="http://d.hatena.ne.jp/sirocco634/20071202#1196605129" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20071202#1196605129', 'isbn10 &#8211;> isbn13');" target="_blank">isbn10 &#8211;> isbn13</a> <ol>
<li>
<a href="http://d.hatena.ne.jp/sirocco634/20071203#1196608244" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20071203#1196608244', 'というわけで少し頑張ってみた');" target="_blank">というわけで少し頑張ってみた</a> <ol>
<li>
<a href="http://d.hatena.ne.jp/sirocco634/20071206#1196942024" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20071206#1196942024', 'ちょっとミスしてた');" target="_blank">ちょっとミスしてた</a>
</li>
</ol>
</li>
</ol>
</li>
</ol>
</div>