トップページ⇒php
1001コメント331KB

【Perl】初心者コーナー Part18

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/11/20 22:04ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/

過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0175nobodyさん02/12/03 01:13ID:???
>>171さんの方法は1行でスマートだけど、

if($day < 10){$day = "0$day";}

なんて方法は最悪の部類ですよ。かなりひどい本だと
断定してもいいです。たぶんこれもkent-webのソース
をダサいままぱくってるのかな?
0176nobodyさん02/12/03 01:18ID:ZhYTYd9T
マッチについての質問です。
データファイルを読み込んで、任意の数字がある場合のみprintしたいと思っています。
for(@log){
if($_ =~ /$num/){
print "$_";
}
}
これでやると、$num=10;とした時、100や101、102....もマッチしてしまいます。
10なら10だけをマッチさせたいのですが可能でしょうか?
0177nobodyさん02/12/03 01:27ID:???
変数たくさんあるの嫌いな漏れはこう書くな。。
後で必要なのは$timeだけだよね?

($min, $hour, $day, $mon, $year) = (localtime time)[1..5];
$time = sprintf "%s, %02d-%s-%d, $02d:%02d".
qw(Sun Mon Tue Wed Thu Fri Sat)[$wday], $day,
qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)[$mon],
$year+1900, $hour, $min;
0178nobodyさん02/12/03 01:29ID:???
>>176
区切り文字とかってないの?どんなデータファイル?
いちおう /\D$num\D/ で可能だとは思うが
行頭と行末の場合はヒットしないので注意。
017917602/12/03 01:44ID:???
>>178
データファイルは掲示板の書き込みのような文章です。
その文章中(記事番号とかではなくて)に任意の数字がある場合にマッチさせたいのです。

/\D$num\D/を使ったらうまくいきそうです。
ありがとうございました。
0180nobodyさん02/12/03 02:26ID:???
自由度はせばまるが、だいたいは日付の出力はこれでやっている。

$t = localtime;
print $t, "\n";
0181nobodyさん02/12/03 13:18ID:???
htmlの表形式でファイル名と更新日をソートして書き出すというのを
前スレでおしえてもらったのを使いつつやってみてるんですが、、、
perl書くの初めてなんで全然分からず行き詰まり。どなたか助けてください。

my $output = "aaa.html";
open (OUTPUT, ">$output") || die "Could not open file $output : $!\n";

print OUTPUT "(HTMLヘッダ部〜<table>まで)";
print OUTPUT "<tr><th>No.</th><th>filename</th><th>update</th></tr>\n";

my $now = time;
my %files;
opendir(DIR, '.');
while (readdir(DIR)) {
if (($_ =~ /.txt$/i) && ($_ ne "readme.txt")){
$files{$_} = (stat($_))[9];
}
}
closedir(DIR);
0182nobodyさん02/12/03 13:18ID:???
<続き>
foreach $key (reverse sort {$files{$a} <=> $files{$b}} keys %files) {
# このへん分からない
my $last_date = $files{$key};
my $ptime = int(eval(($now - $last_date)/86400));
$title = $key;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($last_date);
$year = eval($year + 1900);
$mon = eval($mon + 1);
substr($title,-4,4) = "";
print OUTPUT "<tr>\n<td align=\"center\">$i</td>\n";
print OUTPUT "<td>$title</td>\n";
print OUTPUT "<td align=\"center\">$year年$mon月$mday日</td>\n</tr>\n";
# ??
}

(以下続きがある予定)

print OUTPUT "(タグ閉め)\n";
close (OUTPUT);
0183nobodyさん02/12/03 13:37ID:???
>>182
なんでそんなにイバルんだよ!
0184nobodyさん02/12/03 13:41ID:???
>>181-182
なにがわからないのかわからん。
とりあえず$iはずっと''だと思うが。
0185nobodyさん02/12/03 15:16ID:???
すいません。
>print OUTPUT "<tr>\n<td align=\"center\">$i</td>\n";
の行はいらないんで、$iは無視してください。

