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

Perlコーディング初心者質問スレ Part 51

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/07/27(木) 17:04:23ID:???
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

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

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0413nobodyさん2006/08/10(木) 07:28:55ID:???
YahooのサーバーにF5アタックしてるのとかわらないから
下手すると威力業務妨害とかで訴えられるんじゃね?
0414nobodyさん2006/08/10(木) 07:45:54ID:???
PragmaヘッダやCache-Controlヘッダが付いてなければF5とは違う。
0415nobodyさん2006/08/10(木) 08:40:23ID:???
そもそもCGIでやる意味ねーし
0416nobodyさん2006/08/10(木) 08:55:45ID:???
テキストファイルに情報を格納したり読み出したりするプログラムを毎度毎度書くのは
いいかげんめんどうじゃないですか?

最近はPerl限定ならStorableにハッシュ突っ込んで終わりにしてます。
0417nobodyさん2006/08/10(木) 09:20:20ID:???
テキスト形式が面倒だと思ったことはあんまりないなぁ・・・
むしろPerl依存の形式にしちゃうほうが後々めんどくさそう・・・
0418nobodyさん2006/08/10(木) 10:27:13ID:???
timethese (500,
{
test_a => q{
my $a = 0;
for (my $i = 0; $i < 100000; $i++) {
$a++;
}
},
test_b => q{
my $a = 0;
foreach (1 .. 100000) {
$a++;
}
}
}
);

Benchmark: timing 500 iterations of test_a, test_b...
test_a: 12 wallclock secs (11.63 usr + 0.00 sys = 11.63 CPU) @ 43.01/s (n=500)
test_b: 9 wallclock secs ( 9.63 usr + 0.00 sys = 9.63 CPU) @ 51.95/s (n=500)
0419nobodyさん2006/08/10(木) 10:44:47ID:???
それじゃあ条件が対等じゃなくね? てか、for と foreach の違いってそういう意味なの?

use Benchmark;
my @arr = (1 .. 100000);
timethese(1000, {
  test_a => sub {
    my $n = 0;
    for (my $i = 0; $i < @arr; $i++) { $n++; }
  },
  test_b => sub {
    my $n = 0;
    foreach (@arr) { $n++; }
  },
  test_c => sub {
    my $n = 0;
    for (@arr) { $n++; }
  },
});

