Perlについての質問箱 12箱目

"The duct tape of the Internet"こと、
Perlについての質問箱です
"There's more than one way to do it"ということで
ぱぁるの奥深さについて皆で語り合い、追求してまいりましょう。

CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc5.2ch.net/php/ )

CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするので
WEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。

姉妹スレッド(Perl コーディング初心者質問コーナー Part37@WebProg)
http://pc5.2ch.net/test/read.cgi/php/1093106507/

過去ログは>>2-1001あたり
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/

[本]
リャマ: http://www.oreilly.co.jp/BOOK/lperl3/
駱駝: http://www.oreilly.co.jp/BOOK/pperl3v1/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/BOOK/pcook/

[オンラインマニュアル]
Perldoc.com: http://www.perldoc.com/
perldoc.jp: http://www.perldoc.jp/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/%7ekbk/perl5.005/

[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://member.nifty.ne.jp/hippo2000/

[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
スレ立て乙。7 と 8 はどっかに消失したんじゃないかな。
そのころのスレのログは見つからないのが多いし。
とりあえず手元の 2ch ブラウザのログからサルベージしたのを置いときます。
http://nuna.at.infoseek.co.jp/1068051036.html
http://nuna.at.infoseek.co.jp/1068051036.dat
http://nuna.at.infoseek.co.jp/1074151549.html
http://nuna.at.infoseek.co.jp/1074151549.dat
5デフォルトの名無しさん:04/09/08 13:02
「ぱぁる」はそのままか。
おつ~
おいすー^^
Perlスレも12箱目か。
スレ立て乙
10デフォルトの名無しさん:04/09/09 10:02
さいきん回答してなかったが乙
回答者のレベルにもよるが回答も役に立つことが多い品
11デフォルトの名無しさん :04/09/09 10:51
perl初心者です。
二つのファイルを使うのですが、
a 1 0
b 2 2
d 3 0
e 2 1
g 5 1
...
というファイルと、
>a
>b
>e
>f
>g
...
という形式のファイルがあるのですが、これを
a 1 0
b 2 2
e 2 1 
g 5 1
のように出力したいのですが、やり方がわかりません。
つまり、下の方のファイルを参照する(上のファイルのアルファベットが
下のファイルにもあったら、そのアルファベットと続く数字を出力する)
方法がわかりません。どなたか教えてください。
12デフォルトの名無しさん:04/09/09 11:37
ファイルの読み書きと簡単な文字列処理は出来ると仮定して、

はじめのファイルを読み、a 1 0 から $Hash{'a'} = 10 というふううにハッシュを作っておく。
2番目のファイルを読み、>X があれば "X $Hash{'X'}" を出力。
>>11
1番目のファイルを data.dat 、2番目のファイルを index.dat とする。

my %dat;
open(IN, 'data.dat') or die;
foreach (<IN>) {
@_ = split(" ", $_, 2);
$dat{$_[0]} = $_[1];
}
close(IN);

open(IN, 'index.dat') or die;
foreach (<IN>) {
/(\w+)/ or next;
print "$1 $dat{$1}\n" if $dat{$1};
}
close(IN);
ちょい修正。

open(IN, 'data.dat') or die;
foreach (<IN>) {

のあとに、

chomp;

を追加。
ジョーシキ的chompを忘れるわforeachループだわ個性的な方ですね
foreachなんて自分で使ったことない
>>15
口悪いね・・・

"There's more than one way to do it"な。
18デフォルトの名無しさん:04/09/09 15:17
質問です。
>a ame
>b kawa
>d taiyo
>e arare
>g hyo
>h kumo
>j taiyo
>l kawa
というファイルと、
>a ame
>c kawa
>d taiyo
>e arare
>g kawa
>j taiyo
>l kawa
>m hyo
というファイルがあるのですが、ここでプログラムを使って
b c g kawa
g m hyo
と出力できるようにしたい{二つのファイルを比べて、アルファベット(aなど)
と名前(ameなど)が両方一致しているもの以外で、名前(ameなど)が同じものの
アルファベットをすべて並べて表示する}のですが、複雑でよくわかりません。
どなたか教えてください。
>>15
古参のUNIXユーザさんかな?

foreachはループ変数使うforではないことを
明示できるので、使う人は多いと思いますよ。
この場合はwhile使うのに比べて明らかに効率悪いよ。
Q. なぜ効率が悪いか説明せよ(3点)
21デフォルトの名無しさん:04/09/09 15:22
Q.Perlインタプリタがそういうつくりだから。
>>20
そういう意味ね。

答:最初にメモリにすべて読み込むため
2321:04/09/09 15:22
QじゃなくてAだった。
>>17
"TMTOWTDI" を免罪符のように使うのはどうかと思う。
http://www.jin.gr.jp/~nahi/d/990223-comp.html
foreach否定の方がどうかと思うが
否定はしてない
while(<FH>)
って慣用句だから>>15はforeachをそこで使うなんて個性的って意味なんでしょ
>>24
良いドキュメントですね。
「TMTOWTDI」は、「だから、どう書こうと構わない」ってことじゃないですよね。
肝に命じておきたい。
>個性的
なんではっきりアホだと言わんのかね?
マジレスすると、読み込むファイルの大きさによるだろ。
foreach と while の交換なんて簡単にできるんだから、
サンプルとしては >>15 ので十分だと思うが。
ファイルが大きい場合がありうるなら while を使えばよろしい。

しかもそこは質問の本質ではないし。
少し前にも stat の結果をキャッシュしてない というレスが
あったが、それと同レベル。
サンプルは本質の個所が分かりやすければ及第とみていいでしょ。

もし不満があるなら、ケチつけずに
補足という形で自分が付け足せばいい。

なんでそんなに粘着してるんだ?
アンカーミス。スマソ。
TMTOWTDI を楯に糞コードまき散らすだけでは飽き足りず、必死で自己弁護ですか。
このサンプルだけ示された初心者が
ファイルが大きいときにwhileに変えるって自分で思いつけるかなあ
>>33
そう言われたら、自分でラクダ本読めとレスするしか
なくなると思うぞ。
最初からwhile使ったサンプル示せばいいんじゃ。
>>35
普通はそうんだんだけどね。
>>15>>11もいい勉強になった。

それだけのようにしか見えないんだが。
なんか・・・一気に空気悪くなったな・・・。
>>15おまいの責任はおもいぞ。

それから、まだグダグダ言ってるやつが>>15なら、
一度で完璧なサンプルを提示してみろよ。
問題は>>18
できないなら黙って見てなさい。
>>38
だから >>35 だってばさ。
12の答えでよかったのにね
漏れは17みたいなレスの方がいらんと思うよ
>>39
問題は>>18らしいぞ。
>>40
なるほど>>12だけ示して後は>>34というのもアリだな
foreach と whileってそんなちがうん??
mapならまだわかるんやけど。
my %report;
while(<>){
  my ($char, $name) = m/^>(\w)\s+(\w+)/;
  die unless defined $char;
  $report{ $name } .= $char unless defined $report{ $name}
                and $report{ $name } =~m/$char/;
}

print "$_ @{[split //, $report{ $_ }]}\n" for sort keys %report;
ファイル1行ずつ読むサンプルでforeachなんか見たことネーっての

それはそうと>>30>>13も前スレ>>886も同一人物かな?
最近饒舌で妙に突っ込み甲斐のあるコード書く人がちらほら
自分の書いたコード投稿する前に読み返そうね(・∀・)
ファイル1行ずつ読むスクリプトでforeachを使う漏れはダメですか
>>46
いんじゃないっすか?
ここはム板ですよね?
ぇぶぷろぐ板かとオモタよ。。。
>>46
ダメとまでは言わないが、質問させてくれ
・どこでそう習ったのか?
・while(<>) で回しているサンプルを見た事があるか?
・もしあるのなら、それではなく foreach にした理由は何故か?

もしかして、なんか悪い本 or サイトがあるのか?
初心者向けのサイトって、構造を分かり易くするため
@data = <FH>;
とかしてforeachさせてる所が多いよ
うっ、勘違いしてた。

my %report;
while(<DATA>){
my ($char, $name) = m/^>(\w)\s+(\w+)/;
die unless defined $char;
$report{ $name }{ $char }++;
}

for my $name(sort keys %report){
my @moji = grep { $report{ $name }{ $_ } == 1 } keys %{$report{$name}};
next if @moji == 0 or @moji == 1;
print "$name @moji\n";
}

暇だね。俺って。。。
あっと、<DATA>そのまんまで打ち込んだ
<>に変えてね。
>>49
そんなの決まってるじゃないか。
なぜforeachで回すか・・・

 面 白 そ う だ か ら

これ以外考えられない。
>>50
ここだけの話bbs.cgiもリストコンテキストで<FH>を
うわなにをするやめらqすぇdrftgyふじこlp;@

bbs.cgi、read.cgiってC++で書かれてるって聞いたけど、ネタなの?
>>55
いにしえの昔には Perl で書かれていたとかいなかったとか一体どっちやねんと。
昔Cで現在Perlじゃなかったっけ?
unix.swfでの知識しかないだけども。
昔は知らないけど、
今はCで書かれてる。
どこかで配布してた。

管理用のCGIはPerlだったと記憶してる。
read.cgiがcでbbs.cgiがperl 逆だったかも
60デフォルトの名無しさん:04/09/10 02:07
>>59
それで正解
>>50
それはまた別の話じゃない?
コード見ればバッファ(@data)に一気に取り込んでるのがすぐ分かるし。
6243:04/09/10 04:28
つか、wileにせにゃ駄目なんて書いてる資料ぐぐっても見つからなかったんだが?

ソースキボン。
6343:04/09/10 04:30
whileだったすまそ。
>>62
もし本当にないなら自明すぎて誰も書いてないんだろう。
66デフォルトの名無しさん:04/09/10 07:00
よほど大きいファイルを読み込んでデータの検索・抽出を行う場合、
foreach だと全部読み込まなければならないので、目盛り消費が異常に多くなる。
while だと目盛りを殆ど消費しない。
1GBくらいあるファイルを処理するときは while 、高々数メガ程度のときは foreach
自信満々で書いたのがその程度の使い分けか(ゲラゲラ
>>62
逆に考えてみよう。なぜ foreach だと駄目なのか。

・途中で last する可能性があっても foreach は全て読むので
 無駄な処理をする事になる。

・現在の行番号を知りたい場合、foreach だと自前でカウントする
 必要があるが、while なら $. が使える。

>>66 が言うように、while でやるよりメモリ消費が大きく、また
 その確保に時間を食われるので重い。そしてどうせ全部読む
 のなら、行入力演算子より read を使って以下のようにした方
 が負荷は低い (但し特定の環境では極端に重くなるので注意) 。

 read FH, my $buffer, -s FH;
 for (split /\n/, $buffer) { ... }

以上から、while (<FH>) { ... } を使う場面で敢えて foreach を
選ぶ理由が無い。「とりあえず while 使っとけ」で困る事はまず
無いだろうが、「とりあえず foreach 使っとけ」では困った事が
沢山起こる。
6968:04/09/10 08:19
検証用ベンチ。

use strict;
use Benchmark;
use vars '$File'; $File = './test.txt';

timethese(-5, {
  for => sub {
    open FH, $File or die $!;
    for (<FH>) { my $line = $_ }
    close FH;
  },
  split => sub {
    open FH, $File or die $!;
    read FH, my $buffer, -s FH;
    for (split /\n/, $buffer) { my $line = $_ }
    close FH;
  },
  while => sub {
    open FH, $File or die $!;
    while (<FH>) { my $line = $_ }
    close FH;
  },
});
対象:kakikomi.txt (995kb 34k行)
for: 6 wallclock secs ( 4.80 usr + 0.21 sys = 5.01 CPU) @ 3.99/s (n=20)
split: 5 wallclock secs ( 2.58 usr + 2.92 sys = 5.50 CPU) @ 1.64/s (n=9)
while: 6 wallclock secs ( 4.76 usr + 0.50 sys = 5.26 CPU) @ 12.17/s (n=64)

おー。
7143:04/09/10 09:01
>>67,68解説どうも。

Benchmark: running foreach, while for at least 1 CPU seconds...
foreach: 2 wallclock secs ( 1.70 usr + 0.00 sys = 1.70 CPU) @ 1.17/s (n=2)
(warning: too few iterations for a reliable count)
while: 1 wallclock secs ( 1.13 usr + 0.02 sys = 1.14 CPU) @ 2.63/s (n=3)
(warning: too few iterations for a reliable count)

use Benchmark;
timethese(-1,
  {
    while=>sub{
      my @tmp;
      open(IN,'test.txt');
      while(<IN>){
        unshift(@tmp,$_);
      }
      close(IN);
    },
    foreach=>sub{
      my @tmp;
      open(IN,'test.txt');
      foreach(<IN>){
        unshift(@tmp,$_);
      }
      close(IN);
    },
  }
);
気にせんとソース書いてたので勉強になった。
サンクス。
>>13
次は自演の勉強しようね
7343:04/09/10 09:13
>>72 わし13とちゃうよ~。
>>69
マシン:Pen 120 MHz、80 Mem (w
データ:32630 lines, 4617186 bytes
Benchmark: running for, split, while for at least 5 CPU seconds...
for: 8 wallclock secs ( 7.84 usr + 0.00 sys = 7.84 CPU) @ 0.25/s (n=2)
(warning: too few iterations for a reliable count)
split: 5 wallclock secs ( 5.07 usr + 0.00 sys = 5.07 CPU) @ 0.59/s (n=3)
(warning: too few iterations for a reliable count)
while: 5 wallclock secs ( 5.68 usr + 0.00 sys = 5.68 CPU) @ 0.70/s (n=4)
7574:04/09/10 09:47
低性能マシンもこいうとき役立つな。
メモリ負荷も少ないし、whileが一番いいということだと思う。
質問っていうか相談というか悩んでます。

'A' と 'B' と 'C' の3文字、3桁で表せるのは9種類ですよね。
でも3桁「まで」となると 'AB' も1種類となって 3^3 + 3^2 + 3^1 に増えますよね。
こういうのも扱う時はどうしたらいいんでしょう。

空文字Dを追加して仮に4進数として /^D+/ にマッチするものだけをカウントとか思いついたんですが、
桁も文字種類も多く、重複除去が大変そうです。
あとは全部で1桁のループ→全部で2桁のループ…とかしかないのかなあ…。

いい案や、そういうのを追究しているサイトなどあれば教えていただけませんか。
Perlに限った話じゃなくてすみません。
>>76
お前は少し数学の勉強をした方が良いな
>>77
もう一度書き直してくれ。
あんたの課題と似ているが異なる課題も挙げて。

>>76
何がしたいんだ? マッチするものを探したいのか、組み合わせの数を数えたいのか
数学の前に日本語の勉強もすれ
8076:04/09/10 10:24
数字4桁以内の暗証番号総当たりするならどうしますか?
という感じです。

9の次を10じゃなくて00にすればいいのではという考えでした。

あと>>76の /^D+/ は /^D+[^D]+$/ でしたね。
whileとforeachはベンチとってもあまり意味はないだろ。
そりゃ大抵の場合whileの方が高速だろうけど、
それよりむしろ少ないメモリで済むことが重要なんだから。
>>80
やっぱあんたダメだ。
スレが荒れるからよそに行ってくれ。
ここ、あまり実力のあるやついないのか・・・
メモリに一気に取り込むメリットもあるんだが。
はいはい、そうですね
時と場合によりますね


終了
なんの話してんだ・・・
一発で読み込んだ方が早いやの、
一行づつ処理した方が早いやの・・・
そんな物、その時々の用法じゃないか。

whileでループさせた方が早いとか、
forでループさせた方が早いとか、
そんな事言ってるのと同じ。
ナンセンスな話し合いだな。おい。
遅いよか早いほうがいいもんな。
ましてや安定性も上がるならなお良し。
8776:04/09/10 11:12
了解しました。失礼します。
8868:04/09/10 11:26
>>81
ん?
「メモリを気にしなくていい(ファイルサイズ|環境)なら、while でも
foreach でも構わんだろ」という子に向けてのベンチなのだが…。

省メモリに済む while の利点は折込み済で、その上で速度的優位
が foreach にあるのなら「ケースバイケースでどちらかを選べ」って
話になるけど、今回のケースだと選択の余地が無い事を示したまで。
>>85
スレをもうちょっと前から読んでくれ、今本質的に重要なのはメモリ効率やらスピードではなくて
初心者にとりあえず教えるサンプルでなら foreach と while のどちらが適切かということだ。

それにも関わらず foreachをしつこく主張する奴が居るからベンチとか出してきてる人が居るだけ。
そしてスルーできない人もイパーイ居るだけ。

重複チェックならやはりハシュのご利用かな?
@Array = grep !$Hash{$_}++ , @Array;
結論

サーバサイドのプログラム作るなら、
少ないメモリ量で処理するようにした方がよい。

自分んちのパソコンで動かすプログラム作るなら、
一行づつ読み込もうが、一発で全部読み込もうが、
一文字づつ読み込もうが、好きにすればいい。

foreachでも一行づつ読み込んで処理する事もできるし、
whileで一発で読み込む事もできる。

今までで話し合ってる事は・・・
i = 3+3+3+3+3;
と書くのが良いか、
i = 3*5;
と書くのが良いかってレベル。
>>91=foreach(<>)を自分の糞ページのサンプルで使ってるアホウ
そのうちみっともないことに気がつくだろうから
温かい目で見守ろう
9491:04/09/10 12:04
まだ語り合う事があるか。
よし、具体例で反論してみろ。
>>76
my ($s, $e) = ('a', 'c');# aからcまで使う
my $target = 'cccc';#調べるのは 'cccc'まで 'a', 'b','c' 'aa', 'ab'・・・の順で調べる
my ($n_s, $n_e) = map { ord($_) } ($s, $e);

my @num = ( $n_s );
my $number= pack "C*", reverse @num;

while( $number ne $target ){
  $number= pack "C*", reverse @num;
  #ここに必要な処理
  print "$number\n";
  
  my $keta_agari = 0;
  my $i = 0;
  do{
    $num[ $i ]++;
    if( $num[ $i ] > $n_e ){
      $num[ $i ] = $n_s;
      $keta_agari = 1;
      $i++;
      !defined $num[ $i ] and $num[ $i ] = $n_s - 1;
    } else {
      $keta_agari = 0;
    }
  } while $keta_agari;
}

#毎回reverseさせるのが不安だ。
>>49
> ・どこでそう習ったのか?
工業高校の生徒か?

> ・while(<>) で回しているサンプルを見た事があるか?
> ・もしあるのなら、それではなく foreach にした理由は何故か?

これくらいのコードを書くのに、サンプルを
見なければならないものか?
教科書でも見ながら書いているのかな。

> もしかして、なんか悪い本 or サイトがあるのか?
ラクダ本にも例がある。
自分の考えに合わないなら悪い本・サイトなのか?


しかしウザイな、こいつ。
自分のサイト、自分のサイトって、
どこのサイトの管理者かしらんが、
お前のサイトで解説してろ。
>>91
だから初心者にとりあえず教えるサンプルとして
どっちが適切なのかTMTOWTDIで思考停止していいのかという
話をしてるんだが。
> i = 3+3+3+3+3;
> と書くのが良いか、
> i = 3*5;
> と書くのが良いかってレベル。
5が100万になっても困らないほうを普通は教えると思うがね。
> これくらいのコードを書くのに、サンプルを
> 見なければならないものか?
これぐらいのコードを書くのにサンプル見なきゃ while(<>) すら
思いつけんのか?
> ラクダ本にも例がある。
何ページに foreach(<>) なんて載ってるんだ?
>>96
>工業高校の生徒か?

ワロタ。

>>97
イタタタ・・・
結論

foreach(1..100000000) は最適化するのに foreach(<>) を最適化しないperlが悪い
今まで
$data = join('',<FH>);
ってかいてたから
read(FH,$data.-s FH);
なんてでてこなか~ただよ。
>>100
池沼のための最適化はやらねえよ、って作者が言ってるだろうが。
今ちょっとググってみたら、10年前にも同じような話題が議論されているんだね。

http://groups.google.co.jp/groups?hl=ja&lr=&ie=UTF-8&c2coff=1&selm=1994Apr11.212926.14971%40wdl.loral.com

おおもとの発言はMIT発。

http://groups.google.co.jp/groups?hl=ja&lr=&ie=UTF-8&c2coff=1&selm=2obs1fINNivq%40life.ai.mit.edu

foreach (<>) { ... } はMITレベルと言ってもいいんじゃないか。
>>103
>>100が正にそれだな(w
(1..100000000)が最適化されるようになった理由はどこかで読めますか?
>>96
お前神か?
何も知らずに foreach(<>) が書けるわけねぇだろ(w
107デフォルトの名無しさん:04/09/10 14:42:35
>>105
perldelta
108デフォルトの名無しさん:04/09/10 15:19:28
>>107
perl5005deltaに最適化されるようになったことは書いてありますが、
理由までは書いていないようです。
109デフォルトの名無しさん:04/09/10 15:22:09
理由聞いてどうすんのよ
110デフォルトの名無しさん:04/09/10 15:45:31
配列や連想配列自体が生成されているかどうかを調べるにはどうしたらいいのでしょうか?

例えば
if($a['test']){

}else{

}

このような場合、$a['test']が0でもnullでも連想配列自体が定義されていなくても
同じ結果になりますよね。

色々調べていくうちにdefined関数が使えるんじゃないかと思ったのですが
違うようでした。

どなたか教えていただけないでしょうか。
111デフォルトの名無しさん:04/09/10 15:54:58
>>110
exists
11215:04/09/10 16:07:12
うーん、伸びる伸びるw
113デフォルトの名無しさん:04/09/10 16:13:24
>>101
($data) = <FH>;

こんなのもある

他によく知られてるとこでは $/ を undef ですかね
114デフォルトの名無しさん:04/09/10 16:27:15
↑バカ
115デフォルトの名無しさん:04/09/10 17:10:27
>>90
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_can_I_extract_just_the_uniqu
作業変数を作るのが嫌なら
@Array = sort keys %{ { map { $_, 1 } @Array } };

>>101
それこそ正に「ファイルが小さければ join で充分」な箇所だよ。
join '', <FH>; は何をしているのか分かり易いし書くのも楽。
ミクロな視点での最適化が必要なら read を選べばいい。

>>110
・配列や連想配列*自体*
 my 変数なら use strict 'vars';
 グローバル変数ならシンボルテーブルをチェック

・配列の要素数 / 連想配列のキーの有無
 scalar @array; scalar %hash;

・配列の各要素 / 連想配列の各値
 defined $array[$num]; defined $hash{$key};

・連想配列の各キー
 exists $hash{$key};
116デフォルトの名無しさん:04/09/10 20:14:18
なんで得意になってる奴多いの?
117デフォルトの名無しさん:04/09/10 20:24:42
>>116
なんでだろうね。レベルは低くなって、態度はでかくなった。
118デフォルトの名無しさん:04/09/10 21:05:15
元々レベルなんて低いけどね。
Perlは簡単だから入門言語として勉強する人も多いだろうから。
レベルなんて上がるとは思えないし。
分かってくれば分かってくるほど、
Perlの無茶加減に気づいてきて、
違う言語へ移るだろうし。
でも、俺はPerlが好きだ。
119デフォルトの名無しさん:04/09/10 21:14:22
>>112
わざわざここまで伸ばしてやったんだ。感謝しろよ。
120デフォルトの名無しさん:04/09/10 22:04:19
whileで書き変えてみたらプロセス使用量が
メモリー使用量13M減ったよ。(汗
121デフォルトの名無しさん:04/09/10 22:12:21
まぁ>>120のような者が出てくるのなら、年に一度はwhile/foreach論争をやってもいいかもな。

つーかforeach(1 .. 100000)が最適化されるのは
「for(my $i = 1; $i <= 100000; $i++)よりずっと書きやすいが、酷くメモリ効率が悪い」
ってのが理不尽だという意見が多かったんじゃないだろうか。
逆にforeach(<>)が最適化されないのはwhile(<>)と*完全に*置き換えられるからだろう。

122デフォルトの名無しさん:04/09/10 22:26:52
foreach(<>)がwhile(<>)に勝る点なんて何一つ無いね。
@array = <> ならランダムアクセスができるという利点はあるがな。でも結局foreachの出番は無いわな。
123デフォルトの名無しさん:04/09/10 22:54:04
>>122
> foreach(<>)がwhile(<>)に勝る点なんて何一つ無いね。
for(<>)と記述することで、2文字ぶん打ち込むのがラク。
124デフォルトの名無しさん:04/09/10 22:57:02
forと書くべきところでforeachを、foreachを書くべきところでforを使うのは素人にはお勧めできないな。
125デフォルトの名無しさん:04/09/10 22:57:10
>>123
お前頭いいな
foreach(for)にも良い所があったって事でこの話題は終了しとこうぜ
126デフォルトの名無しさん:04/09/11 02:53:08
>>125
結局 for にも負けて、 foreach には良い所ひとつもなかったって事か。終了。
127デフォルトの名無しさん:04/09/11 03:50:24
foreachがヤケ酒で肝臓悪くしたら
お前らのせいだからな。
128デフォルトの名無しさん:04/09/11 04:23:45
>>123
バカいうなよ。
forは左人差し指を2回使うがwhileはすべて違う指。
明らかにwhileのほうが打ち込むのラク。
129デフォルトの名無しさん:04/09/11 04:27:53
>>128
おまいこそバカいうなよ。
同じ指を使うforのほうが圧倒的に打ち込むのラク。
130デフォルトの名無しさん:04/09/11 04:37:55
タバコのソフトパックを
右だけ破る→while
左だけ破る→for
ラベルを剥がして開く→foreach
131デフォルトの名無しさん:04/09/11 09:26:10
Operaのブックマーク(Hotlist)を
IEにインポートする用のHTMLに変換したいのですが
解説サイトって無いですかね?
132デフォルトの名無しさん:04/09/11 10:34:21
どんな解説サイトを期待しているんだろうか。
133デフォルトの名無しさん:04/09/11 10:58:00
- Operaのブックマーク(Hotlist)をIEにインポートする用のHTMLに変換の仕方解説! -
(1)ブラウザを立ち上げます
(2)アドレス欄をクリックします。
(3)http://www.goolgle.co.jp/を入力します
(4)"Operaのブックマーク(Hotlist)をIEにインポートする用のHTMLに変換"と入力する
(5)該当するページが見つかりませんでした。と表示されればOK。
134デフォルトの名無しさん:04/09/11 12:54:36
- Operaのブックマーク(Hotlist)をIEにインポートする用のHTMLに変換の仕方解説! -
(1)ブラウザを立ち上げます
(2)アドレス欄をクリックします。
(3)http://www.goolgle.co.jp/を入力します
(4)"opera bookmark perl"と入力する
(5)"OperaHotlist2HTML"のページを発見できれればOK。
(6)見つけたページの「ウサゲ」と書いてあるところをよく読む
(7)「STDIN」がわからない場合は(1)に戻る
135デフォルトの名無しさん:04/09/11 12:58:56
>>134
(7)で戻るのは(1)じゃなくて(2)だと思います。
136デフォルトの名無しさん:04/09/11 18:06:04
>>18です。
再び質問です。
>>51で同じファイル内のものはたとえ名前(ameなど)が同じでもアルファベットを
表示しないようにするには、どうしたらよいのでしょう。
137デフォルトの名無しさん:04/09/11 18:59:53
>>136
自分で考えれ。
138デフォルトの名無しさん:04/09/11 20:55:14
Perlのバージョンは4.0.1.8です。バージョンが古い為なのか、
以下の様なsprintfを使用したスクリプトがエラーになります。
どなたか、Perlの環境は変えずに、以下のsprintfの代わりとなる
短いスクリプトがあれば教えて頂けませんか?

&SUB(sprintf "%02d", $a - 1);

sub SUB{
  my $value = shift @_;
  system "$SHELL_COMMAND $value";
}
139デフォルトの名無しさん:04/09/11 20:56:07
エラーメッセージは?
140デフォルトの名無しさん:04/09/11 20:59:23
141デフォルトの名無しさん:04/09/11 21:06:38
>>138です。

HP-UXのサーバなんですが、エラーメッセージを
今手元に控えていないのでお伝え出来ない状態です。

ちなみに、以下は正常に 04 と結果が表示されますが、

perl -e '$a = 5;printf "%02d", $a - 1;"

以下のスクリプトではエラーとなるので、sprintfが使用出来ない為?
だと考えています。

perl -e '$a = 5;$b = sprintf "%02d", $a - 1;'

142デフォルトの名無しさん:04/09/11 21:29:10
>>138-141
WebProg と関係ないのでこっちで答えておく。

sprintf は Perl4 にもある。my 変数は無い。
http://flex.ee.uec.ac.jp/texi/perl/perl_toc.html
143142:04/09/11 21:31:42
144デフォルトの名無しさん:04/09/11 22:46:28
>>141
これをコピペしてやってみたら?
perl -e '$a = 5; $b = sprintf("%02d", $a-1); print $b, "\n";'
っつのは、>>141は全角スペースやら入ってることが気になった。
145デフォルトの名無しさん:04/09/11 22:51:23
LWPモジュールを使用してURLからページ内容を取得してます。
通常のページは普通に取得できるけどgoogleでGET形式のURLになった場合のみ取得できない;;
Yahoo検索など他のGET形式の場合は取得OK。

http://www.google.co.jp/search?hl=ja&ie=UTF-8&q=%E3%81%BB%E3%81%92&lr=


以下環境
RedHatLinux 9.0
Perl 5.8.0
libwww-perl-5.800
Jcode-0.87

以下スクリプト

#!/usr/bin/perl

use LWP::Simple;
use Jcode;

($buf) = get('http://www.google.co.jp/search?hl=ja&ie=UTF-8&q=%E3%81%BB%E3%81%92&lr=');
die "Couldn't get it!" unless defined $buf;
$buf = jcode($buf)->euc;
print $buf;
146138,141:04/09/11 23:27:14
>>142,144
レスありがとうございました。

>>144
自宅のサーバではない為、後日確認してみます。
147デフォルトの名無しさん:04/09/11 23:40:48
>>146
おいおい自分のパソコンにもPerlくらい入れろよ。
サーバで実験するってのはいやがられるよ。
148デフォルトの名無しさん:04/09/11 23:43:25
>>145
googleは、メタ検索エンジンになるのを拒否します。
それは、googleのヘルプかなんかに書いてあります。
ユーザ登録してgoogleAPIというのを使えばできます。
webprog板にgoogleAPIというスレがあるけど。
149デフォルトの名無しさん:04/09/12 05:50:41
1行目(レスアンカーは含めず)は翻訳ソフトが吐いたような日本語だね。
150デフォルトの名無しさん:04/09/12 08:55:22
>>145
んー、普通のブラウザだとGETできるからUA名をIEなんかに偽装してみそ
LWPはデフォだとLWPだかってUA名を送るからそれで蹴られてるかも
151デフォルトの名無しさん:04/09/12 11:04:00
Rubyのようにちゃんとしたexe生成ツールができないかなぁ。
152デフォルトの名無しさん:04/09/12 12:59:13
>>145
Googleは連アタかけるとアク禁食らうのでちゃんと串かますこと。
昔会社でやってアク禁食らって、ごめんなさいメール出して解除
してもらったことがある。その後はちゃんと串刺してやってる。
153デフォルトの名無しさん:04/09/12 13:02:56
>>151
PAR - Perl Archive Toolkit
JavaのJARのようなツールだが、exeも作成できる。

http://search.cpan.org/~autrijus/PAR-0.85/
154デフォルトの名無しさん:04/09/12 13:03:34
>>152
>その後はちゃんと串刺してやってる。

ヲイ…
155デフォルトの名無しさん:04/09/12 19:53:18
>>152
「ちゃんと」の用法がちゃうやろ。
そもそもアク禁されるほどの連アタにならないように「ちゃんと」接続を制御せな。
156デフォルトの名無しさん:04/09/12 21:19:05
>>153
こんなのあるんですね。
でもこれってperl2exeと同じようなものですか?
157デフォルトの名無しさん:04/09/12 23:51:50
>>148 >>150 >>152

貴重な意見<(_ _*)> アリガトォ
GET形式URLへはブラウザからだと取得できるので、
UA名を何かに変えてやってみまつ。

158デフォルトの名無しさん:04/09/13 04:53:25
オブジェクト指向ではない一本糞のようなプログラムを書く場合
パッケージには触れない(パッケージ名を変えたりしないなど)方が
よいのでしょうか?
159デフォルトの名無しさん:04/09/13 06:42:36
糞は早く流さないと臭いのでいちいちパッケージ変えたりしません
逆に、臭いからパックするという考えもアリ
160デフォルトの名無しさん:04/09/13 09:50:41
家のトレイ、水洗じゃないので、全部そのままにしてまつ。
臭いです。
161デフォルトの名無しさん:04/09/13 10:30:31
WindowsでGUIのperlプログラムを作ろうとしています。
Win32 GUI LoftのDemoは以下のようにコンソールよりGUIで起動できました。
 C:\Perl\loft\Demo\FetchURL>perl Fetch.pl
(ppmでインストールした)PAR-0.75で以下のようにexe化を行いました。
 C:\Perl\loft\Demo\FetchURL>pp --gui -a fetch.gld -o hoge.exe Fetch.pl
しかしhoge.exeを実行したときに
>par.exe - エントリ ポイントが見つかりません
>プロシージャ エントリ ポイント Perl_Gsv_placeholder_ptr がダイナミック リンク ライプラリ perl58.dll から見つかりませんでした。
と警告ダイアログが表示され実行されませんでした。
私には「何かインストールし忘れてるのかな」と感じただけなのですが、
どなたか解決方法のヒントをいただけないでしょうか。

今は(ppmでは手に入らない)PAR-0.85にアップグレードでどうにかならないかと、
Mkaefile.plやnmakeあたりの使い方を調べています。

Windows 2000
Perl 5.8.2
VC++ 有り
162デフォルトの名無しさん:04/09/13 10:54:55
>>161
初めて知ったけど、Tkより楽ちんそうだね。
入れてみようかな。
163デフォルトの名無しさん:04/09/13 14:53:20
2 1411.441578987632500 345.523617718994840 1065.917961268637800
91 1463.730149786665800 368.860556376834380 1094.869593409831400
165 1353.381577247856100 303.768416713978350 1049.613160533877600

こういった内容のファイルから入力しようとしているんですが、readだとバイト数が一定でないため使えません
どういったようにスペースで別れた数値を読み取れるようにできるんでしょうか?
164デフォルトの名無しさん:04/09/13 15:28:49
while (<>) { push(@a, $_) for split(/\s+/); }

Perlのキホンと思われ
これに枝葉ごてごてつければどうにでも応用が利く
165デフォルトの名無しさん:04/09/13 15:54:47
while (<>) { chomp; @a=split; ... }というのは良く見かけるが、
@a=split(...)のかわりにpush(@a, $_) for split(...)というのは
はじめて見たな。どこの芸風だろうか?
166デフォルトの名無しさん:04/09/13 16:30:06
pushにも良い所があったって事でこの話題は終了しとこうぜ
167デフォルトの名無しさん:04/09/13 16:40:57
あんまりPerl詳しくないので、うろ覚えの内容を書いてしまうけど、、
ヘンな記号みたいな特殊変数で、レコードセパレーターというか、
行(?)の区切りを設定する変数なかったっけ。

それをスペースにするっていうのはどうよ。
168デフォルトの名無しさん:04/09/13 16:41:34
foreach (<>) の中の人と同じでしょ。
chompしてないところとかなんでもメモリに持ちたがるところとか
169デフォルトの名無しさん:04/09/13 16:46:19
>>165
1行ずつ処理するんじゃなくて@aに全部ためるのが目的だったということですな。
170デフォルトの名無しさん:04/09/13 16:50:42
>>164-168
splitを使えばよかったのですね、ど素人質問に答えてくれてありがとうございますた。
171デフォルトの名無しさん:04/09/13 16:53:04
>>169
サンプルデータを見るに、明らかに行指向だと思うんだが
全部ごちゃ混ぜにした後で切り分けんの?
172デフォルトの名無しさん:04/09/13 18:44:57
>>168
べつにchompぐらいええやん。
173デフォルトの名無しさん:04/09/13 18:46:18
172 名前:デフォルトの名無しさん[sage] 投稿日:04/09/13 18:44:57
>>168
べつにchompぐらいええやん。
174デフォルトの名無しさん:04/09/13 18:50:23
チョンプ?
175172:04/09/13 18:55:23
chomp要らんやんって意味。
>>168>>15か?
176デフォルトの名無しさん:04/09/13 18:58:42
chompいらんって言ってる人は真性なの?
177デフォルトの名無しさん:04/09/13 19:07:03
>>172
何故にchompいらないと思うのかね。
178デフォルトの名無しさん:04/09/13 19:09:08
>>176
単なる初心者だろ
179デフォルトの名無しさん:04/09/13 19:11:02
  _  _∩
( ゚∀゚)彡  chomp! chomp!
 ⊂彡
180デフォルトの名無しさん:04/09/13 19:14:56
思わぬ魚が釣れた>>176-178
181デフォルトの名無しさん:04/09/13 19:15:51
びっくりするほどTMTOWTDI!
びっくりするほどTMTOWTDI!
182デフォルトの名無しさん:04/09/13 19:22:21
ワラタ、単なる初心者が居るな(w
あのコードなら chomp いらねーよ

183デフォルトの名無しさん:04/09/13 19:23:13
┐(´∀`)┌ヤレヤレ
184デフォルトの名無しさん:04/09/13 19:32:25
>>176-178は何が不満なんだ?正直、聞きたい(w
185デフォルトの名無しさん:04/09/13 19:40:43
perldoc -f split

split /PATTERN/,EXPR,LIMIT
split /PATTERN/,EXPR
split /PATTERN/
split

Splits the string EXPR into a list of strings and returns that list.
By default, empty leading fields are preserved, and empty trailing ones are deleted.
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
186デフォルトの名無しさん:04/09/13 20:29:15
>>185
それは split によって空文字列のフィールドが生成された場合、
後ろのものは捨てられると言っているだけだ。

print map "[$_]\n", split /\t/ for (
  "foo\tbar\tbaz\n", # foo, bar, baz\n
  "\t\thoge\t\tfuga\t\t", # '', '', hoge, '', fuga
);

chomp が要らないのは split のパターンが /\s+/ なので改行も
デリミタとして扱われる為。パターンを /\s/ にすれば分かる。

print map "[$_]\n", split /\s+/ for (
  "foo\tbar\tbaz\n", # foo, bar, baz
  "\t\thoge\t\tfuga\t\t", # '', hoge, fuga
);
print map "[$_]\n", split /\s/ for (
  "foo\tbar\tbaz\n", # foo, bar, baz
  "\t\thoge\t\tfuga\t\t", # '', '', hoge, '', fuga
);

fail safe や fool proof の為、常に chomp を入れておくのは
悪い選択では無いが、chomp を省くとこういうつまらん部分で
ハマる事もあるのでお勧めできない。
187デフォルトの名無しさん:04/09/13 20:47:36
188172:04/09/13 20:48:18
だからいらないんでしょ?
やれいうなら tr/\x0D\x0A//d; 使っとくけど。
189デフォルトの名無しさん:04/09/13 20:54:40
PerlはいつからWindowsオンリーの言語と化したのですか?
190172:04/09/13 20:55:58
>>189
それ俺に言ってんの?(w
191デフォルトの名無しさん:04/09/13 20:56:00
>>186
ご高説ご尤もということで(w
>163に関しては、\nの後の空フィールドは自動的にナイナイされるんだから
別にいいんじゃない?
192デフォルトの名無しさん:04/09/13 21:20:49
ちょmpはジョーシキ
193デフォルトの名無しさん:04/09/13 21:25:33
>>190
お前以外に誰に言ってると思ってんの?
194172:04/09/13 21:27:11
>>193
ほ~このコード自体はUnixでもMacでも窓でも使えるぞ。

ttp://www.din.or.jp/~ohzaki/perl.htm#CRLF_Remove

ココ読んでこいや。
195デフォルトの名無しさん:04/09/13 21:31:29
>>194
ああ。
それ自体はUNIXだろうがMacだろうが使えるだろうよ。
お前こそよく読め。
196172:04/09/13 21:33:23
>>195じゃ、窓専用って>>189の発言はなによ?
197デフォルトの名無しさん:04/09/13 21:35:17
>>196
分からないならもういいよ。
Windowsしか使わないお前自分自身のためのソースなら問題ないしさ。
198デフォルトの名無しさん:04/09/13 21:38:39
m9(^Д^)プギャーーーッ
199172:04/09/13 21:39:05
>chomp は Windows(DOS) や Mac,UNIX といった処理系に依存します.

俺がいいたいのはここだ。
200デフォルトの名無しさん:04/09/13 21:41:46
で?ってゆう
201デフォルトの名無しさん:04/09/13 21:42:47
>>199
依存して当たり前じゃねーか・・・
そもそも、UNIXで動くPerlはUNIX上で生成したテキストをUNIX上で処理するように作られてんだよ。
Windowsで作られたテキストをUNIXで処理するのをデフォルトなんかで作る訳ねーだろ・・・
わかるだろ?俺の言いたい事が。
202デフォルトの名無しさん:04/09/13 21:45:30
漏れの場合は UNIX のデータを Win で処理したり逆をしたりするから、
chomp より >>188 の方が使いでがあるなあ。
203172:04/09/13 21:45:49
だから、同一環境で作ったデータ使う環境ならchompでもええけど。
別OSから持ってきたデータだとつかえんでしょ?

ソーなったとき仕様で使えませんとでも言うの?
204202:04/09/13 21:48:54
まあ適材適所ってことでいいんじゃないの。
「ソーいう仕様です」でまかり通るケースも多いでしょう。
205デフォルトの名無しさん:04/09/13 21:49:39
その時はその時だろ
バカ?
206172:04/09/13 21:51:44
俺は馬鹿でもいいけどさ。
207デフォルトの名無しさん:04/09/13 21:54:57
あー・・・
なんか、もういいや。
その時々の対処でって事で。
208デフォルトの名無しさん:04/09/13 21:57:05
俺もよくUNIXのデータをWinで加工するが、データを落とす時に改行コード変換するから
別にchompで問題なし。というか、chompでないと可読性下がるんでchomp推奨。
>>194のはいろんなプラットフォームのデータを処理するCGI向けコーディングの話だろ?
209デフォルトの名無しさん:04/09/13 22:01:23
そんなん163が書けばいいこと。
なんで回答者がOSに依存しないよう考慮しなければいけないんだ?
使い捨てスクリプトかもしれんのに。
210172:04/09/13 22:03:33
最後に、chompが駄目とはいわん。
あれこれ決めつける発言がウザかっただけだ。(w
211デフォルトの名無しさん:04/09/13 22:05:00
最終結論は、
>>163のバカ!って事でFA?
212デフォルトの名無しさん:04/09/13 22:05:39
Ruby の chomp なんかは CR でも LF でも CRLF でもてきとーに削ってくれて
気が利いてるなと思う。
213デフォルトの名無しさん:04/09/13 22:06:47
>>212
適当に削ってくれてる辺りが適当な作りっぽくていい味出してるな
214デフォルトの名無しさん:04/09/13 22:22:13
改行コードがCRの場合テキストにLFが入るわけねーしRubyは頭イイ
215デフォルトの名無しさん:04/09/13 22:23:25
なぜPerlスレにルビ厨が混じってんだ?
216デフォルトの名無しさん:04/09/13 22:33:35
>>211
Perlスレに質問するってことは、Perlで処理しようと思ってるわけだろ。
正規表現でテキスト処理ってPerlの使い方の代表みたいに紹介されてると思うんだけど
そういうの全く見たり聞いたりしてないのかな
217デフォルトの名無しさん:04/09/13 22:36:35
>>214
極端な例。
各フィールド内の改行表現は CR、レコード区切りは LF の CSV 。

binmode DAT;
print DAT (
qq/1,abc\x0Ddef,2,ghi\x0A/,
qq/3,jkl,4,mno\x0Dpqr\x0D\x0A/,
qq/\x0Dstu,5,6,7\x0A/,
);
218デフォルトの名無しさん:04/09/13 22:39:43
馬鹿スレさらしage
219デフォルトの名無しさん:04/09/13 22:43:48
>>217
それを「テキスト」と言えるかは微妙。それこそ適材適所だべ。
220デフォルトの名無しさん:04/09/13 22:48:06
EXCELでセル内に改行があるCSV作ると、
セル内改行はLFになるよね。
行の区切りはCR LFで。
221デフォルトの名無しさん:04/09/13 23:05:52
で、それがテキストファイルだと?
222デフォルトの名無しさん:04/09/13 23:06:13
勉強になるなぁ~、いろいろ。
個人的には、whileだchompだと云うぐらいなら
てめぇが即レス回答しろや、ボケッ!とか思っちゃうが。
223デフォルトの名無しさん:04/09/13 23:13:28
>>221
CSVはバイナリファイルだと?
224デフォルトの名無しさん:04/09/13 23:13:30
>>219
いやまぁ微妙だから「極端な例」なんだけどね。
少なくとも while (<>) { chomp; ... という慣用句なら
問題なく処理できるけど。

あと見落とされがちだが chomp は $/ と連動してるので、
陽に $/ を設定すれば行末で悩む必要は無い。

local $/ = '0';
chomp, print "[$_]" while <DATA>;
__DATA__
102030405060708090
225デフォルトの名無しさん:04/09/13 23:23:10
よーし、パパJAVAに移行しちゃうぞー!
226デフォルトの名無しさん:04/09/13 23:23:33
>>18です。
再び質問です。
>>51で同じファイル内のものはたとえ名前(ameなど)が同じでもアルファベットを
表示しないようにするには、どうしたらよいのでしょう。
227デフォルトの名無しさん:04/09/13 23:27:47
>>226
ちょっとは自分で考えてるんか?
228デフォルトの名無しさん:04/09/13 23:36:01
foreachの件と言い、>>164と言い
妙ちくりんなコードはいったい何なんだ?
どっかに発生源があるんか?
アホウが書いた本がなぜか売れてるとか。
229デフォルトの名無しさん:04/09/13 23:37:53
チョップするかわりにいつも
while(<>){
s/\s+$//;
}
みたいに書いてる。
230デフォルトの名無しさん:04/09/13 23:38:18
でも一行ずつ処理に区切り付けたらソートとか出来ないんじゃないの?
231デフォルトの名無しさん:04/09/14 00:12:16
>>226です。
いくら考えてもわかりません。
>>18で同じファイル内のものはたとえ名前(ameなど)が同じでもアルファベットを
表示しないようにするには、どうしたらよいのでしょう。

あまり聞きすぎるのも悪いので。
perlの基本的なことは勉強したのですが、まだ慣れていないようです。
プログラムの例が豊富にのっているようなホームページはないのでしょうか?

232デフォルトの名無しさん:04/09/14 00:18:43
233デフォルトの名無しさん:04/09/14 00:43:21
>>223
おまえCSVファイルって何のことか分かってて言ってる?
234デフォルトの名無しさん:04/09/14 00:49:30
>>231
Perlの勉強よりアルゴリズムの勉強が必要だと思う
手順を論理的に考える能力が足らないんじゃないのかな
235デフォルトの名無しさん:04/09/14 00:50:03
perl hoge.pl foo bar aho
で、foo bar ahoを文字列のリストとして取得するのはどうやるんでしょうか。
my $input = $_;はできても
my @inputs = @_;はできないですよね。
236デフォルトの名無しさん:04/09/14 00:54:01
@ARGV
237デフォルトの名無しさん:04/09/14 00:57:37
>>233
カンマ区切りテキスト
238デフォルトの名無しさん:04/09/14 01:01:16
>>236
thx
239デフォルトの名無しさん:04/09/14 02:02:26
なんか・・・ね・・・
240デフォルトの名無しさん:04/09/14 02:07:55
やっぱり・・・だよ・・・ね・・・
241デフォルトの名無しさん:04/09/14 04:24:31
PerlでWindowsのスクリーンセーバーを作るには
Win32モジュール使えばいいんですか?
242161:04/09/14 07:08:38
PARで上手く実行ファイル化できないと質問した>>161です。

根本的な解決方法かどうかはわかりませんがPARのアップグレードを試みたので状況報告です。
(PAR-0.85の)makefile.plを実行してmissingと出たものをppmで追加し、全てloadedと表示されるようにしました。
しかし、Fetching 'PAR-0.85-MSWin32-x86-multi-thread-5.8.2.par' に失敗し、'script/parl.exe'の生成にも失敗しました。
そこで独自にparファイルをダウンロードしたのですが、@INCやMakefile.plと同じディレクトリに置いてもそれを使ってくれません。
parファイルを解凍しての手動インストールは難しそうなので断念しました。
243デフォルトの名無しさん:04/09/14 08:05:23
漏れは、chompのソースコード書き換えて、
s/\x0d\x0a?$//;
にしてる。
244デフォルトの名無しさん:04/09/14 08:11:54
245デフォルトの名無しさん:04/09/14 08:47:36
>>242
私も同じようなエラーが出たので
ttp://aut.dyndns.org/par/
から使っているPerlのバージョンにあう
PAR-0.XX-*.parをダウンロードして
手動でインストールした所、エラーが出なくなりました。
(Win2K Perl 5.8.3)

でも、結局、
PAR-0.85はエラーが出てインストールできなかったので、
もしかしたらPerlを最新バージョンにアップするとうまくいくかもしれません。
246161:04/09/14 09:41:05
結果:できました!
---
>>245 回答ありがとうございます。
今Perlを5.8.2->5.8.4にバージョンアップさせました。

>>244 回答ありがとうございます。
そのサイトは見ていませんでした。
コンパイル済みPARの配布を行っているんですね。

・Perlのバージョンアップ
ttp://www.bribes.org/perl/ppm/PAR.ppd からインストール
両方行ったところ「pp --gui -a test.gld -o test.exe test.pl」で実行ファイルを作成でき、起動も無事行えました。
具体的な原因は判らなかったもののこれが過去ログとなった時に役立てば幸いです。

本当にありがとうございました・゚・(ノД`)・゚・
247デフォルトの名無しさん:04/09/14 11:27:08
>>246
情報Thx.
248デフォルトの名無しさん:04/09/14 13:42:45
>>243
Mac 使い?
249243:04/09/14 14:20:05
間違えた。s/\x0d?\x0a?$//;

250デフォルトの名無しさん:04/09/14 14:25:36
>>249
chomp使わないで、
そうする利点がわかってんなら、
それでいいんじゃない。
あーっそって感じ。
251デフォルトの名無しさん:04/09/14 14:30:47
人をばかにして折れが一番といいたい絶頂厨がいるな。
252243:04/09/14 14:34:06
悪かったなー。二度と来る
253デフォルトの名無しさん:04/09/14 14:37:37
>>251
勘弁してくれよ。
終わった話を得意気に持ってくるヤツに、
あっそ。と言ってあげたまでの話。
お前には、はいはい。と言ってあげよう。
254デフォルトの名無しさん:04/09/14 14:40:31
まぁ、まったりいこうや。
取敢えず、駄目ならソース出せということで。
255デフォルトの名無しさん:04/09/14 14:46:08
二つのファイルを使う時、変数の取り扱い方がわかりません。
>b0005 gtgaaaaagatgcaatct
>yaaA atgctgattcttatttca
>Zaw atgaggttggccccccca
...

>Z0005 gtgaaaaagatgcaatct
>yaaA atgctgattcttatttca
>Eae atgagagagagccgagccgag
...

gtgaaaaagatgcaatct b0005 Z0005
atgctgattcttatttca yaaA yaaA
...
と表示させる方法を教えてください。
(二つのファイルを比較して、塩基配列(右の部分)が等しいものの名前を表示する。
同じファイル内では等しくても表示しません。)

自分は塩基配列をそれぞれ変数にして等しい時表示すると書きたかったのですができませんでした。
256デフォルトの名無しさん:04/09/14 15:02:07
宿題は自分でやろうな。
257デフォルトの名無しさん:04/09/14 15:18:24
my %enkis;
open A, "file-a.txt" or die;
while(<A>){
my ($tag, $enki) = split;
$enkis{$enki} ||= [$tag];
}
close A;

open B, "file-b.txt" or die;
while(<B>){
my($tag, $enki) = split:
unless($enkis{$enki}){
$enkis{$enki} = [$tag];
}else{
push $enkis{$enki}, $tag;
}
close B;

print qq/$_ @$enkis{$_}\n/ foreach (keys %enkis);
258デフォルトの名無しさん:04/09/14 15:30:46
>>255を軽くプロファイリングしてみます。
>>255は、自分が分かっているんだから相手もわかる。
相手が理解しやすいよう伝えようとは考えない。
この辺で、自己中心的な部分があります。
また、こういう考えをする人は頭の良い人に多いように思います。

また、他人が自分に力を貸すのは当たり前。
そういう思想の持ち主のように思います。

また、物を例えて表現するのが苦手に思います。
これは逆に、例えた物を置き換えて理解するのが苦手に繋がります。
たとえば、ライターの火は危ないよ、と教えてもらっても、
「ライターの火は危ない」とだけ学習し、コンロの火も危ないとは学習しません。
「火は危ない」そう学習するのが苦手に思います。

こういう人は、人とのコミュニケーションが苦手で、
自分を表現するのが下手な奥手な人。
以外な所で知的で、内面は大胆不敵。
しかし、外には出さない。
煽りっぽくなりましたが、正直なあなたの印象です。
たとえ、ここで答えを聞いても、
応用し、違う局面で生かす事ができないと思うのであります。
259デフォルトの名無しさん:04/09/14 15:36:15
258 を要約すると 256 となります。
260デフォルトの名無しさん:04/09/14 15:41:10
255=257というのはどうだろう?
261デフォルトの名無しさん:04/09/14 15:52:05
何か最近255みたいな質問多いな
262デフォルトの名無しさん:04/09/14 17:38:29
回答者のレベルが下がったら
質問者のレベルも下がってしまった。
263デフォルトの名無しさん:04/09/14 17:45:31
 と馬鹿が申しております
264デフォルトの名無しさん:04/09/14 17:47:16
落ち着け!
落ち着くんだ!(# =ΦωΦ=)フーフー…!!
265デフォルトの名無しさん:04/09/14 18:23:09
>>263
図星を指されてむかついた時は、もっと文章を捻ろう。
定型文に依存すると、真っ赤な顔したDQNってバレちゃうぞ☆
266デフォルトの名無しさん:04/09/14 18:59:58
ここでいいのかな?
Perlで次のようなHTTPクライアントプログラムを作ったのですが、
iswebのcgiを取得しようとすると、どうしても403になってしまいます。
何か解決策知ってる方いませんでしょうか?

#!/usr/bin/perl
use Socket;
$u = "http://nekyo.hp.infoseek.co.jp/cgi-bin/wiki/wiki.cgi";
if($u =~ m|^http://([-_\.a-zA-Z0-9]+)/?(.*)$| ){
$host = $1; $port = getservbyname('http', 'tcp'); $path = $2;
}elsif($u =~ m|^http://([-_\.a-zA-Z0-9]+):([0-9]+)/?(.*)$| ){
$host = $1; $port = $2; $path = $3;
}
$iaddr = inet_aton($host) || die 'err';
$sock_addr = pack_sockaddr_in($port, $iaddr) || die 'err';
socket(SOCKET, PF_INET, SOCK_STREAM, 0) || die 'err';
connect(SOCKET, $sock_addr) || die 'err';
select(SOCKET); $|=1; select(STDOUT);
print SOCKET "GET $u HTTP/1.0\r\n";
print SOCKET "Referer: $u\r\n";
print SOCKET "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)\r\n";
print SOCKET "Host: $host:$port\r\n\r\n";
while(<SOCKET>){ print; m/^\r\n$/ && last; }
while(<SOCKET>){ print; }
267デフォルトの名無しさん:04/09/14 19:11:22
たかが2chで何か言われたぐらいで
顔を真っ赤にする奴がいるんだろうか。
268デフォルトの名無しさん:04/09/14 19:33:20
>>266
LWP使えって。
269デフォルトの名無しさん:04/09/14 19:34:54
>>266

GET /cgi-bin/wiki/wiki.cgi HTTP/1.0

っとするべきところが

GET http://nekyo.hp.infoseek.co.jp/cgi-bin/wiki/wiki.cgi HTTP/1.0

となったるだーよ
270263:04/09/14 19:50:11
俺さっききたばかりで何となく煽っただけです☆
271デフォルトの名無しさん:04/09/14 19:52:58
と、顔を真っ赤にしながら馬鹿が負け犬の遠吠えをしております
272263:04/09/14 19:57:09
本当だもん。。。
273デフォルトの名無しさん:04/09/14 20:12:03
と馬鹿が申しております
274263:04/09/14 20:17:55
なんでIO::Socket使わないの?
275デフォルトの名無しさん:04/09/14 20:21:20
>>269
ありがとう!できました!
276デフォルトの名無しさん:04/09/15 00:32:33
初心者なんで、なんか的外れな質問でしたらすみません。
マルチコアプロセッサ対応版のperl、みたいなのはあるんでしょうか。
277デフォルトの名無しさん:04/09/15 08:17:58
閉ループを、ブラウザを開いている間だけ実行させ、
ブラウザを閉じたら閉ループから抜け、プロセスを終了させる方法とかりますでしょう
か?

監視処理的な事をやらせたいので、
閉ループとsleepとを使って行なわせてるのですが、
ブラウザを閉じてもプロセスが動きっぱなしになるので、
タスクマネージャーでいちいち終了させるのが、
面倒でありまして。
278 ◆FIcNi4f8js :04/09/15 08:36:12
HTMLの中にreloadを書いて、自分は終了。
279277:04/09/15 10:09:30
>>278
すいません。
初心者なもので、
もう少し詳しく教えて頂きたいのですが。
280デフォルトの名無しさん:04/09/15 10:25:28
>>279
HTML、reloadでぐぐるぐらいのことが出来なくてどうする。
それにもうPerlの話じゃないし、初心者だという開き直りも印象が悪い。
出直して来い。
281デフォルトの名無しさん:04/09/15 11:35:00
全部わかった上で嫌味を書いてみただけなのでは?

OSもわからんし監視処理「的」ってのも意味不明だけど
forkしてexecして親からpid監視すりゃいいンじゃないの?

って既に他所で開いてあるブラウザを監視したいとかいう話だったら
もう知らんけど。
282デフォルトの名無しさん:04/09/15 13:12:17
ちんぽに真珠を埋め込みたいのですが、
おすすめは何ですか?
ついでに手術してくれる病院も
紹介してもらえるとありがたいのですが。
283デフォルトの名無しさん:04/09/15 14:10:58
>>282
自分でBB弾でも詰めとけよ
284デフォルトの名無しさん:04/09/15 15:05:10
>>282
悪い事言わないから。
真珠を埋める手術受ける前に、
真性包茎の手術を受けろ。
な?
285デフォルトの名無しさん:04/09/15 15:37:21
>>277
mod_perlみたいなのを使った場合は知らんけど、
普通cgiはブラウザ~で読みだしたときの状態を見るものだとおもわれ。
よってブラウザリロードをしてとりこむ。->鯖のプロセス自体はその都度終了。

監視処理とやらは常駐処理になるだろうから別プログラムにせにゃならん筈。
286デフォルトの名無しさん:04/09/15 16:32:50
use Win32::OLE::Variant;
$conn = 'Provider=Microsoft.Jet.OLEDB4.0;';
$conn .= 'DataSource=test.mdb;';
$db = Win32::OLE->new('ADODB.Connection');
$db -> Open($conn);
$rs = $db->Execute("SELECT * FROM [TEST];");
while (!$rs->EOF) {
 print $rs->Fields('ID')->Value;
 $rs->MoveNext;
}
$rs->Close;
$db->Close;

----------------
while (!$rs-EOF) { の行でエラー
Can't call Method "EOF" on an undefilned value text.cgi line xx.

今まで動いてた物が急に動かなくなりました。
原因又は、原因の突き止め方を教えてください。
Win2k-Server, IIS ,ActivePerl v5.8.4 ,Access2000
287デフォルトの名無しさん:04/09/15 17:40:35
perlってXPでもインストールしないとできないんですか?
学校で聞いたらXPだと入ってると言われたんですが・・・
馬鹿な質問すいません
288デフォルトの名無しさん:04/09/15 17:48:17
>>287
それどこの学校だよw
289デフォルトの名無しさん:04/09/15 18:51:56
ActivePerlでも入れませう、基本だぞモルァ
290デフォルトの名無しさん:04/09/15 19:03:50
こういうやりとりを想像してみるテス㌧

287 「先生、学校のパソでもパールとかできるんすか?」
クソ先公 「(あ?実習室にはXP機があるし、図書館にはiMacがあるが、どっちの事だ?
     XP機には漏れが Perl をインスコしておいたが……)
     おう、Perl なんかよく知ってたな。どこで使いたいよ?」
287 「あー、実習室のパソで……」
クソ 「あそこなら使えるぞ。自由に使え」
287 「押忍! アリガトッシタ!」
291デフォルトの名無しさん:04/09/15 19:07:44
287が脳内変換したに一票
292デフォルトの名無しさん:04/09/15 19:30:35
>>290
多分それビンゴ
293デフォルトの名無しさん:04/09/15 19:39:52
>>287の学校には、
XP以外に98やらMeやらMacやらLinuxやらが入ってるPCがあり、
XP(が入ってるPC)にはPerl(インストールしておいたから)入ってるよ。
の説明を受けたのをXPには最初から入ってる物と勘違いしたに1000カノッサ
294デフォルトの名無しさん:04/09/15 20:06:12
ここでくだらん予想しても・・・(w
295デフォルトの名無しさん:04/09/15 20:46:04
>>286
$db->Executeの戻り値がundefだから。
どういう条件でundefが返るのかは自分で調べてちょ。
(テーブルがなくなったとか、あるいはファイルに接続できなくなったとか、排他制御とか、いろいろ想像できるけど)
296デフォルトの名無しさん:04/09/15 23:37:44
ppm しようとしたら、

C:\Documents and Settings\masayuki>ppm
Error: neither 'HKEY_LOCAL_MACHINE/SOFTWARE/ActiveState/PPM//InstallLocation' no
r 'HKEY_CURRENT_USER/SOFTWARE/ActiveState/PPM//InstallLocation' found in registr
y at E:\www\usr\bin\ppm.bat line 29.

なんて言われてしまったんですが、どうしたらいいんでしょう?
ちなみにパールはE:\usr\local\binにインストールしてあるのですが・・・

Windows XP
ActivePerl 5.8.1 Build 807

です。誰かアドバイスよろしくお願いします。
297デフォルトの名無しさん:04/09/15 23:39:02

XPだってさ
298デフォルトの名無しさん:04/09/15 23:40:36
>>297
それがどうかしましたか?
299デフォルトの名無しさん:04/09/16 00:13:29
>>296
再インスコ
300デフォルトの名無しさん:04/09/16 01:02:05
ネタにしか見えねぇし
301デフォルトの名無しさん:04/09/16 01:09:12
携帯絵文字の変換で悩んでいます。

ボーダフォンの絵文字変換の部分らしき部分の抜粋です
else {
$str =~ s/&#(\d\d\d\d\d);/<img src=\"$ImodeEmojiDir$1\.png\" border=0 width=12 height=12>/g;
if ($str =~ /\x1B\$/) {
$str .= "\x0F";
1 while ($str =~ s/(\x1B\$[\45-\x47\x4F-\x51])([\x21-\x7A])([\x21-\x7A]+)(\x0F)/$1$2$4$1$3$4/g);
$str =~ s/\x1B\$([\45-\x47\x4F-\x51][\x21-\x7A])\x0F/'<img src="' . $JskyEmojiDir . unpack('n',$1) . '.gif" border=0 width=12 height=12>'/eg;
$str =~ s/\x0F$//; }

「Unicode E539」「ウェブコード $QY」が「20513.gif」と変換されます。
ttp://www.dp.j-phone.com/dp/tool_dl/web/picword_06.php
順序良く並んでいれば連番で問題ないのですが、変換されると番号が飛びメチャクチャになります。
何か良い方法は無いでしょうか?
302301:04/09/16 01:21:44
ログにはウェブコードで保存されているようです、「$GBB(←$GBB※)」
←と※は半角(?)で、※の部分は小さすぎて見えませんでしたので推測です。
303デフォルトの名無しさん:04/09/16 01:23:31
仕事上の問題をタダで解決しようなんて甘い考えはいけないよ
304デフォルトの名無しさん:04/09/16 02:24:35
抜粋ではなく、全体を見せてくれるのならば直してあげるのになあ。残念。。
305デフォルトの名無しさん:04/09/16 03:00:50
>1 while ($str =~ s/(\x1B\$[\45-\x47\x4F-\x51])([\x21-\x7A])([\x21-\x7A]+)(\x0F)/$1$2$4$1$3$4/g);
>$str =~ s/\x1B\$([\45-\x47\x4F-\x51][\x21-\x7A])\x0F/'<img src="' . $JskyEmojiDir . unpack('n',$1) . '.gif" border=0 width=12 height=12>'/eg;
>$str =~ s/\x0F$//; }

とりあえず、whileの中の置換gオプションは間違いじゃかと。
あと1、2行目の文字クラスで\45もおかしいよね。。。
306デフォルトの名無しさん:04/09/16 04:42:37
>>303
仕事ではありません、まぁ甘いと言われても仕方ありませんが

>>304
全文でもいいのですが、サブルーチンなので意味が無いかと思いまして

>>305
出来ればおかしい部分を、助言して頂けませんでしょうか?
助言が得られなければ、違約金覚悟で契約してきますが..貧乏なもんで
307デフォルトの名無しさん:04/09/16 05:57:55
↑のコード片だけ見るとあまりに奇妙なロジックだから他のサンプル探したほうがいいかもね
308デフォルトの名無しさん:04/09/16 10:26:57
仕様はよくわかんないけどとりあえず305の指摘にある
\45は\x45の間違いだろう。そこ直してみれば?

gはなくてもいいけどあってもいいはず。

しかし「変換されると番号がとびめちゃくちゃ」と
いわれてもなにがなんだかさっぱりわかんない。
具体的に例をあげて、これを変換したらこうなった
けど自分はこうなることを期待しているというのを
はっきり書かないと。
309デフォルトの名無しさん:04/09/16 12:51:22
$str =~ s/(\x1B\$[ry])([ry])([ry]+)(\x0F)/$1$2$4$1$3$4/g
となって
$str =~ s/\x1B\$([ry][ry])\x0F/ry . unpack('n',$1) . ry'/eg;
だから
画像ファイル名の決定には1度目の置換の $1$2$4 までしか使ってないし、なんで妙な挿入になってんのかも謎
310305:04/09/16 13:32:43
$_ = '<bcddffff>';
1 while (s/(<)(\w)(\w+)(>)/$1$2$4$1$3$4/g);
print ;#$_ = <b><c><d><d><f><f><f><f>で表示

gオプションは正しいってことで。上の例場合、
<>内に2文字以上あったら1文字になるまで置換しつくすってことで。
311デフォルトの名無しさん:04/09/16 19:45:31
PARで作ったexeのアイコンって自分の好きな物に変更できるのでしょうか?
312デフォルトの名無しさん:04/09/16 20:19:19
>>311
ドキュメントくらい読めよ。またはpp --helpとかさ。

pp --icon=myicon.ico script.pl
313デフォルトの名無しさん:04/09/16 20:21:54
つーかあの程度の数なら素直にテーブル組めばいいのに
あのコード片じゃそこまでややこしく画像ファイル名を作る理由がワカランからもうこのネタはお終いじゃ
314デフォルトの名無しさん:04/09/16 21:17:59
>>313
文字コードに対応した絵文字の画像ファイルがあらかじめ
用意してあるんじゃないかと思われ。
315デフォルトの名無しさん:04/09/16 22:17:42
>>314
リンク先のHTMLソース解析して、ハッシュにでも突っ込むのが一番早いと思われ
316デフォルトの名無しさん:04/09/16 22:48:20
perl -ep と perl -pe で挙動が違うのはなぜ~~?
317デフォルトの名無しさん:04/09/16 23:10:24
>>316
-ep は -e "p" とするのと同じ意味になる。
-e は後ろに引数を取るオプションだから、後ろに変なの続けちゃダメでしょ。
318デフォルトの名無しさん:04/09/16 23:27:12
perl -e "print q[マンコ 得ろ杉]"
319デフォルトの名無しさん:04/09/17 02:13:36
釣れたわぁ
320デフォルトの名無しさん:04/09/17 02:18:13
「マンコ 得ろ杉」を狙い打ち?
321デフォルトの名無しさん:04/09/17 07:45:21
perlで
mkdirで新規ディレクトリを作成し、そのディレクトリに新規ファイルを作成する事までは出来たのですが
そのファイルのパーミッションを変えることが出来ません。。
chmodでも変わらないのですが、何かいい方法ないでしょうか?
よろしくお願いします
322デフォルトの名無しさん:04/09/17 07:48:34
そのディレクトリのパーミッションは?
323デフォルトの名無しさん:04/09/17 08:09:00
レスありがとうございます
一応777にしてますです
324デフォルトの名無しさん:04/09/17 10:25:00
chmod() の返り値(変更が成功したファイルの数)をチェックし、
ゼロだった場合は $! を表示。で分かるかも知れず分からぬかも知れず。

つうか書き捨てのスクリプトはともかく、なにかちゃんとしたものを
作ってるんだったら外部に作用する関数(ファイル操作とかDBとか)
を呼ぶときは必ず失敗か成功かチェックするコードを入れる癖をつけるべし。
325perlマン:04/09/17 10:45:56
perlで 3つの変数(それぞれ変数の内容は整数値です)の $a,$b,$cがあったとして 変数$a,$b,$cの中で一番大きい値を持つ変数を検出ぢ 最終的に print (一番大きな変数)と表示させたいのですが
どのようにしたら 一番大きな変数表示が出来るperl スクリプトができるでしょうか?
326デフォルトの名無しさん:04/09/17 10:57:07
>>325
$a = 1;
$b = 2;
$c = 3;

print "a がデケエ" if($a > $b && $a > $c);
print "b がデケエ" if($b > $a && $b > $c);
print "c がデケエ" if($c > $a && $c > $b);
327デフォルトの名無しさん:04/09/17 11:34:42
use DBI;
$user = 'aaa';
$passwd = 'bbb';
$db = DBI->connect('DBI:mysql:localhost',$user,$passwd);
$sth = $db->prepare("SELECT * FROM hoge");
これ実行するとInternal Server Errorになるのですが
最後の$sthの行を消すとエラーはでないのです
なぜでしょうか?
328デフォルトの名無しさん:04/09/17 11:54:48
>326
等号も入れたほうがいいかも知れない

>327
$sth = $db->prepare("SELECT * FROM hoge;");

だと思われ
329デフォルトの名無しさん:04/09/17 11:57:41
>>327
エラーログ見ろよ。Internal Server Errorになったときの基本だ。
330デフォルトの名無しさん:04/09/17 12:06:15
>>328
なるほど!
と思ったけどそれでも無理でした。。
331デフォルトの名無しさん:04/09/17 12:19:34
>>330
エラーログ見ろよ。Internal Server Errorになったときの基本だ。
332デフォルトの名無しさん:04/09/17 12:24:32
と言うか接続が出来てないようです
今日はじめてなもので もう少し勉強してからきます
333デフォルトの名無しさん:04/09/17 12:30:51
どうしてエラーログを見ようとしないのかね┐(゚~゚)┌
そんなに見たくないもんなのだろうか。
334デフォルトの名無しさん:04/09/17 12:30:55
use DBI;
が使えるかどうかってどうやってわかりますか?
借りてるレンタルサーバーで使えるかわからないので
よろしくおねがいします。
335デフォルトの名無しさん:04/09/17 12:32:54
CGIはスレ違い。

CGIじゃないってんならコマンドラインから叩きゃエラー出るだろ
336デフォルトの名無しさん:04/09/17 15:39:51
>>255です。
>>257の方に答えていただいたのですが、うまく動きません。
少しだけ自分で直しましたが、まだどうして動かないのかが
わかりません。どなたかよろしくお願いします。
以下問題のプログラム
my %enkis;
open A, "file-a.txt" or die;
while(<A>){
my ($tag, $enki) = split;
$enkis{$enki} ||= [$tag];
}
close A;

open B, "file-b.txt" or die;
while(<B>){
my($tag, $enki) = split;
unless($enkis{$enki}){
$enkis{$enki} = [$tag];
}else{
push @{$enkis{$enki}}, $tag;
}
close B;

print qq/$_ @$enkis{$_}\n/ foreach (keys %enkis);
337デフォルトの名無しさん:04/09/17 16:08:37
>>336
最後の行の@$enkis{$_}→@{$enkis{$_}}だと思う。

前者はスカラー変数$enkisに格納されたハッシュへのリファレンスを
デリファレンスして、$_に対応する値ひとつからなるスライスをとった
ことになってしまう。

欲しいのは%enkisハッシュのキー$_に対応する値の配列リファレンスを
デリファレンスした配列だろう。

あとは、いきなりpushしても大丈夫なのでunlessのあたりは冗長。
そのままでも動きますが。
338デフォルトの名無しさん:04/09/17 17:31:23
>>255>>336です。
>>337のように直したら、きちんとprint されましたが、結果がおかしい
ものになっていました。
原因を考えようと、二つのファイルの形式を見直したところ、使うファイルは、
>遺伝子名(b0005とか) 塩基配列(atgatgcgとか)
というデータが羅列されているのですが、

ファイル1
>b0005 gtgaaaaagatgcaatct
>cat gatagtcgacccaggtcccga
>yaaA atgctgattcttatttca
>Zaw atgaggttggccccccca
...
ファイル2
>Z0005 gtgaaaaagatgcaatct
>yaaA atgctgattcttatttca
>Eae atgagagagagccgagccgag
...
のyaaAのように、比較するものが必ずしも同じ行でないことが原因ではないかと
思いました。

339デフォルトの名無しさん:04/09/17 17:32:04
>>338の続きです。

また、もう一つの問題として、
ファイル1
>H0005 gtgaaaaagatgcaatct
>cear gtgaaaaagatgcaatct
>
...
ファイル2
>N0005 gtgaaaaagatgcaatct
>cear gtgaaaaagatgcaatct
...
のように同じ塩基配列のものが複数ある場合があったのですが、この時は
「遺伝子名で同じものがない時は、適当に遺伝子名のペアをつくり、 
塩基配列 ファイル1の方の遺伝子名 ファイル2の方の遺伝子名
と出力し、上の例のcearのように、遺伝子名で同じものがある時は、
それを優先的にペアにして出力(つまり、
gtgaaaaagatgcaatct H0005 N0005
gtgaaaaagatgcaatct cear cear
のように出力)する」にはどのようなプログラムを書いたらよいのでしょうか。
*同じファイル内だけで同じ塩基配列の遺伝子があってもそれは表示しません。

言葉足らずですみませんが、どなたか方針だけでも教えてください。
340デフォルトの名無しさん:04/09/17 17:33:06
びっくりするほどDNA
びっくりするほどDNA
341デフォルトの名無しさん:04/09/17 18:12:43
342デフォルトの名無しさん:04/09/17 18:19:38
うんうん。安上がりだと思ってここで聞いてるのかもしれないけど
初めてのPerl読んだほうが手っ取り早いような気がする。

きちんと考えずに書くけど、ハッシュと正規表現が身についてれば
どうにでも料理できるンじゃないのかな、この手の問題は。
343デフォルトの名無しさん:04/09/17 18:29:14
>>11>>18>>255>>336
344デフォルトの名無しさん:04/09/17 18:49:00
塩基配列厨Uzeeeeeeee
345デフォルトの名無しさん:04/09/17 19:56:51
>>344
お約束っつーか、それを言うのはただの嫌な奴だな。
346デフォルトの名無しさん:04/09/18 17:50:44
347デフォルトの名無しさん:04/09/19 04:14:57
perlで数値計算しました。私はヘソタイですか?
348デフォルトの名無しさん:04/09/19 08:10:56
某国立大学医学部みたいにウン十億円の医療情報システムを
Perlで作ろうとするのよりはいくらかマシ。
349デフォルトの名無しさん:04/09/19 14:04:54
PDL
350デフォルトの名無しさん:04/09/19 18:20:03
JPerlからActivePerl5.8.4に変えたところ日本語をうまく認識してくれません
(パターンマッチに日本語を使用)
5.8以降は日本語に対応しているとのことですが、Activeで日本語を使うには
別に設定が必要なのでしょうか?
351デフォルトの名無しさん:04/09/19 18:32:14
sjisでパターンかくと問題がよく出る。
352デフォルトの名無しさん:04/09/19 19:00:13
>>350
use utf8;
353デフォルトの名無しさん:04/09/19 23:09:54
>>350
use encoding 'shiftjis';
354デフォルトの名無しさん:04/09/19 23:13:23
355デフォルトの名無しさん:04/09/20 16:57:15
open関数について質問です。
テキストファイルに1行ずつ、複数のSQL命令文を記述しておき、それをopen関数を使って
実行したいのですが、上手くできません。PERLでは↓の様に記述しています。

open (FH, "/usr/bin/psql -h 0.0.0.0 -p 5432 -U user -n database < SQL.txt |");
(0.0.0.0はIPです)

これを実行すると、テキストファイルの1行目のみが実行されて、残りの命令文は無視されてしまいます。
しかし、コマンドラインから直接/usr/bin/psql -h 0.0.0.0 -p 5432 -U user -n database < SQL.txt
を実行すると、全ての命令文が実行されて上手くいきます。
何とかperlのプログラム中で実行したいと思っているのですが、対策がわかりません。
どなたか御存じの方おられませんか?
356デフォルトの名無しさん:04/09/20 17:47:39
>>355
system "/usr/bin/psql -h 0.0.0.0 -p 5432 -U user -n database < SQL.txt |";
357355:04/09/20 18:29:03
>>356
/usr/bin/psql -h 0.0.0.0 -p 5432 -U user -n database < SQL.txt

説明不足でした、すいません。
学校の中で実行していましたので、「-h 0.0.0.0 -p 5432 -U user」はローカルマシンにアクセスするための
オプションです。open関数でローカルマシンのpsql(SQLインターフェース)を呼び出して、「< SQL.txt」で
テキストファイルを読み込ませています。
openで実行する場合とコマンドラインで直接実行する時に違いが出てしまうので困っています。
Ruby >>>>>>>>>>>>>>>>>>>>>>> Parl
359デフォルトの名無しさん:04/09/20 19:44:36
360デフォルトの名無しさん:04/09/20 20:49:41
>>357
いやあのパイプは必要なの?@open
結果を必要としないのならsystem関数で実行してみては?という意味なのですが。

でもって、
> system "/usr/bin/psql -h 0.0.0.0 -p 5432 -U user -n database < SQL.txt |";
system "/usr/bin/psql -h 0.0.0.0 -p 5432 -U user -n database < SQL.txt";
ですたm(_ _)m
結果が欲しいのなら、
my $Response = qx {/usr/bin/psql -h 0.0.0.0 -p 5432 -U user -n database < SQL.txt};
とか。。。

もしかして、こうしたいのだろうか?
local (*TXT, *PIPE_SQL);
open TXT, 'SQL.txt' or die $!;
my $In-queries = join'', <TXT>;
close TXT;

my $sql_command = '/usr/bin/psql';
my $options = '-h 0.0.0.0 -p 5432 -U user -n database';
open PIPE_SQL, "| $sql_command $options" or die $!;
print PIPE_SQL $In-queries;
close PIPE_SQL;
361355:04/09/20 22:18:47
>>360
すいません、パイプは要りませんでした(-_-;)

それとおっしゃる通り、system関数を使ってみたらアッサリと出来てしまいました。
かなり感動しました。

それにしてもopenだとなぜ1行目のみで終了してしまうのでしょうか・・・・・。
もう少し調べてみます。

本当にありがとうございました>>360
362デフォルトの名無しさん:04/09/21 00:13:25
PAR0.75で、
require './jcode.pl';
みたいなのが在っても自動的に入らないんですけど、
jcode.plを入れるオプション教えて下さい
363デフォルトの名無しさん:04/09/21 01:24:21
1にマニュアル
2にgoogle
3,4が無くて
5に2ちゃん
364デフォルトの名無しさん:04/09/21 09:04:23
>>361
ひょっとしてopenしてるだけで読んでないとか?
それだとpsqlの出力がブロックしちまうんじゃないかと...
365355:04/09/21 12:30:07
>>364
どうもopenして1行目は読んでるようなんですよ。ただ、1行目の命令文を実行した(psqlが1行目を処理完了)
時点で終了してしまっている感じです。systemだと問題なかったのですが・・・・。
366デフォルトの名無しさん:04/09/21 12:41:18
>>365
open FH,~でパイプをopenしたあと、psqlの出力をファイルハンドルFHから
perl側で読み出してるかって意味です。psqlがSQL.txtを読んでるかという
意味ではありません。
367デフォルトの名無しさん:04/09/21 17:49:45
symlink関数でファイルロックをしたいんですが
複数のファイルを読み書きする場合でも
$lockfileは./lock/test.lockの1つだけでいいんでしょうか?

1:ファイルロック
2:ファイル1をオープン
3:ファイル1のデータの取り出し
4:ファイル1をクローズ
5:ファイル1を書き込みでオープン
6:ファイル1に書き込む
7:ファイル1をクローズ
8:ファイル2をオープン
9:ファイル2のデータの取り出し
10:ファイル2をクローズ
11:ファイル2を書き込みでオープン
12:ファイル2に書き込む
13:ファイル2をクローズ
14ファイルロック解除

こんな感じじゃダメですか?
だめならどこがだめなんでしょうか?

368デフォルトの名無しさん:04/09/21 17:55:57
ファイルロック(flock?)と排他制御の概念がごっちゃになってる。

1と14のロックは、2~13の処理(クリティカルセクション)を排他するためのものと
理解すべし。つまり、それでOK
369デフォルトの名無しさん:04/09/21 23:35:23
>>353
ありがとうございます。
use encoding 'shiftjis';
によりActive5.8は日本語対応してくれるようになりました。
ところが・・・
何故か途端にファイル入力が出来なくなりました。
ファイルの読み込みの段階で失敗してしまいます。
ソースそのものはJperlで動作確認済みです。
Activeの場合はまだ、設定が必要なのでしょうか?

370デフォルトの名無しさん:04/09/22 02:52:48
>>369
ぶっちゃけよほど簡単なソースでないかぎり、Jperlで書いてたような
Native-ShiftJisとも呼べるようなソースは今のPerlではそのままは動かんです。

結局大抵の場合は、エンコード変換の記述( decode~ encode~ )
が必要となると思いますよ。

むしろencoding モジュールはおまじないでもなんでもなく、utfフラグを
着けたり消したりする作業を肩代わりするだけなので、
『自分のコードがshiftjisで読み込んでいるものもshiftjisだからこれで一致するだろう』
とか言う場合に、encodingで指定していると、全く一致しなくなるので、余計に混乱するかも。
371デフォルトの名無しさん:04/09/22 11:24:37
>>369
 >>350に「(パターンマッチに日本語を使用)」と書いているが、
SJISのコード配列を前提にしたものが混じってない?
例えば、 「漢字」にマッチさせようとして[亜-黑]など使ってない?
ファイル形式は SJIS でも UTF-8 に変換して処理するから、
これでは動かないよ。
372371:04/09/22 11:43:46
>>369
あっそうか。
> ファイルの読み込みの段階で失敗してしまいます。
ということだったね。ソースを分割/単純化していって、
どの行で障害が起こっているのか特定してみてよ。
その行を示せば有効なアドバイスがもらえるだろう。
373デフォルトの名無しさん:04/09/22 11:48:48
>>369
use encoding ~はスクリプトおよびSTDIN,STDOUTについては
面倒見てくれるけど他は何もしてくれないはず。

ファイルからutf8以外の文字コードで読みたければ、use open
であらかじめデフォルトを決めとくか、openのときに明示する
必要がある。

374デフォルトの名無しさん:04/09/22 21:01:56
ppmにWin32::Screenshotがなかったんで、perl -MCPAN -e shellで入れようとしたら

CPAN.pm: Going to build P/PS/PSME/Win32-Screenshot-1.20.tar.gz

-- OK
Running make test
'test' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
test -- NOT OK
Running make install
make test had returned bad status, won't install without force

とか出て止まりました。どうすればよいのでしょうか。5.8です
375デフォルトの名無しさん:04/09/23 00:27:13
>>369
ファイル名が日本語だったりすると駄目っスよ?

>>374
nmake.exeが入ってないっしょ。

376デフォルトの名無しさん:04/09/23 00:59:00
別にgmake入れても構わないんだけどな
377374:04/09/23 02:16:19
nmake入ってるんです。。。
コマンドプロンプトからnmakeと打つと

Microsoft (R) Program Maintenance Utility Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.

とか出ます。
378デフォルトの名無しさん:04/09/23 04:03:54
`ls`;
ってリストを返すんですよね?
@a=`ls`;
print $#a;
で行数を得れますが、一時変数@aを使わずに
1行でうまく書けませんか?
379デフォルトの名無しさん:04/09/23 04:25:09
行数?
380デフォルトの名無しさん:04/09/23 05:27:00
>>378
wc
381_gunzip:04/09/23 05:37:48
最近触っていないが、$#{ [`ls`] } でいいのでは。
382デフォルトの名無しさん:04/09/23 05:58:24
>>381
サンクスです。

383デフォルトの名無しさん:04/09/23 09:33:27
おそらく print scalar @{[`ls`]};
384デフォルトの名無しさん:04/09/23 10:23:12
>>377
cpanのシェルで

cpan> o conf

の結果は?
makeのトコ空欄になってたりしない?
385374:04/09/23 10:31:49
空です…
後コンパイラって何を使用すればいいのでしたっけ?
有料のは使えません…
386デフォルトの名無しさん:04/09/23 12:46:56
>>385
君の場合あきらめてCygwin使うかVineLinuxでも入れた方が早いよ
387デフォルトの名無しさん:04/09/23 17:02:25
>>385

cpan> o conf nmake

とかすれば設定されるでしょ?
 これ以上はcpanのドキュメント読んでちょーよ。

388374:04/09/23 17:33:09
Note (probably harmless): No library found for comctl32.lib
Note (probably harmless): No library found for oldnames.lib
Note (probably harmless): No library found for kernel32.lib
Note (probably harmless): No library found for user32.lib
Note (probably harmless): No library found for gdi32.lib
Note (probably harmless): No library found for winspool.lib
Note (probably harmless): No library found for comdlg32.lib
Note (probably harmless): No library found for advapi32.lib
Note (probably harmless): No library found for shell32.lib
Note (probably harmless): No library found for ole32.lib
Note (probably harmless): No library found for oleaut32.lib
Note (probably harmless): No library found for netapi32.lib
Note (probably harmless): No library found for uuid.lib
Note (probably harmless): No library found for wsock32.lib
Note (probably harmless): No library found for mpr.lib
Note (probably harmless): No library found for winmm.lib
Note (probably harmless): No library found for version.lib
Note (probably harmless): No library found for odbc32.lib
Note (probably harmless): No library found for odbccp32.lib
Note (probably harmless): No library found for msvcrt.lib

やっぱり有料のVC++とか入れなければダメなんですかねぇ..
389デフォルトの名無しさん:04/09/23 19:42:59
>>388
君の場合あきらめてCygwin使うかVineLinuxでも入れた方が早いよ
390デフォルトの名無しさん:04/09/23 21:42:09
しっつもーん

file1.txt
山田 太郎 国語 75点 数学 80点
岩鬼 正美 国語 80点 数学 60点
file2.txt
山田 サチ子 国語 90点 数学 55点
里中 智 国語 85点 数学 23点

ってなファイルがあるときに
国語の点数でソートかけるのどうしたらいいの?

わからないところは
@file1=<FILE1>;
@file2=<FILE2>;

の@file1 と @file2 を連結して@file にしたい

ってところデス。質問の本質がソートじゃないですねスイマセン。
別のファイルに出力してそれをまた読むというのがさすがに頭悪い気がするのでお知恵を拝借に来ました。

どーでもいーけどスペースをセパレータにしたら

file3.txt
じっちゃん 国語 34点 数学 34点

だったときに困るなぁ。
苗字や名前が「国語」でも困るなぁ。

まぁそれはパールとは関係ないからパスで。

よろしこプリーズ
391デフォルトの名無しさん:04/09/23 21:48:23
push
392デフォルトの名無しさん:04/09/23 21:59:59
>>390
質問が無駄に長い
簡潔に書け
393390:04/09/23 22:00:23
やっべ4文字で処理された
391 thx!
394390:04/09/23 22:05:36
>392 とその他カチンと来た人達へ
すんまへん
以上
395デフォルトの名無しさん:04/09/23 22:26:07
>>390
> @file1 と @file2 を連結して@file にしたい
@file =(@file1,file2);
396デフォルトの名無しさん:04/09/23 22:29:18
>>395
× file2 → ○ @file2
397デフォルトの名無しさん:04/09/24 00:30:42
ActivePerl5.8.4をWindowsXPにインストールしようとしたら
エラーが出るのですが、皆さんは入りました?
エラー内容は下記の通りです。

Error writing to file:
C:\Perl\site\lib\auto\Win32\EventLog\EventLog.dll.
Verify that you have access to that directory.
398デフォルトの名無しさん:04/09/24 00:33:43
腐ったPCは窓から
399デフォルトの名無しさん:04/09/24 00:39:05
ファイル書き込みエラー:
C:\perl\(省略)\EventLog.dll
そのディレクトリにアクセスすることを確認してください。

和訳してやったぞ。
400デフォルトの名無しさん:04/09/24 18:08:28
配列リファレンスのスライス指定なんですが、
えー、、なんて言えばいいのかな?以下のような事出来ますか?

my @arr = (
 [qw(a b c d e)],
 [qw(f g h i j)],
 [qw(k l m n o)],
 [qw(p q r s t)]
);

# abcd
print @{$arr[0]}[0 .. 3];

# hij
print @{$arr[1]}[2 .. 4];

# afkp
print join('', map $arr[$_][0], 0 .. $#arr);

最後の afkp の所で巧くスライス指定したいなと思うのですが、
指定方法がわからないのです。
401デフォルトの名無しさん:04/09/24 18:47:21
>>400
Perl は型としての二次元配列をサポートしているわけではないので
そういう書き方でやるしかない。頻繁にやる処理ならサブルーチン化
すればいい。

sub get_row(\@$) {
  my($array, $num) = @_;
  map $array->[$_][$num], 0..$#{$array};
}

# afkp / bglq / chmr / dins / ejot
print get_row(@arr, $_), "\n" for 0..4;

# gl
print +(get_row @arr, 1)[1,2], "\n";
402デフォルトの名無しさん:04/09/24 19:02:23
(´・ω・`)モキューン

>>401
そうだったのか、ありがとう
勉強になりました
403デフォルトの名無しさん:04/09/24 21:53:54
>400
my @da = (
 [qw(a b c d e)],
 [qw(f g h i j)],
 [qw(k l m n o)],
 [qw(p q r s t)],
);
foreach (@da) {
  print $_->[0];
}

$> afkp

foreachとか使ったらあかんの?
(これ試してみるまで(qw(a b c), qw(d e f), qw(g h i)がフラットになるなんて知らんかった_| ̄|○)
404デフォルトの名無しさん:04/09/25 00:05:08
>>403
戻り値が必要なければfor(each)を。
405デフォルトの名無しさん:04/09/25 11:38:48
使い分け論はforeachとwhileだけにして下さい
406Ruby最高言語!!!!!:04/09/25 12:26:02
↑馬鹿じゃね?コイツ(爆笑)
407デフォルトの名無しさん:04/09/25 13:33:38
>>406
巣へおかえり。
408デフォルトの名無しさん:04/09/25 13:34:21
矢印がRubyにかかってるあたり、わかってるなぁ(^-^)
409デフォルトの名無しさん:04/09/25 19:43:52
ワラタ
410デフォルトの名無しさん:04/09/26 04:44:47
ActivePerl 5.8.4で、"伊藤 伊藤 ・・・"とUTF-16LEでファイルに
書き出すと文字化けするんですが、なぜでしょうか?
UTF8なら問題ないです。
どうも特定の文字で化けるらしく、「伊」のほかに、「上」「休」でも化けるようです。
411デフォルトの名無しさん:04/09/26 07:03:44
>>410
UTF-16 では '伊' eq "\x0A\x4F", '上' eq "\x0A\x4E";
なので binmode 忘れぐらいしか思い当たらないなぁ。

'休' は分からん。
412デフォルトの名無しさん:04/09/26 10:02:34
PerlからCの関数を呼ぶとか(DLLなどを利用)、逆にCからPerlを使うのって出来ますか?
やりかたもきぼんぬ
413デフォルトの名無しさん:04/09/26 11:35:01
PerlでWEBページをダウンロードしたい場合、
一般的に使われているライブラリは何でしょうか。
それともみんなSOCKET使ってダウンロードしてるんでしょうか。
414デフォルトの名無しさん:04/09/26 11:59:29
415デフォルトの名無しさん:04/09/26 12:05:23
>414
どうも
416410:04/09/26 12:44:32
>>411
すいません「休」でなくて「養」でした。ほかに「*」も。
ぜんぶx0Aがらみですね。
↓これで「伊藤」以降が化けるんですが、どこか間違っていますか?
(UTF-16LEをUTF8やshiftjisにすれば大丈夫なのですが)

use utf8;
open OUT,">:encoding(UTF-16LE)","kekka.txt";
print OUT "佐藤伊藤後藤";
417デフォルトの名無しさん:04/09/26 13:40:28
>>416
だから binmode だって。Windows でしょ?
http://perldoc.com/perl5.8.4/pod/func/binmode.html

use utf8;
open OUT, '>', 'kekka.txt' or die $!;
binmode OUT; # LF → CRLF 変換の抑制
print OUT "\xFF\xFE"; # BOM
binmode OUT, ':encoding(UTF-16LE)'; # 出力文字コードの指定
print OUT '佐藤伊藤後藤';
なかばっか
419410:04/09/26 14:26:58
>>417
どうもありがとう。わかりました。
binmodeって文字コードの指定のほうかとおもって。
CRLF変換の抑制のために別に書かないといけないんですね。
420デフォルトの名無しさん:04/09/26 16:44:24
ぺrゅー0ざはしね
421デフォルトの名無しさん:04/09/26 21:02:26
>>417
binmodeしなくちゃいけないのはバグかもね。。。
Jcodeメーリングリストとかに報告するのがいいかも。
422デフォルトの名無しさん:04/09/26 21:30:12
>>421
確かにバグだね。
でも、Jcodeメーリングリストって機能してるの?
ウイルスの投稿があっても平気の平左だし、
読むの止めたからどうでもいんだけど
423デフォルトの名無しさん:04/09/26 22:56:11
機能してたと思うけど>Jcode ML
あるいは、danさんに直メールでもいいんじゃね?
424410:04/09/26 23:11:35
おかげさまで当座の問題は解決したんですが、
UTF16のときだけ変な挙動だなと思ってたんですが、バグでしたか。
425デフォルトの名無しさん:04/09/26 23:19:06
アドバイスする方にも仕様だかバグだか見境付いてないだなんて、
最近のバージョンの Perl は怖くて使えませんね。
426デフォルトの名無しさん:04/09/26 23:28:11
Perl歯くそ
427デフォルトの名無しさん:04/09/27 01:10:10
chomp
↑これってなんて読むんですか?
ちょんぷ?
428デフォルトの名無しさん:04/09/27 01:18:26
$str="12345678";

@integer=(0x12,0x34,0x56,0x78)
のようにしたいのですが動作すればOK?
要するに
@integer = CreateByteArray($str);
みたいのです。
429デフォルトの名無しさん:04/09/27 01:40:07
@integer = map { hex } $str =~ m/(\d\d)/g;
430デフォルトの名無しさん:04/09/27 01:40:18
>428
いまいちよく分からんがこういうこと?

@integer = map { hex } unpack "(a2)4", "12345678";
431デフォルトの名無しさん:04/09/27 02:19:18
すいません、webで検索していますが、いまいちpack、unpackがわかりません。
pack -->リストからスカラをつくる
unpack-->スカラからリストをつくる
であってます?
432デフォルトの名無しさん:04/09/27 02:25:29
#!/usr/bin/perl
$invader =
"47494638396115001500b30000000000949494ffffffffffffffffffffff".
"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff".
"ff21f90401000000002c000000001500150000043e10c82983b5346b70f1".
"d65df8516107065559a69eba7257cab6284ccf35edee7c6f4ebedaa9f709".
"8e6019cf51291bfd80b1cd73361456495169f6c8ed7e22003b";
print "Content-type: image/gif\n\n";
print pack("H*",$invader);
433デフォルトの名無しさん:04/09/27 03:12:04
>>421-422
そりゃ、OSの実装上の問題だろ?
バグって言わんと仕様っていうんだよ。
>>425
>最近のバージョンの Perl は怖くて使えませんね。
┐( ̄ー ̄)┌ 昔からそーいう仕様だけど?
素人?
434デフォルトの名無しさん:04/09/27 03:28:28
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
435デフォルトの名無しさん:04/09/27 03:32:47
>>433
ええ、素人ですよ。素人には怖くて安心して使えないと言ってるわけなのですが、だからなんなんでしょうか?
436デフォルトの名無しさん:04/09/27 04:13:18
>>435
知らないなら憶えればいいんであって、そこを自慢されても痛いだけだぞ。
437デフォルトの名無しさん:04/09/27 07:20:18
grep をワンライナーで書ける?
438デフォルトの名無しさん:04/09/27 09:37:53
>>437
perl -ne 'print if /REGEX/' foo.txt
439ヽ(´ー`)ノ ◆.ogCuANUcE :04/09/27 13:29:51
これ、overload.pm の バグ?
add() で $self にアクセスすると落ちる。
バージョンは 5.8.4。

{
    package Container;

    use overload
        '+=' => sub {
            # impl.
        },
        'fallback' => 1;

    sub new
    {
        my ($class) = @_;

        return bless([], $class);
    }

    sub add
    {
        my ($self, $item) = @_;

        $self += $item;
    }
}

my $p = Container->new();

$p->add('a');
440デフォルトの名無しさん:04/09/27 15:23:38
>>439
確かに落ちるね。同じく5.8.4(ActivePerl build810)

=(copy constructor)を定義すれば落ちないので原因はfallbackされた=のようだが…
441デフォルトの名無しさん:04/09/27 15:56:14
perl5.8.2 on MacOSX 10.3.5(ppc)
perl5.8.5 on linux 2.4.26-0vl16(i686)
ともに墜ちますた。
442ヽ(´ー`)ノ ◆.ogCuANUcE :04/09/27 17:50:32
> =(copy constructor)を定義すれば落ちないので原因はfallbackされた=のようだが…
パッケージ外から += を使うと問題ないんだよね。
# その例だと $p += 'a' とか

copy constructor を定義してもいいんだけど、コピーの必要ない作業だし…(´・ω・`)
443デフォルトの名無しさん:04/09/27 23:07:32
>431
別に間違っちゃいないけど付け加えるなら pack は「特定の形式にデータを詰め込む」
というニュアンスがつく。unpack はその逆でばらす。
しばしばバイナリデータの読み書きに利用される。
444デフォルトの名無しさん:04/09/28 01:23:53
>>443
詰め込むってどうゆう意味ですか?
445デフォルトの名無しさん:04/09/28 04:23:38
これみ見たほうが早いんじゃない?

ttp://web.archive.org/web/20040202023142/http://www.mikeneko.ne.jp/~lab/perl/numerical_transform/

本当はこっち張りたいんだけど、
ttp://www.mikeneko.ne.jp/~lab/perl/numerical_transform/

ということでご冥福をお祈り申し上げます。
いい気味だ。ざまあみろ
447デフォルトの名無しさん:04/09/28 11:52:25
500,500(例)の位置にマウスポインタを強制移動(クリック)させる処理を作りたいんだけど。
ググっても過去ログ(1~6箱目)見ても分からぬ。
多分マウス、キーボードの操作を実行するアプリケーション(APIって言うのかな?)の中のメモリを書き換えれば良いんだろうけど。
生憎此方にある参考書と言えば入門用だけ。機会あれば図書館でラリー・ウォール氏の本でも借りてみる。
Cと同じく変数の頭をアスタリスクで・・・違うか。
windowsXPですがどうでしょ。

プログラミングの常識として可笑しい所は指摘しつつ教えてくれれば幸い。
448デフォルトの名無しさん:04/09/28 12:47:21
>>445

SEX
449デフォルトの名無しさん:04/09/28 13:44:18
>>447
可笑しくない所が見つからない
450デフォルトの名無しさん:04/09/28 16:01:14
>447
まずは国語から。君にプログラミングなんて100年はやい。
451デフォルトの名無しさん:04/09/28 16:32:01
てst
452デフォルトの名無しさん:04/09/28 20:17:39
各行に数字が記載されている3行のテキストファイルがあります。
各行の数字にそれぞれ1を足して、$a, $b, $cに代入するとき
ある本のサンプルでは以下のような処理をさせていました。

seek(LOGFILE, 0, 0);
$a = 1+ <LOGFILE>;
$b = 1+ <LOGFILE>;
$c = 1+ <LOGFILE>;

なぜ自動的に1行ずつ移動するのかが理解できません。
リファレンス本でseekの部分を読んでも、そのようなことは書いていないのですが…。
分かりやすく説明してあるようなサイトなり本なりあったら教えて下さい。
453デフォルトの名無しさん:04/09/28 20:21:52
ここ、粘着常駐しとるな。

まっとうな解答する振りして、本に書いてる事を絶対だと思うボケ。
454デフォルトの名無しさん:04/09/28 20:26:54
1970年1月1日からの秒を取得するのはtime関数ですが、
その逆をする関数はありますか?
455デフォルトの名無しさん:04/09/28 20:28:41
>>452
この場合はseekじゃないな。
ポインタみたいなもんと理解汁。
456デフォルトの名無しさん:04/09/28 20:36:59
>>455追記

@_=<LOGFILE>;
a = 1+ shift;
$b = 1+ shift;
$c = 1+ shift;

意味変ってくるけどニュアンス的にはこんな感じ。
457デフォルトの名無しさん:04/09/28 20:55:37
>>455, 456
何となく判った気がします。

seekは関係なく、スカラー値にファイルハンドルを代入しようとするからですね。
となると、seekの存在意義がよく分からないのですが、
それはファイルポインタを理解してないせいだと思います。
その辺はちょっと自分で調べてみます。

ありがとうございました。
458デフォルトの名無しさん:04/09/28 21:56:02
>>455
逆って何すりゃいいの?
459デフォルトの名無しさん:04/09/28 22:03:47
460デフォルトの名無しさん:04/09/28 22:04:15
るす得取を秒のらか日1月1年0791
461デフォルトの名無しさん:04/09/28 22:09:28
>>459
㌧!!
462デフォルトの名無しさん:04/09/28 22:28:06
Time::Localとかtimelocalって書くだけで助けになるだろうに、
みんな意地悪だなぁ
463デフォルトの名無しさん:04/09/28 22:45:26
このスレのうち、クックブック読めばすむのに・・・ってのは全体の何%ぐらいなんだろ?
464デフォルトの名無しさん:04/09/28 22:53:30
そいやークックブック第2版出たようで
また2冊化だよ
465デフォルトの名無しさん:04/09/28 23:34:11
らくだ本も2冊だけど、
基本的な言語仕様とリファレンスはVol.1、
応用部分をVol.2とかで分けて欲しかった。
466デフォルトの名無しさん:04/09/28 23:35:04
>>464
内容かなり変わってるのかな?
流石に旧版持ってると二の足を踏んでしまう

467デフォルトの名無しさん:04/09/29 01:21:00
>>462
いやlocaltimeの逆っていわれりゃそういう回答だと思うけど、
timeの逆っていわれてもねぇ?
468デフォルトの名無しさん:04/09/29 08:29:17
まぁ、クックブックがあれば、初心者でも玄人を唸らすようなコードを埋め込むことができるが、
コピペしたのがバレバレだしちゃんと意味わかってんのかと突っ込まれたりするだろう。
でも、クックブックは良いと思う。

他言語でそれなりのレベルに達してたが、急遽Perlが必要になった人には特にうってつけだね。
469デフォルトの名無しさん:04/09/29 09:09:24
>>449-450
理解してるにも関わらず言ってるんだろうけど。
君らに指摘して欲しいわけじゃないからゴメンな。
ここはもう質問の場じゃ無いようだ。
スレッドタイトル修正宜しく。
470デフォルトの名無しさん:04/09/29 09:40:21
そして厨房は寝ろだのそんな中傷レスが付く訳だ。
471455:04/09/29 09:55:34
>>469
日本語もへんだが、何したいのかもわからねぇってことだろ?
マジレスしといてやるとpureperlで出来ね。
そんなモジュールあるんかもしれないけど、
儂は知らんし、スレ主はモジュールの入れ方も使い方も解らんでないだろうか?

>>457
>seekの存在意義がよく分からないのですが、
使うんなら
seek(LOGFILE, 0, 0);
read(LOGFILE,$hoge,$byte);
$a = 1+ $hoge;
$b = 1+ $hoge;
$c = 1+ $hoge;

みたいにデーターの読み込み開始位置をseekで指定してとreadで何バイト読み込むとかいった風に使うと
漏れは理解してるんだけど、他に面白い使い方ってあるんかな?
472デフォルトの名無しさん:04/09/29 11:08:55
>>452は「何で自動的に一行ずつ読み込まれるのか分からん」のだろ。
それはseek関数とは全く関係なく、<>が「行入力演算子」だからだ。

ファイルハンドルは内部に読み込み位置のポインタを保持している。行入力演算子は
読み込みが起きると同時に、ポインタを読み終わった次の位置まで進める。
seekはその内部ポインタの移動命令で、そのコードでは読み込み開始前にポインタ
位置を先頭に初期化しているにすぎない。読み込むたびにポインタが移動するのは
行入力演算子の機能。

詳しく言えば、そのコードでは行入力演算子がスカラーコンテキストで評価されている
から一行入力になっているが、リストコンテキストになると行入力演算子はファイルを
一気に全部読み取って、行単位で分割した結果をリストにして返して、ポインタも当然
ファイル末尾まで一気に移動したりするんだが、そのコードには関係ない話だな。

以上。
473デフォルトの名無しさん:04/09/29 11:48:54
>>466
encodingとかの5.8の新機能の記述を大幅追加、ってoreilly.comにあったので
今年の1月くらいにとりあえず尼で原本買ったけど、
perl encoding でぐぐってgetできる情報の半分もなかった。ガクリ

XMLとmod_perlの追加章目当てでないのなら
第1版持ってるヤシには買いなおし不要だと思う。
474デフォルトの名無しさん:04/09/29 14:05:51
>>473
なるほど、やめとくよ thx

475デフォルトの名無しさん:04/09/29 14:37:51
Perlでカンマ区切りのデータを持つ配列
$csv_list[0] = "データ0,データ1,データ2,データ3,データ4";
$csv_list[1] = "データ5,データ6,データ7,データ8,データ9";




@list[0][0] = "データ0";
@list[0][1] = "データ1";
@list[0][2] = "データ2";
@list[0][3] = "データ3";
@list[0][4] = "データ4";
@list[1][0] = "データ5";
@list[1][1] = "データ6";
@list[1][2] = "データ7";
@list[1][3] = "データ8";
@list[1][4] = "データ9";



って感じの構造体(?)に格納するコーディング方法がわかりません。

どなたかご教授ください。
476デフォルトの名無しさん:04/09/29 14:52:56
>>475
@list = map [split /,/, $_], @csv_list;

わかりにくければ泥臭く

foreach my $i (0..$#csv_list) {
my $j = 0;
foreach my $data (split /,/, $csv_list[$i]) {
$list[$i][$j++] = $data;
}
}

とかでもいいとは思うが。
477452:04/09/29 15:40:06
>>472
ありがとーございます。
初めてのPerl、再読しますorz
478デフォルトの名無しさん:04/09/29 23:47:48
がんばれや。Perlは誰も拒否しない。
479デフォルトの名無しさん:04/09/30 03:29:48
>>475
>>476がしっかりした回答をしているが、補足。

× @list[1][4] = "データ9";
○ $list[1][4] = "データ9";

これを理解することはPerlを使っていく上でものすごく大事なこと。
480デフォルトの名無しさん:04/09/30 06:15:31
perlのスクリプトは初めの改行コードがバイナリだと動きませんが、なぜですか?
そんなの、perl本体のプログラムが融通聞かせたらいいだけの話だと思うんですが。
481shige:04/09/30 06:23:52
アホちゃうかw
482デフォルトの名無しさん:04/09/30 07:02:23
ムカついたのでもういいです
483デフォルトの名無しさん:04/09/30 07:32:24
(´・ω・`)
484デフォルトの名無しさん:04/09/30 08:00:32
>>480
shbangのことなんだったら、Perlは関係ない。
485デフォルトの名無しさん:04/09/30 08:58:03
>>476
>>479
ありがとうございます。
参考になりました。
486デフォルトの名無しさん:04/09/30 10:49:05
>初めの改行コードがバイナリ
意味不明杉手和歌利魔線
487デフォルトの名無しさん:04/09/30 10:51:26
488デフォルトの名無しさん:04/09/30 11:17:12
>>478
語力が無いと言うだけで弾かれたのですが。
489デフォルトの名無しさん:04/09/30 11:19:51
Perlは素晴らしい言語. 変数名に$とか@とか%とか付いてて超カッコイイ.
490デフォルトの名無しさん:04/09/30 12:15:13
>>489
そこら辺読み易くて良いよね。
コンパイルも不要だから手間要らないよね。
でも大掛りなプログミングには向いていない希ガス。
491デフォルトの名無しさん:04/09/30 12:20:43
ちゃんとOOで書けば大がかりなプログラミングもOK
492デフォルトの名無しさん:04/09/30 12:22:30
モジュールも多いし、コンパイラも色々ある.
まぁPHP(ry
493デフォルトの名無しさん:04/09/30 12:24:26
cpan最強すぎ
494デフォルトの名無しさん:04/09/30 18:05:39
>>489
その発想でいくと、変数名に$とか%とか#とかが付くN88BASICも超カッコイイなw
495デフォルトの名無しさん:04/09/30 18:24:24
>>494
N88BASICは行番号もつくからかっこいい!
N88BASICはコメント込みでMAX64KBでかっこいい!(どれだけ苦労したか(w

496デフォルトの名無しさん:04/09/30 20:42:24
変数名に$とか%とか#とかつくのはN88というよりはMSなBASICの仕様じゃないっけ?
(BASIC一般かどうかはしらない)

あと、64KBも使えませんよ? 32KBっしょ。
中間コードに変換されると縮んだ記憶があるので、いわゆるテキストで32KBではないよね。
497デフォルトの名無しさん:04/09/30 20:46:33
スクリプト言語全般
498デフォルトの名無しさん:04/09/30 20:52:15
おまいらスレ違い
499デフォルトの名無しさん:04/09/30 21:30:30
初歩的なですがお願いします。
画、音楽、小説などのカテゴリーごとにベスト3をアンケートしてベスト1には3ポイント、
べスト2には2ピント、ベスト3には1ポイントのようにしてカテゴリーごとに順位集計して
ランキングのように表示するCGIを使いたいのですがこれに近いCGIがあったら、
教えてください。また、ランクごとにリンクで飛べるようにもできる方法があればおねがいします。

どうぞよろしくおねがいします。
500デフォルトの名無しさん:04/09/30 21:35:15
他言語から移行してきた者です。スカラ・配列・型グロブなどは理解できたのですが、
内部でのデータの扱いに四苦八苦しています。Perlでは、

・構造体や独自の型宣言ってできますか?
・構造体の配列(或いは配列の配列、多次元配列)を扱えますか?
・連想配列の返値に配列を返すことはできますか?

ポインタを使って行っていたような作業をPerlで行うのはどうすればよいのでしょうか。ご教示ください。
501デフォルトの名無しさん:04/09/30 21:38:42
>>499
スレ違いどころか板違いだ
【CGI】こんなCGI探してますver.14
http://pc5.2ch.net/test/read.cgi/hp/1087986364/
502デフォルトの名無しさん:04/09/30 21:47:59
>>500
グロブは当面忘れて良い。
Perlには他の言語(Cとか)の型に相当する物は無い、文字列 or 数値として適当に解釈してくれる。同じく構造体も無い。
しかし、スカラ、配列、ハッシュ(連想配列)を何段階でも適当に組み合わせて(一々定義せずに!)使う事が出来る。
ポインタの代わりに、もっと分かりやすいリファレンスを使う事が出来る。

# モジュールをOO的なクラスとして設計する事も出来るけど、単にデータ構造を使いたいだけならそこまで必要ない

ざっと以下を眺めるのをお勧めする
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldata.html
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perllol.html
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlref.html
http://www.kt.rim.or.jp/~kbk/perl5.005/perldsc.html
順に Perlのデータ型、リストのリスト、リファレンス、データ構造クックブック
503デフォルトの名無しさん:04/09/30 22:00:13
>>501
うわぁーい、釣れた
504デフォルトの名無しさん:04/09/30 22:16:16
もう秋だよ
505500:04/09/30 23:30:00
>>502
大変ためになりました。ありがとうございました。
506デフォルトの名無しさん:04/10/01 05:10:34
いざPerlを(初心者なりに)使いこなそうと思うと
「はじめてのPerl」レベルじゃきっついなー。

CGIのサンプル集とかはいっぱいあるけど、
Perlのサンプル集って意外とないですよね。
今のところ、cookbookほどのレベルは求めてないんですが、
主にテキストファイルをいじったりするのに良いサンプル集ってありますか?
(宮川氏訳のも求めてる以上って感じで、まだ早いかなと…)

目的としては、実務利用と「はじめてのPerl」の実践的復習・応用力強化を行ないたい
って感じなのですが、参考書籍・サイトなどあったら是非。
507デフォルトの名無しさん:04/10/01 05:41:33
508デフォルトの名無しさん:04/10/01 11:17:42
ファイル検査の-fは通常ファイルかどうかって書いてあったんですけど
通常ファイルってどういうファイルのことなんですか?
509デフォルトの名無しさん:04/10/01 11:23:22
たまーに、システム管理のためのPerl みたいなドキュメントを書こうと思うんだが
いざ書こうと思うとネタが出てこないんだよな
普段は意識せずに使ってるから尚更思い出せなくて

>>506
テキストファイルをいじる練習なら、適当なログファイルを加工するのが良い
ApacheのログからURLをヒット数でソートして表示する、
その際にリファラが内部からの物は除外して、外部からの訪問者が多い物だけを対象にする
サーチエンジンからのアクセスは除外、ワームっぽいアクセスも除外する
とかね。
510デフォルトの名無しさん:04/10/01 12:29:29
WebPro板から誘導されてきました。
perlscriptでWEBブラウザからtracertやnetstat等、システムコマンドを使い、その結果を新しいウィンドウで表示したいのですが、
以下のようにしても結果が表示されません。表示する変数には実行結果の最後の行(空白)だけが入っている模様です。
他の方の質問と比べて低LVで申し訳ありませんが、お助けください_no
WinXP、ActivePerl5.6.1です。

<html><head><title>TraceRoute</title></head>
<script language = "PerlScript">
sub button1_click{
$form = $window->document->form;
$host = $form->host->{'value'};
@traceroute = `tracert $host`;
$window->document->write("@traceroute");}
</script>
<body>
<h2>TraceRoute</h2><hr>
<form name="form"><table>
<tr><td>IPアドレス or ドメインネーム:</td>
<td><input type="text" name="host" size=50 value=""></td></tr>
</table><p>
<input type="button" name="button1" value=" 実行 " onclick="button1_click()">
</p></form></body></html>
511デフォルトの名無しさん:04/10/01 12:44:22
>>508
通常でないファイルにはそれ用のファイルテスト演算子があるので
そこから類推しましょう。判断し難い場合は実際にテストスクリプトを
書いて試しましょう。
http://perldoc.com/perl5.8.4/pod/func/-X.html

>>509
http://www.oreilly.co.jp/books/4873110920/
512デフォルトの名無しさん:04/10/01 17:04:55
windows上でActivePerl(5.8.4)と5.8.5(自ビルド)を使っていますが、
いずれも、
print "\n";
だと、0d0aが出力されますが、
use encoding "XXXX"; # sjis と utf8 しか試してませんが
print "\n";
だと、0aしか出力されません。

encodingってこのような仕様なのでしょうか?
use encoding する/しないで \n の意味を変えないように
する方法とかありますでしょうか?

print "\r\n"; だと、use encoding しない時は 0d0d0aが出ます。(当然)
513デフォルトの名無しさん:04/10/01 18:02:48
>>512
本当にその二行で再現する?
こちらの環境 (ActivePerl Build 810 on Win98SE) では
どちらも \x0D\x0A が出力されたよ。
514_gunzip:04/10/01 20:55:06
>>510
記憶によればclient-side PerlScriptではopen CMD, "anycommand -opt |"や
backquoteは使えないのではなかったか。
system("anycommand >outfile")でいったんファイルに落として読みなおすのが素直かも。
Windows環境が今ちょっと手元にないので試してないが大体以下のような感じ。

<script language = "PerlScript">
sub execute_command {
    my $command = shift || return;
    my $tempfile = "tempfile.txt"; #or File::Temp
    my $endcode = system("$command >$tempfile");
    if ($endcode != 0) {
        #blah, blah, blah
    }
    open TEMP, $tempfile or return;
    my @result = <TEMP>;
    close TEMP;
    unlink $tempfile;
    return wantarrary ? @result : \@result;
}

sub button1_click {
    my $host = $window->document->form->host->{"value"};
    $window->document->write(execute_command("tracert $host"));
}
</script>
後は同じ。
515初心者:04/10/01 21:19:15
すいません、activeperlのインストールについてお尋ねしたいのですが、
こちらでよろしいでしょうか?
516デフォルトの名無しさん:04/10/01 21:24:06
517初心者:04/10/01 21:33:15
や、それができないんですよ。
OSはXPで、ノートのCドライブに「perl」っつーフォルダ作って、
んで開封。で、インストーラー使うんですけども。なんか最後のほうで
「このパッケージはダメです」みたいな文が出て、アンインストールしてしまいます。
518デフォルトの名無しさん:04/10/01 21:37:00
腐ったPCは
519デフォルトの名無しさん:04/10/01 21:38:35
じゃあCygwin入れて、その上でPerl使いなよ。
DOSなんて使いづらいことこの上ないし、その方がずっと快適だよ。
520510:04/10/01 21:40:08
>>514
レスどうもありがとうございます。
今は時間がなくて試せないので、後ほどやってみますね。
521初心者:04/10/01 21:43:13
すいません、自分自身はプログラムのこと全然わかりません・・・orz
ググってもみたんですが、同じような症状に出会わないので。
また、どのver.でも同じエラーになります。
AS(?)でインストールしたほうがいいのでしょうか?
522デフォルトの名無しさん:04/10/01 21:59:51
>>517
winにmsi用のインストーラが入ってねんだろ
スレ違い板違い
523初心者:04/10/01 22:01:15
>522
それは95、98、NTのことでしょうか?
自分のはXPなので、インストーラーは入っているはずなのですが。
524デフォルトの名無しさん:04/10/01 22:02:28
>>469
> 多分マウス、キーボードの操作を実行するアプリケーション(APIって言うのかな?)の中のメモリを書き換えれば良いんだろうけど。
(この話はWindowsであることが前提)
残念だが、アプリケーションの中のメモリを書き換えることも
APIの中のメモリ(そもそもAPIは概念,総称とかそういうものだろう)を書き換えることもない。
Win32APIの関数で、カーソルを移動させて、クリックをエミュレートする。

> 生憎此方にある参考書と言えば入門用だけ。機会あれば図書館でラリー・ウォール氏の本でも借りてみる。
Perl+API(Win32環境ではWin32API)について解説していない本を何十冊読んでも
解決はできないだろう

> Cと同じく変数の頭をアスタリスクで・・・違うか。
×

> プログラミングの常識として可笑しい所は指摘しつつ教えてくれれば幸
回答者の神経を逆撫でするような態度は如何なものかと思う



Perl+Win32(どっかが本だしてたかな)について勉強してきな。話はそれからだ。
525デフォルトの名無しさん:04/10/01 22:04:46
>>517
ここはム板だぞアホw
適当な板にいけ。それから質問するときはちゃんと環境とやったことエラー詳細を書けよ、常識だ。
526初心者:04/10/01 22:08:10
すいません、コマンドでインストールしてみました。
「enter top level directory for install [C:\perl]」
というところは、なんと入力すればよいのでしょうか?
527初心者:04/10/01 22:10:04
訂正「コマンドで」→「ASで」
すいません、本当にわからないんです。
助けていただけないでしょうか?
528デフォルトの名無しさん:04/10/01 22:11:05
>>525
池沼は放置しろよ。
529デフォルトの名無しさん:04/10/01 22:33:35
IO::Socketでサーバーからデータを取得すると、
a8やら0dやら関係無い文字列が付与されたデータが返ってくるんですけど、どうにかなりませんか?
530デフォルトの名無しさん:04/10/01 22:47:26
>>529
エスパーさんなのでなんとか質問の意味が想像付くけど、意味不明の遺言のようですね。
HTTP/1.1の仕様でも読んでみましょうね。
531デフォルトの名無しさん:04/10/01 23:06:13
>>530さん
どうもです。
ttp://www.mars.dti.ne.jp/~torao/rfc/rfc2068-ja.html
ここら辺にあると思うのですがどう探せば・・
532デフォルトの名無しさん:04/10/01 23:13:40
>>531
たぶん3.6転送コーディングあたり。

けどLWP使った方が楽だと思うよ。勉強にはなるから
一度ぐらいはやってみるのもいいけどね。

533デフォルトの名無しさん:04/10/01 23:18:58
>>532さん
ありがとうございます!
こういう事だったんですかー
534510:04/10/02 17:35:00
>>514
先日はどうも有難うございました。試したところ、うまく動作致しました。

しかしあの方法ですと、実行結果が改行無しに表示されてしまい、とても見難いですね。。。
これを
1 <1 ms <1 ms <1 ms xxx.xxx.xxx.xxx

2 5 ms 5 ms 2 ms xxx.xxx.xxx.xxx

3 3 ms 3 ms 2 ms xxx.xxx.xxx.xxx
のような感じで表示するためのアドバイスを頂けたら嬉しいです。
結果表示の方法には特に拘りません。(新しいウィンドウに表示、テキストエリアに表示等。。。)
535デフォルトの名無しさん:04/10/02 17:52:07
>>534
オ、マ、エは阿呆か(w
536初心者:04/10/02 19:25:34
他の板でスッキリわかりました。
「そんな板で聞くから悪い。あそこ厨しかいねえじゃん」
と思いっきりバカにされました。反省しようと思います。
537510:04/10/02 20:09:16
うーん・・・もうちょっと考えてきます_no
538デフォルトの名無しさん:04/10/02 20:36:38
IDにPerlが出たら神!PHPが出たらFOX★Part15
http://pc5.2ch.net/test/read.cgi/php/1092734362/582

待て待て。まだIDにPerlと出たわけじゃないぞ。
539_gunzip:04/10/02 21:10:02
>>534
PerlScriptは、友人に使わせるPerlスクリプトのをTkで組むのがだるいときにHTAと何度か使った程度。
一応テキストボックスやボタンとかも揃っているしな。それなりのことはできる。
Textboxに表示したいなら、button1_clock()を以下に差し替え、
sub button1_click {
    my $form = $window->document->form;
    my $host = $form->host->{"value"};
    $form->result->{innerText} = join("", execute_command("tracert $host"));
}
<textarea id="result" cols="80" rows="10"></textarea>を下のフォーム内に挿入してやれば
結果がテキストボックスに表示される。
この辺りは通常のPerlスクリプトとは勝手が違うから何をやっているか説明する・・・程のこともないよな。
ただ単に$form->resultオブジェクトの"innerText"プロパティにexecute_command()の結果をセットしただけだ。

HTMLで出力したいときは、結果はexecute_command()から
リストで返ってきているのだから適当に加工すればよいだけ。
・・・もういちいち書かなくて良いよな?
$window->document->write("<html><body>", join("<br>", execute_command("tracert $host")), "</body></html>");
いい加減だが。

というか何かある度に聞くのも面倒くさいだろうから書くけど、今後独習するつもりなら。
例えば、どのオブジェクトでも良いが、
my $form = $window->document->form;
foreach my $attr (sort keys %$form) {
    $window->document->write("$attr = \"$form->{$attr}\"<br/>");
}
とかやってみ。"innerHTML"や"tagName"といったプロパティ、"onClick"や"onmousemove"といったシグナルなどが
ずらずらと大量に表示されるはずだ。他は"parentNode"や"children"とかWin32::OLEオブジェクトだ。
面倒なので説明せんけど。まあわかるよな。
前者は先から見るようにいろいろ値をセットできるし、
後者は$form->result->{onclick} = sub { do_something(); } のようにコールバックを登録できるはずだ。
あとは自分で試行錯誤してみてくれ。
540534:04/10/02 22:09:42
>>539
おぉおお・・・わかりやすい解説ありがとうございます。
自分なりにテキストボックスに入れるために色々やっていたのですが、かなり見当違いのことをやっていたようです。
今回は私のような者にお付き合い頂き、本当にありがとうございました。
貴方のアドバイスを無駄にしないようにがんばって勉強したいと思います!
541デフォルトの名無しさん:04/10/02 22:32:06
CGIから別ファイルのCGIをPOSTを使ってデータを渡して呼び出す方法とかあるでしょうか?
Submitボタンは使用しないで、POSTでデータを渡す方法です。
よろしくお願いします。
542デフォルトの名無しさん:04/10/02 22:41:00
Perl初心者です。
外部コマンドの標準出力を読み取りたいと考えています。
そこで
open(IN, "command |");
while (<IN>) {
    print $_;
}
close(IN);
としました。
コマンドの処理がすぐに終われば問題ないのですが
コマンドによる出力が断続的に延々と続くので逐一表示していきたいのです。

マルチスレッドにしなければいけないのかなと思いつつ、
マルチスレッドにしてもどう書けば実現できるのか
皆目見当がつきません。
どなたがご助言をお願いします。
543デフォルトの名無しさん:04/10/02 23:20:57
>>541
LWP
544デフォルトの名無しさん:04/10/02 23:27:50
>>542
$pid = open(PIPE, "|-");
if($pid){
 exec("command");
 exit();
}else{
 while(<PIPE>){
  print $_;
 }
}

545デフォルトの名無しさん:04/10/03 00:22:58
やっぱ、perlはワンライナーが最強にカコイイでしょ?
546デフォルトの名無しさん:04/10/03 00:23:19
パールのモジュールの質問って
ここでもいいんですか?
547デフォルトの名無しさん:04/10/03 00:26:23
内容次第だろうな。
548デフォルトの名無しさん:04/10/03 00:32:02
>>544
即レスありがとうございます。
しかしながら解決に至りませんでした。

最初の質問が言葉足らずで申し訳なかったのですが、
コマンドによる生の標準出力は(できれば)抑えて
Perlでその標準出力を読み込み、そのデータを整形してから
出力したいと思っているのですが、できるんでしょうか?
549546:04/10/03 00:36:44
日付処理系のモジュールって皆さん大体何を使われてます?
というかどれが便利ですかね?
Data::Simple使ってたんですが、最近時刻の処理もすること多くなりそうで
Time::Pieceに乗り換えようかと思っているのですが
日付のモジュールはこれがいいよ!みたいのがあったら教えてもらえると嬉しいです
550546:04/10/03 00:37:51
>549
Data::Simple -> Date::Simpleです。すんまへん。
551デフォルトの名無しさん:04/10/03 00:38:46
>>548
> /dev/null
552デフォルトの名無しさん:04/10/03 00:40:32
>>551
すみません。意味がわからないです(汗
もうすこし詳しくお願いします。
553デフォルトの名無しさん:04/10/03 00:42:05
てか検索したらありました。申し訳ないです。
554デフォルトの名無しさん:04/10/03 00:46:10
>>548
質問の意味が不明。
どう解釈しても、その質問ならば >>544 で実現出来てるぞ
555546:04/10/03 00:47:01
>>548
外部コマンドが出力を標準エラーに吐き出してなければ
全部perlが吸い込んでるとおもうけど?
stderrなら551氏のとおりですね
556デフォルトの名無しさん:04/10/03 00:48:43
そうなんですか・・・・
もうすこしがんばってみます。
557デフォルトの名無しさん:04/10/03 00:54:10
>>555
いや、GUI出力だとそうとはいえん。
558デフォルトの名無しさん:04/10/03 00:57:12
NTPを使わずに他マシンと時刻を同期したいです。
できれば言語はperlで!
どんな方法あります??
環境はlinux。相手ソラリスです。
559デフォルトの名無しさん:04/10/03 01:00:02
>>558
NTPっぽいサーバとクライアントを作れば?
560デフォルトの名無しさん:04/10/03 01:00:14
>>557
いや、GUIじゃなくてCUIです。
例えば取り込んだコマンド標準出力を
$stringに代入しようとしたら、何を代入すればいいんでしょうか?
561デフォルトの名無しさん:04/10/03 01:02:30
562デフォルトの名無しさん:04/10/03 01:04:55
ああ、なんか自分がアホすぎて鬱になってきました。
いまだ理解不能。
563デフォルトの名無しさん:04/10/03 01:08:03

$pid = open(PIPE, "|-");
if($pid){
 exec("command");
 exit();
}else{
 while($string = <PIPE>){
  print $string;
 }
}
坊主、これでいいか?

>>558
NTPを使わない/使えない 理由は?
NTP使うのが一番楽だし、上記の理由によっちゃPerlでもダメって事もあるぞ
564デフォルトの名無しさん:04/10/03 01:09:46
>>560
544氏の例だと
$string = <PIPE>;
改行ごとするっと飲むなら
undef $/;
してから
$string = <PIPE>;
べつにフォークする必要がなくても飲み込みかたは同じです。
565デフォルトの名無しさん:04/10/03 01:13:08
>>563
ファイアウォールがntpのポートをブロックしてて
届かないんです。しかたなくtelnetして時刻とりだしているんですが
ログインする時間のタイムロスで多少時間ずれるのが
なんとなく嫌だなぁ、と。。。
566560:04/10/03 01:19:00
よく見たらなんか警告がでていました。

'-' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

これはなんなんでしょうか?

あと、どうもelse文のなかに入っていってないような気がするんですが。
567デフォルトの名無しさん:04/10/03 01:25:10
Windowsなら最初にそう書け、ついでに二度と来るな
568デフォルトの名無しさん:04/10/03 01:28:07
>>565
ポート変えて動かせない?
他のポート空いてないとPerlでサバ/クラするにしても無理だぞ
569デフォルトの名無しさん:04/10/03 01:29:08
>>567
そうだったんですか・・・
本当にすみませんでした。
570デフォルトの名無しさん:04/10/03 01:30:25
>>567
かわいそうに。。 (w

私もwinは分かりませんが(スレッドも)
Cygwinとか入れればなんとかなるんじゃない?>566
ちなみに |- は自プロセスをforkして外部コマンドを並列で動かしてねん、
って意味だよ。おじゃま虫でした。たったった~
571デフォルトの名無しさん:04/10/03 01:32:58
>>568
空いてるのは20,21,23だけなんです。
pingさえ弾かれる。。。
572デフォルトの名無しさん:04/10/03 01:33:56
あ、あと80もOKだ。
573デフォルトの名無しさん:04/10/03 01:57:02
>>572
httpd動いてるのならCGIで時刻もらって、
dateコマンドでいいんじゃない。
574558:04/10/03 02:00:30
>>572

!
そか、そうだね!!ありがとうやってみる
575558:04/10/03 02:02:06
572じゃなかった、573さんありがとう
576デフォルトの名無しさん:04/10/03 04:22:25
>>570
winも分からないのに・・・











かわいそうに。。 (w
577デフォルトの名無しさん:04/10/03 12:07:34
うるさい市ね
578デフォルトの名無しさん:04/10/03 12:15:28
市ね ってなに?
”死ね”ってこと?
頭悪いな~
579デフォルトの名無しさん:04/10/03 12:26:38
バージョン5.6から新登場!
我らが宣言 our!! って使っている人いる!?
myがあればほとんど事足りるし
いまいち心の琴線に響く使い方がわからんのだが。
580デフォルトの名無しさん:04/10/03 12:29:02
use strictしたらいっぱい怒られたので使いました
581デフォルトの名無しさん:04/10/03 14:09:13
ブタはどこまでもブタ
582デフォルトの名無しさん:04/10/03 15:20:20
>>578
きみ良く会社でつまらないって言われるでしょ?
583デフォルトの名無しさん:04/10/03 16:11:02
>>579
モジュール作らない人には不要。
584デフォルトの名無しさん:04/10/03 16:12:33
our って使っている人いるとか聞くようなものじゃないと思うが。
結構特殊なところで使うし、packageを変えなければ使わないし。
585デフォルトの名無しさん:04/10/03 19:12:01
>584
わからないんだよ、そっとしとくのがいいよ・・・・。
586デフォルトの名無しさん:04/10/03 19:58:30
Perlに非常に興味があるとですが、DOS窓に慣れていないボキにはActivePerlは敷居がたかいぽ。
タダで、GUIで実行できるIDEのようなものがあれば教えてくらはい。
できればJapaneseがいいです―
587デフォルトの名無しさん:04/10/03 20:07:55
そんなもの、ない
588デフォルトの名無しさん:04/10/03 20:13:44
まじか
所詮Perlなんか俺には無理なんだな・・・・
589デフォルトの名無しさん:04/10/03 20:17:12
はい、そうです
590デフォルトの名無しさん:04/10/03 20:39:06
自分で探せない人にプログラムは向かない気がする。
591デフォルトの名無しさん:04/10/03 20:59:58
>>586
無いわけではない。
http://homepage3.nifty.com/aokura/asperl/asperl.html
http://homepage1.nifty.com/kaityo/copalpro/

但しこのスレは「Perl についての質問箱」なので、
上記ソフトの使い方についての質問はソフトウェア板にでも行ってくれ。
592579:04/10/03 21:42:41
>>584
そうなんだよね。
use vars $hoge を置き換える以上のものには思えないんだ。
たとえパッケージに使っても、せいぜいパッケージスタティックな変数を
use vars しなくてもいいよってその程度しか感じられないよね。
身近なとこだと$VERSION変数を our でできるとか...
自分でその程度のことしかやってないから「実はなんか積極的な使い道あるのかな?」
と思ってさ。
593デフォルトの名無しさん:04/10/03 23:44:16
Perlみゆきのお部屋
594デフォルトの名無しさん:04/10/04 00:03:33
varsプラグマを置き換えるってのが大きな役目だろ。
他はまぁ、ブロックスコープを持つ分strictと相性はいいな。
こんな感じで。

use strict 'vars';
BEGIN{
our $foo = 0;
}

sub f{
our $foo;
$foo++; # OK
}
sub g{
our $foo;
$foo--; # OK
}
sub h{
print $foo; # compile error!
}

595デフォルトの名無しさん:04/10/04 01:24:54
で?ってゆうコードだね
596デフォルトの名無しさん:04/10/04 02:10:59
>>595
その変数を本当に必要としているサブルーチン群でのみ共有出来る。
クラスまで大げさなもの持ち出さなくてもね

597デフォルトの名無しさん:04/10/04 02:27:43
なるほど。使えそうですね。
598デフォルトの名無しさん:04/10/04 06:17:06
ourは仕様を見て神だと思ったがなぁ
599デフォルトの名無しさん:04/10/04 08:18:25
使うとコードが汚くなりそうだな。
C++のfriendみたいに
600デフォルトの名無しさん:04/10/04 09:10:35
ProgrammingPerl第四版はPerl5.10が出てからですか?
601584:04/10/04 14:11:31
この方が面白くないか?

{
package HOGE;
our $foo = 10;
}
$foo = 20;
{
package HOGE;
print $foo;
}
602584:04/10/04 14:16:33
あっ、違った。こうかな?

{
package HOGE;
our $foo = 10;
my $bar = 20
}
{
package HOGE;
print "$foo\n","$bar\n";
}
603デフォルトの名無しさん:04/10/04 15:03:08
>>601-602

sub gomi($){
my $gomi_file = 'chirasi-no-ura.txt';
my $gomi_text = shift;
$gomi_text ||=<<"EOS";
なんかかけよ。
EOS

local *Gomi;
open Gomi, '>>' . $gomi_file or return not $@ = 'Open error[Write mode -> $gomi_file]';
print Gomi $gomi_text;
close Gomi;
return 1;
}
604584:04/10/04 15:37:37
gomi(<<EOF);
この方が面白くないか?

{
package HOGE;
our $foo = 10;
}
$foo = 20;
{
package HOGE;
print $foo;
}
EOF
gomi(<<EOF);
あっ、違った。こうかな?

{
package HOGE;
our $foo = 10;
my $bar = 20
}
{
package HOGE;
print "$foo\n","$bar\n";
}
EOF
unlink("chirasi-no-ura.txt");
605デフォルトの名無しさん:04/10/04 16:58:57
$res[601-604] eq 'gomi' and die;
606デフォルトの名無しさん:04/10/04 17:58:24
>>605
末尾から3番目だけですか?(w

でもって、「ひとりごとはチラシの裏にでも書いてろ」の意味が通じなかったかわいそうな>>603に幸あれ(w
607デフォルトの名無しさん:04/10/05 13:47:55
608512:04/10/05 14:31:34
>>513
亀レスで申し訳ない。少々訂正して、再度質問してみます。

windows(XPsp2)上でActivePerl(5.8.4)と5.8.5(自ビルド)で、foo.plを

use encoding "utf8";
open(A,"> a.txt"); print A "\n"; close(A);
print "\n";

として、perl foo.pl > b.txt で実行すると、
a.txt は \x0d\x0a になりますが、
b.txt は \x0a にしかなりません。

use encoding "utf8"; をコメントアウトすると、
b.txt も \x0d\x0a になります。(a.txt は不変)

一応 binmode STDOUT とかも付けてはみましたが、変わりませんでした。

encodingのこのあたりのことについて何か情報がありましたら
どなたかポインタだけでもお願いします。
609デフォルトの名無しさん:04/10/05 18:19:23
perlで簡単メモリクリーナー
perl -e 'for (1..256) { fork; }'

256の部分は搭載メモリ量をMB単位で入れて下さい。
610デフォルトの名無しさん:04/10/05 19:12:34
>>609
for (1..256)の部分はwhile(1)にしたほうがいいyp
611デフォルトの名無しさん:04/10/05 19:26:50
>>610
おひおひ、馬鹿をあおると本当にやるぞ
なんしろ相手は馬鹿だからな
612デフォルトの名無しさん:04/10/05 20:08:26
質問です(多分難しいかと思います・・・)

現在使っているWEBサーバがHTMLのリンクによるファイルダウンロードを許容していません。
WEBサーバの設定にてリンクによるファイルダウンロードを実行できるようには出来ません。

そこでperlによりなんとか対象ファイルをクライアントPCにダウンロードさせたいのですが
良い方法はないでしょうか?

# それで悩んでいる担当が先週沖縄へ新婚旅行だったのですが
# 台風の為中止となってしまいました。
# さすがにちょっとこれ以上悩ませるのはどうかと・・・
613デフォルトの名無しさん:04/10/05 20:20:22
614デフォルトの名無しさん:04/10/05 22:16:12
すみません、質問です。
telnetを使ってpop3サーバから受信メールのリストを表示させるプログラムをperlで
作ったのですが、実行すると、
+OK <xxxxx@mail.xxxxx.co.jp>
+OK
-ERR authorization
と表示されて、アクセスする権利が与えられません。どうしてでしょうか?
プログラム上からコピーしてコマンドプロンプトで実行するとうまくいくので、
タイプミス等ではないと思われます。
waitforの使い方もまだ完璧ではないです。
どなたか、アドバイスでも教えて頂けないでしょうか?
作成したプログラムは次に書きます...すみません。
615デフォルトの名無しさん:04/10/05 22:16:56
上のつづき...
【作成したプログラム】
$host = '192.168.x.x';
use Net::Telnet ();
$t = new Net::Telnet (Timeout => 20,
Port => 110,
);
$t->open($host);
@lines = $t->waitfor('/ /');
print @lines;

$t->print("user xxxxx@xxxxx.co.jp");
@lines = $t->waitfor('/ /');
print @lines;

$t->print("pass xxxxx");
@lines = $t->waitfor('/ /');
print @lines;
@lines = $t->waitfor('/ /');
print @lines;

$t->print("list");

$t->print("quit");
$t->close($host);
616 ◆FIcNi4f8js :04/10/05 22:30:33
まさか
@xxxxx
が未定義で
user xxxxx.co.jp
になってるとか
617デフォルトの名無しさん:04/10/05 22:35:52
>>615
>$t->print("user xxxxx@xxxxx.co.jp");
user xxxxx だけで @以降は不要じゃないの?
少なくとも俺の使ってるプロバイダだとそうだよ。
perlというよりはpopの話だけどね。
スクリプト組む前に手で試してみた?
618デフォルトの名無しさん:04/10/05 22:41:12
>>617
はい手で試しました。
私も、家のプロバイダのほうは@以降は不要で、上記のプログラムでもうまく
いくのですが、会社の方はなぜか@以降が必要で、
上記のプログラムだとうまくいかないのです...
619デフォルトの名無しさん:04/10/05 22:45:00
>>616
間違いなく
user xxxxx@xxxxx.co.jpと書いてました...
620デフォルトの名無しさん:04/10/05 22:47:57
>>619
>>616 の意味わかってないでしょ。 "user xxxxx\@xxxxx.co.jp" って書いてみて。
621デフォルトの名無しさん:04/10/05 22:49:07
>>614
つか Net::POP3 を使わず Net::Telnet でやるのは何を意図して?
622デフォルトの名無しさん:04/10/05 22:53:29
>>620
すみません...試そうと思ったら、会社でしかできませんでした。
必ず、明日一番に試します、ありがとうございます。
\にはなんの意味があるのですか。
>>621
そんなのがあるなんて、知りませんでした...
623デフォルトの名無しさん:04/10/05 22:54:13
初心者の質問で済みませんがよろしくお願いします。

perlで、ランダムに文字列を作製するには
どのように書くのが一般的でしょうか?

具体的に言うと、英数字と"."と"_"の文字を
ランダムに選んで5文字の文字列を作るという
ような場合です(パスワードを無作為に発生
させるような場合など)。
624デフォルトの名無しさん:04/10/05 23:06:18
>>623
my @letters = (0..9, 'a'..'z', 'A'..'Z', '_', '.');
my $str;
$str .= $letters[int(rand(scalar @letters))] for(1..5);
625デフォルトの名無しさん:04/10/05 23:17:56
crypt time, $$;
(w
626623:04/10/05 23:22:32
即レス、ありがとうございます>>624
よく読んで、使わせていただきます。
627 ◆FIcNi4f8js :04/10/06 00:22:40
>>625
すばらしいな。
分かってもらえてないみたいだけど。
628デフォルトの名無しさん:04/10/06 07:07:39
>>627
13文字も出るからでしょう。。。
substr crypt(time, $$), -5;
m(_ _)m
629デフォルトの名無しさん:04/10/06 07:08:35
>>628
あ、塩も100通りしか出ないか鬱。。。
630デフォルトの名無しさん:04/10/06 12:34:14
んでも塩が同じになっても時間は違うんじゃない?
時刻を修正する事を考えないと。
631デフォルトの名無しさん:04/10/06 16:12:45
crypt rand, $$;
632デフォルトの名無しさん:04/10/06 21:36:44
>>630
time の数値を文字列と認識すると下3桁が無効になるので塩が変化しないと1000秒間同じ結果が出る悪寒。
633デフォルトの名無しさん:04/10/06 22:06:08
[22:03:11]% perl -e 'print crypt(time,$$)."\n";'
35wKEc6uAidmo
[22:03:20]% perl -e 'print crypt(time,$$)."\n";'
35wKEc6uAidmo
[22:03:35]% perl -e 'print crypt(time,$$)."\n";'
35wKEc6uAidmo
[22:04:32]% perl -e 'print crypt(time,$$)."\n";'
35O.xsoi8mr0Q
634デフォルトの名無しさん:04/10/06 22:10:48
Inlineモジュールの仕組みが分かりません。
何でPerlのコードにJavaやRubyを混ぜることができるん?
635デフォルトの名無しさん:04/10/06 22:57:15
>>634

PerlにはC言語でモジュールを作成できるXS(eXternal Subroutine)というインターフェイスがある。
Inline::Cの場合はまぁ想像できるだろう。
単に最初に実行する時にCのソースコードを解析し、XSコードを動的に作成し
ビルドしてInline用ディレクトリにインストールしてロードするだけ。

JavaやRubyも基本的には同じ。
こういった言語には大抵Cでモジュールを作るインターフェイスがあるから、
Inlineモジュール作者はそのJavaやRubyのCインターフェイスとXSの間の
インターフェイスを適当に書く、というわけだ。

636デフォルトの名無しさん:04/10/06 23:04:38
フォルダ内、サブフォルダも含めたすべてのファイル名
を出力するにはどうすればいいでしょうか?

opendirを使用してもサブフォルダ内のファイルまでは
表示してくれません。
637デフォルトの名無しさん:04/10/06 23:08:39
>>633
このようにPIDの上位2桁も変化しなければいつまで経っても(w
638デフォルトの名無しさん:04/10/06 23:12:29
639デフォルトの名無しさん:04/10/06 23:14:41
こんばんは。
Perlはいろいろ便利なモジュールがたくさんあるそうですが、
こういった便利なツールを簡単な例を示して
いろいろと紹介してくれるようなお薦めの本はありますか?
640デフォルトの名無しさん:04/10/06 23:28:26
>>639
perl cookbookとかかな
641デフォルトの名無しさん:04/10/06 23:33:18
>>640
そのとき必要なとこしか読まないせいか、いつも立ち読みだよ
便利な本だけど
642デフォルトの名無しさん:04/10/06 23:40:15
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>> Perl
Ruby is nanbar one!
643デフォルトの名無しさん:04/10/06 23:47:05
これでそこそこまともになるかな・・・?

crypt (time ^ $$ ^ unpack "%L*", `ps axww | gzip`), rand($$)

ラクダ本参照w
644デフォルトの名無しさん:04/10/06 23:50:53
つーかsaltが数字だけって根本的にオワットルじゃんorz
645デフォルトの名無しさん:04/10/07 00:03:02
今現在Fortranライブラリを使うことは可能でしょうか。
具体的には、PerlでfujitsuSSL-IIライブラリが使いたいのですが。
646デフォルトの名無しさん:04/10/07 04:18:15
どこがまずいのかおしえてください
% ./useradd
syntax error at ./useradd line 11, near ") {"
syntax error at ./useradd line 14, near "}"
Execution of ./useradd aborted due to compilation errors.
% cat -n useradd
1 #!/usr/local/bin/perl -w
2
3 chomp (@passwd = `getent passwd`);
4
5 use Term::ReadLine;
6 $term = new Term::ReadLine 'ProgramName';
7
8 if ( defined ($login = $term->readline('Login name>')) ) {
9 foreach (@passwd) {
10 /^(\w+):/
11 if ($_ eq $1) { die "already exixts $_"; }
12 }
13
14 }
647デフォルトの名無しさん:04/10/07 04:38:18
>>646
とりあえず10行目の末尾にセミコロンが足りないものかと。
648デフォルトの名無しさん:04/10/07 15:12:07
自分perl始めました!
よろしくっす!!
649デフォルトの名無しさん:04/10/07 16:25:05
>>648
2,3ヵ月は質問するんじゃねーぞ
650デフォルトの名無しさん:04/10/07 16:54:30
回答はOKですか?
651デフォルトの名無しさん:04/10/07 16:56:51
もっと駄目
652デフォルトの名無しさん:04/10/07 22:07:12
>>635
えーとじゃあInline::JavaやInline::RubyはJavaやRubyを
別途インストールしなくても使えるのかな?
653デフォルトの名無しさん:04/10/07 22:38:09
>>652
もちろん、それぞれの言語をインストールしなきゃ使えない。
まぁ、厳密にはRTLさえあればコマンドがなくても動くものもあるかもしれないが。

654デフォルトの名無しさん:04/10/08 00:50:18
2つ程質問させて下さい。

Jcode.pmで半角カタカナから全角カタカナに変えるには
Jcode->new($str)->h2z->sjis;
では間違っていますか?(実際に使いましたが無反応でした...)

もう一つ。。
require 'jcode.pl';
等、サブルーチン呼び出すときに
&jcode' ... の方か
&jcode:: ... のどちらの方が効率的(処理する速さ)には良いのでしょうか?

あまり気にするなって事ですかね、、、。

何方かご教授願います。
655デフォルトの名無しさん:04/10/08 01:01:28
perlでは厳密にはマルチバイト文字は扱えないよ
656デフォルトの名無しさん:04/10/08 01:20:47
>>655
なんやコラ!
657デフォルトの名無しさん:04/10/08 02:11:27
モジュールのインストールに関して質問です。

使用OS:Win2k SP4

ActivePerl-5.8.2.808を使用

モジュールをinstallしようと思い、以下のように入力実行するのですが、
"MM"とやらのパッケージを読み込み忘れてますのようなエラーメッセージが出てしまい、
正常にインストールされません。

c:\ppm
PPM interactive shell (2.1.5)-type 'help' for available commands.
PPM> install time-hires
Install package 'time-hires?': y
Installing package 'time-hires'...
Bytes transferred: 13043
Can't locate object method "catfile" via package "MM"
(perhaps you forgot to load "MM"?)
at D:/Perl/site/lib/PPM.pm kine 363, <> line 2.

で、"MM"というパッケージが不明なためppmにて
insatll MMまたはsearch MMなどをやってみましたが
どうもそんなパッケージは見当たらないようです。
win32-apiやhttp-liteも同様にエラーが出てしまいinstallされません。
どうかアドバイスをお願いします。

関係ないとは思いながらも下記のバージョンにて試しても変わりませんでした。
5.6.1.629/ 5.6.1.638/ 5.8.0.806/ 5.8.2-808/ 5.8.4.810
658デフォルトの名無しさん:04/10/08 02:33:28
ppm3-bin.batからやった?
たった今time-hiresのインストールをやったけど普通に成功したよ。(WindowXPHome)
659デフォルトの名無しさん:04/10/08 02:39:53
>>655
マルチバイトが使えないのは分かりますが
使えるようにするのがモジュールですよね?

Jcode.pmでh2zは使えない、と言うことでしょうか?

ActiveState ActivePerl 5.6(Win32)を使用しています。
Jcode.pmはインストール済みです。
ちなみにPerl/CGIを作っています。
660657:04/10/08 03:14:35
>658
とりあえず途中経過のみ報告で、

657で書いたのは通常のppm(ver.2.1.5)の方ですね。

で言われた通りにppm3-bin.batのほうでやってみましたが、

c:\>ppm3-bin.bat
PPM - Programmer's Package Manager(3.0 beta 2).
Type 'help' to get started.
ppm> install time-hires
No repositories -- use 'rep add' to add a repository.
ppm>

となってしまいます。ver2.1.5のppmでも同じ結果でした。
なんか根本的に間違ったことしてるのかな・・・・
661デフォルトの名無しさん:04/10/08 03:31:12
>>660
リポジトリを追加しろと言われてるのだから追加したら?
http://www.ss.iij4u.or.jp/~somali/web/_ppm.html

何にしても 5.8.4 なら Time::HiRes は標準で入ってるから
わざわざ PPM で入れる意味は無いと思うけど。
662657:04/10/08 04:40:20
リポジトリを設定してもやはりうまくいかずに悩んでいましたが、
やっと原因がわかりました。

どうやら以前に使っていたv5.6.1の残骸が綺麗に消されていなかったために、
おかしな動作をしていたようです。
ActivePerlをアプリの削除で消し、残骸を手動で消し再度インストールしたところ、
うまくモジュールがインストールされるようになりました。

まさか残骸がこんなとこで悪さするとは思ってもいなかったので、
アプリの削除で消したあと残骸があるかチェックもしてませんでした。

>655,661アドバイスthx
ちなみに古いバージョンを使いたかったのは5.8.4だと動作しないものがあって、
その動作確認のためです。
663657:04/10/08 04:42:51
>658,661thxの間違いだった・・・
664デフォルトの名無しさん:04/10/08 09:41:13
>>654
「無反応でした」って、そりゃprintしなきゃ無反応だろうなあ。

あと半角カタカナ入りの文字列は、文字コードを識別できないことがあるから、
newの第二引数に文字コードを指定するべき。

サブルーチンの呼び出しは &p'f(...) p'f(...) &p::f(...) p::f(...) すべて同じ。
ただパッケージの区切りに'を使うのはperl4との互換性の為でしかない。
読みやすさ(人にとってだけでなく、エディタにとっても)の為にも区切りは::を使うべき。
665デフォルトの名無しさん:04/10/08 13:19:52
こんにちわ。

ある検索サイトの検索結果を Wget とかでローカルに落として自分のサイトで再利用したい
と思っています。

そこで、Perl で下の様に<!-A-> から <!-B-> まで抜き出すスクリプトを書きたいのです
が、教えてください。

<ローカルに落としたファイルの内容>
----------------------------------
text1
text2
text3
...
<!-A->
hogehoge
ugougo
<!-B->
text1
text2
text3
----------------------------------
666デフォルトの名無しさん:04/10/08 13:30:00
>>665
そのファイルの中身を全て変数の中に突っ込みまして

s/.*\<\!-A-\>//s;
s/\<\!-A-\>.*//s;

なんてことをする単純なことでは解決できないですか
667デフォルトの名無しさん:04/10/08 13:47:37
while(<>){
 print if /<!-A->/ .. /<!-B->/;
}
668デフォルトの名無しさん:04/10/08 14:00:55
>>666
>>667
ありがとう。
669654:04/10/08 14:46:08
>>664
ありがとうございます~
かなり参考になりました。
670デフォルトの名無しさん:04/10/08 18:42:38
perl歯糞死ね
Ruby >>>>>>>>>>>>>>>>>>>>>>>>Perl
671デフォルトの名無しさん:04/10/08 21:33:27
ちょっと訳解らないことがありまして質問です。

通常、readdirはwhile (defined($_ = readdir DAT))で読み出しますが、ディレクトリーごと削除する際に
これでは動作しないことがあります。

そこで、foreach(readdir(DAT))を使うと削除可能なのですが、違いってのはあるんでしょうか?

使用環境はwindowsでPerl5.8.2を使っております。
詳しい方おられたらご教授願えませんでしょうか?
672671:04/10/08 21:34:11
my %del;

%del = (

'file' => sub{#ファイル削除
my $in_dir = shift;
my $list_ary_hash = shift;
my $dir;
opendir(DAT, ${$in_dir}) || die "$!\n";
#while (defined($_ = readdir(DIR))) {
foreach(readdir(DAT)){
if($_ !~ /^\.{1,2}$/) {
$_ = ${$in_dir} . '/' . $_;
$_ =~ s/\\/\//g;
if(-d $_) {
push(@{$list_ary_hash},$_);
$list_ary_hash = $del{'file'}->(\$_,$list_ary_hash);
}
unlink($_) if(-e $_);
}
}
closedir(DAT);
return($list_ary_hash);
},
673671:04/10/08 21:36:05

'dir' => sub{
my $dir_ary_hash = shift;
@{$dir_ary_hash} = sort{ length($b) <=> length($a) } @{$dir_ary_hash};
foreach (@{$dir_ary_hash}){
rmdir($_) if(-d $_);
}
undef;
},

);

ソースはこの様な感じです。
普通foreachだとけったいだと思いますのでお知恵を拝借させてください。
674デフォルトの名無しさん:04/10/08 21:51:07
foreach()はリストコンテキストでwhile()はスカラコンテキストだから。
readdirはスカラコンテキストでは次のエントリ、
リストコンテキストでは一気に残り全てのエントリリストを返す。

while (defined($_ = readdir(DIR)))で一つずつ読み出している間に
挿入削除を行えばDIRハンドルのイテレータが無効になってもおかしくない。
675デフォルトの名無しさん:04/10/08 22:00:14
はぁ?
676デフォルトの名無しさん:04/10/08 22:13:42
またもRuby >>>>>>>>>>>>>>>>>>>>>> Perlが証明された。
677デフォルトの名無しさん:04/10/08 23:19:47
>>671-673
> 通常、readdirはwhile (defined($_ = readdir DAT))で読み出しますが
<snip>
> 普通foreachだとけったいだと思います

その感覚自体が俺にはけったいに思える。

sub unlink_tree { # 改行数の都合上、少々詰めて書く。御容赦。
  my $dir = shift;
  local *DIR;
  opendir DIR, $dir or warn($!), return;
  my @entry = map "$dir/$_", grep !/^\.\.?$/, readdir DIR;
  closedir DIR;
  s|\\|/|g for @entry;
  my(@dir, @file);
  while (my $entry = shift @entry) {
    if (-d $entry) {
      push @dir, $entry;
      unlink_tree($entry);
    }
    elsif (-f _) {
      push @file, $entry;
    }
  }
  rmdir or warn $! for @dir;
  unlink(@file) == @file or warn $!;
}
unlink_tree('./foo'); # ./foo の*中身*を削除
678デフォルトの名無しさん:04/10/08 23:20:10
File::path->rmtree() とか?@ディレクトリの丸ごと削除
679デフォルトの名無しさん:04/10/08 23:20:58
ディレクトリを削除するのにこんなややこしいことをする方が
よほどけったいだと思わなくもないが....

File::Remove使ったら?
680デフォルトの名無しさん:04/10/08 23:22:56
rewinddir しる。
681デフォルトの名無しさん:04/10/08 23:44:03
数字を表示させるとき,桁数を合わせて表示させるのにはどうすればいいんでしょ?
C言語で言うと %2d って感じのことをしたいんだけど…。
682デフォルトの名無しさん:04/10/08 23:46:56
perlでもできますが
683671:04/10/08 23:48:50
ちと、ファイル容量の関係など特殊事情がありましてモジュール避けていたしだいであります。

ご返答有り難うございましたm(__)m
684デフォルトの名無しさん:04/10/08 23:57:37
はぁ?
685デフォルトの名無しさん:04/10/09 00:04:05
馬鹿ばっか
686デフォルトの名無しさん:04/10/09 00:05:19
HTMLファイル中の <a href="~"> の部分から
~ を抜き出すのに一番美しい書き方はどんな
書き方でしょうか。
687デフォルトの名無しさん:04/10/09 00:06:13
どうでもいい。
688デフォルトの名無しさん:04/10/09 00:08:36
>686
@links = ($contents =~ /<a href=\"\S+\">/g);
とかでどう?
689デフォルトの名無しさん:04/10/09 00:09:49
ちゃんと試したのか馬鹿
690デフォルトの名無しさん:04/10/09 00:10:24
>689
いや
691デフォルトの名無しさん:04/10/09 00:12:03
>>648がいるな
692デフォルトの名無しさん:04/10/09 00:14:10
はぁ?
693デフォルトの名無しさん:04/10/09 00:14:34
(\S)だろ間抜け。
694デフォルトの名無しさん:04/10/09 00:15:16
print "Please input file name\n";
$file_name = <STDIN>;
open READ, "<$file_name";
while (<READ>)
{
 if ($_ =~ /a/)
 print "$_\n";
}
close READ;

ファイル名を打ち込ませた後にそのファイル名を読み込み,
『a』がある行を表示させようと思って上記のプログラムを書いたんだけど,
7行目にエラーがあるって言われた。
どこがどう悪いのか教えてくれ~。
695デフォルトの名無しさん:04/10/09 00:18:42
はぁ?二度と出てくるな。
696デフォルトの名無しさん:04/10/09 00:19:51
さすが糞言語
697デフォルトの名無しさん:04/10/09 00:20:17
おまいらアンカーつけろ
698デフォルトの名無しさん:04/10/09 00:36:18
>693
アホ。それで動かしてみろ。
699デフォルトの名無しさん:04/10/09 00:38:11
やっと気が付いたかw
700デフォルトの名無しさん:04/10/09 00:38:35
>695
一日中PCに張り付いて「はぁ?」って書いてんだな。
哀れよのぅ・・・
701デフォルトの名無しさん:04/10/09 00:39:19
>699
はあ?
702デフォルトの名無しさん:04/10/09 00:40:22
「はぁ?」をNG指定しとけば読みやすくなるぞ。
703デフォルトの名無しさん:04/10/09 00:40:41
686は、688の\S+に()を付ければokではないかな。
694は、{}でくくる必要が。 というか省略できなかったのか。
Perlだと大抵expression if xxx;とやるからなぁ。
704デフォルトの名無しさん:04/10/09 00:41:48
>694
if文の中が1行でも {} で囲まなきゃダメだろ。
705デフォルトの名無しさん:04/10/09 00:42:57
はぁ?
706デフォルトの名無しさん:04/10/09 00:43:22
>703
それだと <a href=" と "> も一緒に取れちゃうじゃん。
中身の ~ だけ美しく抜き出す方法はない?

なんで () いるの?
707デフォルトの名無しさん:04/10/09 00:44:59
はぁ?いやマジで。
708デフォルトの名無しさん:04/10/09 00:45:28
>706
あ、ごめん。いいのか。
709デフォルトの名無しさん:04/10/09 00:45:34
試さずに口をきくなボケ
710デフォルトの名無しさん:04/10/09 00:45:53
>707
お、NG設定がさっそく役に立ったよ。
711デフォルトの名無しさん:04/10/09 00:47:37
use LWP::Simple;
$URL="http://headline.2ch.net/bbynews/subject.txt";
$content = get($URL);
こういう文脈で、$content の一行一行を要素にもつ配列を作るにはどうすればいいですか?
712デフォルトの名無しさん:04/10/09 00:48:20
>711
m
713デフォルトの名無しさん:04/10/09 00:50:46
m?
714デフォルトの名無しさん:04/10/09 00:53:25
結局あなたたちは、質問してきた初心者をバカにすることしかできないんですね。
715デフォルトの名無しさん:04/10/09 00:54:53
>714
なんのこっちゃ
716デフォルトの名無しさん:04/10/09 00:56:30
>>712
正規表現ですか?
foreach をつかうのかなと一瞬思ったのんですが、スカラーには使えませんよ
ね?
717デフォルトの名無しさん:04/10/09 00:58:50
split
718デフォルトの名無しさん:04/10/09 01:00:23
結局あなたは、自分で一つも調べようとしないんですね。
719デフォルトの名無しさん:04/10/09 01:01:04
>718
こういうところで質問すんのも調査の一手段でしょ。
720デフォルトの名無しさん:04/10/09 01:01:41
haxa?
721デフォルトの名無しさん:04/10/09 01:08:42
はぁ?
722デフォルトの名無しさん:04/10/09 01:10:06
みんなどうする?「はぁ」君は通報して規制してもらう?
723デフォルトの名無しさん:04/10/09 01:11:06
いちいち相談せずに自分でやってこいよ。
724デフォルトの名無しさん:04/10/09 01:20:47
>>722
黙って無視しとけ
725デフォルトの名無しさん:04/10/09 01:37:52
はぁ?
726デフォルトの名無しさん:04/10/09 01:38:45
馬鹿の一つ覚えw
727デフォルトの名無しさん:04/10/09 01:56:37
(゜Д゜)ハァ?
728デフォルトの名無しさん:04/10/09 02:02:38
退屈しのぎに煽らない。
煽りを見ても動じない。
まずはそんな「自分作り」から始めてみませんかこのちんかすどもが。
729デフォルトの名無しさん:04/10/09 03:03:50
真っ直ぐ向き合うために 誇りを持つために 戦うことも必要なのさ
730デフォルトの名無しさん:04/10/09 04:49:20
はぁ?
731デフォルトの名無しさん:04/10/09 10:22:33
(;´Д`)ハァハァ… @links = $contents =~ /<a href="([^"]+?)">/g;
(;´Д`)ハァハァ… split /\n\r|\n|\r/, $contents;
732デフォルトの名無しさん:04/10/09 11:38:09
はぁ?
733デフォルトの名無しさん:04/10/09 12:04:41
課題が出たのですが分からないので教えてください

この間に、英文テキストファイル(単語数100語程度)を用意し、
これを処理するプログラムをつくります。

プログラムは、
(1)テキストファイルを単語ごとに区切る
(2)単語をソートして並べ替える
(3)ファイルに保存する
という流れで作ってください

↑という問題です
初心者にも分かりやすくお願いします
734デフォルトの名無しさん:04/10/09 12:14:00
perlではできません
735デフォルトの名無しさん:04/10/09 12:15:12
>>295
にわかは死んだ方が良いよ。
736デフォルトの名無しさん:04/10/09 12:18:03
>>733
課題は友達に聞け
737733:04/10/09 12:36:24
友達はけちばかりなので教えてくれません
>>734
Cでもいいので教えてください
お願いします!!!
738デフォルトの名無しさん:04/10/09 12:42:06
>>733=737
ぼるじょあがC/C++の宿題を片づけますYO! 31代目
http://pc5.2ch.net/test/read.cgi/tech/1095075678/
739デフォルトの名無しさん:04/10/09 14:41:03
while(<>) {
 push( @s, split(/\W+/) );
}
sort( @s );
foreach( @s ){
 print "$_\n";
}
740デフォルトの名無しさん:04/10/09 15:10:25
PERLI
741デフォルトの名無しさん:04/10/09 15:12:07
>>739
それ試したのか?
742739:04/10/09 15:22:20
うごくけど?
743デフォルトの名無しさん:04/10/09 15:34:52
うごくだけだったw
744デフォルトの名無しさん:04/10/09 15:36:14
@s = sort(@s);
745デフォルトの名無しさん:04/10/09 15:44:05
同じ語があるときはへんてこりんになりそうですね。
746デフォルトの名無しさん:04/10/09 15:54:12
いいじゃんかよ
ソートして並べろとしか言ってないよ
仕様だよ!!ヽ(`Д´)ノ

while(<>) {
 push( @s, split(/\W+/) );
}
@s = sort( @s );
$last = "";
foreach( @s ){
 if( $_ ne $last ){
  print "$_\n";
  $last = $_;
 }
}
747デフォルトの名無しさん:04/10/09 16:05:15
undef $/;
@tango = sort split /\s+/, <>;
748デフォルトの名無しさん:04/10/09 16:17:47
print map "$_\n", sort keys %{{ map { $_, 1 } map lc =~ /\w+/g, <> }};
749デフォルトの名無しさん:04/10/09 16:18:12
アポストロフィーSはどうすんのよ
750デフォルトの名無しさん:04/10/09 16:29:23
>>749
ハイフネーションもな。
細かい仕様を明確にしない >>733 が悪いので
答える側が好きに処理すればいいんじゃない。
751デフォルトの名無しさん:04/10/09 19:27:08
[
{ x => 'a', y => 'M200408', value => 10 },
{ x => 'a', y => 'M200409', value => 20 },
{ x => 'b', y => 'M200408', value => 30 },
{ x => 'c', y => 'M200410', value => 10 },
....
]

みたいなデータを

[
{ x => 'a', M200408 => 10, M200409 => 20, M200410 => 0 },
{ x => 'b', M200408 => 30, M200409 => 0, M200410 => 0 },
{ x => 'c', M200408 => 0, M200409 => 0, M200410 => 10 },
...
]
みたいに リスト->テーブル変換してくれるようなモジュールってないっすかね?
エクセルのピボットテーブルみたいなやつ。
変換元/先データは別にハッシュ配列でなくても構わなくてよ。
752デフォルトの名無しさん:04/10/09 19:48:21
そんなワンライナーでもかけるようなモジュールがあるわけねーじゃんか
ばかかおめー
753デフォルトの名無しさん:04/10/09 19:52:30
>>752
はげしく同意
754デフォルトの名無しさん:04/10/09 19:54:03
>>751
テキストエディタの正規表現置換による整形の方がいいんじゃないか?
無理にPerlスクリプトでソースコードを作る意図が判らん。
755デフォルトの名無しさん:04/10/09 19:54:18
>>752
あ、そう?実際どう書く?
各軸がソートされた結果を手に入れたいとか
軸がネストされた状態に変換したいとか
限られたメモリでも可能とか考えてくと
結構奥深いよ。これ。
756デフォルトの名無しさん:04/10/09 20:01:45
コードを考えてる時間と、手作業で編集する時間とどっちが時間がかかるかも考えなきゃな(w
757デフォルトの名無しさん:04/10/09 20:04:43
>>756
DBから上のようなデータが5000万件くらいでてきたら? (w
758デフォルトの名無しさん:04/10/09 20:35:12
>>757
そう煽って誰かに書いてもらうのを待ってるの?
759デフォルトの名無しさん:04/10/09 20:35:57
>>756
ぷぷ。なんだ。結局考えらんないんじゃん。
ワンライナーって考えるのにそんなに時間かかんの? (藁藁
cpanでData::Xtabってのを見つけたよ。
じゃぁね~
760デフォルトの名無しさん:04/10/09 21:51:51
だれも >>754 にツッコまないのか
いいけど
761デフォルトの名無しさん:04/10/09 22:09:10
754って、
つまり閾値以下なんじゃない?
762デフォルトの名無しさん:04/10/09 23:11:43
既存のPerlスクリプトをあまりCPUコストは考慮せず、open関数の部分を変更するだけで
ある処理を加えるという事をしたいと思っています。
やりたい事は↓↓↓のような感じなのですが
file.txtの中身
---ここから---
そうなんです
大変なんですよ奥さん
---ここまで---

open(IN, "file.txt"); # ※1
#oreshiki_open(IN, "file.txt"); # ※2
print <IN>;
close(IN);

sub oreshiki_open{
 my $fh = shift;
 my $fileName = shift;

 open($fh, $fileName);
 (my $str = join '', <$fh>) =~ s/です/やん/g;
 close($fh);

 open(TMP, ">temp.txt");
 print TMP $str;
 close(TMP);
 
 open($fh, "temp.txt");
}
これだとopen関数の部分をオレ式openに変えるだけで目的が達成出来るのですが
見ての通り美しくありません。
どなたかグッドなアイディアはないでしょうか?
763デフォルトの名無しさん:04/10/09 23:30:17
>>751
その形式はあまり使いやすいとは思えないな

{
'a' => { M200408 => 10, M200409 => 20, M200410 => 0 },
'b' => { M200408 => 30, M200409 => 0, M200410 => 0 },
'c' => { M200408 => 0, M200409 => 0, M200410 => 10 },
...
}

とかの方がいくない?
764デフォルトの名無しさん:04/10/09 23:32:06
>>762
open(IN, "perl filter.pl file.txt|");
とかじゃ駄目?
765デフォルトの名無しさん:04/10/09 23:58:07
>>761
…普通に処理だけ関数化しろよ
766デフォルトの名無しさん:04/10/10 00:10:50
perlはソースまで汚いんだね
読んでてあきれて来たよ
Larry Wallってもっと優秀なハッカーかと思ってたよ
767デフォルトの名無しさん:04/10/10 00:21:08
別にPerlに限ったことじゃないですが、皆さんコメントってどこにつけてます?

(a)
処理 #処理についてのコメント

(b)
#処理についてのコメント
処理

(c)
処理
#処理についてのコメント


普通は(a) だと思いますが、(b)(c)は論外なのでしょうか。
行が無駄に多くなる、とかで…。
768デフォルトの名無しさん:04/10/10 00:23:52
おれは(a)(b)混在
(c)はないだろ
769デフォルトの名無しさん:04/10/10 00:26:10
行に対するコメントなら(a),
(構文的/概念的)ブロックに対するコメントや、(a)で書ききれないなら(b)

(c) に出会った事は無いな
770デフォルトの名無しさん:04/10/10 00:27:50
#****************************
# 処理の名前
#****************************
# 処理についてのコメント
$foo = ... # 初期化コメント 
$bar = ... # 初期化コメント
処理
#****************************
# ここまで
#****************************
771デフォルトの名無しさん:04/10/10 00:28:56
処理A
処理B
処理C
# この時点で~は~になっている


みたいな使い方なら考えられるかな…。
俺は使わないけど。
772デフォルトの名無しさん:04/10/10 00:30:26
$_="a b c d e";
$_には4つspaceが含まれていますが、どうやってこの
個数を取得できますか?
773767:04/10/10 00:31:10
(b) もありなんですね。
ありがとうございました。
774デフォルトの名無しさん:04/10/10 00:37:44
>>772
$_ = 'a b c d e';
print tr/ //;
775デフォルトの名無しさん:04/10/10 00:46:30
1文字を数えたいならtr
これPerlエチケットやで
776デフォルトの名無しさん:04/10/10 01:02:53
>>770
CGIに良くあるが、えらい読み辛いので勘弁して欲しい
777デフォルトの名無しさん:04/10/10 01:06:15
↓は、マッチした単語がある行を示すプログラムの一部なのですが、

while (<FILE>)
{
 if ($_ =~ /$match_word/)
  {
   chop;
   print ("line $.: $_\n");
  }
}

特殊変数 $. で行番号を『1,10,100…』といった形ではなく、
『001, 010, 100…』といったように桁を揃えて表示させることはできますか?
778デフォルトの名無しさん:04/10/10 01:19:53
>>762
美しいかわかんないけどファイルハンドルのtieを使うといいかもよ。
大雑把には下の感じ。

tie *IN, 'OreFilter';
open IN, 'file.txt';
print while (<IN>);
close IN;

package OreFilter;
sub TIEHANDLE { bless \*ORE => shift }
sub OPEN { open shift, shift }
sub CLOSE { close shift }
sub READLINE
{
my $self = shift;
(my $line = <$self>) =~ s/です/やん/g;
return $line;
}

>>763
それでもいいよ。
779デフォルトの名無しさん:04/10/10 01:23:52
>>777
スリーセブンじゃん。
printfです。
780デフォルトの名無しさん:04/10/10 02:16:19
printf("line %03d: %s\n", $., $_);
あるいは
printf("line %3d: %s\n", $., $_);
781デフォルトの名無しさん:04/10/10 02:55:08
>>777
chopしてすぐにprintで"\n"って
あんたアフォ?
782デフォルトの名無しさん:04/10/10 02:58:31
>>781
あくまでサンプルでしょ?
「マッチした単語がある行を示すプログラムの一部」
って書いてあるんだから、ここに載せるのに必要な部分だけ切り出して
動作するようにちょっと書き換えたらchopのこと忘れてたってだけじゃない?
783762:04/10/10 04:59:43
>>764, >>778 様 ありがとうございました。
tieでごにょごにょですね。
オブジェクト指向Perlマスターコース引っ張り出してきてもう一度勉強します ory
784デフォルトの名無しさん:04/10/10 14:59:07
sub hoge {
my %args;
$args{'ID'} = shift;
@{$args{'steps'}} = @_;
$args{'destroyFunction'} = sub {
my %seq_args = %{shift};
if (%talk) {
sendTalkCancel(\$remote_socket,$seq_args{'ID'}) if (binFind(\@guestID,$seq_args{'ID'}) ne '');
undef %talk;
}
}
### code b###
if ($args{'ID'} && @{$args{'steps'}} && binFind(\@guestID,$args{'ID'} ne '')){
changeDirection(getDirection(\%{$myself{'pos_to'}},\%{$guest_lut{$args{'ID'}}{'pos'}}));
sendTalk(\$remote_socket,$args{'ID'});
$timeout{'hoge'}{'time'} = time;
unshift @ai_seq, 'check';
unshift @ai_seq_args, \%args;
}
### code b end ###
}
※Active Perl v5.8.2 buld808を使用。OS WIN2K SP

このサブルーチンを組み込むとsyntax errorとなるのですが、入れ子とか問題なさそうなのでよくわからず。
問題があると思われる部分を抜き出し、 Perl -c にてチェックをすると、
Syntax error at ****** line 13,near "){" 、Syntax erroe at ****** line 14,near "}}"と表示されます。
サブルーチンを組み込んだプログラム全体でチェックした場合も同様なSyntax errorとなっております。
そこで、"code b"の部分だけ及び、"code b"の部分をコメントアウトした状態でそれぞれでチェックするとSyntax OKと表示されます。
どこを直したらいいのかわからない状態です。どうかアドバイスをお願いします。
785デフォルトの名無しさん:04/10/10 15:34:56
=hoge形式のコメントが、行頭から始まってないとか
786デフォルトの名無しさん:04/10/10 16:19:50
>>784
13,14行目付近、
無名subの閉じセミコロンが無いけどそういう話じゃなくって?
787784:04/10/10 16:45:49
>785,786
アドバイスありがとう。

>786
その通りでした。申し訳ない・・・・・

コード丸写しで行けるはずで組み込んだのに
Syntax Errorがそこら中に多発して頭が固くなってたようです。

多分コードを抜き出した人が抜き出すときに、
そこらじゅう修正して、その時にみすったんでしょうね・・・・

これで呪縛から解放されます。ありがとうございました。
788786:04/10/10 17:06:02
>>787
Perlの場合セミコロンは終端子ではなくてセパレータだから、
こういう場合、(コードBをコメントした場合)
コンパイルエラーがでないんだよね。不思議な挙動になる。
ま、でも、治ってよかったよかった。
789786:04/10/10 17:20:42
まあ、正確にはセパレータ風に使うとそうコンパイルされる、か。
790デフォルトの名無しさん:04/10/10 17:30:31
>>667
<!-B->直前までの(<!-B->は含まない)出力をさせることはできますか?
791デフォルトの名無しさん:04/10/10 17:37:13
$`
792β:04/10/10 17:43:53
ActivePerlについて質問です
5.8.2.808をDL&シンストールして、コマンドプロントで

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\ユーザー名>ppm
PPM - Programmer's Package Manager version 3.1.
Copyright (c) 2001 ActiveState SRL. All Rights Reserved.

Entering interactive shell. Using Term::ReadLine::Stub as readline library.

Type 'help' to get started.

ppm> install time-hires

でエンターを押すと、これ以降コマンドプロントが無反応になります。
エラーメッセージさえ出ません。
ポインターは点滅してるしスクロールもできるのですが・・・。

その他に
install io-zlib
install win32-api
install http-lite
install Win32-Sound
install getopt-long
もやりたいのですが、上と同じようになってしまいます。自分なりに調べたのですが、「Activestateにうまく繋げてないんじゃないか」
という事くらいしかわかりませんでした。
文章中に幼稚な表現が多いですがお察しください・・・。これが初歩的な質問なのかどうかさえわかりません。というかスレ違い・・・?_| ̄|○
どなたか助けてください。

793デフォルトの名無しさん:04/10/10 17:46:25
まったり待て
794β:04/10/10 17:58:12
>>793
6時間待ったのですが、やっぱり何も起こりませんでした。
795デフォルトの名無しさん:04/10/10 18:03:32
・HTTP_proxyを設定する
・ローカルにパッケージをダウンロードしてきてインストール
http://ppm.activestate.com/PPMPackages/zips/8xx-builds-only/
796デフォルトの名無しさん:04/10/10 18:05:44
>>792
「Type 'help' to get started.」と出ているだろう。
いきなり install コマンドを叩かず、PPM の設定が正しいか確認しる。
設定の意味が分からんかったらググって調べれ。
797デフォルトの名無しさん:04/10/10 19:38:38
ファイルハンドルをシリアライズして
他プロセスに受け渡したいのですが、
なにか良い方法ってあるでしょうか?
798デフォルトの名無しさん:04/10/10 19:41:25
named pipe
799797:04/10/10 19:47:34
>>798
サンクスです。
しかし、ファイルの中身を共有したいのではなくて
ハンドルそのものを渡したいのです。
逆になってしまいますが、ファイルハンドルから
それに結びついているファイル名を探る方法とかでもOKです。
800797:04/10/10 19:53:09
すんません、説明がたりないですね。
1) あるサブルーチンがファイルハンドルを開いて返してくる
2) しかし返ってくるのがハンドルだけなのでどのファイルを開いているかわからない。
3) でも、このファイル(ハンドル)を他の独立なプロセスに渡さなきゃならない。
という状況です。
ファイルハンドルからハードリンクって作れればよいのですが。。。
801デフォルトの名無しさん:04/10/10 19:57:15
fileno
802デフォルトの名無しさん:04/10/10 20:13:33
>>791
これって、>>790 への回答ですか?
ちょっと良くわからないのですが。。。
803デフォルトの名無しさん:04/10/10 20:33:38
>>797
SCM_RIGHTSでググれ。
804797:04/10/10 20:51:52
>>801 >>803
ありがとう。socketを使うのですね。
がんばってみます。
805デフォルトの名無しさん:04/10/10 21:09:48
>>802
m/<!-B->/とかしたとき、<!-B->の直前までは$`に入っているからそれを見てよね、
ってことだと思うよ。ほとんど日本語になってないけど…。
m/(.*)(<!-B->)(.*)/したときの$1とほとんど同じこと。
806デフォルトの名無しさん:04/10/10 21:17:20
<!-B->なら出力しない

それだけじゃん・・・
807デフォルトの名無しさん:04/10/10 21:20:14
HTMLの場合はね 藁
808デフォルトの名無しさん:04/10/10 23:36:46
>>807
unless
809デフォルトの名無しさん:04/10/10 23:54:57
>>808
あ、なんだこれ。元ネタあるんじゃん。
print $1 if (m/<!--A-->(.*)<!--B-->/s)
<!-B->って何かと思ったよ (w
810デフォルトの名無しさん:04/10/10 23:58:18
まあ、最短マッチにすべきかもしれないけど。
811デフォルトの名無しさん:04/10/11 00:37:16
データが行指向であると仮定していいなら、 >>667 が一番スマートだと思う
812792:04/10/11 01:48:48
>>795
HTTP_proxyの設定で、ホスト名とポート番号がどうしてもわからなかったのでこの方法は諦め
手動インストールしようと思ったのですがやっぱりできませんでした。
>>796
「ppm 設定」などでググってもさっぱりでした。

ちと悔しいですが、私には無理みたいなので諦めます・・・。
レスくれた方ありがとうございました。そしてごめんなさい。
813デフォルトの名無しさん:04/10/11 01:57:33
手動インストールなのにポート番号とかホストとかわけわかめ
ま、いいか
814813:04/10/11 02:07:27
あぁ、勘違い。よく読んでなかった。
漏れって文盲。

勘違いで申し訳ないので。
812の検索条件にactiveperl足してみろ。
それでわからなきゃ知らん。
815デフォルトの名無しさん:04/10/11 12:22:32
>>806
>>807
>>808
>>809
レスどうもでした。応急処置で >>806 さんのやり方にしました。
ただ、元データの関係ですぐに書き直さなければいけないので、
参考にさせていただきます。
816デフォルトの名無しさん:04/10/11 12:51:27
>>792
PPMもCPANモジュールも使わないからわかんないけど
ルータのファイアウォールかなんかで
ftpをpassiveにしないと通らないとかそういうのではないの?
817デフォルトの名無しさん:04/10/11 20:23:56
SpreadSheet::WriteExcelを使ってみたいんですが
レンタルサーバなのでモジュールのインストールが出来ません
pm置くだけで使えるような奴ってないですか?
818デフォルトの名無しさん:04/10/11 20:26:54
>>817
ホームディレクトリ以下にインストールして use lib すれ
819デフォルトの名無しさん:04/10/11 22:14:18
祝!WriteExcel!!
820デフォルトの名無しさん:04/10/11 23:08:49
perlを最近勉強し始めた工房です。今ファイル操作の項を勉強中なのですが、
『ファイル名を指定し、endという単語を入力するまで任意の文章を入力し、
 指定したファイルにその文章を書き込む』
というプログラムを作りたいのですが、どうもうまくいきません。
whileの条件文カッコに何を入れていいのかわからないです…。
以下は現在作っている途中ソースなのですが、どこがいけないのかご指摘いただけないでしょうか。
お願いいたします。

print "Please input object file name\n";
print "file_name = ";
$file_name = <STDIN>;
open FILE, "+>>$file_name";
print "\nPlease input anything writhing\n";
$writing = <STDIN>;

while ()
 {
 unless ($_ =~ /end/)
  {
  print FILE "$writing";
  }
 }
close FILE;


821デフォルトの名無しさん:04/10/11 23:54:09
>>820
>>3

print "Please input object file name\n";
print "file_name = ";

# ファイルが存在しなければエラーにする
chomp(my $file_name = <STDIN>);
-f $file_name or die "No such file: $file_name\n";

# 読み込む必要は無いので + は不要。エラートラップを必ず行う。
open FILE, ">>$file_name" or die $!;

print "\nPlease input anything writhing\n";

while (my $writing = <STDIN>) {

  # "end" と入力された時だけ終わるようにしないと遠藤君が困る。
  $writing =~ /^end$/ and last;

  print FILE $writing;
}
close FILE;
822820:04/10/11 23:59:43
ありがとうございました!
823デフォルトの名無しさん:04/10/12 00:02:09
$writing =~ /^end$/ と書くぐらいなら$writing eq 'end'と書け。
824デフォルトの名無しさん:04/10/12 00:57:49
>>823
"end\n" な。
825デフォルトの名無しさん:04/10/12 00:59:57
>>824←こいつは何言ってんだ?
826Ruby >>>>>>>>>>>>> Perl:04/10/12 01:06:59
ばかばっかw
827デフォルトの名無しさん:04/10/12 01:17:01
>>825
821を$writing eq 'end'に書き換えて動かしてみー
828デフォルトの名無しさん:04/10/12 01:28:32
>>827
一緒だろ?多少速いぐらいで。
829Ruby!:04/10/12 01:30:00
アホすぎwwwwwwwwwwwww
830デフォルトの名無しさん:04/10/12 01:30:23
>>827
/^end$/の意味わかってんのか?
831デフォルトの名無しさん:04/10/12 01:31:51
>>827
初めてだし、やってみたかったんじゃない?
832デフォルトの名無しさん:04/10/12 01:33:42
>>827
遠藤くんがかわいそうだ。
833デフォルトの名無しさん:04/10/12 01:36:29
しかし関係ないけど eqって演算子
フォートランから来てんの?
どうでもいいけど。
834デフォルトの名無しさん:04/10/12 01:45:32
>>833
equal を eq と略すのは辞書にも載っている一般的な書き方だけど?
test(1) なんかは Perl と逆で数値比較が eq だね。
835デフォルトの名無しさん:04/10/12 01:47:39
>>823
つか、このばあい
$writing eq "end\n"
じゃないと駄目なんじゃないのか??
$writing =~ /^end$/で正解。(藁藁藁
836デフォルトの名無しさん:04/10/12 01:57:12
大文字のEQは使えなくなるらしい。
837デフォルトの名無しさん:04/10/12 03:29:38
>>835
> つか、このばあい
> $writing eq "end\n"
> じゃないと駄目なんじゃないのか??
\n付けたら同じにならないだろ。阿呆。
838Ruby!!!!!!!!!!:04/10/12 03:35:50
糞同士で内紛してるwwwwwwwwwwwww
839デフォルトの名無しさん:04/10/12 10:55:59
正規表現も知らん奴ばっかか?

  /^end/
840デフォルトの名無しさん:04/10/12 11:02:27
kuma-
841デフォルトの名無しさん:04/10/12 11:30:01
>>839は実にアレだな
842デフォルトの名無しさん:04/10/12 16:34:27
### main ###
require 'Common.pl';
????? = &Common::Parse("hoge1", \%hoge2, \&hoge3); #????は受け取りの型がよくわからず。
# 数行&Common::Parseを実行する。

hoge4(\@Files); #このsubで\@Filesを使いたい


## Common.pl ###
package Common;

sub Parse {
my ($hoge1,$hoge2,$hoge3) = @_;
$Files[Files]{'hoge1'} = $hoge1;
$Files[Files]{'hoge2'} = $hoge2;
$Files[Files]{'hoge3'} = $hoge3;
$Files++;
return ($file,$hash,$function);
}
1;

外部サブで配列の連想配列にして、戻り値をそのまま配列の連想配列で受け取りたいんですが、
うまくできずに、そのままの値が帰ってきてしまいます。
なにかいい方法はないでしょうか。
843デフォルトの名無しさん:04/10/12 16:48:59
844デフォルトの名無しさん:04/10/12 16:54:08
標準入力で「end」と入力された時(<> が "end\n"の時)にマッチするようにしたい。
$writing =~ /^end$/ は「end(?:\x0D\x0A|\x0D|\x0A)?」にマッチするので○
$writing eq "end\n" は「end\n」と等価なので○
$writing eq "end" は「end\n」と等価ではないので×
>>823の意図とミスを汲み取って脳内変換しようよ。くだらない
845デフォルトの名無しさん:04/10/12 17:49:39
>>844
> $writing =~ /^end$/ は「end(?:\x0D\x0A|\x0D|\x0A)?」にマッチするので○

だうと。

#--- test.p ---
print /^end$/ ? "matched " : "unmatched "
  for "end\x0D\x0A", "end\x0D", "end\x0A", "end\n", "end";
__END__

> perl -v
This is perl, v5.8.4 built for MSWin32-x86-multi-thread
...
> perl test.p
unmatched unmatched matched matched matched

> perl -v
This is perl, v5.8.5 built for i386-freebsd-64int
...
> perl test.p
unmatched unmatched matched matched matched
846842:04/10/12 17:58:02
>>843
参考リンクありがと、勉強になりました。
なんせ、ユーザー定義の外部サブを作っていじるのは初めてなので、
名前空間のことを意識して組んだことなくてまったく理解してませんでした。

サブルーチン、モジュール等でググっても名前空間を利用することにどこも触れてなかったのが切ないですが、
普通は直接参照されないようにするので当たり前ですよね・・・

結局、$Files::mainに変更して不要個所の削除でうまくいきました。
自分で使うものなので、そんなのオブジェクト指向じぇねえだろってのは勘弁してください・゚・(ノД`)・゚・


847デフォルトの名無しさん:04/10/12 20:18:30
>>844
> 標準入力で「end」と入力された時(<> が "end\n"の時)
ダウト。お前が>>824か?いい加減勘違いを認めろ。
首吊って氏んでこい。カスが。
848デフォルトの名無しさん:04/10/12 21:35:15
>>847
残念。>821 = >824 = >845 = >848 ≠ 他 だよ。:-)
>825 と >828 と >830 と >837 にはこれをあげよう。

print join(' ', map unpack('H2', $_), split //), "\n" while <STDIN>;

完全一致の判定は >823 が言わんとしたように eq でやるべきだけど、
>821 で eq "end\n" と書かなかった事に深い意味は無い。単に
>820 がパターンマッチで判別してたから、それに付け加えただけ。
私の思慮の浅さから荒れちゃってスレの住人諸氏にはすまなく思ってる。
ごめんなさい。
849デフォルトの名無しさん:04/10/12 21:50:02
始めて perl でプログラムを作ってみました。
添削をおねがいします。
----BEGIN BASE64----(weather.gz)
H4sICI/Sa0EAA3dlYXRoZXIAfVPPT9RAFD7Tv+KxVtoKtMvGENPuFkEwMYHECMYD
xU1/vGWL7UzTzgbIWv8XEi+ePBiUhKiJRiIY48WjHvWvUONMf8CuGg8zmXnvzfe+
9943lyaNQZYaEfXdyPBCYiSYRpI0yBBWiE8DtIrz6r3bprkexklUGdZura2Y5pKb
4fzVyuKGkWmKHVNLkuS7d1ahA0qfscQ0jF10WR9Tfd/tU6r7VN9JapvBj9eMkAS4
p/dZHCmWJPdSGnfdIEgxywQKTfE67rkiv07TbUWSGR31P8CQueF5CEGOr0hSNvAg
8LohCRkMJeDnmCZI1MvLixuLM9CoGDRmoDnfbGo8AoCmEIQIjRsuIZSBn/IY5C9N
kCcblpSXqD2axi7zKWFISmy5vnRgG5kq6tesMfsjyPJNJ3CWt6bbnv3u88nx6Zej
J88On79oG56tbt43tqa1tpHFbhTZbYMFYkvt6knuzOV/4hkHZ6oTTJ/84Nvxr/dP
T19qBx/0K20vtV9/O/r49tPZz8PHr76++S4sDlErKM0ogFgYI2crz4lbOW3TLDrP
qFp4eYtw4M/uJLxDjTCjs61mqyWuZWW8ETvoi4qVzsKIe2FpQQEdAAvMrleopETU
hJ1Hd/iUBYRHg33BoWVd3ESfHPJQcM7z7X+SE4H/I1dNKUMSxFyR5YDiQps826hU
Z22Cu2pZT1xZCo0M4SbPJhTRsWFMkDPSxATABgWovRdiLH3rdWPs8yYJR/6XwhQG
IpnQlkMagkSShny2Ndei0DFufkQzVMsSpyptW9LUmB75hySR+BkqBNgLCQagykLy
w2IGuQZa0ZGpuj9FhpEAMZE6M0dG1++D+gD3Myh+TvkaIOzxDKWMCILchdoBMODf
uQdy4DJ3KHcL4QLkkli59BuYrtJydQQAAA==
----END BASE64----
850デフォルトの名無しさん:04/10/12 21:59:21
すいません、教えてください!
Perlで作ったCGIで、パスワード認証をしたいんですが、パスワードやユーザーIDなどは全て、データベースに
記録してあります。
データベースを読みこんで、正しいパスワードを出すことはできるのですが、HTMLページのフォームに入力した
パスワードやIDなどを読み込むことができません。
どのように、CGIの中に読み込めばいいのでしょうか?
よろしくお願いします。
851デフォルトの名無しさん:04/10/12 22:06:13
852デフォルトの名無しさん:04/10/12 22:07:08
>>850
データーベースは何?
環境は?

ぼやけすぎてだれも相手してくれないと思われ。
853デフォルトの名無しさん:04/10/12 22:46:56
>>848
どもども。*他*の832=>835です。まあ、それなりに楽しめましたよ ;-)
さすがに改行には気付くよね。あはは。>>823
まあ、chompされていればね、良かったよね。ちゃんちゃん♪

ところで $writing =~ /^end$/ もSTDINから入力されるのなら
プラットフォームネイティブな改行がやって来るのだからやっぱりOKじゃないかな?
854デフォルトの名無しさん:04/10/12 22:53:48
と書くとファイルからリダイレクトとか
なんとか言うやつもいないでしょ。たぶん。
855デフォルトの名無しさん:04/10/13 02:53:28
>>849
まんどくさいけど見てしまったからつっこみいれておくか。。。
関数にする必要が無い無意味な括りはやめれ。
関数化するならきちんとローカル化しる。
dbmopen()は速くて俺も時々使うけどデータが大きくなると
ファイルサイズが巨大になり使い物にならないぞ。
ついでにマニュアルも読め。
>Functions obsoleted in perl5
>dbmclose, dbmopen
856デフォルトの名無しさん:04/10/13 04:56:55
windowsの場合は\x0D\x0Aを出力していつつ/^end$/でマッチしてたから
\x0D\x0A|\x0D|\x0Aにマッチしていると思ってたけど
プラットフォームに依存せず\x0Dを吐くから/^end$/でもマッチしていたんですね。
ファイル操作時にプチハマリしてしまいそうな事例ですね。勉強になりました。
>>847 頭ごなしに否定しないで自分で検証してみては?
反証をあげずに汚い言葉を吐いていても誰にも相手にしてもらえませんよ。
もし貴方が正しいことを言っているのなら大変興味のある事ですので v^^;v
857デフォルトの名無しさん:04/10/13 08:25:02
>>856
うーん、それはちょっと語弊のある言い方だね。

Windows 上の perl でも内部処理的には改行コードを "\n" eq "\x0A" で
扱っていて、正規表現の $ は文字列の末尾か "\x0A" にマッチする。
改行コードの変換が行われているのは入出力の境界で、例えば以下の
ように作った test.txt は "\x0D\x0A\x0D\x0A" になっているし、

> perl -e "open FILE, '>./test.txt' and print FILE qq/\x0A\n/"

以下のスクリプトの出力は "0a0a0d0a0d0a - 0,2,4" になる。

open FILE, '<./test.txt' or die $!;
print map unpack('H2', $_), split // for <FILE>, "\x0D\x0A\r\n";
print ' - ';
print join ',', "_0_\x0A_1_\x0D_2_\n_3_\r\n_4_" =~ /_(\d)_$/gm;

変にバイナリ値を意識して \x0A だ \r\n だと書くから混乱するわけで、
テキストファイルや標準入出力を扱う時は素直に "\n" とすれば perl が
良きに計らってくれる。あと $ は「行末」にマッチするパターンだから、
「文字列の末尾」にマッチさせたい時は \z を使う癖を付けるといいかもね。
858デフォルトの名無しさん:04/10/13 08:25:41
みんな改行コード程度まともに扱えるようになろうよ・・・
859デフォルトの名無しさん:04/10/13 10:28:31
perl5.8.4を導入したのですが、ログファイルにARRAY(0x88790)などという文字が保存されたり、
ソースで指定している配列とは違う配列にpushされてたり、
今までのバージョンでは起こらなかった問題が発生してしまっています。

perl5.8以降の仕様変更が原因なのは間違いないのですが、どこを修正すればいいのか全く分かりません。
何か心当たりがある方はいらっしゃらないでしょうか?
宜しくお願いします。
860デフォルトの名無しさん:04/10/13 10:45:04
WWW::Mechanizeで質問です。マイナなモジュールですいません。
pubmedをscrapingしようと、以下のスクリプトを作ってみました。

#!/usr/bin/perl
use WWW::Mechanize;
my $mech = WWW::Mechanize->new();
$mech->get('http://www.ncbi.nlm.nih.gov/entrez/query.fcgi');
$mech->submit_form(
form_number => 1,
fields => {term => 'test',},
);
$mech->submit_form(
form_number => 1,
fields => {dopt1 => 'XML',},
button => 'Display',
);
print $mech->content;

formに単語を入れて、表示でXMLをselect、Displayボタンを押してXML表示が行いたいんです。
Display ボタンを押すのが上手く行きません。HTMLソースは
<input name="Display" onClick="Go('Display')" type="BUTTON" VALUE="Display">
なので、javascriptの部分で駄目なんだろうと思っていますが、代わりの手段が思いつきません。
ご存知の方がいらっしゃいましたら、ご教示の程お願いいたします。
861デフォルトの名無しさん:04/10/13 10:46:41
>>859
cpanでモジュールの更新はしましたか?
やってなかったらやってみると良いかも。
862859:04/10/13 11:43:00
>>861
有難うございます。
Active perl5.8.4をインストールしたのですが、cpan.pmもセットになってます。
ということはcpan.pmも5.8に対応したものに更新されてるはずですが、
それとは別に皆さん手動で更新してるのでしょうか?
863七誌:04/10/13 13:11:53
perlのコンパイルとエディタを両方できるソフトはないでしょいうか?
Terapadにプラグをいれるののはちょっと使いにくいw


asperl.のようなGUIでの実行、PerlEditのような利便さをかねそなえたものがあるといいんですが・・・  (フリーで


知っていらっしゃる方は教えてくださいまし
864デフォルトの名無しさん:04/10/13 13:22:28
>perlのコンパイルとエディタを両方できるソフトはないでしょいうか?
意味不明
865デフォルトの名無しさん:04/10/13 13:40:40
perlが使えるIDEってことでしょ
866デフォルトの名無しさん:04/10/13 13:56:08
>>865
「perl のコンパイル」とエディタ って事は、Cの開発環境が欲しいって事なんじゃないか?

# んなわけねー
867デフォルトの名無しさん:04/10/13 13:56:42
@echo off
"D:\Perl\bin\perl" %1
pause>nul
というバッチファイルを作ってemeditorの外部ツールに登録し
CTRL+spaceに割り当てて使ってる。

@echo off
"D:\Perl\bin\perl" %1 > %2
%2
exit;
とかにすれば出力をテキストファイルで見ることが出来る
868デフォルトの名無しさん:04/10/13 15:23:36
Perlの導入の仕方がいまいちわかりません。
初心者なので教えてください。
869デフォルトの名無しさん:04/10/13 15:27:07
まずsageる事から覚えろ
話はそれからだ
870デフォルトの名無しさん:04/10/13 15:30:36
はい
わかりました
871デフォルトの名無しさん:04/10/13 16:38:35

「初心者」だったら教えてもらえると思ってんだろうね
872デフォルトの名無しさん:04/10/13 17:18:52
873デフォルトの名無しさん:04/10/13 18:55:39
>>871
すまんけど、ほんとに1からわからんのよ。
用途は、ルーチンみたいな感じで多少の計算やら、画像判定なんかをしつつ、テキストなんかに入力したい。
検索で引っかかるのはweb用途ばっかりで、よくわからんのよ。
よかったらサイトなんかでもいいんで教えて下さい。
874デフォルトの名無しさん:04/10/13 18:57:14
Perl インスコ でググりゃイパーイ出て来るんだがね
最初から他人を頼ってるようじゃ先が思いやられるわ
頼むからもうここで質問しないでくれるか
875デフォルトの名無しさん:04/10/13 19:05:24
>>874
質問スレにいる必要あるのか?プ
876Ruby >>>>>> Perl:04/10/13 19:29:23
レベルひくぅwwwwwwwwww
877デフォルトの名無しさん:04/10/13 19:37:25
>>859
遅レス。
ダブルクォート中の@の解釈の仕方 "@hoge" が
どっかで変わったとなんかのデルタで読んだ記憶があるけど
どのperldeltaだったかは失念。
リファレンスのばあいは関係ないかな? 役たたねぇ~。スマン。
878デフォルトの名無しさん:04/10/13 19:52:40
みんな perl -w とか use strict とかしてないの?
879デフォルトの名無しさん:04/10/13 19:57:46
Rubyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
880デフォルトの名無しさん:04/10/13 20:01:45
>>877
Perl4 → Perl5 で、常に配列変数として展開するよう変更されている。
…10年ほど前の話だけどな。
881デフォルトの名無しさん:04/10/13 20:14:16
>>878
最近-wはしないな。use warningsがアホみたいに便利だ。ちとメモリ食うのが難点だが…。

use strictはデフォ。当たり前。
882デフォルトの名無しさん:04/10/13 20:23:45
>>880
ども。うん、それはそうなんだけど…
探したら5.8.0(5.6.1?)のperldeltaで
>Arrays now always interpolate into double-quoted strings [561]
とあったので。いままで "@hoge"と書くとエラーで落とされてたのが
そうならなくなったらしい。
まあ、でも症状的に逆だし情報量少ないし、これが原因だかわかんないけどね (^^;
例えばなにかトチ狂った対処して $foo = "\@bar" とするつもりで
$foo = \@bar とすれば ARRAY(0x1234..)とか出るじゃん。(w

>ソースで指定している配列とは違う配列にpushされてたり、
どっか型グロブで変数エイリアスしてたり
ソフトリファレンス使っているところないっすか?

いずれにしろフツーの書きかたしてりゃ起きないことだから
878氏のいうように-wとstrictしなさい >>880
883デフォルトの名無しさん:04/10/13 21:24:13
どうも最近
open my $foo = undef, "foo.txt";
print <$foo>;
close $foo;
とすると $fooがファイルハンドルとして通用することに気付いたのですが
これってなぜなんでしょうか!?
ちなみに use strictして open my $foo = 1, "foo.txt";
だとエラーになるのですが $foo = undefだとエラーになりません。
不思議。
884デフォルトの名無しさん:04/10/13 21:28:00
ソフトリファレンスだから。
885デフォルトの名無しさん:04/10/13 21:31:56
>>884
早速のご回答ありがとうございます。
そっか、そうなのか…。
ただ、use strictしていて(ソフトリファレンス禁止?)も
値が undefのばあいは通ってしまうのですよ。
この場合ってなにか違うのですかね?
886デフォルトの名無しさん:04/10/13 21:33:59
別のサーバーからsmb経由でファイルを取ってくることってできますかね?
そういうモジュール見当たらないっす・・・
887デフォルトの名無しさん:04/10/13 21:36:08
>>886
mount
888デフォルトの名無しさん:04/10/13 21:37:10
バージョンアップで微妙な仕様変更するくらいなら、
いっそのこと「ワンライナー以外では use strict がデフォ」とかして欲しいですな。
889デフォルトの名無しさん:04/10/13 21:42:50
>>886
かるく検索してみたら Filesys-SmbClient つうのが引っかかったけど。
890デフォルトの名無しさん:04/10/13 21:53:25
>>885
5.6.0からの仕様で、openの第一引数に未初期化(実質的にundefで初期化)の変数を指定することで
無名のファイルハンドルを作成できるようになった。
これはこういう仕様。ソフトリファレンスとか関係ない。
891デフォルトの名無しさん:04/10/13 21:57:16
>>885
perldoc -f openより:

If FILEHANDLE is an undefined scalar variable (or array or hash
element) the variable is assigned a reference to a new anony-
mous filehandle, otherwise if FILEHANDLE is an expression, its
value is used as the name of the real filehandle wanted. (This
is considered a symbolic reference, so "use strict 'refs'"
should not be in effect.)

undefかそうでないかで動作が違うのはそういう仕様だってことだ。
892デフォルトの名無しさん:04/10/13 22:02:57
>>890
ありがとうございます。
未初期化の場合だけの特例なのですね。勉強になります。
ちなみにいくつか試したのですが
open my $foo = undef, "foo.txt"; --> OK
open local $main::foo = undef, "foo.txt"; -->OK
open our $foo = undef, "foo.txt"; --> NG(何も表示されない)
でした。ourは別モノらしい。

893デフォルトの名無しさん:04/10/13 22:09:11
>>891
ふむふむ。openでそうした場合は無名のハンドルができるってことですね。
そうじゃなかったらソフトリファレンスつかってよ、と。
そうすると無名subでもいけるかな?
ちょっとやってみます。
サンクスです。
894893:04/10/13 22:13:19
>>893
って無名つながりで連想したけど
それはやりようがないですね。すみません。
895デフォルトの名無しさん:04/10/13 22:37:13
>>892
ん?ourもいけたが…。当方version 5.8.4
896デフォルトの名無しさん:04/10/13 22:40:15
print "処理番号を選んでください\n";
print "1. 処理1\n";
print "2. 処理2\n";
print "3. 処理3\n";

chomp ($process = <STDIN>);
if ($process == 1){
 do &func1;
 }

elsif ($process == 2){
 do &func2;
 }

elsif ($process == 3){
 do &func3;
 }

sub func1{
}

といったようなプログラムを実行すると、
Perl v49.0.0 required--this is only v5.6.1, stopped at 041014.pl line 10.
というメッセージが表示されます。
処理は一応キチンと実行されているのですが、原因が何なのかわかりません。
何がいけないのか教えていただけないでしょうか?

:環境:
perl v5.6.1 built for i386-freebsd です
897892:04/10/13 22:50:59
>>895
まじ!ですか!!
私はv5.6.0でした(ちと古い ^^;)
898デフォルトの名無しさん:04/10/13 22:53:02
>>896
041014.pl の 10 行目に require ~ か use ~ があるのでそれを削除。
899デフォルトの名無しさん:04/10/13 22:58:07
v49 とはまた大きく出たもんだな
900デフォルトの名無しさん:04/10/13 23:03:07
>>896
do サブルーチン
ってかなり昔の書き方じゃなかった毛?
doを取れば動くよろし。
901デフォルトの名無しさん:04/10/13 23:04:07
>>900
バージョンチェック
902デフォルトの名無しさん:04/10/13 23:08:42
イースターエッグか?
903900:04/10/13 23:13:22
>>901
はぁ?
904デフォルトの名無しさん:04/10/13 23:15:42
>>900
Perl5 からは使わないよう推奨されているが、use strict & use warnings 下
でも & 付きで呼んだ場合は何のエラーも吐かずに動くよ。
905900:04/10/13 23:21:21
>>904
ん?試したけど
別に use v49.0.0 してなくても896さんと同じ現象に遭遇するぞ。
906896:04/10/13 23:29:53
>>900
do を消したら解決しました。
ありがとうございます。
do をつけるのは古いやり方なのですか…。
参考にしてたサイトにそう書いてあったので…。
907900:04/10/13 23:45:13
>>906
どうも。
うん。
(原因は俺には分からないけどな… ;-)
908デフォルトの名無しさん:04/10/14 00:35:30
ファイルREADを読み込んで、指定した文字列がある行だけをファイルWRITEに書き込みたい場合、

①open READ, "読み込みファイル";
②マッチングさせる文字を入力
③open WRITE, ">>書き込み先のファイル";
④while (my $line = <READ>)
  {
  if ($line =~ /マッチングさせる文字列/ or last)
   {
   print WRITE "$line";
   }
  }

といったように、ファイルハンドルをそれぞれ読み取りファイル、書き込みファイルと用意していますが、
このようなやり方でいいのでしょうか?
目的の処理はこの流れでできたのですが、ファイルハンドルをわざわざ2つ用意しなくても
このような処理をさせることはできるのでしょうか?
909デフォルトの名無しさん:04/10/14 00:37:25
素直にそれでいい。
910908:04/10/14 01:06:56
どうもです!
911デフォルトの名無しさん:04/10/14 01:12:38
PerlもOKなIDEとしてはWideStudioってのもあるでよ
http://www.widestudio.org/
912デフォルトの名無しさん:04/10/14 01:56:16
>>890
便利だね。早く5.0系から完全に移行したい。
913デフォルトの名無しさん:04/10/14 01:56:26
そんなもの使うくらいなら
C++でVS+boost
でいけよ
914デフォルトの名無しさん:04/10/14 03:39:04
すいません 質問させて頂きます
PerlでPerlMagickを使ってプログラムを書いていたのですが 実行すると
Can't use string ("/root/pic/screen.jpeg") as an ARRAY ref while "strict refs" in use at ./x.pl line 22.
と 言われてしまいます
22行目は
my $imagetype = $file->[3]->Get('format');
となっています
どういうことなのでしょうか?
->[3]->と言うのは調べていてこう記述してあったのでうつしました
これを抜くと
Can't call method "Get" without a package or object reference at ./x.pl line 22.
こう言われます
すいませんが教えてくださいお願いします
915デフォルトの名無しさん:04/10/14 09:04:46
>>914
> ->[3]->と言うのは調べていてこう記述してあったのでうつしました

自分で理解できてる範囲でプログラミングをしましょう
エラーメッセージの英語くらい読めるようになりましょう

あなたはまずそこから始めるべきです
916デフォルトの名無しさん:04/10/14 13:08:12
>>915
わからんのならレスしたんなよ
917デフォルトの名無しさん:04/10/14 13:22:35
$file の中身がおかしいんじゃないの。

配列のリファレンスが期待されているのに
普通の文字列(ファイル名)が入ってるから。

PerlMagick使ったことないからわからんけど、
どっかで、 $obj = new HogeHoge($file) みたいに
するんじゃないの?
んでそれを $obj->Get('format')みたいにする。違う?

918デフォルトの名無しさん:04/10/14 14:05:22
>>914ではないんですが、今perlを勉強しています
それで>>917さんの書き込みを見たのですが
newというのは何なのでしょうか?
そのあとのHogeHogeというものもわかりません
また、配列のリファレンスとは配列を示すアドレスですよね?
どこに配列があるのでしょうか?
すいませんが教えてくださいお願いします
919デフォルトの名無しさん:04/10/14 14:10:29
>>918
今勉強してるテキストひと通りマスターし終わってからまたおいで。
920918:04/10/14 14:12:09
>>919
本は読んでません
ネット上でみたりココ見たりしてやってます
921デフォルトの名無しさん:04/10/14 14:17:16
>>917
package HogeHogeFile;
sub new { return bless []; }


以下略

package main;
$file = new HogeHogeFile();

になってるんだろうな。そしてHogeHogeFileの中の人の第4要素がまた
なにかのオブジェクトで、Getというメソッドを持ってるんだろう。
922デフォルトの名無しさん:04/10/14 14:18:35
>>920
わからない言葉があったらまず検索
923918:04/10/14 14:24:33
>>922
perl new
とかで検索したのですが 違うのが引っかかりすぎてみつけれませんでした
ですので、ここできかさせていただきました
924デフォルトの名無しさん:04/10/14 14:28:38
>>923
じゃあこれからも検索しづらいものがあったら片っ端からここに質問にくるのかい?
925デフォルトの名無しさん:04/10/14 14:31:06
うざいから早く教えてやれよ
926デフォルトの名無しさん:04/10/14 14:46:22
>>925
そもそもnewがわからないのでperl newでぐぐるというのを見れば
ここで教えてどうにかなるレベルにすら到達してないのがわかると
思うが。うざいのは確かだけどねぇ...
927デフォルトの名無しさん:04/10/14 14:48:06
>>892
my $varはそもそもundefなんだから、わざわざ=undefする必要ないのでは?
open my $fh, $file
で充分。
928デフォルトの名無しさん:04/10/14 14:59:51
プログラムはCとjavaを勉強していたのですが、ちょっとわけあって
ネットワーク系のプログラムを勉強することになりました。
PHPとかASPとかpealとかありますが、どれをやるべきでしょうか?
とありあえずPealをやろうとおもってるのですが?
主流になっていくやつをやりたいので、是非教えてください
929デフォルトの名無しさん:04/10/14 15:02:44
cとjavaじゃあかんのか
930デフォルトの名無しさん:04/10/14 15:06:22
pealなんていってるから釣りじゃねーの?
931デフォルトの名無しさん:04/10/14 15:49:07
ほっとけ
932デフォルトの名無しさん:04/10/14 15:53:49
結構あるもんだなあ…(だからどうした)
http://www.google.co.jp/search?hl=ja&ie=Shift_JIS&q=peal%8C%BE%8C%EA&lr=
933デフォルトの名無しさん:04/10/14 15:55:27
> Pealの本を出版! 『Perl/CGI プログラミング』では、プログラムの基本的な技術を紹介しているんだ。
 ~~~~~~~~~~~~~~~~~~
本が出てるらしい
934892:04/10/14 16:00:56
>>927
そうですね。このシンタクスを実用化するなら
open my $fh, $file ということですね。
書いた時点で my $fhが何を生成しているのかよく分からんかったので
undefとか1とか突っ込んでた名残です。
なんか、perlopentut見たらいろいろ書いてありました
もうファイルハンドルはいらない♪!?
935デフォルトの名無しさん:04/10/14 16:06:50
open my $fh => $file
のほうがカコイイよ
936918:04/10/14 16:17:18
あの どうか教えていただけないでしょうか?
937デフォルトの名無しさん:04/10/14 16:28:28
> newというのは何なのでしょうか?
> そのあとのHogeHogeというものもわかりません
http://www.google.com/search?num=50&lr=lang_ja&q=%70%65%72%6C%20%E3%82%AF%E3%83%A9%E3%82%B9
938デフォルトの名無しさん:04/10/14 16:37:15
>>936
もしかしたらnewはクラスHogeHogeのコンストラクタです。
クラスHogeHogeは「ほげほげ」と読みます。
$fileか$file->[3]にはきっと'/root/pic/screen.jpeg'という文字列が入っていて
これはblessされたオブジェクトじゃないのでGetを呼び出せず
pealはエラーを吐き出しました。
ちなみにrootでこういった作業するのはセキュリティ上望ましくないので
一般ユーザでのプログラミングをおすすめします。
939デフォルトの名無しさん:04/10/14 17:44:29
>>935
renameなんかだと rename $old_name => $new_name でストリーム表現できてよいが、
openの場合ファイルをハンドルに結合するので、ストリーム的には open my $fh <= $file と
書きたいところ。なので => ではダサイということに君もそのうち気付くだろう。
940デフォルトの名無しさん:04/10/14 18:45:22
>>939
参照, 被参照の関係を考えると => でいいんじゃないの?
hash 使った事ある?
941デフォルトの名無しさん:04/10/14 18:57:50
条件によって、関数に渡す引数の数が違う場合
たとえば

my $obj;
if (/condition/) {
  $obj = Class->new(ARG_0 => "a", ARG_1 => "b", ARG_2 => "c",);
}
else {
  $obj = Class->new(ARG_0 => "a", ARG_1 => "b",);
}
という具合の書き方をいつもしているのですが
なんだか重複した記述が多いし、もうちょっとスマートな書き方がないものかと
いつもうんざりしています。
こういう場合の定石パターンってなにかあるのでしょうか。
皆さんどうコーディングされてます?
942914:04/10/14 18:58:39
すいませんありがとうございます
>>915
えと 3つめの要素を返す? 見たいな感じでよろしいのでしょうか?
エラーメッセージも読んではいるのですが
その->[3]->を抜いた方が正しいとは思うのですが それでもエラーなので・・

>>917
まさにそういう風にしています
my $dir=$ARGV[0];
$flyfile=readdir(DIR);
my $file="$dir$flyfile";
のような感じでしています
DIRはopendirしたディレクトリです
これで $fileにはあるディレクトリの1つのファイルのパスが入るようにしています
省きましたが$fileがディレクトリか違うかは判断した後に
my $imagetype = $file->Get('format')
をしています

私もPerlをやり始め手間もないので分からないのですが
$obj=new HogeHoge($file);
とはどういう意味なのでしょうか?
&fileを引数にHogeHogeを作って それを$objにいれる・・

すいませんが教えてくださいお願いします
943デフォルトの名無しさん:04/10/14 19:33:48
The $file is referred to by $fh. ($file <= $fh)
eg. open $fh => $file ??
!☆???!!
944デフォルトの名無しさん:04/10/14 19:35:12
now..
$fh->open($file);
is so cool, so sweet, so sexy.
945デフォルトの名無しさん:04/10/14 20:37:33
コンストラクタ
インスタンスってなんですか?
946デフォルトの名無しさん:04/10/14 20:42:57
低レベルなぺrlすれ
947デフォルトの名無しさん:04/10/14 20:48:32
>>944
i agree you
but calling open() method from undefined varable is too strange :)
948デフォルトの名無しさん:04/10/14 20:55:15
i agree with you
949944:04/10/14 20:57:33
>>947
Oop!! undef->open() is not implement, yet.
Sorry..
950デフォルトの名無しさん:04/10/14 21:02:24
>>949
undef->open() is Black Hole. It's so dangerous.
951デフォルトの名無しさん:04/10/14 21:07:05
sub func_search
 {
 chomp (my $file_name = <STDIN>);
 -f $file_name or die "ファイルが見つかりません\n";
 open FILE, "<$file_name" or die $!;
 print "\n検索対象文字列を入力してください\n";
 print "文字列 = ";
 chomp (my $moji = <STDIN>);
 while (my $line = <FILE>)
  {
  if ($line =~ /$moji/)
   {
   print "$line";
   }
  }
 close FILE;
 }

というのは指定したファイルから任意の単語がある行を抜き出して表示する、
というプログラムなのですが、実行のときに、目的のファイルから
"perl" もしくは "Perl" という単語がある行を表示させたい場合、
$word を入力するときに [Pp]erl と入力すればできるように、
正規表現で $word を指定できますよね。

このとき例えば "perl" を含む行以外を表示させる$wordの指定の仕方ってあるのでしょうか?
この場合はプログラムを書き直すしか方法はないのでしょうか?
952デフォルトの名無しさん:04/10/14 21:07:37
I want you to be drawn into a black hole by "undef->open()".. :)
953デフォルトの名無しさん:04/10/14 21:16:45
>>951
perlを含まなかったら表示とすればよい
954デフォルトの名無しさん:04/10/14 21:28:44
つか、そろそろ
use IO::Fileなり use FileHandle しろよ ^^;)
955デフォルトの名無しさん:04/10/14 21:29:50
perlを勉強し始めました。
以下に、質問。

use strict;
my $family_name{"fred"} = "filntstone";
my $family_name{"barney"} = "ru;

foreach $person ( qw/ barney fred /) {
print "I've heard of $person $family_name{$person}.\n";
}

を実行すると、

syntax error at ./ex5_1.pl line 3, near "$family_name{"
Execution of ./ex5_1.pl aborted due to compilation errors.

になってしまいます。

なぜですか?

956デフォルトの名無しさん:04/10/14 21:31:44
>> 955
3行めかな?
957デフォルトの名無しさん:04/10/14 21:34:14
エラーを読むこともできねーのかよ
958デフォルトの名無しさん:04/10/14 21:38:17
>>957
後の”が、ねーぞコラ、ぐらい云えば?質問スレなんだらよ。
959デフォルトの名無しさん:04/10/14 21:41:35
んなんいうんだったら
>>942にも答えてやれよ
960951:04/10/14 21:49:49
>>953
if ($line !~ /$moji/)

といった感じですか?
やはり実行のときに何を入れてもこのままのプログラムでは無理なんですね。。。
961デフォルトの名無しさん:04/10/14 22:01:39
962デフォルトの名無しさん:04/10/14 22:18:05
>>914
ここに結構よさそうな解説がありますよ
ttp://www.ss.iij4u.or.jp/~somali/web/_perlmagick_ref.html

>&fileを引数にHogeHogeを作って それを$objにいれる・・
&fileじゃなくて$fileだけど、その通りです。
963デフォルトの名無しさん:04/10/14 22:33:27
>>955

"ru;が"ru";だな。
それ以前に、

my %family_name;
$family_name{"fred"} = "filntstone";
$family_name{"barney"} = "ru;


my %family_name =
(
  "fred"=>"filntstone",
  "barney"=>"ru"
);

ぐらい書いてくれよ(´Д`;
964デフォルトの名無しさん:04/10/14 22:57:05
filntstone は正しくは flintstoneだろうが
ru が何を意味しているのか激しく気になる。
ルテニウムか?
それから for $person ( qw/ barney fred /) {
と書けるやつはエラーの意味くらい分かると、なんとなく思うぞ。俺は957ではないが。
965sage:04/10/14 23:11:46
>>962
ありがとうございます
一応そこを見てやってみたのですが・・
??もう一度見直してみます
どうもすいませんでした

&fileはタイプミスですすいません
966945:04/10/14 23:13:50
本当にわからないんですけど
検索して見てもいまいちピンと来る説明がありません
わかりやすく説明していただけないでしょうか?
あと->はリダイレクトの逆と考えたらいいのでしょうか?
967965:04/10/14 23:15:05
間違えて名前に書いてしまいました
すいません 914でした
968914:04/10/14 23:24:21
>>965の書き込みの
??はミスです  申し訳ないです
969デフォルトの名無しさん:04/10/14 23:33:54
>>965
Image::Magickを使ったことないから全然間違ったこというかもしれないけど
配列がうんぬん、と絡んでくるのは $image = Image::Magick->newで作った
一つの $imageオブジェクトに複数の画像をReadで読み込めるからじゃないのかな?
Photoshopとか使ったことあれば、「レイヤー」を想像すれば(Gimpもそうか?)
何で配列がでてくるのか分かるんじゃないかと思うよ。
だからその部分でエラーが出てくるのは、きっと読み込み方を間違ってるんじゃないか
と想像します。多分ね。
それから -> はリダイレクトではなくて、->の左にある変数が保持している
サブルーチンとかハッシュや配列のフィールドを呼び出す演算子みたいなものです。
というか、リダイレクトの逆っていったいなんだよ? (w
970デフォルトの名無しさん:04/10/14 23:34:13
>>914
いやだからお前のPerlの理解はPerlMagickを使うには
まるで不足しているのでまともな本読んで勉強して
からにしろというのが回答。ここでちょこちょこやり
とりしてなんとかなるレベルじゃない。

971969:04/10/14 23:35:20
後半は >>966
972デフォルトの名無しさん:04/10/14 23:39:31
あれだな
>>914とほかの初心者とが入り混じりすぎてごっちゃになってんな
973デフォルトの名無しさん:04/10/14 23:48:51
defineが書かれたファイルを読んで
ifdefを適切に取り除きたいのですがどんな感じで書けばいいですかね?
#cat define.h
`define a
`define b
`define c

#cat hoge.txt
q
w
`ifdef a
e
r
`ifdef b
t
`else
y
`ifdef c
u
`endif
i
`endif
o
else
s
`endif
974デフォルトの名無しさん:04/10/15 01:25:38
975デフォルトの名無しさん:04/10/15 03:18:27
>973
激しくモジュールがありそうな悪寒。
が、一応作るのならこんな感じか。
ifdef を見つけた時点でスタックに対象の define が ON 状態であることを積む。
else を見つけた時点でスタックトップの define が OFF 状態であるように反転する。
endif を見つけた時点でスタックトップを取り除く。
スタックが変更されるたびに define されている内容と照合して出力するか否かを決定する。
で、エラーチェック等なし、条件チェックをスタック変更時でなく毎回やる、で実装すると↓
あと、hoge.txt で最後の else に ` つけ忘れてるよ。

open DEFINE, 'define.h';
while(<DEFINE>) {
$def{$1}=1 if /^`define\s+(\w+)/;
}
close DEFINE;

open TEXT, 'hoge.txt';
$flag = 1;
while(<TEXT>) {
if(/^`ifdef\s+(\w+)/) {
push @stack, [$1, 1];
} elsif(/^`else$/) {
$stack[$#stack][1]=0;
} elsif(/^`endif$/) {
pop @stack;
} elsif($flag) {
print;
}
$flag = not map { $def{$_->[0]} ^ $_->[1] ? 1 : () } @stack;
}
close TEXT
976デフォルトの名無しさん:04/10/15 03:23:13
>975
判別部分はこれだけで良かった_| ̄|○

$flag = not grep { $def{$_->[0]} ^ $_->[1] } @stack;
977デフォルトの名無しさん:04/10/15 07:42:26
>>990の人刷れた手よろ
978デフォルトの名無しさん:04/10/15 09:59:38
cat define.h hoge.txt | sed 's/^`/#/' | cpp

でいいような。全然perlじゃないなこれ...
979デフォルトの名無しさん:04/10/15 10:54:16
蛇足だけど
my %family_name =
(
  "fred"=>"filntstone",
  "barney"=>"ru"
);
より
my %family_name =
(
  fred=>'filntstone',
  barney=>'ru'
);
のがベターかな
980デフォルトの名無しさん:04/10/15 11:38:15
PerlでWindowsアプリを書くにはどうすればよいですか?
981デフォルトの名無しさん:04/10/15 11:48:35
>>979 さらに蛇足だが、
my %family_name =
(
  fred=>'filntstone',
  barney=>'ru' ,
);
の方がベター
あと、だれか>>860にレスしてやれよ。漏れは質問の意味すら良く分からんが
982デフォルトの名無しさん:04/10/15 13:57:59
>>979
これのポイントというかベターな理由はどこなんでしょうか?
ポインタだけでも構いませんのでお願いします。
983デフォルトの名無しさん:04/10/15 14:10:51
>>981
>>860
たぶんどっかのformから自動的に結果を得たいのだろうが、そのformから
query出すところがjavascriptで書いてあるので、どういうパラメタを
投げればいいのかわからないという問題と思われる。perlであるかどうか
は関係ないのでスレ違い。
984デフォルトの名無しさん:04/10/15 14:10:55
> >>979
> これのポイントというかベターな理由はどこなんでしょうか?
> ポインタだけでも構いませんのでお願いします。
必須でない物、展開されない物には「"」を使うなって事かと

ところで
>>981
これのポイントというかベターな理由はどこなんでしょうか?
ポインタだけでも構いませんのでお願いします。
985デフォルトの名無しさん:04/10/15 14:23:32
>>981
誰も答えてくれないからって自演するなよ・・・
しかもそれがベターって・・・w
986デフォルトの名無しさん:04/10/15 14:49:08
>>984
エントリ追加したときに , が無いって怒られるエラーを未然に防ぐ

ブロック末尾の文にもちゃんと ; 付けるのと同じ理由
987デフォルトの名無しさん:04/10/15 16:15:54
ださ
988デフォルトの名無しさん:04/10/15 16:16:32
>>990の人刷れた手よろ
989デフォルトの名無しさん:04/10/15 18:38:00
Perlで作ったアプリケーションを一般の Perl をインストールしてない
人にも使ってもらえるように VisualC 等でGUIインターフェスの
アプリにしようと思うのですが、VisualC等で Perl の機能を実現
したりあるいはスクリプトをそのまま使う方法というのはないのでしょうか?
Perl/TKの存在を知りましたがPerlをインストールしないと動かないようなので・・・
990デフォルトの名無しさん:04/10/15 18:41:46
>>989
そんな事知らない貴方が作ったソフトは、誰も使用しませんよ^^
PCの基礎を学んだほうが良いんじゃないんですか?
まだ遅くないと思いますよ?そのレベルじゃ・・やb(ry
991デフォルトの名無しさん:04/10/15 18:52:19
誰も使用しないかどうか十万円くらい賭けてみますか?
シェアウェアですが。
992デフォルトの名無しさん:04/10/15 18:57:20
小学生かよ
993デフォルトの名無しさん:04/10/15 19:02:43
レベルがどうこう抜かしてるガキグラマー相手にはちょうど良いかなと・・・
994859:04/10/15 19:18:03
>>882
レス有難うございます。
""の中にあった@を、""使わないような処理に変更する試みは既に施していましたが、
エラーは変わらなかったです。

また、型ブログもリファレンスも使用してないです。

5.6で問題なく動いていたのに何でだろう・・と思い悩んでおります。
しばらく自サーバを5.6に戻すしか解決策が見当たりませんが、
いつかレンタルサーバにUPしたいと考えておりまして、
でもレンタルサーバは大体5.8なんですよね・・。

他に私と同じような方がいないということは、やはり私のスクリプトミスなのでしょうね。。
もうしばらく考えてみます。アドバイス感謝いたします。
995デフォルトの名無しさん:04/10/15 19:18:04
>>993
ガキが馴れ馴れしくしてんじゃねーよ
996デフォルトの名無しさん:04/10/15 19:19:38
997デフォルトの名無しさん:04/10/15 19:25:50
>>995
とりあえずあんたは家族とセックスでもしててください
998デフォルトの名無しさん:04/10/15 19:27:29
1000もらいますよ?
いいんですがこんなこのスレッド一回も見たことない人にとられて?
もうちょっとがんばってくださいよ
999デフォルトの名無しさん:04/10/15 19:28:21
いいよ
1000デフォルトの名無しさん:04/10/15 19:28:25
ほんとにいいんですか?
もらっちゃいますよ?
これの書きこみが成功したら1000ですよ?

まあ私Perl書けるしある程度なら質問も答えられるので

もしこれが1001だったら24時間常駐して解答係りになりますよ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。