sortしたのをforeachでちゃんと回るようにしたいんですが。
0186nobodyさん02/12/03 18:16ID:???
どうしてちゃんと回ってないと?
新しい順に並ばないか?
0187 02/12/03 21:04ID:???
foreach() 以下の{ }の中が間違ってるぽいんですが
どこをどう直せばいいのかも分からず。。
0188nobodyさん02/12/03 21:12ID:???
>187
プログラミングPerlを買ってきて読め。
それで全て解決。
0189184=18602/12/03 22:07ID:???
だからさ。
このスクリプトなら新しい順に並ぶでしょう?
並ばないなら、どうなるのか教えて欲しい。エラーが出るのか?
で、最終的にどうしたいわけよ。

%filesにどんな値が入るか観察してみるとわかるかもな。
0190 02/12/03 22:57ID:???
並べ替えた順にファイル名と更新日を<table>の形で出力したいんですけど、
実行して生成されるhtml見ると、この部分(foreach(){ }の中)が抜けてて、
ヘッダとフッタの部分だけになっちゃうんで。。
0191nobodyさん02/12/03 23:23ID:lLuHX1/s
$time = localtime;

$time(10桁の数値)を出来るだけ少ないバイト数に可逆圧縮したいのですが、
どうすればよいでしょうか。
例えば16進数で表記すると、
1037797479(10byte) → 3DDB8867(8byte)
で2byte縮むことになります。
ただ、圧縮後の数値は aタグにのせてリンクするので、(<a href=test.cgi?i=3DDB8867>)
URLに使えない文字だと駄目なのですが。

よろしくお願いします。
0192nobodyさん02/12/03 23:33ID:???
>>191
そんなことをする意味は……それは言わんでおくか。