Benchmark: timing 1000 iterations of test_a, test_b, test_c...
test_a: 26 wallclock secs (25.80 usr + 0.00 sys = 25.80 CPU) @ 38.77/s (n=1000)
test_b: 15 wallclock secs (14.64 usr + 0.00 sys = 14.64 CPU) @ 68.31/s (n=1000)
test_c: 15 wallclock secs (14.53 usr + 0.00 sys = 14.53 CPU) @ 68.82/s (n=1000)
0420nobodyさん2006/08/10(木) 10:51:06ID:???
10万回ループなんてどこで使うの?
0421nobodyさん2006/08/10(木) 11:00:41ID:???
いや・・・ 10万回ループは、あくまでベンチマークの為だから・・・。
普通の for ループ(test_a)と、リストを渡す for ループ(test_c)では、明らかに 1.5 倍程度前者の方が遅い。
でも、foreach (test_b) と for (test_c) の違いは、「無い」と言っていい。
(上のを何度か実行してみたところ、全ての結果において test_c の方が 0.1 秒ほど速かったけど誤差の範囲)
0422nobodyさん2006/08/10(木) 11:16:14ID:???
ああ、>>418はぐぐって出てきたのをそのまま(ry
0423nobodyさん2006/08/10(木) 11:47:25ID:???
>>421
そうじゃなくて、@aryを100とか1000くらいに、timetheseの方を100000とかにした方が現実的だと思っただけです。あんまり気にしないでください。
0424nobodyさん2006/08/10(木) 11:48:22ID:???
use Benchmark;
my @arr = (1 .. 10000);
timethese(1000, {
test_a => sub {
my $x = @arr;
for (my $i = 0; $i < $x ; $i++) { }
},
test_b => sub {
foreach (@arr) { }
},
test_c => sub {
my $n = 0;
for (@arr) { $n++; }
}
});

Benchmark: timing 1000 iterations of test_a, test_b, test_c...
test_a: 2 wallclock secs ( 1.88 usr + 0.00 sys = 1.88 CPU) @ 533.33/s (n=1000)
test_b: 1 wallclock secs ( 1.23 usr + 0.00 sys = 1.23 CPU) @ 810.37/s (n=1000)
test_c: 2 wallclock secs ( 1.86 usr + 0.00 sys = 1.86 CPU) @ 537.63/s (n=1000)

aで$n++する意味がわからん。
0425nobodyさん2006/08/10(木) 11:59:46ID:???
>>424
c で $n++ する意味もわからん。test_b と test_c は明らかに不公平。
0426nobodyさん2006/08/10(木) 12:01:22ID:???
条件が等しくない
0427nobodyさん2006/08/10(木) 12:27:47ID:???
まさかbとcを比較されようとは…

use Benchmark;
my @arr = (1 .. 1000);
timethese(10000, {
test_a => sub {
my $x = @arr;
for (my $i = 0; $i < $x ; $i++) { $arr[$i]=" "; }
},
test_b => sub {
foreach (@arr) { $_=" "; }
},
test_c => sub {
my $n = 0;
foreach (@arr) { $arr[$n++]=" "; }
},
test_d => sub {
my $n = 0;
foreach (@arr) { $arr[$n]=" ";$n++; }
}
});
__END__
Benchmark: timing 10000 iterations of test_a, test_b, test_c, test_d...
test_a: 4 wallclock secs ( 3.72 usr + 0.01 sys = 3.73 CPU) @ 2678.81/s (n=10000)
test_b: 2 wallclock secs ( 2.73 usr + 0.00 sys = 2.73 CPU) @ 3657.64/s (n=10000)
test_c: 4 wallclock secs ( 4.34 usr + 0.00 sys = 4.34 CPU) @ 2302.03/s (n=10000)
test_d: 4 wallclock secs ( 3.98 usr + 0.00 sys = 3.98 CPU) @ 2509.41/s (n=10000)
0428nobodyさん2006/08/10(木) 13:47:00ID:???
つか、なんで違う条件でばかりベンチ取ってるの?意味ないだろ
0429nobodyさん2006/08/10(木) 16:36:09ID:???
>>427
純粋に繰り返し部分だけを比較するなら @arr は余計。( $i は、それがないと
同等の機能を果たせないので必要)

for ( my $i=0; $i<10000; $i++) {}
for ( 0..10000-1 ) {}
0430nobodyさん2006/08/10(木) 16:48:35ID:???
use Benchmark;
timethese( 1000, {
  a => sub { for ( my $i=0; $i<10000; $i++ ) {} },
  b => sub { for ( 0..10000-1 ) {} }
});
---
a: 1 wallclock secs ( 1.49 usr + 0.00 sys = 1.49 CPU) @ 673.40/s (n=1000)
b: 1 wallclock secs ( 1.05 usr + 0.00 sys = 1.05 CPU) @ 955.11/s (n=1000)

前者は $i を使う分(?)少し遅くなってるが、実際の使用では
繰り返し処理のメイン処理部が時間を食うわけだから、どちらも同じ程度と
認識してよいでしょう。
0431nobodyさん2006/08/10(木) 17:03:16ID:???
条件同じにするなら、
for (@arr) {}
と
foreach (@arr) {}
を比べるんじゃないの?
内部では同じだから、ほとんど誤差分しか違いが出ないと思うけど。

条件付きの for (my $i = 0; $i < 1000; $i++) {} が
条件なしの foreach (0 .. 1000) より遅いのは仕方ないし。
0432nobodyさん2006/08/10(木) 17:21:05ID:???
実際にforやforeachを使うとき、わざわざ配列を用意するか?
0433nobodyさん2006/08/10(木) 20:18:12ID:???
なにしたいのかさっぱり
0434 2006/08/10(木) 20:38:11ID:/HJpKD0H
よくテンプレートで使うハッシュに入れる値をDBとかで配列でとってきますよね

foreach (@omomomo){
my $ha = $hoge[0];
my $hb = $hoge[1];

push(@a,$ha);
push(@a,$hb);
}

while(@ha && @hb){
my %has;
$has{hoge} = shift @ha;
$has{moge} = shift @hb;
push(@hogehoge,\%has);
}

$template->{hogehoge} = \@hogehoge;

これもっと短くする方法ないですかね

0435nobodyさん2006/08/10(木) 20:48:18ID:???
どこで質問させて言いかわからなかったので、ここで質問させてもらいます
URLを指定してそれをダウンロードさせたいのですが、どのようなモジュールがありますでしょうか?
0436nobodyさん2006/08/10(木) 20:48:39ID:???
ポポポポポ( ゚д゚)゚д゚)゚д゚)゚д゚)゚д゚)ポカーン…
0437nobodyさん2006/08/10(木) 20:48:41ID:???
for ( 1 .. 1_000_000 )
とか今は平気なんね。
知らなかったから参考になった。

