Perlについての質問箱 ..
[2ch|▼Menu]
577:デフォルトの名無しさん
08/11/29 18:55:57
>>564
勉強中なんで、腕試し。こんなもんかな?(未検証)

open (IN, "Seiseki.txt");
while(<IN>){
if (/(\d+) (\d+) (\d+)/) {
$Kokugo[$1]++;
$Sansuu[$2]++;
$Rika[$3]++;
}
}
close(IN);

print "点数 国語 算数 理科\r\n";
for(0..100){
printf("%4d %4d %4d %4d\r\n", $_, $Kokugo[$_], $Sansuu[$_], $Rika[$_]);
}

578:570
08/11/29 19:06:42
>>573-576
ご教示ありがとうございます。
色々やり方があるんですね。if文の()内を(defined($1))にしたら警告が消えました。

579:デフォルトの名無しさん
08/11/29 20:53:53
>>564
勉強中の自分も作ってみた。

my @subjects = qw(国語 算数 理科);
my %names_of;

open my $in, "seiseki.txt" or die "can't open : $!";
while (<$in>) {
if ( /^x(.+)/ ) {
chomp(my @marks = split / /, <$in>);
for (0..$#subjects) {
push @{$names_of{$subjects[$_]}{$marks[$_]}}, $1;
}
}
}
close $in;

for my $subject (@subjects) {
print "≪$subject≫\n";
for my $mark ( sort {$a<=>$b} keys %{$names_of{$subject}} ) {
printf "%3d : %3d人\n", $mark, scalar @{$names_of{$subject}{$mark}};
}
}

580:デフォルトの名無しさん
08/11/30 00:12:06
ここ宿題スレじゃないんだけど

581:デフォルトの名無しさん
08/11/30 13:03:38
1ファイルの変換なら
perl henkan.pl page1.html > mypage1.html

じゃなかったら

open ( IN , "page1.html" ) or die;
open ( OUT , ">mypage1.html" );
while( <IN> ){

s/こぬにちは/こんにちは/;
print OUT;
}
close(OUT);
close(IN);

で出来るんですけど、フォルダにhtmlファイルが60個もあるので
まとめてやりたいのですが、
My_folder---page1.html,page2.html ………page60.html
の全部に一括して処理するにはどう書けばよいでしようか


582:デフォルトの名無しさん
08/11/30 13:07:12
for ( @ARGV ){
 open IN, $_ ;
 # 略
 close IN ;
}

