<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>perlとMysqlでCGI &#38; サーバ管理 漏れ的メモ &#187; ファイル操作</title>
	<atom:link href="http://perl.no-tubo.net/category/web%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0/perl/%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e6%93%8d%e4%bd%9c/feed/" rel="self" type="application/rss+xml" />
	<link>http://perl.no-tubo.net</link>
	<description>perl＆MySQLでCGIプログラミング。ウェブ運営の小技。鯖管メモもちょっとだけ。</description>
	<lastBuildDate>Mon, 23 Aug 2010 04:41:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ファイルの行数を取得する方法</title>
		<link>http://perl.no-tubo.net/2008/01/31/%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e8%a1%8c%e6%95%b0%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/</link>
		<comments>http://perl.no-tubo.net/2008/01/31/%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e8%a1%8c%e6%95%b0%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/#comments</comments>
		<pubDate>Thu, 31 Jan 2008 02:41:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ファイル操作]]></category>

		<guid isPermaLink="false">http://pet.no-tubo.net/?p=45</guid>
		<description><![CDATA[参考URLhttp://www.tohoho-web.com/lng/199912/99120066.htm
以下のように４種類考えられる

[ファイルの行数を得る方法]

ALL : ファイル全体を変数に読み込んで、改 [...]]]></description>
			<content:encoded><![CDATA[<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">参考URL<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" /><a style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #333333; text-decoration: underline; padding: 0px; margin: 0px;" href="http://www.tohoho-web.com/lng/199912/99120066.htm" target="_blank">http://www.tohoho-web.com/lng/199912/99120066.htm</a></p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">以下のように４種類考えられる</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">
<pre style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 10px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; width: 340px; overflow-x: auto; overflow-y: auto; padding: 5px; border: 2px solid #cccccc;"><br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />[ファイルの行数を得る方法]

ALL : ファイル全体を変数に読み込んで、改行の数を数える<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ARRAY : ファイル全体を配列に読み込んで、配列の要素数を数える<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />STEP : ファイルを一行ずつ読んで、行数を数える<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />WC : UNIX の wc コマンドを使う(wc --lines ファイル名)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" /></pre>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">これらのベンチマークをとるスクリプトを<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" /><a style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #333333; text-decoration: underline; padding: 0px; margin: 0px;" href="http://www.aleph.co.jp/~fujiwara/perl/lc.pl" target="_blank">http://www.aleph.co.jp/~fujiwara/perl/lc.pl</a><br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />に置いてあります。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">[行数を数える対象のファイル]<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />lc.pl (46 lines , 739 bytes)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />jcode.pl (733 lines, 19900 bytes)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />test.txt (17989 lines, 9229902 bytes)</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">[結果]<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />(Linux 2.2.13, Perl5.005_03, K6-2 400, 128MB RAM)</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">$ perl lc.pl lc.pl 10000<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />Benchmark: timing 10000 iterations of ALL, ARRAY, STEP, WC&#8230;<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ALL: 2 wallclock secs ( 0.77 usr + 0.73 sys = 1.50 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ARRAY: 5 wallclock secs ( 4.24 usr + 1.00 sys = 5.24 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />STEP: 3 wallclock secs ( 2.98 usr + 0.53 sys = 3.51 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />WC: 75 wallclock secs ( 2.15 usr 6.05 sys + 36.30 cusr 30.17 csys = 0.00 CPU)</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">$ perl lc.pl jcode.pl 1000<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />Benchmark: timing 1000 iterations of ALL, ARRAY, STEP, WC&#8230;<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ALL: 1 wallclock secs ( 0.53 usr + 0.23 sys = 0.76 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ARRAY: 8 wallclock secs ( 7.94 usr + 0.24 sys = 8.18 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />STEP: 6 wallclock secs ( 5.22 usr + 0.15 sys = 5.37 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />WC: 8 wallclock secs ( 0.14 usr 1.86 sys + 3.64 cusr 2.37 csys = 0.00 CPU)</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">$ perl lc.pl test.txt 100<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />Benchmark: timing 100 iterations of ALL, ARRAY, STEP, WC&#8230;<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ALL: 3 wallclock secs ( 2.61 usr + 0.81 sys = 3.42 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ARRAY: 30 wallclock secs (29.12 usr + 0.89 sys = 30.01 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />STEP: 21 wallclock secs (20.58 usr + 0.49 sys = 21.07 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />WC: 2 wallclock secs ( 0.01 usr 0.19 sys + 0.94 cusr 1.27 csys = 0.00 CPU)</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">[講評(笑)]<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />意外に ALL が早いです。 WC は、プロセス起動のオーバーヘッドのためか、<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ファイルが小さい場合は不利ですが、ファイルが大きくなると<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />高速ですね(&#8230;餅は餅屋)。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">この結果だけ見るなら、ファイルが比較的小さいなら ALL 、<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />大きいなら WC 、メモリ消費をできるだけ押えたいなら STEP が<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />良いようです。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">ファイルの行数を取得する一番いい方法は？(Perl5)</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">[上に] [前に] [次に]<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />CZ 1999/12/04(土) 19:11:28<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />for ($i = 0; $i &lt;= $#data; $i++) {<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />print &lt;&lt; &#8220;END&#8221;;<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ファイル名: $data[$i][0]<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />行数: $data[$i][1]<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />最初の行: $data[$i][2]<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />END<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />}</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">上のような配列@dataを得るために一番効率が良く処理が早いのはどういう方法でしょうか。ファイル中の行数を調べる段階で悩んでいます。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">自分で幾つか考えてみましたが、どれがいいでしょう。あるいは他にいい方法はないでしょうか。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">Perl5を使っています。@filesにはファイル名のリストが入っています。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">(1) 一行ずつ読み込む方法。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />for ($i = 0; $i &lt;= $#files; $i++) {<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />open(READ, &#8220;$files[$i]&#8220;);<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />$data[$i][0] = $files[$i];<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />$data[$i][1] = 0;<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />while () {<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" /># 最初の行だけ記録する<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />if ($data[$i][2] eq &#8221;) { $data[$i][2] = $_; }<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />$data[$i][1]++;<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />}<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />close(READ);<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />}</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">(2) ファイルの内容を一度に読み込み、改行の数で行数を判定する方法。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />for ($i = 0; $i &lt;= $#files; $i++) {<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />open(READ, &#8220;$files[$i]&#8220;);<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />$data[$i][0] = $files[$i];<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />read (READ, $str, (-s &#8220;$files[$i]&#8220;));<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />$data[$i][2] = substr($str, 0, index($str, &#8220;\n&#8221;));<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />$data[$i][1] = ($str =~ s|\n||g);<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />close(READ);<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />}</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">(3) ファイルの内容を一度に配列に読み込む方法。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />for ($i = 0; $i &lt;= $#files; $i++) {<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />open(READ, &#8220;$files[$i]&#8220;);<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />$data[$i][0] = $files[$i];<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />@str = ;<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />$data[$i][1] = $#str + 1;<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />$data[$i][2] = $str[0];<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />close(READ);<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />}</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">(2)と(3)はファイルの内容を一度に読み込んでしまうので負荷が大きいと思います。かといって(1)は遅そうで……。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />CZ 1999/12/04(土) 19:28:47<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />(2)の<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />&gt; $data[$i][2] = substr($str, 0, index($str, &#8220;\n&#8221;));<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />は<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />$data[$i][2] = substr($str, 0, index($str, &#8220;\n&#8221;) + 1);<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />の間違いでした。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />猫 1999/12/04(土) 23:59:56<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />この件だけの為に、ベンチマークを取ったわけではありませんが、私の（浅い）経験上では、１の方法が負荷も少なく、速度も速かったように思います。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />CZ 1999/12/06(月) 11:01:27<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />[[解決]]<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />なるほど。確かにそのようですね。最近の発言を眺めていたら、過去ログ ../199906/99060273.htm が紹介されていましたが、どんなに小さいファイルでも一気に読み込むより一行ずつ読み込む方が早そうです。ありがとうございました。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />CZ-634C TN + CZ-614D TN 1999/12/06(月) 11:42:33<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />済のところ失礼しますm(__)m<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ＵＮＩＸでバッククォートが使えるならＷＣを使うって手もあります。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />andi 1999/12/06(月) 12:45:58<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ついでに質問させて下さい！<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />use Bentchmark;<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />を使用したのですが、<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />「２７４行目のtimesを実行できない。」<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />って言われちゃいました。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />Ｗｉｎ９５＋ＡｎＨＴＴＰｄ＋Ｐｅｒｌ５じゃぁ<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />無理なんでしょうか？<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ふじ 1999/12/06(月) 15:55:44<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />＞「２７４行目のtimesを実行できない。」<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />＞って言われちゃいました。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">Perl5 のバージョンは？（コマンドラインで perl -v )<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />確か古いのでは使えなかった気が。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />＃最新の Active Perl だと大丈夫です。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />J.Naka 1999/12/06(月) 17:16:52<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />199906/99060273.txt のスクリプトを perl -wc で走らすと、以下のメッセージが出ます。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />&gt;Name &#8220;main::t&#8221; used only once: possible typo at FujiCodeORG.pl line 27.</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">バージョンは、 version 5.003_07です。何処がおかしいのでしょうか？</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">
<hr style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">サーバー上で走らすPERLスクリプトは、なるだけ一行毎処理をするが良いと解かりましたが、ローカル上のコンピューター(WIN95)占有状態でも配列等の使用はスピードという点ではメリットないのでしょうか？</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">ここいらを上記のスクリプトで確かめてみたいところです。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" /> <br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" /> もしかしてＮＴ用ライブラリだったら精度落ちますがtime()関数当たりで代用してみようかと思ってます。（実際やってみましたが、例により何故か動かん(笑)）</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">＃しかし配列処理がスピード的にはデメリットになるとは驚きです(*_*)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ふじ 1999/12/06(月) 18:39:05<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />&gt; 199906/99060273.txt のスクリプトを perl -wc で走らすと、以下のメッセージが出ます。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />&gt; &gt;Name &#8220;main::t&#8221; used only once: possible typo at FujiCodeORG.pl line 27.<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />&gt;バージョンは、 version 5.003_07です。何処がおかしいのでしょうか？</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">それは警告です。(w オプション指定しているから)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />@t てのをスクリプト内で一度しか使ってないから警告されているんですけど。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">＃私も余りよく Benchmark.pm を理解してないけど、<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />＃timethese を使うためのダミー、てことでいいのかな。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">スクリプト自体は動きませんでしたか？<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />J.Naka 1999/12/06(月) 19:58:57<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />スクリプト動きませんです。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />エラーメッセージです。意味が良く解かりません(^^;</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">&gt;Benchmark: timing 1000 iterations of ALL , STEP&#8230;<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />&gt;times not implemented at F:\Perl\lib/Benchmark.pm line 274.</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">#OSはWIN95です。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ふじ 1999/12/06(月) 21:50:03<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />&gt;スクリプト動きませんです。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />とりあえず Win95 + ActivePerl 522 では動きました。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">＃Perl5 for Win32 Build316 では同様のエラーが出て動かない、<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />＃という話が以前 CGI-ML で流れてました。それと同じかと。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />J.Naka 1999/12/06(月) 22:10:56<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ども！　ふじさん。動作するのはActiveが冠してあるやつなんですね、、、怪しいバージョンだ(笑)</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">えっと最後のお願いなんですが、199906/99060273.txt のサンプルコードの配列一気読み込みの配列をサブルーチンに入る前にあらかじめ固定領域確保をやってもらえないでしょうか？　<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />図々しいお願いは重々に承知してますんで、超お暇で気がごっつう向いた時で結構でおます(^^)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ふじ 1999/12/07(火) 02:41:07<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />&gt;固定領域確保<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />それをやっても、(あのスクリプトの場合)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />その恩恵を受けるのは何回もループする最初の1回では。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" /># 効率よく領域確保するためには、あらかじめファイルの大きさ、<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" /># 行数、各行のバイト数を調べないといけないし、それやるぐらいなら<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" /># 突っ込んじゃえ、って思うんですが (^^;</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">で、話が最初の話題からそれているので、今までの経緯を参考にまとめます。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">[ファイルの行数を得る方法]</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">ALL : ファイル全体を変数に読み込んで、改行の数を数える<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ARRAY : ファイル全体を配列に読み込んで、配列の要素数を数える<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />STEP : ファイルを一行ずつ読んで、行数を数える<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />WC : UNIX の wc コマンドを使う(wc &#8211;lines ファイル名)</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">これらのベンチマークをとるスクリプトを<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" /><a style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #333333; text-decoration: underline; padding: 0px; margin: 0px;" href="http://www.aleph.co.jp/~fujiwara/perl/lc.pl" target="_blank">http://www.aleph.co.jp/~fujiwara/perl/lc.pl</a><br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />に置いてあります。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">[行数を数える対象のファイル]<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />lc.pl (46 lines , 739 bytes)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />jcode.pl (733 lines, 19900 bytes)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />test.txt (17989 lines, 9229902 bytes)</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">[結果]<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />(Linux 2.2.13, Perl5.005_03, K6-2 400, 128MB RAM)</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">$ perl lc.pl lc.pl 10000<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />Benchmark: timing 10000 iterations of ALL, ARRAY, STEP, WC&#8230;<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ALL: 2 wallclock secs ( 0.77 usr + 0.73 sys = 1.50 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ARRAY: 5 wallclock secs ( 4.24 usr + 1.00 sys = 5.24 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />STEP: 3 wallclock secs ( 2.98 usr + 0.53 sys = 3.51 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />WC: 75 wallclock secs ( 2.15 usr 6.05 sys + 36.30 cusr 30.17 csys = 0.00 CPU)</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">$ perl lc.pl jcode.pl 1000<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />Benchmark: timing 1000 iterations of ALL, ARRAY, STEP, WC&#8230;<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ALL: 1 wallclock secs ( 0.53 usr + 0.23 sys = 0.76 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ARRAY: 8 wallclock secs ( 7.94 usr + 0.24 sys = 8.18 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />STEP: 6 wallclock secs ( 5.22 usr + 0.15 sys = 5.37 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />WC: 8 wallclock secs ( 0.14 usr 1.86 sys + 3.64 cusr 2.37 csys = 0.00 CPU)</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">$ perl lc.pl test.txt 100<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />Benchmark: timing 100 iterations of ALL, ARRAY, STEP, WC&#8230;<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ALL: 3 wallclock secs ( 2.61 usr + 0.81 sys = 3.42 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ARRAY: 30 wallclock secs (29.12 usr + 0.89 sys = 30.01 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />STEP: 21 wallclock secs (20.58 usr + 0.49 sys = 21.07 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />WC: 2 wallclock secs ( 0.01 usr 0.19 sys + 0.94 cusr 1.27 csys = 0.00 CPU)</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">[講評(笑)]<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />意外に ALL が早いです。 WC は、プロセス起動のオーバーヘッドのためか、<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ファイルが小さい場合は不利ですが、ファイルが大きくなると<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />高速ですね(&#8230;餅は餅屋)。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">この結果だけ見るなら、ファイルが比較的小さいなら ALL 、<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />大きいなら WC 、メモリ消費をできるだけ押えたいなら STEP が<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />良いようです。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">以下全ログ</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;"><span id="more-45"></span></p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;"># いちおう、WindowsNT環境でもやってみましたが(除 WC)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" /># まったく同じ傾向です。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">長々と失礼しました。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />andi 1999/12/07(火) 12:50:22<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />自分も500307でしたが<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />結局使えないって結論なんですね？<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />残念です。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">何か他に良い方法ってありますでしょうか。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />性能を測る手段。こういうの詳しくないもので。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />CZ 1999/12/07(火) 13:01:12<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />うーん、すごい。勉強になります。プラットフォームを問わないスクリプトを書きたいことと、対象とするそれぞれのファイルがあまり大きくないので、WCは使わないこととします。となるとALLかSTEPですね。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">ふじさんのlc.plを私の意図するスクリプトに改造して実験しました。環境はWindows95＋Perl5.005_03です。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">2ファイル、45行（44行+1行）、30.2KB<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />&gt;perl lc.pl dir1 1000<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />Benchmark: timing 1000 iterations of ALL, ARRAY, STEP&#8230;<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ALL: 37 wallclock secs (36.97 usr + 0.00 sys = 36.97 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ARRAY: 29 wallclock secs (29.44 usr + 0.00 sys = 29.44 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />STEP: 27 wallclock secs (26.31 usr + 0.00 sys = 26.31 CPU)</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">8ファイル、799行（各100行程度）、299KB<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />&gt;perl lc.pl dir2 200<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />Benchmark: timing 200 iterations of ALL, ARRAY, STEP&#8230;<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ALL: 20 wallclock secs (19.22 usr + 0.00 sys = 19.22 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ARRAY: 42 wallclock secs (42.40 usr + 0.00 sys = 42.40 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />STEP: 23 wallclock secs (23.35 usr + 0.00 sys = 23.35 CPU)</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">23ファイル、2243行（各100行程度）、1.36MB<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />&gt;perl lc.pl dir3 100<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />Benchmark: timing 100 iterations of ALL, ARRAY, STEP&#8230;<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ALL: 24 wallclock secs (23.51 usr + 0.00 sys = 23.51 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ARRAY: 50 wallclock secs (50.42 usr + 0.00 sys = 50.42 CPU)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />STEP: 34 wallclock secs (33.89 usr + 0.00 sys = 33.89 CPU)</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">こうするとやはりALLが早いみたいです。でも共用サーバーで使う場合にはメモリを食わない方が重要な気がします。STEPの処理速度も（ファイル構成がこちらの意図通りである限りにおいては）ALLと比べて三分の一程度の違いなので、許容範囲かと思います。それで、結論としては(1)の一行ずつ読み込む方法を採用したいと思います。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">いろいろと教えてくださりありがとうございました。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />J.Naka [E-Mail] 1999/12/07(火) 14:13:12<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ども！　ふじさん、ＣＺさん、興味深い実験レポート有り難う御座います。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />#連続した１つ領域である１ッコの文字列変数が結構早いというのは納得いきます。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">え～、自分で実験できないのが残念至極なのですが、配列が遅い理由を推察 to 列挙してみたいと思います。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />#少し混乱してる所は堪忍です(^^;　誰かもっとスマートに纏めてくれると嬉しい。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">1.perlの配列は物理メモリ上に連続確保されるものではない。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" /> perlは文字列と数値を同一に扱うために全ての変数は文字列（これ自体が配列なわけ）領域してメモリ上の散在的に取られる。結果、これへのアクセスはポインタの追っかけが生じるためにダイレクトアクセスと同等のポテンシャルは無い。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">2.perlの変数アクセス（配列を含む）は常に文字列としてのアクセスがある。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" /> これは、配列格納時に要素毎に文字列処理が必要という事で、これがスピードの足かせになる。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">3.perlではファイルハンドルから配列へ一括読み込みの場合、一行チェック（改行サーチ）が同時に行われる仕様である（当たり前(^^;）。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" /> この時のチェックコードがどの程度の性能を持つのか怪しい、ひょっとしてタコなルーチンかもしれない。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">4.perlでは、配列などの単純変数よりも複雑な構造を持つ物でも、オブジェクト指向のObjectのようには内部にその諸々の属性は静的に保持してなく、結果としてアクセス毎に常に、配列の各要素を算出しなおす作業が生じ、これがスピード低下になっている。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">
<hr style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" /><br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ふじさん、<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />&gt;それをやっても、(あのスクリプトの場合)<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />&gt;その恩恵を受けるのは何回もループする最初の1回では。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ループの外であらかじめ、大き目の領域を持つ文字列の配列として確保。という意味でしたが、配列要素格納時点で、領域調整が行われれば、意味ないですね(^^;いわゆるガベージコレクションというやつになるのでしょうか。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">えーと、結論というか最終見解というか（それほどのものではない(^^;）ですが、文字列配列生成時には、文字列の格納に文字列領域確保作業が生じるので１変数領域生成よりは時間がかかるのは当然ですが、生成後にその文字列を伸縮しないアクセスのみであれば配列のスピードメリットはでるはずでよすね。これが無いと全くなんの配列か解からない。単にソース上表記の簡略化＆ロジック簡略化の為の物に成り下がりますね。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />ふじ 1999/12/07(火) 14:51:35<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />&gt; 単にソース上表記の簡略化＆ロジック<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />&gt; 簡略化の為の物に成り下がりますね。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />データ構造が見通しよく記述できるってのは**大きな**メリットでは？</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;">要素の大きさも数も不定の配列に、自由に push pop 等<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />が行えるのは、アルゴリズムを素直にコーディングする上で非常に楽です。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />そのために実行速度が犠牲になるのは仕方ないでしょう。<br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />速度が欲しければ C や C++ で書けば良いんですから。</p>
<p style="margin-top: 10px; margin-right: 12px; margin-bottom: 10px; margin-left: 12px; font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #444444; line-height: 1.4; padding: 0px;"># 開発速度は上がりますよ <img src='http://perl.no-tubo.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> <br style="font-size: 13px; font-weight: normal; font-style: normal; font-family: Verdana, 'ヒラギノ角ゴ Pro W3', 'ＭＳ ゴシック', Osaka‐等幅; text-align: left; color: #111111; padding: 0px; margin: 0px;" />[上に] [前に] [次に]</p>
]]></content:encoded>
			<wfw:commentRss>http://perl.no-tubo.net/2008/01/31/%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e8%a1%8c%e6%95%b0%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>flock()を使った強固な排他処理(ファイルロック)</title>
		<link>http://perl.no-tubo.net/2006/10/22/flock%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e5%bc%b7%e5%9b%ba%e3%81%aa%e6%8e%92%e4%bb%96%e5%87%a6%e7%90%86/</link>
		<comments>http://perl.no-tubo.net/2006/10/22/flock%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e5%bc%b7%e5%9b%ba%e3%81%aa%e6%8e%92%e4%bb%96%e5%87%a6%e7%90%86/#comments</comments>
		<pubDate>Sun, 22 Oct 2006 05:08:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[ファイル操作]]></category>

		<guid isPermaLink="false">http://pet.no-tubo.net/?p=10</guid>
		<description><![CDATA[perlで排他処理（ファイルロック）を行う場合様々な方法があります。
昔のレンタルサーバの場合はflock()が使えない環境などがあり、
symlinkやmkdirを使った処理が多くありました。
しかし、スピード・信頼性 [...]]]></description>
			<content:encoded><![CDATA[<p>perlで排他処理（ファイルロック）を行う場合様々な方法があります。</p>
<p>昔のレンタルサーバの場合はflock()が使えない環境などがあり、<br />
symlinkやmkdirを使った処理が多くありました。</p>
<p>しかし、スピード・信頼性に優れていて、現代どこのサーバ（Unix系の）でも使えるであろうflockを使わない手はないと思います。</p>
<p><span style="color: #ff0000;">flockなんか壊れる、信頼しない…使い方は間違っていませんか？</span></p>
<p>まずは各ロック方式の特徴を</p>
<blockquote><p>■ symlink<br />
・遅い。<br />
・ロックしたままの状態（ロック用シンボリックリンク）が残る可能性がある。<br />
・サーバーによっては使えない場合がある。</p></blockquote>
<blockquote><p>■ mkdir<br />
・遅い。<br />
・ロックしたままの状態（ロック用ディレクトリ）が残る可能性がある。<br />
・処理全体をロックする場合に便利。<br />
・どの環境でも使用できる。</p></blockquote>
<blockquote><p>■ flock<br />
・速い。<br />
・アンロックし忘れが無い。</p></blockquote>
<p>■サンプルソース<br />
flockは完了するまで永遠と処理を待ち続けるため10秒のアラーム処理を入れ10秒以内に完了しなければタイムアウトとしました。<br />
この処理は強力でまずファイルが壊れる事はありません。</p>
<p>このファイルロックを使い、10万PV/日でも壊れませんでした。<br />
ただし、ロック処理の間に他のファイルを開く時にはファイルハンドル（サンプルでは&#8221;FILEHANDLE&#8221;）を変える必要があります。</p>
<p>これを怠ると必ずファイルが壊れます。</p>
<pre>#ロック処理開始
eval {
local $SIG{ALRM} = sub { die "timeout" };
alarm 10;#アラームを10秒に設定
#ログ読み込み&amp;ロック
open(FILEHANDLE,"+&lt;"); #読み書きモードでファイルオープン
flock(FILEHANDLE, 2);  #ロック確認 ロック
@data = &lt;FILEHANDLE&gt;; #@dataに読み込み
alarm 0;
};
alarm 0;#アラーム解除
if($@) {&amp;error;}; # タイムアウト時の処理 別にsub errorが必要になる

#〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
#　　ここにロック中に行う処理
#〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

seek(FILEHANDLE, 0, 0);  # ファイルポインタを先頭にセット
print FILEHANDLE @data;  # ファイルに書き込む
truncate(FILEHANDLE, tell(FILEHANDLE));  # ファイルサイズを書き込んだサイズにする
close (FILEHANDLE);  #closeで自動にロック解除</pre>
]]></content:encoded>
			<wfw:commentRss>http://perl.no-tubo.net/2006/10/22/flock%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e5%bc%b7%e5%9b%ba%e3%81%aa%e6%8e%92%e4%bb%96%e5%87%a6%e7%90%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