>>434
templateしらんがforeachは何してるん。
0438nobodyさん2006/08/10(木) 20:51:07ID:???
>>435
file:///C:/Perl/html/site/lib/LWP/UserAgent.html
たぶんここに答えのファイルがあるはずだッ
0439nobodyさん2006/08/10(木) 21:12:26ID:???
>>434
あまりにもそのコードがいい加減でなんとも言いようが無い。
テンプレート使うのに、そんな処理するか?
0440nobodyさん2006/08/10(木) 21:14:31ID:???
突然ですが質問です。
スクリプト側でファイルのパーミッションを指定したり変更するにはどのような
方法がありますか?
0441nobodyさん2006/08/10(木) 21:15:41ID:???
chmod
0442nobodyさん2006/08/10(木) 22:29:23ID:???
>>435
#!/usr/bin/env perl
use LWP::Simple;
print "content-type:text/html\n\n";
getprint("http://www.yahoo.co.jp/";);
04434342006/08/10(木) 22:30:27ID:???
foreachは
foreach(1..$num){ の間違いです(適当にかいてしまいました すみません
$numにはmysqlから取得した個数が入っていて

foreach(1..$num){
@hoge = $sql->fetchrow_array; # @hogeにはhogeとmogeを配列で値を取得
my $ha = $hoge[0];
my $hb = $hoge[1];

こんなかんじです
04444402006/08/10(木) 23:07:09ID:???
config.cgiで指定する
各種ログファイル名 という項目でファイル名を指定するわけですが
その際にスクリプトの方でパーミッションを指定するにはどのように
記載すればよいですか?
04454352006/08/10(木) 23:13:13ID:???
>>438
ありがとうございます。
Windows環境でないのですが、UserAgent.htmlを探してみたのですが
自分の環境にはないようです。

>>442
ありがとうございます
実際にやってみると、標準出力にソースが出力されてしまいます。
後付けで申し訳ないのですが、それをHTML::TagParserで処理したいのですが
そのような事が出来る方法などないでしょうか?
0446nobodyさん2006/08/10(木) 23:20:28ID:???
>>444
perldoc -f chmod
0447nobodyさん2006/08/10(木) 23:27:11ID:???

>>434
とりあえず短くした
while (my $row = $sql->fetchrow_arrayref) {
    push @hogehoge, {hoge => $row->[0], moge => $row->[1]};
}
0448nobodyさん2006/08/10(木) 23:28:38ID:???
>>445
そのモジュール知らんけど、
>>$html = HTML::TagParser->new( "http://www.kawa.net/xp/index-j.html"; );
ていうコードが引っかかって来たけど・・・?
0449nobodyさん2006/08/10(木) 23:52:40ID:???
>>445
出力結果を変数に入れてHTML::TagParserに渡すとか。
その方法すら想像付かないならプログラミング自体諦めたほうがよい。
04504442006/08/10(木) 23:54:01ID:???
config.cgiで指定する
各種ログファイル名を指定する所で

$NAME_1 = 'logdata';

の用にした時のスクリプト側でパーミッションを指定する際には
どうしたらよいでしょうか?
簡単にperldoc -f chmod のままではうまくいきません。
0451nobodyさん2006/08/11(金) 00:00:33ID:???
config.cgi って何についてくるやつ?
chmod使ってどんな風に書いたの?
それでどううまく行かなかったの?
0452nobodyさん2006/08/11(金) 00:06:01ID:???
>>450
perldoc が何であるか調べてからもう一度おいで。
0453nobodyさん2006/08/11(金) 00:06:50ID:???
>>$450
なんかソースにperldoc -f とか書いてそう・・・w
0454nobodyさん2006/08/11(金) 00:09:08ID:???
>>444=440 はすでに >>441 で答えをもらってて、
>>446 にも補ってもらってて、まだダメとは…。
コピペできるくらいに全部コード書いてあげないと分からないのでは。
04554442006/08/11(金) 00:19:47ID:???
うまくいかなかったというより書き方自体が分からなかったのでお聞きしました。
0456nobodyさん2006/08/11(金) 00:34:46ID:???
print <<455
じゃあほれ
http://www.rfs.jp/sb/perl/05/chmod.html
455
0457nobodyさん2006/08/11(金) 00:45:57ID:???
>>455
だから perldoc は、その「書き方」を調べる為のコマンドだってば・・・。英語だけど中学レベルの簡単な英語。
Windows なら、スタート→プログラム→アクセサリ→コマンドプロンプトを開いて perldoc -f chmod と打ってEnter。

自分で調べられない奴は、いつまで経っても上達しない。どうせ perldoc で検索すらしてないんだろ。
0458nobodyさん2006/08/11(金) 00:48:56ID:???
人の答えを丸写しして「動かない」とか文句いう奴に何を言ってもムダ
0459nobodyさん2006/08/11(金) 01:19:58ID:???
イミフ
0460nobodyさん2006/08/11(金) 01:35:21ID:5JciSP0N
>>456
そのアンカの張り方いいなw
0461nobodyさん2006/08/11(金) 01:43:15ID:???
print <<"455";
じゃあほれ
(p)http://www.rfs.jp/sb/perl/05/chmod.html
455

やるならちゃんと書いて欲しかったwww
0462nobodyさん2006/08/11(金) 15:50:22ID:???
モジュールの使い方がわかりません
モジュールをコンパイルしてインストールしたら
/usr/pkg/lib/perl5/site_perl/5.8.0/HTML/TagParser.pm
としてインストールされました。
この場合、そこをuseしたらいいのでしょうか?

use HTML::TagParser /usr/pkg;
では、Internal Serverr Errorになりました。
0463nobodyさん2006/08/11(金) 16:06:40ID:???
use HTML::TagParser;

使い方は、perldoc HTML::TagParser 参照
0464nobodyさん2006/08/11(金) 16:15:09ID:???
>>463
それでもInternal Server Errorになります。
コードはサンプルコードの
my $html = HTML::TagParser->new( '<html><form action="hoge.cgi"></form></html>' );
my $elem = $html->getElementsByTagName( "form" );
print "<form action=\"", $elem->getAttribute("action"), "\">\n" if ref $elem;
と記述しているだけなので、間違いはないと思います。
0465nobodyさん2006/08/11(金) 16:17:37ID:???
エラーログ見れば?
use が失敗してるなら、@INC調べる
0466nobodyさん2006/08/11(金) 16:49:30ID:???
CPANの設定やり直したいんですけど、最初に perl -MCPAN -e shellしたときの対話インターフェイスってどうやって呼び出すんですかね?
あと、その設定が保存されてるファイルってどれですか
0467nobodyさん2006/08/11(金) 21:27:36ID:oxtjr5tX
マッチングについての質問です。
置き換えによる部分削除をしたいのですが
すべての文字列を対象とする場合はたとえば
s/<dl> </dl>//;
とした場合、このタグの間にどのようなメタキャラクタを
書けばよいのでしょうか?
0468nobodyさん2006/08/11(金) 21:51:09ID:???
<dl>(.+)[^(<\/dl>)]<\/dl>


わからん!
0469nobodyさん2006/08/11(金) 22:02:39ID:???
>>467
つ【http://www.google.co.jp/search?q=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE】
0470nobodyさん2006/08/11(金) 22:27:28ID:oxtjr5tX
>>468

うまく活きました。
ありがとうございます。
<dl>([^\<]*)</dl>までは思いついたのですが
これではダメだったんですよ。
あなたに幸あれ。

0471nobodyさん2006/08/11(金) 22:28:45ID:???
>>464
ttp://user.ftth100.com/mirrorhenkan/perl/search.php?word=Internal+Server+Error
Internal Server Errorはよく出るよなー。
うんうん。
>>1読み直して来い。
0472nobodyさん2006/08/11(金) 23:34:34ID:???
Pathがちがけりゃエラーも出るわな・・・
0473nobodyさん2006/08/12(土) 01:55:00ID:???
use Net::FTP;にてサーバー上のファイルのサイズを取得したいと
考えております。以下によりサイズ取得は成功しているようなのですが
(エラーメッセージが出ない為)取得したファイルサイズを変数に格納
する事は出来ないのでしょうか?

$ftp->size($testfile) || print "サイズ取得失敗";

どなたか宜しくお願い致します。
0474nobodyさん2006/08/12(土) 02:17:54ID:???
代入知らないって事?
0475nobodyさん2006/08/12(土) 02:56:22ID:???
Net::FTPを知ってて代入を知らないなんて。
釣りとしか思えない。
0476nobodyさん2006/08/12(土) 06:21:24ID:???
wwwwwwwwww
0477nobodyさん2006/08/12(土) 06:22:39ID:???
このぼけ新しい!
0478nobodyさん2006/08/12(土) 15:50:42ID:???
splitを/ /(スペース)で取る場合、"hoge geho"などのクォーテーションで囲ってあるものも分割されてしまうのでしょうか?
0479nobodyさん2006/08/12(土) 16:29:13ID:???
>>478
聞く前になぜやってみないの?
0480nobodyさん2006/08/12(土) 16:34:26ID:???
これがゆとり教育の成果
0481nobodyさん2006/08/12(土) 16:43:55ID:???
>>466 丸一日の亀回答失礼。
o conf init
設定ファイルパスはo confすれば表示される。
0482nobodyさん2006/08/12(土) 22:08:26ID:???
>代入知らないって事?
>Net::FTPを知ってて代入を知らないなんて。
すいません。本当にわからないのです。
取得したサイズを変数に代入するにはどうしたらよいのでしょうか?
0483nobodyさん2006/08/12(土) 22:25:59ID:???
そんなエサに(ry
0484nobodyさん2006/08/12(土) 22:30:29ID:???
”=”って言えばいいの?
0485nobodyさん2006/08/12(土) 22:35:28ID:???
>>482
何がわからない? 右辺? 左辺?
それとももっと根本的なこと?
0486nobodyさん2006/08/12(土) 22:36:10ID:???
>何がわからない? 右辺? 左辺?
右辺です。
0487nobodyさん2006/08/12(土) 22:47:26ID:???
|| のかわりに or を使うと幸せになれるかもよ
0488nobodyさん2006/08/13(日) 00:42:28ID:BxCEpRlj
MLDBMを使ってDBファイルにハッシュの配列のハッシュを保存しようと思ってます、
そこで無名配列にハッシュのリファレンスを順番にpushしたいのですが上手くいきません。
なんででしょうか。

use strict;
use MLDBM qw(DB_File);
use Fcntl;

tie(my %save, "MLDBM", "data.db", O_CREAT|O_RDWR, 0644) or die "エラー";
push @{$save{$aaa}}, $hash;
untie %save;
0489nobodyさん2006/08/13(日) 01:20:16ID:???
>>488
MLDBMでぐぐったら1件目に答えが書いてあるように思うのは気のせいか?
0490nobodyさん2006/08/13(日) 02:45:17ID:???
$size = $ftp->size($testfile);
0491nobodyさん2006/08/13(日) 22:31:10ID:???
なんか休日になると伸びないような・・・
0492nobodyさん2006/08/13(日) 22:48:17ID:???
休日にしか伸びない夏厨の巣窟のようなスレよりはマシ。
0493nobodyさん2006/08/13(日) 23:43:12ID:???
五十歩百歩
0494nobodyさん2006/08/14(月) 00:24:45ID:???
夏厨以外がなんなのか知りたい・・・
0495nobodyさん2006/08/14(月) 16:23:58ID:???
>>473は多分、次のように記述したんだろうなと思う。

$size = $ftp->size($testfile) || print "サイズ取得失敗";

つまり、優先順位がわからなかったかったものと思われる。

>>473は、次のうち好きなのを選んでね。

$size = $ftp->size($testfile);
$size || print "サイズ取得失敗";

($size = $ftp->size($testfile)) || print "サイズ取得失敗";

$size = $ftp->size($testfile) or print "サイズ取得失敗";

エスパーからの回答でした。
0496nobodyさん2006/08/14(月) 16:27:09ID:???
ちっ、>>487で既出だったか
0497nobodyさん2006/08/15(火) 11:24:02ID:???
orだと優先順位が低いんだっけか。
結構気づきにくいところだね。
0498nobodyさん2006/08/15(火) 15:09:13ID:amgg11pz

ヒアドキュメント内で関数は使えないのでしょうか?

$a = 1;

print <<DOC;
元の値:$a
処理後の値:&hoge($a)
DOC

sub hoge{
my $tmp = shift
$tmp++;
return $tmp;
}

0499nobodyさん2006/08/15(火) 15:25:07ID:???
>>498
@{[ hoge($a) ]}

邪道だけどね。
0500nobodyさん2006/08/15(火) 16:44:41ID:???
perl6ではできるようになるらしい
0501nobodyさん2006/08/15(火) 17:18:05ID:????BRZ(1002)
                                               、.,ri、
                                          l''''レ   :l|゙'rレ,,゙'r,      .,,,,,,,
                                          l .l    ゙'!,,゙レヘ!"     :| |
                                          l .l___,,~           | :|      .,,,
                                     'l~~~~~~ ̄ .,,,,,_,,,, .|        │ :|,,irrr‐'''''"~.゙'!i、
                                      ̄ ̄ ゙̄,l リ: :   .| :|    ィー'''''' ̄` .,,,,,ir-ー''''}" ,r"
  '|'|    .,,,,       l|,,,,―i、   ,,,,,,i、,,,、  .,ri、  'l'ト       │ ,l゙    | |    =--'''''"| |    ,i" ,r"
  .l | ._,,, | l   '{\   _,,二,、  ,rlレ''l''l'''!i,'i、  l゙,| ,-rr,|.|,,,,,i、    .,l゙ .,l゙    .| .|        | :|   ,i" ,i"
  .,,l`|,|レr" .|.|    .'Lト .'l|レー'''=゙L .,l゙,i´ l゙,!  .リ゙l  |.| .゙~ ̄|:|     .,,i´ ,/     | l゙        | |   .~'〃
: ,i'レ'~    .|.| ,r,  ゙l,,}    .,"| l..l、,ト,i´ .,!,レ | | ,,r-ノ.|,、   .,,i'" ,r"  :   ..,,i´.レ        l゙ │
: リリ----r, ゙l,,l,,,i"      ,,,,r!二  ゙l,,,,レ゙ ,r',,レ"  l゙.| .l|'ニ,l゙,!!ii,= .,〃 ,,r"   .゙l~゙゙゙゛.,,/            リ, .゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙レ
 .~゙゙゙゙゙゙゙゙゙゙"  ``       ゙='''"      `~`   `゙゛ `"'''~    ゙'!'"     "'''''''~゛          ゙~''''''''''''''''''''''''"
0502nobodyさん2006/08/15(火) 19:34:41ID:???
>>499
確認しました。出来るんですね。
でも、邪道なのか・・・。

大量に変数あるんで、いつも困ってたんだが、
おとなしく普通にするかな。
配列にして、ループで処理か。
0503 ◆TWARamEjuA 2006/08/15(火) 19:52:44ID:????BRZ(3010)
$a = 1;

printf <<"DOC", $a, &hoge($a);
元の値:%d
処理後の値:%d
DOC

みたいな?
0504nobodyさん2006/08/15(火) 19:56:22ID:???
ヒアドキュメント内は知らないけど現行のPugsだと
"処理後の値: &hoge()";
or
"処理後の値: {hoge()}";
でちゃんと展開されるよ。
0505nobodyさん2006/08/15(火) 21:03:52ID:???
perl でCGI.pmをつかってCGIを作っていますが、
tableの行をforeach文で増やしたい場合は、どのようにするのが適切でしょうか?
  ・
  ・

foreach (@abc){
 $q->Tr(
      $q->td($q->b("xxx")),
      $q->td($q->b("yyy"))
     )
}
  ・
  ・

のようなカタチでやってみると、うまく表示が出ません。
この描き方は間違っているのでしょうか?
ご教授お願いします。
0506nobodyさん2006/08/15(火) 21:42:27ID:???
>>505
printが抜けてるとか。
05075052006/08/15(火) 21:59:06ID:???
>>506
レスありがとうございます。

print は一番初めにかいて、
print $q->start_html,
$q->start_table,
foreach (@abc){
 $q->Tr(
      $q->td($q->b("xxx")),
      $q->td($q->b("yyy"))
     )
}
$q->end_table,
$q->end_html;
の用に利用していました。

ここで、foreach文を使うときは、foreach文のブロック部分と、それ以外の部分のところでつかうprintを分けてみたらできました。
506さんのレスで気がつくことができました。
ありがとうございます。
0508nobodyさん2006/08/15(火) 22:15:10ID:OtEfXNbt
my @arr = <FH>;
my $sca = join '',@arr;

どうしてもこんな処理をしたいんですけど、
もっとスマートに書く方法はありますか?

以前は
foreach my $line(<FH>){
  chomp;
  $sca = $line;
}
としてたんですが、
うまい方法をご教授願います
05095082006/08/15(火) 22:17:00ID:OtEfXNbt
訂正

× $sca = $line;
〇 $sca .= $line;
0510nobodyさん2006/08/15(火) 22:25:47ID:???


my $sca = do {local $/; <FH>};

これはどう?
05115082006/08/15(火) 22:47:02ID:OtEfXNbt
>>510
doは使った事がないので、今はあまり理解できてませんが参考になりました。

ありがとうございます。
0512nobodyさん2006/08/16(水) 00:10:37ID:???
read(FH, $buff, (-s FH));
これじゃなにか不具合でも?
■ このスレッドは過去ログ倉庫に格納されています