URLに使える文字のテーブルを作って、仮にそれが50個あった場合は
timeの数値を50進数に変換したあと、テーブル引いて文字化する。
受け取る側では逆のことをやる。これなら5〜6文字ぐらいにできるんでない?
0193nobodyさん02/12/03 23:38ID:???
>>181
foreach (readdir(DIR)) {
0194nobodyさん02/12/04 00:01ID:???
>>192
ありがとうございます。
目的は携帯サイトの2k制限を如何にクリアするか、ということなんです。
その為にHTMLに出力する部分は出来るだけ文字数を落としたいのです。

(0..9,a..z,A..Z,_,-)
仕様上URLでそのまま送れる文字は上記と、'.'、'*'だけみたいですので、
そうなると64進数が限界でしょうか。。
ご意見ありがとうございました。
0195nobodyさん02/12/04 00:09ID:???
>>194
4バイトにできるだろ

ちなみに以下は10桁の数値が代入されることはないと思うが
$time = localtime;
0196nobodyさん02/12/04 00:14ID:???
>>195
あ゛あ゛あ゛恥ミス発見!
ご指摘の通り $time = time; でした。

64^4 = 16777216
で、10桁は表現できないと思うのですが・・
4バイトで表現するにはどうしたらいいんでしょうか?
019718902/12/04 00:23ID:???
>>199
おお。すまん。
foreachと言うのでそこばかり気にしていたよ。

while (readdir(DIR)) {
を>>193のように
foreach(readdir DIR){
とするか
while($_ = readdir DIR){
としてみれば解決すると思うぞ。
0198nobodyさん02/12/04 01:33ID:???
>>196
1970年のデータが必要かどうか判りませんが、
もし最近のものならその数字(timeの戻り値)自体を減らしてみてはどうでつか?
$time = time - 946684800;
2000年01月01日午前00時00分00秒を0とするとか。
0199nobodyさん02/12/04 01:33ID:???
>>196
>>195は、timeの値が4バイトだと言ってる。つまり32ビット。
で、64通り=6ビットの場合、6文字必要。
でも、何十年も使う訳じゃないだろうから、timeから1000000000を
引いた値を5文字(30ビット)で格納、でどうかな。
020019902/12/04 01:34ID:???
うわ。もろかぶった。
1時間前のカキコに…笑
020118102/12/04 09:10ID:???
ありがとうございます。できました。
020219602/12/04 11:17ID:???
>>198-199
なるほど!理解できました。
確かに最近のものだけなので、timeの戻り値を減らしてみます。
この度はどうもありがとうございました。
またよろしくお願いいたします。
0203nobodyさん02/12/04 15:23ID:???
単純に10回、回したい時、
for (1..10){
 print "うんこ\n";
}
こういう書き方はありですか。
0204nobodyさん02/12/04 15:48ID:???
>>203
あり
0205nobodyさん02/12/04 18:01ID:7+5xaubm
perlソース中の定数を、外部ファイルに書き出して扱いたいんだけど、
linuxの設定ファイルでよくある「.conf」ってなにか規格があるの?
perlから簡単に扱えるようなモジュールはありますか?
0206nobodyさん02/12/04 20:05ID:???
>>205
意味があまりよく判りませんが、「.pl」や「.cgi」など、AddHandlerで設定した拡張子にしておくと、直接ブラウザで見られたときに、エラーが返ってくるので安心かもしれません。
0207nobodyさん02/12/04 20:41ID:???
>>205
Windowsでいうところの.iniやMac OS Xでよく使われているようなplist
みたいに、設定ファイルのデファクトスタンダードな規格はあるのか?
ってことでしょ? 無いと思う。

CPANにいけば、設定ファイルをごにょごにょするモジュールはいっぱい
あるので、検索してみることをお勧め。
0208nobodyさん02/12/05 02:20ID:???
>>205
ここに有るものを好きに選ぶよろし
http://cpan.org/modules/by-category/02_Perl_Core_Modules/Config/
02091/2 長文すいません。。02/12/05 04:48ID:jP9xslt3
foreach (1 .. 3) {
timethese(1000, {
foreach => sub {
open(FILE, '/test.data');
my @data = <FILE>;
close FILE;
foreach (@data) {
tr/E//;
s/a/e/g;
}
},

while => sub {
open(FILE, './test.data');
while (<FILE>) {
tr/E//;
s/a/e/g;
}
close FILE;
},

});
}

02102/2 長文すいません。。02/12/05 04:48ID:jP9xslt3
Benchmark: timing 1000 iterations of foreach, while...
foreach: 2 wallclock secs ( 0.19 usr + 1.21 sys = 1.40 CPU) @ 713.78/s (n=1000)
while: 2 wallclock secs ( 0.46 usr + 1.72 sys = 2.18 CPU) @ 457.88/s (n=1000)
Benchmark: timing 1000 iterations of foreach, while...
foreach: 1 wallclock secs ( 0.22 usr + 1.12 sys = 1.34 CPU) @ 745.71/s (n=1000)
while: 2 wallclock secs ( 0.55 usr + 1.59 sys = 2.14 CPU) @ 466.42/s (n=1000)
Benchmark: timing 1000 iterations of foreach, while...
foreach: 1 wallclock secs ( 0.21 usr + 1.19 sys = 1.40 CPU) @ 713.78/s (n=1000)
while: 3 wallclock secs ( 0.52 usr + 1.71 sys = 2.23 CPU) @ 447.63/s (n=1000)

foreach の方が速いんですけど、Benchmark の使い方間違っていますか?
この2つではよく while を使えといわれますが、それは速さではなくて別の要因があるからなんでしょうか?
配列にいれると大きなファイルだとメモリを圧迫するとか。
whileで回すとその心配はないのかな?
0211209-21002/12/05 04:51ID:???
あれっ!?foreach のパスが間違ってる!!
やっぱりwhile のほうが速いですね・・・・。
すいませんでした。。
0212nobodyさん02/12/05 09:57ID:???
>>111さん
有難うございました。
0213正規表現・・・・02/12/05 13:08ID:vPIO4lyL
だみだ。正規表現ってさっぱりわかんねぇ。

$test =<<"TEST";
ここから始まりです。
<FOO>
hogehogehoge
hogehogehoge
hogehogehoge
</FOO>
ここで終わりです。
TEST

という文字列から<HOGE>から</HOGE>までを抜き出したい場合。
Perlでどんな風にかきゃいいんでしょう?

正規表現道場過去ログには
m[<FOO>.*?</FOO>]sのようにすればイイみたいな事が書いてあるんだけど

$test =~ m[<FOO>.*?</FOO>]s;
print $test;

てな感じでやってみると、$testはなにもされてません。
0214nobodyさん02/12/05 13:14ID:???
$test =~m[<FOO>(.*?)</FOO>]s;
print $1;
0215nobodyさん02/12/05 13:15ID:???
$test =~ m[(<FOO>.*?</FOO>)]s;
print $1;
0216正規表現・・・・02/12/05 13:31ID:vPIO4lyL
なるほどぉ。特殊変数ってのはそう言う意味だったのかぁ。
感謝です。
0217nobodyさん02/12/05 15:55ID:34DLd1c6
教えて下さい。
ファイルオープンでエラーが出た場合に
処理を続行したいのですがエラーをクリアーする
関数などはあるのでしょうか?
また、読み込みの場合でもファイルロックをかける必要は
あるのでしょうか?
0218nobodyさん02/12/05 16:19ID:???
> ファイルオープンでエラーが出た場合に
> 処理を続行したいのですが

開けなかった場合中断するってな風にプログラムしてなきゃ普通に処理を続行しますが。

>また、読み込みの場合でもファイルロックをかける必要は
>あるのでしょうか?

読み込みしかしないファイルなら必要ありません。
更新されるファイルならした方がよいでしょう。
0219nobodyさん02/12/05 16:58ID:34DLd1c6
>>218さんありがとございました。
勉強になりました
0220nobodyさん02/12/05 18:12ID:x3XgL2vW
すみませんが、
Jcode.pmをniftyで動かす方法を、教えていただけないでしょうか。
0221nobodyさん02/12/05 22:49ID:???
CGI(掲示板スクリプト)をtaintモードで動かしたいのですが、
#!/usr/local/bin/perl -T
とするとエラーになって動作ません。
原因としてどんなことが考えられるのでしょうか?
0222nobodyさん02/12/05 23:03ID:qFEbS8pn
DB_File.pmが必要なんですがプロバイダにインストールされてません。
これってプロバイダに言えばインストールしてくれるもんでしょうかね?
諦めて自宅鯖にしたほうがよいですかね?
0223nobodyさん02/12/05 23:07ID:???
>>220
Niftyは標準モジュールも入ってないし無理じゃない?

>>221
Tオプションの意味が分かるなら答えもおのずと分かりそうなモンですが。

>>222
プロバイダによってポリシーが違うだろうし、プロバイダに聞けとしか言いようがない。
0224nobodyさん02/12/05 23:07ID:???
>>222
だ・か・ら そういうことって、まずプロバイダに聞けばいいことじゃん
022522302/12/05 23:09ID:???
>>224
ふしだらものですがよろしくお願い致します
0226nobodyさん02/12/05 23:10ID:???
>>223
>Tオプションの意味が分かるなら答えもおのずと分かりそうなモンですが。
以外とそうでもないようです。
0227nobodyさん02/12/05 23:17ID:???
それどころか質問の仕方も分からない、と。

エラーメッセージぐらい書いても罰あたらんだろうに。
0228nobodyさん02/12/05 23:20ID:???
どうせ汚染チェックしてないとかアホ理由だろ。
0229nobodyさん02/12/05 23:27ID:???
ちょっと動揺してたのでテンプレの存在を忘れてますた。おめんなさい。
1:自分はこう言う事がしたい。
掲示板のフォームから送られてくるデータの汚染チェックをしたい。

2:それでこんな風にやってみたが・・・
#!/usr/local/bin/perl -T
としてみた。

3:それだとこんなエラーが出て上手く行かなかった。
The script did not produce proper HTTP headers.
Please see the error log to see the detail of the errors.

あと226は多分漏れじゃない誰かです。
0230nobodyさん02/12/05 23:39ID:???
The script did not produce proper HTTP headers.
Please see the error log to see the detail of the errors.

適切なHTTPヘッダを吐いてない。
エラーの詳細はエラーログで見れ。

って書いてるじゃん。
0231nobodyさん02/12/05 23:41ID:???
>>229
エラーメッセージを読め。
簡単な英語くらい理解すれ!
辞書引け!
0232nobodyさん02/12/06 00:35ID:???
perlで下記のようにモジュールを作る場合、別ファイルのあるモジュールからは
MODULEしか使わないのですが、require 'aa.pl' と use MODULE; では速度や
負荷は変わらないですか?

aa.plの内容
#------↓ここから
packege MODULE;
・・・
1;

package MODULE2;
・・・
1;
#------↑ここまで
0233nobodyさん02/12/06 00:41ID:???
1; が二つある。。
0234nobodyさん02/12/06 00:46ID:???

aa.plをuse MODULE;では呼び出せないと思うが。
023523202/12/06 00:50ID:???
スマソ。

a.pm
--------------------
package MODULE;
・・・

package MODULE2;
・・・
1;
-------------------

b.pl
-------------------
use MODULE; # または require 'a.pm';
         # MODULE2は使用しない。
0236nobodyさん02/12/06 01:07ID:???
えーとa.pmなら

use a;

になると思うのですが。
でOOPなら
$hoge1 = new MODULE;
$hoge2 = new MODULE2;

$a = $hoge1->hoge( $xxx );

とかに
単に関数を呼び出すだけなら

$a = MODULE::hoge();
$b = MODULE2::hoge();
023723202/12/06 01:11ID:???
>>236
ありがとうございます。基本的に間違ってますた。
で、requireとuseでは速度・負荷的には変わりないんでしょうか?
0238nobodyさん02/12/06 01:38ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0239nobodyさん02/12/06 01:40ID:???
条件によっては読まんモンはrequireで条件分岐後に読み込んだ方が
余計なの読まないから良いんでない?
サブルーチンをインポートする必要がなければ、だけど。

あとは大差無いかと。
0240nobodyさん02/12/06 07:37ID:???
use だとinitにパラメタを渡せるのがちょい便利。
0241nobodyさん02/12/06 11:46ID:yzLDpzsK
$aiueo = "1■2■■■3■4■5■■■";
@values = split(/■/, $aiueo);
$i = 0;
foreach $value (@values){
 if($value eq ""){
  @values[$i] = "NULL";
 }
 print "$i : @values[$i]\n";
 $i++;
}
これを実行すると、
0 : 1
1 : 2
2 : NULL
3 : NULL
4 : 3
5 : 4
こう表示されます。
しかし、最後の5以降はsplitでは無視されてしまうようです。
自分としては
0 : 1
1 : 2
2 : NULL
3 : NULL
4 : 3
5 : 4
6 : NULL
7 : NULL
8 : NULL
としたいのですが可能でしょうか。
0242nobodyさん02/12/06 12:01ID:???
>>241
ものすごく安易な解ですがsplitする前に
$aiueo .= "EOL";
とかで後ろに文字をくっつけておいて、
splitした後にpopしてやると逃れることは
できます。

$aiueo = "1■2■■■3■4■5■■■";

$aiueo .= "EOL"
@values = split(/■/, $aiueo);
pop @valures;

$i = 0;


という感じです。
0243nobodyさん02/12/06 12:11ID:???
>>242
なるほど。確かに単純で確実ですね。
プログラムはアイデア勝負ですね。ありがとうございます。
0244nobodyさん02/12/06 12:20ID:q7PjCrzt
画像投稿型掲示板cgiのスクリプトなんですが、
サーバに保存するファイル名に投稿された時間を反映させるには(img200212061220.jpgのように)、
どのような記述が必要ですか?
0245nobodyさん02/12/06 13:24ID:???
>>244
スクリプトを見ないとわからん
こんな感じで作った文字列をファイル名につけてやりゃいいんじゃないの

@date = reverse((localtime)[1..5]);
$date[0] += 1900; $date[1]++;
$now = sprintf "%4d%02d%02d%02d%02d", @date;
0246nobodyさん02/12/06 13:27ID:???
>244
マルチは市ね
024724402/12/06 13:44ID:y8w9Rsa1
>>245

ありがとうございました。やってみます。
0248bloom02/12/06 13:47ID:7xw6gZYB

http://www.agemasukudasai.com/bloom/
024924202/12/06 15:19ID:0nNWvukl
なんか気になっていたんですが、>>242はバグありですね。
あのコードじゃ

$aiueo = "1■2■■■3■4■5■■■6";
とかのときに最後の値を捨ててしまいますんで、
後ろにくっつけるのは区切り記号込みにしないと
だめですね。

$aiueo .= "■EOL"
@values = split(/■/, $aiueo);
pop @valures;

で、うまくいくはず。
0250nobodyさん02/12/06 15:40ID:???
>>241
*もし*要素数が一定なのなら、素直にsplitに第3引数を渡すっていう手も。
0251nobodyさん02/12/06 15:41ID:???
$aiueo = "1■2■■■3■4■5■■■";
@values = map($_||'NULL', $aiueo=~/(.*?)■/g);
0252nobodyさん02/12/06 17:08ID:zqw+GwyU
perl5.6で、困っています。
ある文字(\x{100}以上かもしれない)が大文字か小文字か判定したいのですが、たとえば
「任意のアルファベット大文字1文字に一致するメタ表現」などはないんでしょうか。
それとも、UnicodeData.txtをいちいち読まなければならないんでしょうか。
0253nobodyさん02/12/06 17:50ID:???
掲示板を作っています。
改行数の多い書き込みは
「省略されました。全部読むには(略」 という感じで省略表示したいのですが
任意の改行数までを取得するにはどうすればいいでしょうか。
よろしくお願いします。
0254nobodyさん02/12/06 18:04ID:???
>253
改行でsplitとか・・・、色々あるでしょ。
何故思いつかん?
0255nobodyさん02/12/06 18:19ID:???
>>254
初心者コーナーだし別にいいじゃん。
0256nobodyさん02/12/06 18:35ID:???
Perlでスマートに最小値を求めるにはどうすればいいんでしょうか?
0257nobodyさん02/12/06 18:39ID:???
>>256 何の?
025825602/12/06 18:40ID:???
整数です。
0259nobodyさん02/12/06 18:43ID:???
>258
1だろ。
0260nobodyさん02/12/06 18:44ID:???
>>256
スマートかどうか知らんが、sortじゃだめなんですか?

sub numerically { $a <=> $b; }
@sorted = sort numerically LIST;

これで、最小値が@sortedの先頭に来ます。
026125602/12/06 18:55ID:???
>>260
ありがとうございます。
高度すぎて理解できてませんが、sortでやってみます。
0262nobodyさん02/12/06 19:01ID:???
>>260
それでは、あるリストの要素の最小値を求めることはできるけど、
「整数」の最小値を求めることはできないでしょう。
0263nobodyさん02/12/06 19:26ID:???
sub min(\@){
my $a_ref = $_[ 0 ];
my $min = $a_ref->[ 0 ];
foreach (@{ $a_ref }){
$min > $_ and ($min, $_) = ($_ , $min);
}
return $min;
}

my @b= (20, 19, 100, 75, 6);
print min @b;
026426302/12/06 19:39ID:Wd1BEmDy
ううっ、だめだ、、、。
@bの内容変わってる。
0265nobodyさん02/12/06 22:56ID:???
my(@list) = (20, 19, 100, 75, 6);
my($minimum) = sort { $a <=> $b } @list ;
print("$minimum\n");

これじゃダメ?
0266nobodyさん02/12/06 23:18ID:???
>>265
ダメ
0267nobodyさん02/12/07 00:15ID:???
最小値求めるのにソートすんのかよ。これだからperlerは…
0268nobodyさん02/12/07 00:19ID:ePZJKayy
@hogeに何個か入っていてforeachで最後の1つ前までprintしたいときって
どうすればいいんでしょう?
10個あったら$hoge[9]まで、とか。
0269nobodyさん02/12/07 00:23ID:???
>>267
もちつけ。
まぁいいじゃん、基本的な原理は同じようなもんだし。
0270nobodyさん02/12/07 00:49ID:???
>>268
10要素の配列で$hoge[9]までなら全部じゃん(w
foreach (0..$#hoge-1){
print $hoge[$_];
}
とか。
0271nobodyさん02/12/07 01:08ID:yEekv6g9
Perlで糞ゲームつくりました。お試し下さいませ。
http://www36.tok2.com/home/bttl/bttl-pc/
0272yani ◆saNSktNEdQ 02/12/07 01:19ID:KB9hByzA
my $least;
foreach (@list) {
$least ||= $_;
$_ < $least and $least = $_;
}

ベタな気がする。エレガントな解法求む。
0273yani ◆saNSktNEdQ 02/12/07 01:30ID:KB9hByzA
いや、これじゃだめだな。

my $least;
foreach (@list) {
defined($least) or ($least = $_, next);
$_ < $least and $least = $_;
}
0274yani ◆saNSktNEdQ 02/12/07 02:26ID:6Rt0AxGb
こちらのほうがましか。
しかしイマイチ美しさを感じないのは気のせいか。

my($least) = @list;
foreach (@list) {
 $_ < $least and $least = $_;
}
■ このスレッドは過去ログ倉庫に格納されています