583:デフォルトの名無しさん
08/11/30 13:12:18
for ( @ARGV ){
 open IN, $_ ;

while( <IN> ){
s/こぬにちは/こんにちは/;
print $
}

close(IN);
こうでしょうか?
済みません 馬鹿なんで 略無しで書いてくれると嬉しいです

584:デフォルトの名無しさん
08/11/30 13:24:41
>>581
system("perl henkan.pl page$_.html > mypage$_.html") for(1..60);

585:582
08/11/30 13:28:24
甘えんなよ、自分で考えろよ…。
後、「初心者スレ」てーのが WebProg にあるからそっち逝ってくんね?
「誘導してください」なんて言ったら切れるぞ?

586:デフォルトの名無しさん
08/11/30 13:32:23
henkan.plは変わりないままで
コマンドプロンプトのところで
henkan.pl page1.html > mypage1.html
のかわりに
system("perl henkan.pl page$_.html > mypage$_.html") for(1..60);
と書いてリターンでしょうか?

すみません バカで。


587:デフォルトの名無しさん
08/11/30 14:26:34
わからない七大理由
1. 読まない ・・・説明書などを読まない。読む気などさらさらない。
2. 調べない ・・・過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3. 試さない ・・・めんどくさいなどの理由で実行しない。する気もない。
4. 理解力が足りない ・・・理解力以前の問題で理解しようとしない。
5. 人を利用することしか頭にない ・・・甘え根性でその場を乗り切ろうとする。
6.感謝しない・・・教えてもらって当たり前。事がすんだらさようなら。
7.逆切れする・・・自分の思うようにならないと逆切れする。

588:デフォルトの名無しさん
08/11/30 14:45:12
>>586
henkan60.plとかの名前で上の1行を保存
perl henkan60,pl
で、実行。
試してないんで、うまくいかなくてもかんべんな。

589:デフォルトの名無しさん
08/11/30 14:57:09
過去ログにもうあったらごめんなさい。
HTTP::Requestで画像ファイル(gif)を取得して、サーバに保存したいのですが、
$response->content()をそのまま保存しても画像になりません。

コード
my $req = new HTTP::Request("GET",$url);
local $response = $ua->request($req);

print "Content-type: text/html\n\n";
print $response->code();
print $response->message();
print $response->content();

open OUT,">> ./maptest.gif";
print OUT $response->content();
close OUT;

環境はwindowsXP perl v5.10.0 Apache2.2です
誘導でもかまいませんので、ヒントをください。

590:588
08/11/30 15:02:02
ひとつにまとめるななら、

for(1..60){
my $n = $_;
open ( IN , "page$n.html" ) or die;
open ( OUT , ">mypage$n.html" );
while( <IN> ){

s/こぬにちは/こんにちは/;
print OUT;
}
close(OUT);
close(IN);
}

591:デフォルトの名無しさん
08/11/30 15:10:35
>>589
Windows なら
binmode OUT;
で成功するかも

592:デフォルトの名無しさん
08/11/30 15:13:33
591さん
早速の回答ありがとうございました。

書き込みの部分を
open OUT,"> ./maptest.gif";
binmode OUT,":raw";
print OUT $response->content();
close OUT;

として、教えていただいた、binmode を付けることで解決しました。

ありがとうございました。

593:581
08/11/30 16:10:29
本当に助かりました。ありがとうです!

594:デフォルトの名無しさん
08/12/02 18:40:44
my $q = new CGI;



my $q = CGI->new();

ではどっちがカッコイイ書き方なんでしょうか?


595:デフォルトの名無しさん
08/12/02 21:12:20
new CGI は後方互換な「間接オブジェクト記法」
間接オブジェクト記法にはトラップがあるのが明記されてる
が故に CGI->new() の方が良いとされる。
が、現実では頻繁にコンストラクタを呼ぶ時にだけ
間接オブジェクト記法は使われている。

つーことで、new の時はどっちでもいいじゃね?method 呼ぶ時に
間接オブジェクト記法したら「変態さんがいる!」って言われるかも
しれんけどさ。

596:594
08/12/02 21:18:55
>>595
なんと!ありがとうございます。
Perlのオブジェクト関係はもっとキチンと勉強せねば…。

597:デフォルトの名無しさん
08/12/02 21:20:58
感嘆詞のニュアンスが微妙な気がしなくもないこともなくはないんだが。


598:デフォルトの名無しさん
08/12/02 21:34:11
変態さんにびっくりしたのでは

599:デフォルトの名無しさん
08/12/02 22:21:54
{ package Foo ; sub new { bless {}, shift } sub get { "hoge\n" } }
print Foo->new->get ; # 直接ならあっさり
# 間接が一個でも混ると
#print get new Foo ; # ダメ
#print get { new Foo } ; # ダメ
print STDOUT get { new Foo } ;
print STDOUT get { Foo->new } ;
print do{ new Foo }->get ;


600:デフォルトの名無しさん
08/12/02 22:24:05
確かにこれならMな変態さんと呼ばれても仕方ないな

601:デフォルトの名無しさん
08/12/02 23:34:03
なんと!スープです

602:デフォルトの名無しさん
08/12/03 07:46:58
>>595
「後方互換」てーのは語弊がある書き方だな、、と自己レス
perlobj の "Indirect Object Syntax" の項に説明がある。

603:デフォルトの名無しさん
08/12/03 12:49:12
関数呼び出しの時に & つけたりつけなかったり
なんなんですか?

604:デフォルトの名無しさん
08/12/03 13:26:44
>>603
URLリンク(www.kt.rim.or.jp)
URLリンク(perldoc.jp)

605:デフォルトの名無しさん
08/12/03 13:54:41
>>604
ありがとうございました。

よくわかりませんでしたが・・・。付けるに超したことはないのかな。

606:デフォルトの名無しさん
08/12/03 15:36:25
>>605
組込み関数を全て覚えてて関数名ダブらない自信があるんなら付けてなくてもいいけど、
それまでは付けた方が良いってリャマの人が言ってた!
アンパーサンドなしじゃ関数名がダブったら組込み関数の方を呼びに行っちゃうからね。

607:デフォルトの名無しさん
08/12/03 17:05:47
PBPでは付けるなって言ってるな。
(サブルーチンのリファレンスが欲しい時以外)


608:デフォルトの名無しさん
08/12/03 17:33:41
CPANあたりみても"&"つけてない方が圧倒的に多いし、使えるからといって
組み込み関数とだぶった名前つけたら読みにくくなるだけじゃないか。

あと、サブルーチン呼び出しの&の有無は完全に等価ではなくて、プロトタイプ
まわりや引数を省略したときの振る舞いなんかが違うので注意な。


sub f(\@) {
my($x) = @_;
print join(",", @$x), "\n";
}

@array = (1, 2, 3);
f(@array);   # 1,2,3
&f(@array); # 空文字列

sub g {
my(@x) = @_;
print join(",", @x), "\n";
}

sub g1 {g;}
sub g2 {&g;}

g1(1,2,3); # 空文字列
g2(1,2,3); # 1,2,3

609:デフォルトの名無しさん
08/12/03 17:43:06
いや普通は付けないが
Perl初心者は慣れるまでは付けるようにしておけ、
という事だよリャマ本

610:デフォルトの名無しさん
08/12/03 18:52:12
バッドノウハウ論議って楽しいよな

611:デフォルトの名無しさん
08/12/03 21:10:02
初心者っぽく見えるから俺はつけない

612:デフォルトの名無しさん
08/12/03 22:10:49
シンタックスハイライトのついたエディタ使えば組み込みとダブるなんて
意識して書かない限りやらないだろ・・・

613:デフォルトの名無しさん
08/12/04 12:16:49
>>608

> sub f(\@) {
> my($x) = @_;
> print join(",", @$x), "\n";
> }
>
> @array = (1, 2, 3);
> &f(@array); # 空文字列

この結果、ひどいな。。。
いや、昔の perl だと普通か。。。


614:デフォルトの名無しさん
08/12/04 12:40:56
>>613
プロトタイプ指定は「組込関数のように振る舞える」のが肝なので、
わざわざ & を付けて区別するのは何を意図してるの?って感じだ。
ヘンな言葉遣いをすればヘンに解釈されるってだけじゃん。

615:デフォルトの名無しさん
08/12/04 14:10:34
>>614
初心者が
「慣れないうちは&をつけとこっと」
って思って勉強が進む。そのうち関数プロトタイプのことを知り、試す。
「あれ?」
っていうストーリー。

616:デフォルトの名無しさん
08/12/04 16:17:28
&も()も必ず付ける。それが俺のジャスティス。

617:デフォルトの名無しさん
08/12/04 16:19:21
必ずつける人はPythonにでも行った方が幸せになれる

618:デフォルトの名無しさん
08/12/04 17:02:44
ppm install DBD-mysql
するとないって言われるんだが・・俺だけ??
情報求むm(_ _)m

619:デフォルトの名無しさん
08/12/04 18:12:16
―なにが幸せかわからないのです。本当にどんな辛いことでもそれが正しい道を
進む中での出来事なら、峠の上り下りもみんな本当の幸いに近づく一歩ずつですから。


620:デフォルトの名無しさん
08/12/04 18:33:06
>>618
「DBD-mysql PPM リポジトリ」でググッて好きなページを参照して。

621:デフォルトの名無しさん
08/12/04 21:58:48
1から99までに含まれる奇数を出力するプログラムを書いてみたんですけど
これ以上短くすることは可能ですか?

print$_%2?"$_ ":()for 1..99

622:デフォルトの名無しさん
08/12/04 22:08:38
$_%2&& print for 1..99

623:デフォルトの名無しさん
08/12/04 22:22:24
print $_*2+1,' 'for 0..49

624:621
08/12/04 22:46:56
>>622
即レスありがとうございます
なるほど!!
でもそれだと半角スペースがないですよね?
できれば半角スペースは入れたかったんですけど…

>>623
ありがとうございます
普通に足していく方法ですか
確かに短くなりますねw
うまく説明できないんですけど演算を上手くつかって短くしたいんですよね
説明不足ですみませんでした

625:デフォルトの名無しさん
08/12/04 23:03:57
print$_%2?$_:' 'for 1..99

626:デフォルトの名無しさん
08/12/04 23:59:40
>>620
ありがとうございますm(_ _)m

627:621
08/12/05 00:59:21
>>625
ありがとうございます
偽の場合の式をうまく使ってますね
何か書かないといけないから空のリストを置いてたんですけど
これだと無駄がない感じになりますね

628:デフォルトの名無しさん
08/12/05 02:11:14
$,=" ";print 1..99

629:デフォルトの名無しさん
08/12/05 02:14:04
痛たたた……

630:デフォルトの名無しさん
08/12/05 02:16:48
あ、奇数か。スマソ

$,=" ";print grep{$_&1}0..99

短くないな…


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5050日前に更新/169 KB
担当:undef