"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 あたり
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 そういう意味ね。
答:最初にメモリにすべて読み込むため
QじゃなくてAだった。
foreach否定の方がどうかと思うが
否定はしてない
while(<FH>)
って慣用句だから
>>15 はforeachをそこで使うなんて個性的って意味なんでしょ
>>24 良いドキュメントですね。
「TMTOWTDI」は、「だから、どう書こうと構わない」ってことじゃないですよね。
肝に命じておきたい。
>個性的 なんではっきりアホだと言わんのかね?
マジレスすると、読み込むファイルの大きさによるだろ。
foreach と while の交換なんて簡単にできるんだから、
サンプルとしては
>>15 ので十分だと思うが。
ファイルが大きい場合がありうるなら while を使えばよろしい。
しかもそこは質問の本質ではないし。
少し前にも stat の結果をキャッシュしてない というレスが
あったが、それと同レベル。
サンプルは本質の個所が分かりやすければ及第とみていいでしょ。
もし不満があるなら、ケチつけずに
補足という形で自分が付け足せばいい。
なんでそんなに粘着してるんだ?
アンカーミス。スマソ。
TMTOWTDI を楯に糞コードまき散らすだけでは飽き足りず、必死で自己弁護ですか。
このサンプルだけ示された初心者が ファイルが大きいときにwhileに変えるって自分で思いつけるかなあ
>>33 そう言われたら、自分でラクダ本読めとレスするしか
なくなると思うぞ。
最初からwhile使ったサンプル示せばいいんじゃ。
なんか・・・一気に空気悪くなったな・・・。
>>15 おまいの責任はおもいぞ。
それから、まだグダグダ言ってるやつが
>>15 なら、
一度で完璧なサンプルを提示してみろよ。
問題は
>>18 。
できないなら黙って見てなさい。
12の答えでよかったのにね 漏れは17みたいなレスの方がいらんと思うよ
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 ダメとまでは言わないが、質問させてくれ
・どこでそう習ったのか?
・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
>>50 それはまた別の話じゃない?
コード見ればバッファ(@data)に一気に取り込んでるのがすぐ分かるし。
つか、wileにせにゃ駄目なんて書いてる資料ぐぐっても見つからなかったんだが? ソースキボン。
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 使っとけ」では困った事が
沢山起こる。
検証用ベンチ。 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) おー。
>>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);
},
}
);
気にせんとソース書いてたので勉強になった。
サンクス。
>>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)
低性能マシンもこいうとき役立つな。 メモリ負荷も少ないし、whileが一番いいということだと思う。
質問っていうか相談というか悩んでます。 'A' と 'B' と 'C' の3文字、3桁で表せるのは9種類ですよね。 でも3桁「まで」となると 'AB' も1種類となって 3^3 + 3^2 + 3^1 に増えますよね。 こういうのも扱う時はどうしたらいいんでしょう。 空文字Dを追加して仮に4進数として /^D+/ にマッチするものだけをカウントとか思いついたんですが、 桁も文字種類も多く、重複除去が大変そうです。 あとは全部で1桁のループ→全部で2桁のループ…とかしかないのかなあ…。 いい案や、そういうのを追究しているサイトなどあれば教えていただけませんか。 Perlに限った話じゃなくてすみません。
>>77 もう一度書き直してくれ。
あんたの課題と似ているが異なる課題も挙げて。
>>76 何がしたいんだ? マッチするものを探したいのか、組み合わせの数を数えたいのか
数学の前に日本語の勉強もすれ
数字4桁以内の暗証番号総当たりするならどうしますか?
という感じです。
9の次を10じゃなくて00にすればいいのではという考えでした。
あと
>>76 の /^D+/ は /^D+[^D]+$/ でしたね。
whileとforeachはベンチとってもあまり意味はないだろ。 そりゃ大抵の場合whileの方が高速だろうけど、 それよりむしろ少ないメモリで済むことが重要なんだから。
>>80 やっぱあんたダメだ。
スレが荒れるからよそに行ってくれ。
ここ、あまり実力のあるやついないのか・・・ メモリに一気に取り込むメリットもあるんだが。
はいはい、そうですね 時と場合によりますね 終了
なんの話してんだ・・・ 一発で読み込んだ方が早いやの、 一行づつ処理した方が早いやの・・・ そんな物、その時々の用法じゃないか。 whileでループさせた方が早いとか、 forでループさせた方が早いとか、 そんな事言ってるのと同じ。 ナンセンスな話し合いだな。おい。
遅いよか早いほうがいいもんな。 ましてや安定性も上がるならなお良し。
了解しました。失礼します。
>>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(<>)を自分の糞ページのサンプルで使ってるアホウ
そのうちみっともないことに気がつくだろうから 温かい目で見守ろう
まだ語り合う事があるか。 よし、具体例で反論してみろ。
>>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(<>) なんて載ってるんだ?
結論 foreach(1..100000000) は最適化するのに foreach(<>) を最適化しないperlが悪い
今まで $data = join('',<FH>); ってかいてたから read(FH,$data.-s FH); なんてでてこなか~ただよ。
>>100 池沼のための最適化はやらねえよ、って作者が言ってるだろうが。
(1..100000000)が最適化されるようになった理由はどこかで読めますか?
>>96 お前神か?
何も知らずに foreach(<>) が書けるわけねぇだろ(w
>>107 perl5005deltaに最適化されるようになったことは書いてありますが、
理由までは書いていないようです。
理由聞いてどうすんのよ
110 :
デフォルトの名無しさん :04/09/10 15:45:31
配列や連想配列自体が生成されているかどうかを調べるにはどうしたらいいのでしょうか? 例えば if($a['test']){ }else{ } このような場合、$a['test']が0でもnullでも連想配列自体が定義されていなくても 同じ結果になりますよね。 色々調べていくうちにdefined関数が使えるんじゃないかと思ったのですが 違うようでした。 どなたか教えていただけないでしょうか。
112 :
15 :04/09/10 16:07:12
うーん、伸びる伸びるw
>>101 ($data) = <FH>;
こんなのもある
他によく知られてるとこでは $/ を undef ですかね
↑バカ
なんで得意になってる奴多いの?
>>116 なんでだろうね。レベルは低くなって、態度はでかくなった。
元々レベルなんて低いけどね。 Perlは簡単だから入門言語として勉強する人も多いだろうから。 レベルなんて上がるとは思えないし。 分かってくれば分かってくるほど、 Perlの無茶加減に気づいてきて、 違う言語へ移るだろうし。 でも、俺はPerlが好きだ。
>>112 わざわざここまで伸ばしてやったんだ。感謝しろよ。
whileで書き変えてみたらプロセス使用量が メモリー使用量13M減ったよ。(汗
まぁ
>>120 のような者が出てくるのなら、年に一度はwhile/foreach論争をやってもいいかもな。
つーかforeach(1 .. 100000)が最適化されるのは
「for(my $i = 1; $i <= 100000; $i++)よりずっと書きやすいが、酷くメモリ効率が悪い」
ってのが理不尽だという意見が多かったんじゃないだろうか。
逆にforeach(<>)が最適化されないのはwhile(<>)と*完全に*置き換えられるからだろう。
foreach(<>)がwhile(<>)に勝る点なんて何一つ無いね。 @array = <> ならランダムアクセスができるという利点はあるがな。でも結局foreachの出番は無いわな。
123 :
デフォルトの名無しさん :04/09/10 22:54:04
>>122 > foreach(<>)がwhile(<>)に勝る点なんて何一つ無いね。
for(<>)と記述することで、2文字ぶん打ち込むのがラク。
forと書くべきところでforeachを、foreachを書くべきところでforを使うのは素人にはお勧めできないな。
>>123 お前頭いいな
foreach(for)にも良い所があったって事でこの話題は終了しとこうぜ
>>125 結局 for にも負けて、 foreach には良い所ひとつもなかったって事か。終了。
foreachがヤケ酒で肝臓悪くしたら お前らのせいだからな。
>>123 バカいうなよ。
forは左人差し指を2回使うがwhileはすべて違う指。
明らかにwhileのほうが打ち込むのラク。
>>128 おまいこそバカいうなよ。
同じ指を使うforのほうが圧倒的に打ち込むのラク。
タバコのソフトパックを 右だけ破る→while 左だけ破る→for ラベルを剥がして開く→foreach
131 :
デフォルトの名無しさん :04/09/11 09:26:10
Operaのブックマーク(Hotlist)を IEにインポートする用のHTMLに変換したいのですが 解説サイトって無いですかね?
どんな解説サイトを期待しているんだろうか。
- Operaのブックマーク(Hotlist)をIEにインポートする用のHTMLに変換の仕方解説! -
(1)ブラウザを立ち上げます
(2)アドレス欄をクリックします。
(3)
http://www.goolgle.co.jp/を入力します (4)"Operaのブックマーク(Hotlist)をIEにインポートする用のHTMLに変換"と入力する
(5)該当するページが見つかりませんでした。と表示されればOK。
- Operaのブックマーク(Hotlist)をIEにインポートする用のHTMLに変換の仕方解説! -
(1)ブラウザを立ち上げます
(2)アドレス欄をクリックします。
(3)
http://www.goolgle.co.jp/を入力します (4)"opera bookmark perl"と入力する
(5)"OperaHotlist2HTML"のページを発見できれればOK。
(6)見つけたページの「ウサゲ」と書いてあるところをよく読む
(7)「STDIN」がわからない場合は(1)に戻る
>>134 (7)で戻るのは(1)じゃなくて(2)だと思います。
136 :
デフォルトの名無しさん :04/09/11 18:06:04
>>18 です。
再び質問です。
>>51 で同じファイル内のものはたとえ名前(ameなど)が同じでもアルファベットを
表示しないようにするには、どうしたらよいのでしょう。
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"; }
エラーメッセージは?
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;'
>>141 これをコピペしてやってみたら?
perl -e '$a = 5; $b = sprintf("%02d", $a-1); print $b, "\n";'
っつのは、
>>141 は全角スペースやら入ってることが気になった。
146 :
138,141 :04/09/11 23:27:14
>>142 ,144
レスありがとうございました。
>>144 自宅のサーバではない為、後日確認してみます。
>>146 おいおい自分のパソコンにもPerlくらい入れろよ。
サーバで実験するってのはいやがられるよ。
>>145 googleは、メタ検索エンジンになるのを拒否します。
それは、googleのヘルプかなんかに書いてあります。
ユーザ登録してgoogleAPIというのを使えばできます。
webprog板にgoogleAPIというスレがあるけど。
149 :
デフォルトの名無しさん :04/09/12 05:50:41
1行目(レスアンカーは含めず)は翻訳ソフトが吐いたような日本語だね。
>>145 んー、普通のブラウザだとGETできるからUA名をIEなんかに偽装してみそ
LWPはデフォだとLWPだかってUA名を送るからそれで蹴られてるかも
151 :
デフォルトの名無しさん :04/09/12 11:04:00
Rubyのようにちゃんとしたexe生成ツールができないかなぁ。
>>145 Googleは連アタかけるとアク禁食らうのでちゃんと串かますこと。
昔会社でやってアク禁食らって、ごめんなさいメール出して解除
してもらったことがある。その後はちゃんと串刺してやってる。
>>152 >その後はちゃんと串刺してやってる。
ヲイ…
>>152 「ちゃんと」の用法がちゃうやろ。
そもそもアク禁されるほどの連アタにならないように「ちゃんと」接続を制御せな。
>>153 こんなのあるんですね。
でもこれってperl2exeと同じようなものですか?
>>148 >>150 >>152 貴重な意見<(_ _*)> アリガトォ
GET形式URLへはブラウザからだと取得できるので、
UA名を何かに変えてやってみまつ。
オブジェクト指向ではない一本糞のようなプログラムを書く場合 パッケージには触れない(パッケージ名を変えたりしないなど)方が よいのでしょうか?
糞は早く流さないと臭いのでいちいちパッケージ変えたりしません 逆に、臭いからパックするという考えもアリ
家のトレイ、水洗じゃないので、全部そのままにしてまつ。 臭いです。
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++ 有り
>>161 初めて知ったけど、Tkより楽ちんそうだね。
入れてみようかな。
2 1411.441578987632500 345.523617718994840 1065.917961268637800 91 1463.730149786665800 368.860556376834380 1094.869593409831400 165 1353.381577247856100 303.768416713978350 1049.613160533877600 こういった内容のファイルから入力しようとしているんですが、readだとバイト数が一定でないため使えません どういったようにスペースで別れた数値を読み取れるようにできるんでしょうか?
while (<>) { push(@a, $_) for split(/\s+/); } Perlのキホンと思われ これに枝葉ごてごてつければどうにでも応用が利く
while (<>) { chomp; @a=split; ... }というのは良く見かけるが、 @a=split(...)のかわりにpush(@a, $_) for split(...)というのは はじめて見たな。どこの芸風だろうか?
166 :
デフォルトの名無しさん :04/09/13 16:30:06
pushにも良い所があったって事でこの話題は終了しとこうぜ
あんまりPerl詳しくないので、うろ覚えの内容を書いてしまうけど、、 ヘンな記号みたいな特殊変数で、レコードセパレーターというか、 行(?)の区切りを設定する変数なかったっけ。 それをスペースにするっていうのはどうよ。
foreach (<>) の中の人と同じでしょ。 chompしてないところとかなんでもメモリに持ちたがるところとか
>>165 1行ずつ処理するんじゃなくて@aに全部ためるのが目的だったということですな。
>>164-168 splitを使えばよかったのですね、ど素人質問に答えてくれてありがとうございますた。
>>169 サンプルデータを見るに、明らかに行指向だと思うんだが
全部ごちゃ混ぜにした後で切り分けんの?
172 名前:デフォルトの名無しさん[sage] 投稿日:04/09/13 18:44:57
>>168 べつにchompぐらいええやん。
チョンプ?
chompいらんって言ってる人は真性なの?
>>172 何故にchompいらないと思うのかね。
_ _∩ ( ゚∀゚)彡 chomp! chomp! ⊂彡
びっくりするほどTMTOWTDI! びっくりするほどTMTOWTDI!
ワラタ、単なる初心者が居るな(w あのコードなら chomp いらねーよ
┐(´∀`)┌ヤレヤレ
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. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>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 を省くとこういうつまらん部分で
ハマる事もあるのでお勧めできない。
だからいらないんでしょ? やれいうなら tr/\x0D\x0A//d; 使っとくけど。
PerlはいつからWindowsオンリーの言語と化したのですか?
>>186 ご高説ご尤もということで(w
>163に関しては、\nの後の空フィールドは自動的にナイナイされるんだから
別にいいんじゃない?
ちょmpはジョーシキ
>>194 ああ。
それ自体はUNIXだろうがMacだろうが使えるだろうよ。
お前こそよく読め。
>>196 分からないならもういいよ。
Windowsしか使わないお前自分自身のためのソースなら問題ないしさ。
m9(^Д^)プギャーーーッ
>chomp は Windows(DOS) や Mac,UNIX といった処理系に依存します. 俺がいいたいのはここだ。
で?ってゆう
>>199 依存して当たり前じゃねーか・・・
そもそも、UNIXで動くPerlはUNIX上で生成したテキストをUNIX上で処理するように作られてんだよ。
Windowsで作られたテキストをUNIXで処理するのをデフォルトなんかで作る訳ねーだろ・・・
わかるだろ?俺の言いたい事が。
漏れの場合は UNIX のデータを Win で処理したり逆をしたりするから、
chomp より
>>188 の方が使いでがあるなあ。
だから、同一環境で作ったデータ使う環境ならchompでもええけど。 別OSから持ってきたデータだとつかえんでしょ? ソーなったとき仕様で使えませんとでも言うの?
まあ適材適所ってことでいいんじゃないの。 「ソーいう仕様です」でまかり通るケースも多いでしょう。
その時はその時だろ バカ?
俺は馬鹿でもいいけどさ。
あー・・・ なんか、もういいや。 その時々の対処でって事で。
俺もよくUNIXのデータをWinで加工するが、データを落とす時に改行コード変換するから
別にchompで問題なし。というか、chompでないと可読性下がるんでchomp推奨。
>>194 のはいろんなプラットフォームのデータを処理するCGI向けコーディングの話だろ?
209 :
デフォルトの名無しさん :04/09/13 22:01:23
そんなん163が書けばいいこと。 なんで回答者がOSに依存しないよう考慮しなければいけないんだ? 使い捨てスクリプトかもしれんのに。
最後に、chompが駄目とはいわん。 あれこれ決めつける発言がウザかっただけだ。(w
Ruby の chomp なんかは CR でも LF でも CRLF でもてきとーに削ってくれて 気が利いてるなと思う。
>>212 適当に削ってくれてる辺りが適当な作りっぽくていい味出してるな
改行コードがCRの場合テキストにLFが入るわけねーしRubyは頭イイ
なぜPerlスレにルビ厨が混じってんだ?
216 :
デフォルトの名無しさん :04/09/13 22:33:35
>>211 Perlスレに質問するってことは、Perlで処理しようと思ってるわけだろ。
正規表現でテキスト処理ってPerlの使い方の代表みたいに紹介されてると思うんだけど
そういうの全く見たり聞いたりしてないのかな
>>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
>>217 それを「テキスト」と言えるかは微妙。それこそ適材適所だべ。
EXCELでセル内に改行があるCSV作ると、 セル内改行はLFになるよね。 行の区切りはCR LFで。
で、それがテキストファイルだと?
勉強になるなぁ~、いろいろ。 個人的には、whileだchompだと云うぐらいなら てめぇが即レス回答しろや、ボケッ!とか思っちゃうが。
>>219 いやまぁ微妙だから「極端な例」なんだけどね。
少なくとも while (<>) { chomp; ... という慣用句なら
問題なく処理できるけど。
あと見落とされがちだが chomp は $/ と連動してるので、
陽に $/ を設定すれば行末で悩む必要は無い。
local $/ = '0';
chomp, print "[$_]" while <DATA>;
__DATA__
102030405060708090
よーし、パパJAVAに移行しちゃうぞー!
226 :
デフォルトの名無しさん :04/09/13 23:23:33
>>18 です。
再び質問です。
>>51 で同じファイル内のものはたとえ名前(ameなど)が同じでもアルファベットを
表示しないようにするには、どうしたらよいのでしょう。
foreachの件と言い、
>>164 と言い
妙ちくりんなコードはいったい何なんだ?
どっかに発生源があるんか?
アホウが書いた本がなぜか売れてるとか。
チョップするかわりにいつも while(<>){ s/\s+$//; } みたいに書いてる。
でも一行ずつ処理に区切り付けたらソートとか出来ないんじゃないの?
231 :
デフォルトの名無しさん :04/09/14 00:12:16
>>226 です。
いくら考えてもわかりません。
>>18 で同じファイル内のものはたとえ名前(ameなど)が同じでもアルファベットを
表示しないようにするには、どうしたらよいのでしょう。
あまり聞きすぎるのも悪いので。
perlの基本的なことは勉強したのですが、まだ慣れていないようです。
プログラムの例が豊富にのっているようなホームページはないのでしょうか?
>>223 おまえCSVファイルって何のことか分かってて言ってる?
234 :
デフォルトの名無しさん :04/09/14 00:49:30
>>231 Perlの勉強よりアルゴリズムの勉強が必要だと思う
手順を論理的に考える能力が足らないんじゃないのかな
perl hoge.pl foo bar aho で、foo bar ahoを文字列のリストとして取得するのはどうやるんでしょうか。 my $input = $_;はできても my @inputs = @_;はできないですよね。
@ARGV
なんか・・・ね・・・
やっぱり・・・だよ・・・ね・・・
241 :
デフォルトの名無しさん :04/09/14 04:24:31
PerlでWindowsのスクリーンセーバーを作るには Win32モジュール使えばいいんですか?
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ファイルを解凍しての手動インストールは難しそうなので断念しました。
漏れは、chompのソースコード書き換えて、 s/\x0d\x0a?$//; にしてる。
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を最新バージョンにアップするとうまくいくかもしれません。
結果:できました!
---
>>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」で実行ファイルを作成でき、起動も無事行えました。
具体的な原因は判らなかったもののこれが過去ログとなった時に役立てば幸いです。
本当にありがとうございました・゚・(ノД`)・゚・
間違えた。s/\x0d?\x0a?$//;
>>249 chomp使わないで、
そうする利点がわかってんなら、
それでいいんじゃない。
あーっそって感じ。
人をばかにして折れが一番といいたい絶頂厨がいるな。
悪かったなー。二度と来る
>>251 勘弁してくれよ。
終わった話を得意気に持ってくるヤツに、
あっそ。と言ってあげたまでの話。
お前には、はいはい。と言ってあげよう。
まぁ、まったりいこうや。 取敢えず、駄目ならソース出せということで。
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 ... と表示させる方法を教えてください。 (二つのファイルを比較して、塩基配列(右の部分)が等しいものの名前を表示する。 同じファイル内では等しくても表示しません。) 自分は塩基配列をそれぞれ変数にして等しい時表示すると書きたかったのですができませんでした。
宿題は自分でやろうな。
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);
>>255 を軽くプロファイリングしてみます。
>>255 は、自分が分かっているんだから相手もわかる。
相手が理解しやすいよう伝えようとは考えない。
この辺で、自己中心的な部分があります。
また、こういう考えをする人は頭の良い人に多いように思います。
また、他人が自分に力を貸すのは当たり前。
そういう思想の持ち主のように思います。
また、物を例えて表現するのが苦手に思います。
これは逆に、例えた物を置き換えて理解するのが苦手に繋がります。
たとえば、ライターの火は危ないよ、と教えてもらっても、
「ライターの火は危ない」とだけ学習し、コンロの火も危ないとは学習しません。
「火は危ない」そう学習するのが苦手に思います。
こういう人は、人とのコミュニケーションが苦手で、
自分を表現するのが下手な奥手な人。
以外な所で知的で、内面は大胆不敵。
しかし、外には出さない。
煽りっぽくなりましたが、正直なあなたの印象です。
たとえ、ここで答えを聞いても、
応用し、違う局面で生かす事ができないと思うのであります。
258 を要約すると 256 となります。
255=257というのはどうだろう?
何か最近255みたいな質問多いな
回答者のレベルが下がったら 質問者のレベルも下がってしまった。
と馬鹿が申しております
落ち着け! 落ち着くんだ!(# =ΦωΦ=)フーフー…!!
>>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; }
たかが2chで何か言われたぐらいで 顔を真っ赤にする奴がいるんだろうか。
俺さっききたばかりで何となく煽っただけです☆
と、顔を真っ赤にしながら馬鹿が負け犬の遠吠えをしております
本当だもん。。。
と馬鹿が申しております
なんでIO::Socket使わないの?
276 :
デフォルトの名無しさん :04/09/15 00:32:33
初心者なんで、なんか的外れな質問でしたらすみません。 マルチコアプロセッサ対応版のperl、みたいなのはあるんでしょうか。
277 :
デフォルトの名無しさん :04/09/15 08:17:58
閉ループを、ブラウザを開いている間だけ実行させ、 ブラウザを閉じたら閉ループから抜け、プロセスを終了させる方法とかりますでしょう か? 監視処理的な事をやらせたいので、 閉ループとsleepとを使って行なわせてるのですが、 ブラウザを閉じてもプロセスが動きっぱなしになるので、 タスクマネージャーでいちいち終了させるのが、 面倒でありまして。
HTMLの中にreloadを書いて、自分は終了。
>>278 すいません。
初心者なもので、
もう少し詳しく教えて頂きたいのですが。
>>279 HTML、reloadでぐぐるぐらいのことが出来なくてどうする。
それにもうPerlの話じゃないし、初心者だという開き直りも印象が悪い。
出直して来い。
全部わかった上で嫌味を書いてみただけなのでは? OSもわからんし監視処理「的」ってのも意味不明だけど forkしてexecして親からpid監視すりゃいいンじゃないの? って既に他所で開いてあるブラウザを監視したいとかいう話だったら もう知らんけど。
282 :
デフォルトの名無しさん :04/09/15 13:12:17
ちんぽに真珠を埋め込みたいのですが、 おすすめは何ですか? ついでに手術してくれる病院も 紹介してもらえるとありがたいのですが。
>>282 悪い事言わないから。
真珠を埋める手術受ける前に、
真性包茎の手術を受けろ。
な?
>>277 mod_perlみたいなのを使った場合は知らんけど、
普通cgiはブラウザ~で読みだしたときの状態を見るものだとおもわれ。
よってブラウザリロードをしてとりこむ。->鯖のプロセス自体はその都度終了。
監視処理とやらは常駐処理になるだろうから別プログラムにせにゃならん筈。
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
perlってXPでもインストールしないとできないんですか? 学校で聞いたらXPだと入ってると言われたんですが・・・ 馬鹿な質問すいません
ActivePerlでも入れませう、基本だぞモルァ
こういうやりとりを想像してみるテス㌧ 287 「先生、学校のパソでもパールとかできるんすか?」 クソ先公 「(あ?実習室にはXP機があるし、図書館にはiMacがあるが、どっちの事だ? XP機には漏れが Perl をインスコしておいたが……) おう、Perl なんかよく知ってたな。どこで使いたいよ?」 287 「あー、実習室のパソで……」 クソ 「あそこなら使えるぞ。自由に使え」 287 「押忍! アリガトッシタ!」
287が脳内変換したに一票
>>287 の学校には、
XP以外に98やらMeやらMacやらLinuxやらが入ってるPCがあり、
XP(が入ってるPC)にはPerl(インストールしておいたから)入ってるよ。
の説明を受けたのをXPには最初から入ってる物と勘違いしたに1000カノッサ
ここでくだらん予想しても・・・(w
>>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 です。誰かアドバイスよろしくお願いします。
XPだってさ
298 :
デフォルトの名無しさん :04/09/15 23:40:36
ネタにしか見えねぇし
携帯絵文字の変換で悩んでいます。
ボーダフォンの絵文字変換の部分らしき部分の抜粋です
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 順序良く並んでいれば連番で問題ないのですが、変換されると番号が飛びメチャクチャになります。
何か良い方法は無いでしょうか?
ログにはウェブコードで保存されているようです、「$GBB(←$GBB※)」 ←と※は半角(?)で、※の部分は小さすぎて見えませんでしたので推測です。
仕事上の問題をタダで解決しようなんて甘い考えはいけないよ
抜粋ではなく、全体を見せてくれるのならば直してあげるのになあ。残念。。
>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もおかしいよね。。。
>>303 仕事ではありません、まぁ甘いと言われても仕方ありませんが
>>304 全文でもいいのですが、サブルーチンなので意味が無いかと思いまして
>>305 出来ればおかしい部分を、助言して頂けませんでしょうか?
助言が得られなければ、違約金覚悟で契約してきますが..貧乏なもんで
↑のコード片だけ見るとあまりに奇妙なロジックだから他のサンプル探したほうがいいかもね
仕様はよくわかんないけどとりあえず305の指摘にある \45は\x45の間違いだろう。そこ直してみれば? gはなくてもいいけどあってもいいはず。 しかし「変換されると番号がとびめちゃくちゃ」と いわれてもなにがなんだかさっぱりわかんない。 具体的に例をあげて、これを変換したらこうなった けど自分はこうなることを期待しているというのを はっきり書かないと。
$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 までしか使ってないし、なんで妙な挿入になってんのかも謎
$_ = '<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のアイコンって自分の好きな物に変更できるのでしょうか?
>>311 ドキュメントくらい読めよ。またはpp --helpとかさ。
pp --icon=myicon.ico script.pl
つーかあの程度の数なら素直にテーブル組めばいいのに あのコード片じゃそこまでややこしく画像ファイル名を作る理由がワカランからもうこのネタはお終いじゃ
314 :
デフォルトの名無しさん :04/09/16 21:17:59
>>313 文字コードに対応した絵文字の画像ファイルがあらかじめ
用意してあるんじゃないかと思われ。
>>314 リンク先のHTMLソース解析して、ハッシュにでも突っ込むのが一番早いと思われ
316 :
デフォルトの名無しさん :04/09/16 22:48:20
perl -ep と perl -pe で挙動が違うのはなぜ~~?
>>316 -ep は -e "p" とするのと同じ意味になる。
-e は後ろに引数を取るオプションだから、後ろに変なの続けちゃダメでしょ。
perl -e "print q[マンコ 得ろ杉]"
319 :
デフォルトの名無しさん :04/09/17 02:13:36
釣れたわぁ
「マンコ 得ろ杉」を狙い打ち?
perlで mkdirで新規ディレクトリを作成し、そのディレクトリに新規ファイルを作成する事までは出来たのですが そのファイルのパーミッションを変えることが出来ません。。 chmodでも変わらないのですが、何かいい方法ないでしょうか? よろしくお願いします
そのディレクトリのパーミッションは?
レスありがとうございます 一応777にしてますです
chmod() の返り値(変更が成功したファイルの数)をチェックし、 ゼロだった場合は $! を表示。で分かるかも知れず分からぬかも知れず。 つうか書き捨てのスクリプトはともかく、なにかちゃんとしたものを 作ってるんだったら外部に作用する関数(ファイル操作とかDBとか) を呼ぶときは必ず失敗か成功かチェックするコードを入れる癖をつけるべし。
325 :
perlマン :04/09/17 10:45:56
perlで 3つの変数(それぞれ変数の内容は整数値です)の $a,$b,$cがあったとして 変数$a,$b,$cの中で一番大きい値を持つ変数を検出ぢ 最終的に print (一番大きな変数)と表示させたいのですが どのようにしたら 一番大きな変数表示が出来るperl スクリプトができるでしょうか?
>>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);
use DBI; $user = 'aaa'; $passwd = 'bbb'; $db = DBI->connect('DBI:mysql:localhost',$user,$passwd); $sth = $db->prepare("SELECT * FROM hoge"); これ実行するとInternal Server Errorになるのですが 最後の$sthの行を消すとエラーはでないのです なぜでしょうか?
>326 等号も入れたほうがいいかも知れない >327 $sth = $db->prepare("SELECT * FROM hoge;"); だと思われ
>>327 エラーログ見ろよ。Internal Server Errorになったときの基本だ。
>>328 なるほど!
と思ったけどそれでも無理でした。。
>>330 エラーログ見ろよ。Internal Server Errorになったときの基本だ。
と言うか接続が出来てないようです 今日はじめてなもので もう少し勉強してからきます
どうしてエラーログを見ようとしないのかね┐(゚~゚)┌ そんなに見たくないもんなのだろうか。
use DBI; が使えるかどうかってどうやってわかりますか? 借りてるレンタルサーバーで使えるかわからないので よろしくおねがいします。
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);
>>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
のように出力)する」にはどのようなプログラムを書いたらよいのでしょうか。
*同じファイル内だけで同じ塩基配列の遺伝子があってもそれは表示しません。
言葉足らずですみませんが、どなたか方針だけでも教えてください。
びっくりするほどDNA びっくりするほどDNA
うんうん。安上がりだと思ってここで聞いてるのかもしれないけど 初めてのPerl読んだほうが手っ取り早いような気がする。 きちんと考えずに書くけど、ハッシュと正規表現が身についてれば どうにでも料理できるンじゃないのかな、この手の問題は。
塩基配列厨Uzeeeeeeee
>>344 お約束っつーか、それを言うのはただの嫌な奴だな。
347 :
デフォルトの名無しさん :04/09/19 04:14:57
perlで数値計算しました。私はヘソタイですか?
某国立大学医学部みたいにウン十億円の医療情報システムを Perlで作ろうとするのよりはいくらかマシ。
PDL
350 :
デフォルトの名無しさん :04/09/19 18:20:03
JPerlからActivePerl5.8.4に変えたところ日本語をうまく認識してくれません (パターンマッチに日本語を使用) 5.8以降は日本語に対応しているとのことですが、Activeで日本語を使うには 別に設定が必要なのでしょうか?
sjisでパターンかくと問題がよく出る。
352 :
デフォルトの名無しさん :04/09/19 19:00:13
>>350 use encoding 'shiftjis';
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のプログラム中で実行したいと思っているのですが、対策がわかりません。 どなたか御存じの方おられませんか?
>>355 system "/usr/bin/psql -h 0.0.0.0 -p 5432 -U user -n database < SQL.txt |";
?
357 :
355 :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
>>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;
>>360 すいません、パイプは要りませんでした(-_-;)
それとおっしゃる通り、system関数を使ってみたらアッサリと出来てしまいました。
かなり感動しました。
それにしてもopenだとなぜ1行目のみで終了してしまうのでしょうか・・・・・。
もう少し調べてみます。
本当にありがとうございました
>>360
PAR0.75で、 require './jcode.pl'; みたいなのが在っても自動的に入らないんですけど、 jcode.plを入れるオプション教えて下さい
1にマニュアル 2にgoogle 3,4が無くて 5に2ちゃん
>>361 ひょっとしてopenしてるだけで読んでないとか?
それだとpsqlの出力がブロックしちまうんじゃないかと...
>>364 どうもopenして1行目は読んでるようなんですよ。ただ、1行目の命令文を実行した(psqlが1行目を処理完了)
時点で終了してしまっている感じです。systemだと問題なかったのですが・・・・。
>>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ファイルロック解除 こんな感じじゃダメですか? だめならどこがだめなんでしょうか?
ファイルロック(flock?)と排他制御の概念がごっちゃになってる。 1と14のロックは、2~13の処理(クリティカルセクション)を排他するためのものと 理解すべし。つまり、それでOK
369 :
デフォルトの名無しさん :04/09/21 23:35:23
>>353 ありがとうございます。
use encoding 'shiftjis';
によりActive5.8は日本語対応してくれるようになりました。
ところが・・・
何故か途端にファイル入力が出来なくなりました。
ファイルの読み込みの段階で失敗してしまいます。
ソースそのものはJperlで動作確認済みです。
Activeの場合はまだ、設定が必要なのでしょうか?
>>369 ぶっちゃけよほど簡単なソースでないかぎり、Jperlで書いてたような
Native-ShiftJisとも呼べるようなソースは今のPerlではそのままは動かんです。
結局大抵の場合は、エンコード変換の記述( decode~ encode~ )
が必要となると思いますよ。
むしろencoding モジュールはおまじないでもなんでもなく、utfフラグを
着けたり消したりする作業を肩代わりするだけなので、
『自分のコードがshiftjisで読み込んでいるものもshiftjisだからこれで一致するだろう』
とか言う場合に、encodingで指定していると、全く一致しなくなるので、余計に混乱するかも。
>>369 >>350 に「(パターンマッチに日本語を使用)」と書いているが、
SJISのコード配列を前提にしたものが混じってない?
例えば、 「漢字」にマッチさせようとして[亜-黑]など使ってない?
ファイル形式は SJIS でも UTF-8 に変換して処理するから、
これでは動かないよ。
>>369 あっそうか。
> ファイルの読み込みの段階で失敗してしまいます。
ということだったね。ソースを分割/単純化していって、
どの行で障害が起こっているのか特定してみてよ。
その行を示せば有効なアドバイスがもらえるだろう。
>>369 use encoding ~はスクリプトおよびSTDIN,STDOUTについては
面倒見てくれるけど他は何もしてくれないはず。
ファイルからutf8以外の文字コードで読みたければ、use open
であらかじめデフォルトを決めとくか、openのときに明示する
必要がある。
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です
>>369 ファイル名が日本語だったりすると駄目っスよ?
>>374 nmake.exeが入ってないっしょ。
別にgmake入れても構わないんだけどな
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行でうまく書けませんか?
行数?
最近触っていないが、$#{ [`ls`] } でいいのでは。
382 :
デフォルトの名無しさん :04/09/23 05:58:24
おそらく print scalar @{[`ls`]};
>>377 cpanのシェルで
cpan> o conf
の結果は?
makeのトコ空欄になってたりしない?
空です… 後コンパイラって何を使用すればいいのでしたっけ? 有料のは使えません…
386 :
デフォルトの名無しさん :04/09/23 12:46:56
>>385 君の場合あきらめてCygwin使うかVineLinuxでも入れた方が早いよ
>>385 cpan> o conf nmake
とかすれば設定されるでしょ?
これ以上はcpanのドキュメント読んでちょーよ。
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でも入れた方が早いよ
しっつもーん file1.txt 山田 太郎 国語 75点 数学 80点 岩鬼 正美 国語 80点 数学 60点 file2.txt 山田 サチ子 国語 90点 数学 55点 里中 智 国語 85点 数学 23点 ってなファイルがあるときに 国語の点数でソートかけるのどうしたらいいの? わからないところは @file1=<FILE1>; @file2=<FILE2>; の@file1 と @file2 を連結して@file にしたい ってところデス。質問の本質がソートじゃないですねスイマセン。 別のファイルに出力してそれをまた読むというのがさすがに頭悪い気がするのでお知恵を拝借に来ました。 どーでもいーけどスペースをセパレータにしたら file3.txt じっちゃん 国語 34点 数学 34点 だったときに困るなぁ。 苗字や名前が「国語」でも困るなぁ。 まぁそれはパールとは関係ないからパスで。 よろしこプリーズ
push
やっべ4文字で処理された 391 thx!
>392 とその他カチンと来た人達へ すんまへん 以上
>>390 > @file1 と @file2 を連結して@file にしたい
@file =(@file1,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.
腐ったPCは窓から
ファイル書き込みエラー: C:\perl\(省略)\EventLog.dll そのディレクトリにアクセスすることを確認してください。 和訳してやったぞ。
配列リファレンスのスライス指定なんですが、 えー、、なんて言えばいいのかな?以下のような事出来ますか? 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 の所で巧くスライス指定したいなと思うのですが、 指定方法がわからないのです。
>>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";
(´・ω・`)モキューン
>>401 そうだったのか、ありがとう
勉強になりました
>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)がフラットになるなんて知らんかった_| ̄|○)
>>403 戻り値が必要なければfor(each)を。
使い分け論はforeachとwhileだけにして下さい
↑馬鹿じゃね?コイツ(爆笑)
矢印がRubyにかかってるあたり、わかってるなぁ(^-^)
ワラタ
410 :
デフォルトの名無しさん :04/09/26 04:44:47
ActivePerl 5.8.4で、"伊藤 伊藤 ・・・"とUTF-16LEでファイルに 書き出すと文字化けするんですが、なぜでしょうか? UTF8なら問題ないです。 どうも特定の文字で化けるらしく、「伊」のほかに、「上」「休」でも化けるようです。
>>410 UTF-16 では '伊' eq "\x0A\x4F", '上' eq "\x0A\x4E";
なので binmode 忘れぐらいしか思い当たらないなぁ。
'休' は分からん。
PerlからCの関数を呼ぶとか(DLLなどを利用)、逆にCからPerlを使うのって出来ますか? やりかたもきぼんぬ
413 :
デフォルトの名無しさん :04/09/26 11:35:01
PerlでWEBページをダウンロードしたい場合、 一般的に使われているライブラリは何でしょうか。 それともみんなSOCKET使ってダウンロードしてるんでしょうか。
>414 どうも
>>411 すいません「休」でなくて「養」でした。ほかに「*」も。
ぜんぶx0Aがらみですね。
↓これで「伊藤」以降が化けるんですが、どこか間違っていますか?
(UTF-16LEをUTF8やshiftjisにすれば大丈夫なのですが)
use utf8;
open OUT,">:encoding(UTF-16LE)","kekka.txt";
print OUT "佐藤伊藤後藤";
なかばっか
>>417 どうもありがとう。わかりました。
binmodeって文字コードの指定のほうかとおもって。
CRLF変換の抑制のために別に書かないといけないんですね。
ぺrゅー0ざはしね
>>417 binmodeしなくちゃいけないのはバグかもね。。。
Jcodeメーリングリストとかに報告するのがいいかも。
>>421 確かにバグだね。
でも、Jcodeメーリングリストって機能してるの?
ウイルスの投稿があっても平気の平左だし、
読むの止めたからどうでもいんだけど
機能してたと思うけど>Jcode ML あるいは、danさんに直メールでもいいんじゃね?
おかげさまで当座の問題は解決したんですが、 UTF16のときだけ変な挙動だなと思ってたんですが、バグでしたか。
アドバイスする方にも仕様だかバグだか見境付いてないだなんて、 最近のバージョンの Perl は怖くて使えませんね。
Perl歯くそ
chomp ↑これってなんて読むんですか? ちょんぷ?
428 :
デフォルトの名無しさん :04/09/27 01:18:26
$str="12345678"; を @integer=(0x12,0x34,0x56,0x78) のようにしたいのですが動作すればOK? 要するに @integer = CreateByteArray($str); みたいのです。
@integer = map { hex } $str =~ m/(\d\d)/g;
>428 いまいちよく分からんがこういうこと? @integer = map { hex } unpack "(a2)4", "12345678";
431 :
デフォルトの名無しさん :04/09/27 02:19:18
すいません、webで検索していますが、いまいちpack、unpackがわかりません。 pack -->リストからスカラをつくる unpack-->スカラからリストをつくる であってます?
#!/usr/bin/perl $invader = "47494638396115001500b30000000000949494ffffffffffffffffffffff". "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff". "ff21f90401000000002c000000001500150000043e10c82983b5346b70f1". "d65df8516107065559a69eba7257cab6284ccf35edee7c6f4ebedaa9f709". "8e6019cf51291bfd80b1cd73361456495169f6c8ed7e22003b"; print "Content-type: image/gif\n\n"; print pack("H*",$invader);
>>421-422 そりゃ、OSの実装上の問題だろ?
バグって言わんと仕様っていうんだよ。
>>425 >最近のバージョンの Perl は怖くて使えませんね。
┐( ̄ー ̄)┌ 昔からそーいう仕様だけど?
素人?
┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌ ┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌ ┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌ ┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌ ┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌ ┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌ ┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌ ┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌ ┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌ ┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌ ┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌ ┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌ ┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌ ┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌ ┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌ ┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌ ┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌ ┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌┐( ̄ー ̄)┌
>>433 ええ、素人ですよ。素人には怖くて安心して使えないと言ってるわけなのですが、だからなんなんでしょうか?
>>435 知らないなら憶えればいいんであって、そこを自慢されても痛いだけだぞ。
437 :
デフォルトの名無しさん :04/09/27 07:20:18
grep をワンライナーで書ける?
>>437 perl -ne 'print if /REGEX/' foo.txt
これ、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');
>>439 確かに落ちるね。同じく5.8.4(ActivePerl build810)
=(copy constructor)を定義すれば落ちないので原因はfallbackされた=のようだが…
perl5.8.2 on MacOSX 10.3.5(ppc) perl5.8.5 on linux 2.4.26-0vl16(i686) ともに墜ちますた。
> =(copy constructor)を定義すれば落ちないので原因はfallbackされた=のようだが… パッケージ外から += を使うと問題ないんだよね。 # その例だと $p += 'a' とか copy constructor を定義してもいいんだけど、コピーの必要ない作業だし…(´・ω・`)
>431 別に間違っちゃいないけど付け加えるなら pack は「特定の形式にデータを詰め込む」 というニュアンスがつく。unpack はその逆でばらす。 しばしばバイナリデータの読み書きに利用される。
いい気味だ。ざまあみろ
500,500(例)の位置にマウスポインタを強制移動(クリック)させる処理を作りたいんだけど。 ググっても過去ログ(1~6箱目)見ても分からぬ。 多分マウス、キーボードの操作を実行するアプリケーション(APIって言うのかな?)の中のメモリを書き換えれば良いんだろうけど。 生憎此方にある参考書と言えば入門用だけ。機会あれば図書館でラリー・ウォール氏の本でも借りてみる。 Cと同じく変数の頭をアスタリスクで・・・違うか。 windowsXPですがどうでしょ。 プログラミングの常識として可笑しい所は指摘しつつ教えてくれれば幸い。
>447 まずは国語から。君にプログラミングなんて100年はやい。
て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の部分を読んでも、そのようなことは書いていないのですが…。 分かりやすく説明してあるようなサイトなり本なりあったら教えて下さい。
ここ、粘着常駐しとるな。 まっとうな解答する振りして、本に書いてる事を絶対だと思うボケ。
1970年1月1日からの秒を取得するのはtime関数ですが、 その逆をする関数はありますか?
>>452 この場合はseekじゃないな。
ポインタみたいなもんと理解汁。
>>455 追記
@_=<LOGFILE>;
a = 1+ shift;
$b = 1+ shift;
$c = 1+ shift;
意味変ってくるけどニュアンス的にはこんな感じ。
>>455 , 456
何となく判った気がします。
seekは関係なく、スカラー値にファイルハンドルを代入しようとするからですね。
となると、seekの存在意義がよく分からないのですが、
それはファイルポインタを理解してないせいだと思います。
その辺はちょっと自分で調べてみます。
ありがとうございました。
るす得取を秒のらか日1月1年0791
Time::Localとかtimelocalって書くだけで助けになるだろうに、 みんな意地悪だなぁ
このスレのうち、クックブック読めばすむのに・・・ってのは全体の何%ぐらいなんだろ?
そいやークックブック第2版出たようで また2冊化だよ
らくだ本も2冊だけど、 基本的な言語仕様とリファレンスはVol.1、 応用部分をVol.2とかで分けて欲しかった。
>>464 内容かなり変わってるのかな?
流石に旧版持ってると二の足を踏んでしまう
>>462 いやlocaltimeの逆っていわれりゃそういう回答だと思うけど、
timeの逆っていわれてもねぇ?
まぁ、クックブックがあれば、初心者でも玄人を唸らすようなコードを埋め込むことができるが、 コピペしたのがバレバレだしちゃんと意味わかってんのかと突っ込まれたりするだろう。 でも、クックブックは良いと思う。 他言語でそれなりのレベルに達してたが、急遽Perlが必要になった人には特にうってつけだね。
>>449-450 理解してるにも関わらず言ってるんだろうけど。
君らに指摘して欲しいわけじゃないからゴメンな。
ここはもう質問の場じゃ無いようだ。
スレッドタイトル修正宜しく。
そして厨房は寝ろだのそんな中傷レスが付く訳だ。
>>469 日本語もへんだが、何したいのかもわからねぇってことだろ?
マジレスしといてやるとpureperlで出来ね。
そんなモジュールあるんかもしれないけど、
儂は知らんし、スレ主はモジュールの入れ方も使い方も解らんでないだろうか?
>>457 >seekの存在意義がよく分からないのですが、
使うんなら
seek(LOGFILE, 0, 0);
read(LOGFILE,$hoge,$byte);
$a = 1+ $hoge;
$b = 1+ $hoge;
$c = 1+ $hoge;
みたいにデーターの読み込み開始位置をseekで指定してとreadで何バイト読み込むとかいった風に使うと
漏れは理解してるんだけど、他に面白い使い方ってあるんかな?
>>452 は「何で自動的に一行ずつ読み込まれるのか分からん」のだろ。
それはseek関数とは全く関係なく、<>が「行入力演算子」だからだ。
ファイルハンドルは内部に読み込み位置のポインタを保持している。行入力演算子は
読み込みが起きると同時に、ポインタを読み終わった次の位置まで進める。
seekはその内部ポインタの移動命令で、そのコードでは読み込み開始前にポインタ
位置を先頭に初期化しているにすぎない。読み込むたびにポインタが移動するのは
行入力演算子の機能。
詳しく言えば、そのコードでは行入力演算子がスカラーコンテキストで評価されている
から一行入力になっているが、リストコンテキストになると行入力演算子はファイルを
一気に全部読み取って、行単位で分割した結果をリストにして返して、ポインタも当然
ファイル末尾まで一気に移動したりするんだが、そのコードには関係ない話だな。
以上。
>>466 encodingとかの5.8の新機能の記述を大幅追加、ってoreilly.comにあったので
今年の1月くらいにとりあえず尼で原本買ったけど、
perl encoding でぐぐってgetできる情報の半分もなかった。ガクリ
XMLとmod_perlの追加章目当てでないのなら
第1版持ってるヤシには買いなおし不要だと思う。
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"; ・ ・ ・ って感じの構造体(?)に格納するコーディング方法がわかりません。 どなたかご教授ください。
>>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;
}
}
とかでもいいとは思うが。
>>472 ありがとーございます。
初めてのPerl、再読しますorz
がんばれや。Perlは誰も拒否しない。
>>475 >>476 がしっかりした回答をしているが、補足。
× @list[1][4] = "データ9";
○ $list[1][4] = "データ9";
これを理解することはPerlを使っていく上でものすごく大事なこと。
480 :
デフォルトの名無しさん :04/09/30 06:15:31
perlのスクリプトは初めの改行コードがバイナリだと動きませんが、なぜですか? そんなの、perl本体のプログラムが融通聞かせたらいいだけの話だと思うんですが。
アホちゃうかw
482 :
デフォルトの名無しさん :04/09/30 07:02:23
ムカついたのでもういいです
(´・ω・`)
>>480 shbangのことなんだったら、Perlは関係ない。
485 :
デフォルトの名無しさん :04/09/30 08:58:03
>初めの改行コードがバイナリ 意味不明杉手和歌利魔線
円
>>478 語力が無いと言うだけで弾かれたのですが。
Perlは素晴らしい言語. 変数名に$とか@とか%とか付いてて超カッコイイ.
>>489 そこら辺読み易くて良いよね。
コンパイルも不要だから手間要らないよね。
でも大掛りなプログミングには向いていない希ガス。
ちゃんとOOで書けば大がかりなプログラミングもOK
モジュールも多いし、コンパイラも色々ある. まぁPHP(ry
cpan最強すぎ
>>489 その発想でいくと、変数名に$とか%とか#とかが付くN88BASICも超カッコイイなw
>>494 N88BASICは行番号もつくからかっこいい!
N88BASICはコメント込みでMAX64KBでかっこいい!(どれだけ苦労したか(w
変数名に$とか%とか#とかつくのはN88というよりはMSなBASICの仕様じゃないっけ? (BASIC一般かどうかはしらない) あと、64KBも使えませんよ? 32KBっしょ。 中間コードに変換されると縮んだ記憶があるので、いわゆるテキストで32KBではないよね。
スクリプト言語全般
おまいらスレ違い
499 :
デフォルトの名無しさん :04/09/30 21:30:30
初歩的なですがお願いします。 画、音楽、小説などのカテゴリーごとにベスト3をアンケートしてベスト1には3ポイント、 べスト2には2ピント、ベスト3には1ポイントのようにしてカテゴリーごとに順位集計して ランキングのように表示するCGIを使いたいのですがこれに近いCGIがあったら、 教えてください。また、ランクごとにリンクで飛べるようにもできる方法があればおねがいします。 どうぞよろしくおねがいします。
他言語から移行してきた者です。スカラ・配列・型グロブなどは理解できたのですが、 内部でのデータの扱いに四苦八苦しています。Perlでは、 ・構造体や独自の型宣言ってできますか? ・構造体の配列(或いは配列の配列、多次元配列)を扱えますか? ・連想配列の返値に配列を返すことはできますか? ポインタを使って行っていたような作業をPerlで行うのはどうすればよいのでしょうか。ご教示ください。
もう秋だよ
>>502 大変ためになりました。ありがとうございました。
いざPerlを(初心者なりに)使いこなそうと思うと 「はじめてのPerl」レベルじゃきっついなー。 CGIのサンプル集とかはいっぱいあるけど、 Perlのサンプル集って意外とないですよね。 今のところ、cookbookほどのレベルは求めてないんですが、 主にテキストファイルをいじったりするのに良いサンプル集ってありますか? (宮川氏訳のも求めてる以上って感じで、まだ早いかなと…) 目的としては、実務利用と「はじめてのPerl」の実践的復習・応用力強化を行ないたい って感じなのですが、参考書籍・サイトなどあったら是非。
508 :
デフォルトの名無しさん :04/10/01 11:17:42
ファイル検査の-fは通常ファイルかどうかって書いてあったんですけど 通常ファイルってどういうファイルのことなんですか?
たまーに、システム管理のためのPerl みたいなドキュメントを書こうと思うんだが
いざ書こうと思うとネタが出てこないんだよな
普段は意識せずに使ってるから尚更思い出せなくて
>>506 テキストファイルをいじる練習なら、適当なログファイルを加工するのが良い
ApacheのログからURLをヒット数でソートして表示する、
その際にリファラが内部からの物は除外して、外部からの訪問者が多い物だけを対象にする
サーチエンジンからのアクセスは除外、ワームっぽいアクセスも除外する
とかね。
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>
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が出ます。(当然)
>>512 本当にその二行で再現する?
こちらの環境 (ActivePerl Build 810 on Win98SE) では
どちらも \x0D\x0A が出力されたよ。
>>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のインストールについてお尋ねしたいのですが、 こちらでよろしいでしょうか?
517 :
初心者 :04/10/01 21:33:15
や、それができないんですよ。 OSはXPで、ノートのCドライブに「perl」っつーフォルダ作って、 んで開封。で、インストーラー使うんですけども。なんか最後のほうで 「このパッケージはダメです」みたいな文が出て、アンインストールしてしまいます。
腐ったPCは
519 :
デフォルトの名無しさん :04/10/01 21:38:35
じゃあCygwin入れて、その上でPerl使いなよ。 DOSなんて使いづらいことこの上ないし、その方がずっと快適だよ。
>>514 レスどうもありがとうございます。
今は時間がなくて試せないので、後ほどやってみますね。
521 :
初心者 :04/10/01 21:43:13
すいません、自分自身はプログラムのこと全然わかりません・・・orz ググってもみたんですが、同じような症状に出会わないので。 また、どのver.でも同じエラーになります。 AS(?)でインストールしたほうがいいのでしょうか?
>>517 winにmsi用のインストーラが入ってねんだろ
スレ違い板違い
523 :
初心者 :04/10/01 22:01:15
>522 それは95、98、NTのことでしょうか? 自分のはXPなので、インストーラーは入っているはずなのですが。
>>469 > 多分マウス、キーボードの操作を実行するアプリケーション(APIって言うのかな?)の中のメモリを書き換えれば良いんだろうけど。
(この話はWindowsであることが前提)
残念だが、アプリケーションの中のメモリを書き換えることも
APIの中のメモリ(そもそもAPIは概念,総称とかそういうものだろう)を書き換えることもない。
Win32APIの関数で、カーソルを移動させて、クリックをエミュレートする。
> 生憎此方にある参考書と言えば入門用だけ。機会あれば図書館でラリー・ウォール氏の本でも借りてみる。
Perl+API(Win32環境ではWin32API)について解説していない本を何十冊読んでも
解決はできないだろう
> Cと同じく変数の頭をアスタリスクで・・・違うか。
×
> プログラミングの常識として可笑しい所は指摘しつつ教えてくれれば幸
回答者の神経を逆撫でするような態度は如何なものかと思う
Perl+Win32(どっかが本だしてたかな)について勉強してきな。話はそれからだ。
>>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で」 すいません、本当にわからないんです。 助けていただけないでしょうか?
IO::Socketでサーバーからデータを取得すると、 a8やら0dやら関係無い文字列が付与されたデータが返ってくるんですけど、どうにかなりませんか?
>>529 エスパーさんなのでなんとか質問の意味が想像付くけど、意味不明の遺言のようですね。
HTTP/1.1の仕様でも読んでみましょうね。
>>531 たぶん3.6転送コーディングあたり。
けどLWP使った方が楽だと思うよ。勉強にはなるから
一度ぐらいはやってみるのもいいけどね。
>>532 さん
ありがとうございます!
こういう事だったんですかー
>>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
のような感じで表示するためのアドバイスを頂けたら嬉しいです。
結果表示の方法には特に拘りません。(新しいウィンドウに表示、テキストエリアに表示等。。。)
536 :
初心者 :04/10/02 19:25:34
他の板でスッキリわかりました。 「そんな板で聞くから悪い。あそこ厨しかいねえじゃん」 と思いっきりバカにされました。反省しようと思います。
うーん・・・もうちょっと考えてきます_no
>>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(); } のようにコールバックを登録できるはずだ。
あとは自分で試行錯誤してみてくれ。
>>539 様
おぉおお・・・わかりやすい解説ありがとうございます。
自分なりにテキストボックスに入れるために色々やっていたのですが、かなり見当違いのことをやっていたようです。
今回は私のような者にお付き合い頂き、本当にありがとうございました。
貴方のアドバイスを無駄にしないようにがんばって勉強したいと思います!
CGIから別ファイルのCGIをPOSTを使ってデータを渡して呼び出す方法とかあるでしょうか? Submitボタンは使用しないで、POSTでデータを渡す方法です。 よろしくお願いします。
Perl初心者です。 外部コマンドの標準出力を読み取りたいと考えています。 そこで open(IN, "command |"); while (<IN>) { print $_; } close(IN); としました。 コマンドの処理がすぐに終われば問題ないのですが コマンドによる出力が断続的に延々と続くので逐一表示していきたいのです。 マルチスレッドにしなければいけないのかなと思いつつ、 マルチスレッドにしてもどう書けば実現できるのか 皆目見当がつきません。 どなたがご助言をお願いします。
>>542 $pid = open(PIPE, "|-");
if($pid){
exec("command");
exit();
}else{
while(<PIPE>){
print $_;
}
}
545 :
デフォルトの名無しさん :04/10/03 00:22:58
やっぱ、perlはワンライナーが最強にカコイイでしょ?
パールのモジュールの質問って ここでもいいんですか?
内容次第だろうな。
>>544 即レスありがとうございます。
しかしながら解決に至りませんでした。
最初の質問が言葉足らずで申し訳なかったのですが、
コマンドによる生の標準出力は(できれば)抑えて
Perlでその標準出力を読み込み、そのデータを整形してから
出力したいと思っているのですが、できるんでしょうか?
549 :
546 :04/10/03 00:36:44
日付処理系のモジュールって皆さん大体何を使われてます? というかどれが便利ですかね? Data::Simple使ってたんですが、最近時刻の処理もすること多くなりそうで Time::Pieceに乗り換えようかと思っているのですが 日付のモジュールはこれがいいよ!みたいのがあったら教えてもらえると嬉しいです
>549 Data::Simple -> Date::Simpleです。すんまへん。
>>551 すみません。意味がわからないです(汗
もうすこし詳しくお願いします。
てか検索したらありました。申し訳ないです。
>>548 外部コマンドが出力を標準エラーに吐き出してなければ
全部perlが吸い込んでるとおもうけど?
stderrなら551氏のとおりですね
そうなんですか・・・・ もうすこしがんばってみます。
558 :
デフォルトの名無しさん :04/10/03 00:57:12
NTPを使わずに他マシンと時刻を同期したいです。 できれば言語はperlで! どんな方法あります?? 環境はlinux。相手ソラリスです。
>>558 NTPっぽいサーバとクライアントを作れば?
>>557 いや、GUIじゃなくてCUIです。
例えば取り込んだコマンド標準出力を
$stringに代入しようとしたら、何を代入すればいいんでしょうか?
ああ、なんか自分がアホすぎて鬱になってきました。 いまだ理解不能。
$pid = open(PIPE, "|-");
if($pid){
exec("command");
exit();
}else{
while($string = <PIPE>){
print $string;
}
}
坊主、これでいいか?
>>558 NTPを使わない/使えない 理由は?
NTP使うのが一番楽だし、上記の理由によっちゃPerlでもダメって事もあるぞ
>>560 544氏の例だと
$string = <PIPE>;
改行ごとするっと飲むなら
undef $/;
してから
$string = <PIPE>;
べつにフォークする必要がなくても飲み込みかたは同じです。
>>563 ファイアウォールがntpのポートをブロックしてて
届かないんです。しかたなくtelnetして時刻とりだしているんですが
ログインする時間のタイムロスで多少時間ずれるのが
なんとなく嫌だなぁ、と。。。
よく見たらなんか警告がでていました。 '-' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 これはなんなんでしょうか? あと、どうもelse文のなかに入っていってないような気がするんですが。
Windowsなら最初にそう書け、ついでに二度と来るな
>>565 ポート変えて動かせない?
他のポート空いてないとPerlでサバ/クラするにしても無理だぞ
>>567 そうだったんですか・・・
本当にすみませんでした。
>>567 かわいそうに。。 (w
私もwinは分かりませんが(スレッドも)
Cygwinとか入れればなんとかなるんじゃない?>566
ちなみに |- は自プロセスをforkして外部コマンドを並列で動かしてねん、
って意味だよ。おじゃま虫でした。たったった~
>>568 空いてるのは20,21,23だけなんです。
pingさえ弾かれる。。。
あ、あと80もOKだ。
>>572 httpd動いてるのならCGIで時刻もらって、
dateコマンドでいいんじゃない。
>>572 !
そか、そうだね!!ありがとうやってみる
572じゃなかった、573さんありがとう
576 :
デフォルトの名無しさん :04/10/03 04:22:25
>>570 winも分からないのに・・・
かわいそうに。。 (w
うるさい市ね
578 :
デフォルトの名無しさん :04/10/03 12:15:28
市ね ってなに? ”死ね”ってこと? 頭悪いな~
バージョン5.6から新登場! 我らが宣言 our!! って使っている人いる!? myがあればほとんど事足りるし いまいち心の琴線に響く使い方がわからんのだが。
use strictしたらいっぱい怒られたので使いました
ブタはどこまでもブタ
>>578 きみ良く会社でつまらないって言われるでしょ?
our って使っている人いるとか聞くようなものじゃないと思うが。 結構特殊なところで使うし、packageを変えなければ使わないし。
>584 わからないんだよ、そっとしとくのがいいよ・・・・。
Perlに非常に興味があるとですが、DOS窓に慣れていないボキにはActivePerlは敷居がたかいぽ。 タダで、GUIで実行できるIDEのようなものがあれば教えてくらはい。 できればJapaneseがいいです―
587 :
デフォルトの名無しさん :04/10/03 20:07:55
そんなもの、ない
まじか 所詮Perlなんか俺には無理なんだな・・・・
589 :
デフォルトの名無しさん :04/10/03 20:17:12
はい、そうです
自分で探せない人にプログラムは向かない気がする。
>>584 そうなんだよね。
use vars $hoge を置き換える以上のものには思えないんだ。
たとえパッケージに使っても、せいぜいパッケージスタティックな変数を
use vars しなくてもいいよってその程度しか感じられないよね。
身近なとこだと$VERSION変数を our でできるとか...
自分でその程度のことしかやってないから「実はなんか積極的な使い道あるのかな?」
と思ってさ。
Perlみゆきのお部屋
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 その変数を本当に必要としているサブルーチン群でのみ共有出来る。
クラスまで大げさなもの持ち出さなくてもね
なるほど。使えそうですね。
ourは仕様を見て神だと思ったがなぁ
使うとコードが汚くなりそうだな。 C++のfriendみたいに
ProgrammingPerl第四版はPerl5.10が出てからですか?
この方が面白くないか? { package HOGE; our $foo = 10; } $foo = 20; { package HOGE; print $foo; }
あっ、違った。こうかな? { package HOGE; our $foo = 10; my $bar = 20 } { package HOGE; print "$foo\n","$bar\n"; }
>>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;
}
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");
$res[601-604] eq 'gomi' and die;
>>605 末尾から3番目だけですか?(w
でもって、「ひとりごとはチラシの裏にでも書いてろ」の意味が通じなかったかわいそうな
>>603 に幸あれ(w
>>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のこのあたりのことについて何か情報がありましたら
どなたかポインタだけでもお願いします。
perlで簡単メモリクリーナー perl -e 'for (1..256) { fork; }' 256の部分は搭載メモリ量をMB単位で入れて下さい。
>>609 for (1..256)の部分はwhile(1)にしたほうがいいyp
>>610 おひおひ、馬鹿をあおると本当にやるぞ
なんしろ相手は馬鹿だからな
質問です(多分難しいかと思います・・・) 現在使っているWEBサーバがHTMLのリンクによるファイルダウンロードを許容していません。 WEBサーバの設定にてリンクによるファイルダウンロードを実行できるようには出来ません。 そこでperlによりなんとか対象ファイルをクライアントPCにダウンロードさせたいのですが 良い方法はないでしょうか? # それで悩んでいる担当が先週沖縄へ新婚旅行だったのですが # 台風の為中止となってしまいました。 # さすがにちょっとこれ以上悩ませるのはどうかと・・・
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);
まさか @xxxxx が未定義で user xxxxx.co.jp になってるとか
>>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と書いてました...
>>619 >>616 の意味わかってないでしょ。 "user xxxxx\@xxxxx.co.jp" って書いてみて。
>>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);
crypt time, $$; (w
即レス、ありがとうございます
>>624 よく読んで、使わせていただきます。
>>625 すばらしいな。
分かってもらえてないみたいだけど。
>>627 13文字も出るからでしょう。。。
substr crypt(time, $$), -5;
m(_ _)m
>>628 あ、塩も100通りしか出ないか鬱。。。
んでも塩が同じになっても時間は違うんじゃない? 時刻を修正する事を考えないと。
crypt rand, $$;
>>630 time の数値を文字列と認識すると下3桁が無効になるので塩が変化しないと1000秒間同じ結果が出る悪寒。
[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を混ぜることができるん?
>>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を使用してもサブフォルダ内のファイルまでは 表示してくれません。
>>633 このようにPIDの上位2桁も変化しなければいつまで経っても(w
639 :
デフォルトの名無しさん :04/10/06 23:14:41
こんばんは。 Perlはいろいろ便利なモジュールがたくさんあるそうですが、 こういった便利なツールを簡単な例を示して いろいろと紹介してくれるようなお薦めの本はありますか?
640 :
デフォルトの名無しさん :04/10/06 23:28:26
>>640 そのとき必要なとこしか読まないせいか、いつも立ち読みだよ
便利な本だけど
642 :
デフォルトの名無しさん :04/10/06 23:40:15
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>> Perl Ruby is nanbar one!
これでそこそこまともになるかな・・・? crypt (time ^ $$ ^ unpack "%L*", `ps axww | gzip`), rand($$) ラクダ本参照w
つーかsaltが数字だけって根本的にオワットルじゃんorz
今現在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 }
>>646 とりあえず10行目の末尾にセミコロンが足りないものかと。
自分perl始めました! よろしくっす!!
回答はOKですか?
もっと駄目
>>635 えーとじゃあInline::JavaやInline::RubyはJavaやRubyを
別途インストールしなくても使えるのかな?
>>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では厳密にはマルチバイト文字は扱えないよ
モジュールのインストールに関して質問です。 使用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
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を作っています。
>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でも同じ結果でした。 なんか根本的に間違ったことしてるのかな・・・・
リポジトリを設定してもやはりうまくいかずに悩んでいましたが、 やっと原因がわかりました。 どうやら以前に使っていたv5.6.1の残骸が綺麗に消されていなかったために、 おかしな動作をしていたようです。 ActivePerlをアプリの削除で消し、残骸を手動で消し再度インストールしたところ、 うまくモジュールがインストールされるようになりました。 まさか残骸がこんなとこで悪さするとは思ってもいなかったので、 アプリの削除で消したあと残骸があるかチェックもしてませんでした。 >655,661アドバイスthx ちなみに古いバージョンを使いたかったのは5.8.4だと動作しないものがあって、 その動作確認のためです。
>658,661thxの間違いだった・・・
>>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 ----------------------------------
>>665 そのファイルの中身を全て変数の中に突っ込みまして
s/.*\<\!-A-\>//s;
s/\<\!-A-\>.*//s;
なんてことをする単純なことでは解決できないですか
while(<>){ print if /<!-A->/ .. /<!-B->/; }
668 :
デフォルトの名無しさん :04/10/08 14:00:55
669 :
654 :04/10/08 14:46:08
>>664 ありがとうございます~
かなり参考になりました。
perl歯糞死ね Ruby >>>>>>>>>>>>>>>>>>>>>>>>Perl
ちょっと訳解らないことがありまして質問です。 通常、readdirはwhile (defined($_ = readdir DAT))で読み出しますが、ディレクトリーごと削除する際に これでは動作しないことがあります。 そこで、foreach(readdir(DAT))を使うと削除可能なのですが、違いってのはあるんでしょうか? 使用環境はwindowsでPerl5.8.2を使っております。 詳しい方おられたらご教授願えませんでしょうか?
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); },
'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だとけったいだと思いますのでお知恵を拝借させてください。
foreach()はリストコンテキストでwhile()はスカラコンテキストだから。 readdirはスカラコンテキストでは次のエントリ、 リストコンテキストでは一気に残り全てのエントリリストを返す。 while (defined($_ = readdir(DIR)))で一つずつ読み出している間に 挿入削除を行えばDIRハンドルのイテレータが無効になってもおかしくない。
675 :
デフォルトの名無しさん :04/10/08 22:00:14
はぁ?
676 :
デフォルトの名無しさん :04/10/08 22:13:42
またもRuby >>>>>>>>>>>>>>>>>>>>>> Perlが証明された。
>>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 の*中身*を削除
File::path->rmtree() とか?@ディレクトリの丸ごと削除
ディレクトリを削除するのにこんなややこしいことをする方が よほどけったいだと思わなくもないが.... File::Remove使ったら?
rewinddir しる。
数字を表示させるとき,桁数を合わせて表示させるのにはどうすればいいんでしょ? C言語で言うと %2d って感じのことをしたいんだけど…。
perlでもできますが
ちと、ファイル容量の関係など特殊事情がありましてモジュール避けていたしだいであります。 ご返答有り難うございましたm(__)m
684 :
デフォルトの名無しさん :04/10/08 23:57:37
はぁ?
馬鹿ばっか
HTMLファイル中の <a href="~"> の部分から ~ を抜き出すのに一番美しい書き方はどんな 書き方でしょうか。
どうでもいい。
>686 @links = ($contents =~ /<a href=\"\S+\">/g); とかでどう?
ちゃんと試したのか馬鹿
>689 いや
692 :
デフォルトの名無しさん :04/10/09 00:14:10
はぁ?
(\S)だろ間抜け。
print "Please input file name\n"; $file_name = <STDIN>; open READ, "<$file_name"; while (<READ>) { if ($_ =~ /a/) print "$_\n"; } close READ; ファイル名を打ち込ませた後にそのファイル名を読み込み, 『a』がある行を表示させようと思って上記のプログラムを書いたんだけど, 7行目にエラーがあるって言われた。 どこがどう悪いのか教えてくれ~。
はぁ?二度と出てくるな。
さすが糞言語
おまいらアンカーつけろ
>693 アホ。それで動かしてみろ。
やっと気が付いたかw
>695 一日中PCに張り付いて「はぁ?」って書いてんだな。 哀れよのぅ・・・
>699 はあ?
「はぁ?」をNG指定しとけば読みやすくなるぞ。
686は、688の\S+に()を付ければokではないかな。 694は、{}でくくる必要が。 というか省略できなかったのか。 Perlだと大抵expression if xxx;とやるからなぁ。
>694 if文の中が1行でも {} で囲まなきゃダメだろ。
はぁ?
>703 それだと <a href=" と "> も一緒に取れちゃうじゃん。 中身の ~ だけ美しく抜き出す方法はない? なんで () いるの?
はぁ?いやマジで。
>706 あ、ごめん。いいのか。
試さずに口をきくなボケ
>707 お、NG設定がさっそく役に立ったよ。
711 :
デフォルトの名無しさん :04/10/09 00:47:37
>711 m
m?
結局あなたたちは、質問してきた初心者をバカにすることしかできないんですね。
>714 なんのこっちゃ
>>712 正規表現ですか?
foreach をつかうのかなと一瞬思ったのんですが、スカラーには使えませんよ
ね?
split
結局あなたは、自分で一つも調べようとしないんですね。
>718 こういうところで質問すんのも調査の一手段でしょ。
720 :
デフォルトの名無しさん :04/10/09 01:01:41
haxa?
721 :
デフォルトの名無しさん :04/10/09 01:08:42
はぁ?
みんなどうする?「はぁ」君は通報して規制してもらう?
いちいち相談せずに自分でやってこいよ。
725 :
デフォルトの名無しさん :04/10/09 01:37:52
はぁ?
馬鹿の一つ覚えw
(゜Д゜)ハァ?
退屈しのぎに煽らない。 煽りを見ても動じない。 まずはそんな「自分作り」から始めてみませんかこのちんかすどもが。
真っ直ぐ向き合うために 誇りを持つために 戦うことも必要なのさ
730 :
デフォルトの名無しさん :04/10/09 04:49:20
はぁ?
(;´Д`)ハァハァ… @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
友達はけちばかりなので教えてくれません
>>734 Cでもいいので教えてください
お願いします!!!
while(<>) { push( @s, split(/\W+/) ); } sort( @s ); foreach( @s ){ print "$_\n"; }
740 :
デフォルトの名無しさん :04/10/09 15:10:25
PERLI
うごくけど?
うごくだけだったw
@s = sort(@s);
同じ語があるときはへんてこりんになりそうですね。
いいじゃんかよ ソートして並べろとしか言ってないよ 仕様だよ!!ヽ(`Д´)ノ while(<>) { push( @s, split(/\W+/) ); } @s = sort( @s ); $last = ""; foreach( @s ){ if( $_ ne $last ){ print "$_\n"; $last = $_; } }
undef $/; @tango = sort split /\s+/, <>;
print map "$_\n", sort keys %{{ map { $_, 1 } map lc =~ /\w+/g, <> }};
アポストロフィーSはどうすんのよ
>>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
>>751 テキストエディタの正規表現置換による整形の方がいいんじゃないか?
無理にPerlスクリプトでソースコードを作る意図が判らん。
>>752 あ、そう?実際どう書く?
各軸がソートされた結果を手に入れたいとか
軸がネストされた状態に変換したいとか
限られたメモリでも可能とか考えてくと
結構奥深いよ。これ。
コードを考えてる時間と、手作業で編集する時間とどっちが時間がかかるかも考えなきゃな(w
>>756 DBから上のようなデータが5000万件くらいでてきたら? (w
>>757 そう煽って誰かに書いてもらうのを待ってるの?
>>756 ぷぷ。なんだ。結局考えらんないんじゃん。
ワンライナーって考えるのにそんなに時間かかんの? (藁藁
cpanでData::Xtabってのを見つけたよ。
じゃぁね~
754って、 つまり閾値以下なんじゃない?
既存の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に変えるだけで目的が達成出来るのですが 見ての通り美しくありません。 どなたかグッドなアイディアはないでしょうか?
>>751 その形式はあまり使いやすいとは思えないな
{
'a' => { M200408 => 10, M200409 => 20, M200410 => 0 },
'b' => { M200408 => 30, M200409 => 0, M200410 => 0 },
'c' => { M200408 => 0, M200409 => 0, M200410 => 10 },
...
}
とかの方がいくない?
>>762 open(IN, "perl filter.pl file.txt|");
とかじゃ駄目?
766 :
デフォルトの名無しさん :04/10/10 00:10:50
perlはソースまで汚いんだね 読んでてあきれて来たよ Larry Wallってもっと優秀なハッカーかと思ってたよ
別にPerlに限ったことじゃないですが、皆さんコメントってどこにつけてます? (a) 処理 #処理についてのコメント (b) #処理についてのコメント 処理 (c) 処理 #処理についてのコメント 普通は(a) だと思いますが、(b)(c)は論外なのでしょうか。 行が無駄に多くなる、とかで…。
おれは(a)(b)混在 (c)はないだろ
行に対するコメントなら(a), (構文的/概念的)ブロックに対するコメントや、(a)で書ききれないなら(b) (c) に出会った事は無いな
#**************************** # 処理の名前 #**************************** # 処理についてのコメント $foo = ... # 初期化コメント $bar = ... # 初期化コメント 処理 #**************************** # ここまで #****************************
処理A 処理B 処理C # この時点で~は~になっている みたいな使い方なら考えられるかな…。 俺は使わないけど。
772 :
デフォルトの名無しさん :04/10/10 00:30:26
$_="a b c d e"; $_には4つspaceが含まれていますが、どうやってこの 個数を取得できますか?
(b) もありなんですね。 ありがとうございました。
>>772 $_ = 'a b c d e';
print tr/ //;
1文字を数えたいならtr これPerlエチケットやで
>>770 CGIに良くあるが、えらい読み辛いので勘弁して欲しい
↓は、マッチした単語がある行を示すプログラムの一部なのですが、 while (<FILE>) { if ($_ =~ /$match_word/) { chop; print ("line $.: $_\n"); } } 特殊変数 $. で行番号を『1,10,100…』といった形ではなく、 『001, 010, 100…』といったように桁を揃えて表示させることはできますか?
>>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 それでもいいよ。
>>777 スリーセブンじゃん。
printfです。
printf("line %03d: %s\n", $., $_); あるいは printf("line %3d: %s\n", $., $_);
781 :
デフォルトの名無しさん :04/10/10 02:55:08
>>777 chopしてすぐにprintで"\n"って
あんたアフォ?
>>781 あくまでサンプルでしょ?
「マッチした単語がある行を示すプログラムの一部」
って書いてあるんだから、ここに載せるのに必要な部分だけ切り出して
動作するようにちょっと書き換えたらchopのこと忘れてたってだけじゃない?
>>764 ,
>>778 様 ありがとうございました。
tieでごにょごにょですね。
オブジェクト指向Perlマスターコース引っ張り出してきてもう一度勉強します ory
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と表示されます。 どこを直したらいいのかわからない状態です。どうかアドバイスをお願いします。
=hoge形式のコメントが、行頭から始まってないとか
>>784 13,14行目付近、
無名subの閉じセミコロンが無いけどそういう話じゃなくって?
>785,786 アドバイスありがとう。 >786 その通りでした。申し訳ない・・・・・ コード丸写しで行けるはずで組み込んだのに Syntax Errorがそこら中に多発して頭が固くなってたようです。 多分コードを抜き出した人が抜き出すときに、 そこらじゅう修正して、その時にみすったんでしょうね・・・・ これで呪縛から解放されます。ありがとうございました。
>>787 Perlの場合セミコロンは終端子ではなくてセパレータだから、
こういう場合、(コードBをコメントした場合)
コンパイルエラーがでないんだよね。不思議な挙動になる。
ま、でも、治ってよかったよかった。
まあ、正確にはセパレータ風に使うとそうコンパイルされる、か。
790 :
デフォルトの名無しさん :04/10/10 17:30:31
>>667 <!-B->直前までの(<!-B->は含まない)出力をさせることはできますか?
$`
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 6時間待ったのですが、やっぱり何も起こりませんでした。
>>792 「Type 'help' to get started.」と出ているだろう。
いきなり install コマンドを叩かず、PPM の設定が正しいか確認しる。
設定の意味が分からんかったらググって調べれ。
797 :
デフォルトの名無しさん :04/10/10 19:38:38
ファイルハンドルをシリアライズして 他プロセスに受け渡したいのですが、 なにか良い方法ってあるでしょうか?
named pipe
799 :
797 :04/10/10 19:47:34
>>798 サンクスです。
しかし、ファイルの中身を共有したいのではなくて
ハンドルそのものを渡したいのです。
逆になってしまいますが、ファイルハンドルから
それに結びついているファイル名を探る方法とかでもOKです。
すんません、説明がたりないですね。 1) あるサブルーチンがファイルハンドルを開いて返してくる 2) しかし返ってくるのがハンドルだけなのでどのファイルを開いているかわからない。 3) でも、このファイル(ハンドル)を他の独立なプロセスに渡さなきゃならない。 という状況です。 ファイルハンドルからハードリンクって作れればよいのですが。。。
fileno
802 :
デフォルトの名無しさん :04/10/10 20:13:33
>>802 m/<!-B->/とかしたとき、<!-B->の直前までは$`に入っているからそれを見てよね、
ってことだと思うよ。ほとんど日本語になってないけど…。
m/(.*)(<!-B->)(.*)/したときの$1とほとんど同じこと。
<!-B->なら出力しない それだけじゃん・・・
HTMLの場合はね 藁
>>808 あ、なんだこれ。元ネタあるんじゃん。
print $1 if (m/<!--A-->(.*)<!--B-->/s)
<!-B->って何かと思ったよ (w
まあ、最短マッチにすべきかもしれないけど。
データが行指向であると仮定していいなら、
>>667 が一番スマートだと思う
>>795 HTTP_proxyの設定で、ホスト名とポート番号がどうしてもわからなかったのでこの方法は諦め
手動インストールしようと思ったのですがやっぱりできませんでした。
>>796 「ppm 設定」などでググってもさっぱりでした。
ちと悔しいですが、私には無理みたいなので諦めます・・・。
レスくれた方ありがとうございました。そしてごめんなさい。
手動インストールなのにポート番号とかホストとかわけわかめ ま、いいか
あぁ、勘違い。よく読んでなかった。 漏れって文盲。 勘違いで申し訳ないので。 812の検索条件にactiveperl足してみろ。 それでわからなきゃ知らん。
815 :
デフォルトの名無しさん :04/10/11 12:22:32
>>792 PPMもCPANモジュールも使わないからわかんないけど
ルータのファイアウォールかなんかで
ftpをpassiveにしないと通らないとかそういうのではないの?
817 :
デフォルトの名無しさん :04/10/11 20:23:56
SpreadSheet::WriteExcelを使ってみたいんですが レンタルサーバなのでモジュールのインストールが出来ません pm置くだけで使えるような奴ってないですか?
>>817 ホームディレクトリ以下にインストールして use lib すれ
祝!WriteExcel!!
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;
>>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;
ありがとうございました!
$writing =~ /^end$/ と書くぐらいなら$writing eq 'end'と書け。
ばかばっかw
>>825 821を$writing eq 'end'に書き換えて動かしてみー
アホすぎwwwwwwwwwwwww
>>827 初めてだし、やってみたかったんじゃない?
しかし関係ないけど eqって演算子 フォートランから来てんの? どうでもいいけど。
>>833 equal を eq と略すのは辞書にも載っている一般的な書き方だけど?
test(1) なんかは Perl と逆で数値比較が eq だね。
>>823 つか、このばあい
$writing eq "end\n"
じゃないと駄目なんじゃないのか??
$writing =~ /^end$/で正解。(藁藁藁
大文字のEQは使えなくなるらしい。
>>835 > つか、このばあい
> $writing eq "end\n"
> じゃないと駄目なんじゃないのか??
\n付けたら同じにならないだろ。阿呆。
糞同士で内紛してるwwwwwwwwwwwww
正規表現も知らん奴ばっかか? /^end/
kuma-
### 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; 外部サブで配列の連想配列にして、戻り値をそのまま配列の連想配列で受け取りたいんですが、 うまくできずに、そのままの値が帰ってきてしまいます。 なにかいい方法はないでしょうか。
標準入力で「end」と入力された時(<> が "end\n"の時)にマッチするようにしたい。
$writing =~ /^end$/ は「end(?:\x0D\x0A|\x0D|\x0A)?」にマッチするので○
$writing eq "end\n" は「end\n」と等価なので○
$writing eq "end" は「end\n」と等価ではないので×
>>823 の意図とミスを汲み取って脳内変換しようよ。くだらない
>>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
>>843 参考リンクありがと、勉強になりました。
なんせ、ユーザー定義の外部サブを作っていじるのは初めてなので、
名前空間のことを意識して組んだことなくてまったく理解してませんでした。
サブルーチン、モジュール等でググっても名前空間を利用することにどこも触れてなかったのが切ないですが、
普通は直接参照されないようにするので当たり前ですよね・・・
結局、$Files::mainに変更して不要個所の削除でうまくいきました。
自分で使うものなので、そんなのオブジェクト指向じぇねえだろってのは勘弁してください・゚・(ノД`)・゚・
>>844 > 標準入力で「end」と入力された時(<> が "end\n"の時)
ダウト。お前が
>>824 か?いい加減勘違いを認めろ。
首吊って氏んでこい。カスが。
>>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 がパターンマッチで判別してたから、それに付け加えただけ。
私の思慮の浅さから荒れちゃってスレの住人諸氏にはすまなく思ってる。
ごめんなさい。
始めて 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----
すいません、教えてください! Perlで作ったCGIで、パスワード認証をしたいんですが、パスワードやユーザーIDなどは全て、データベースに 記録してあります。 データベースを読みこんで、正しいパスワードを出すことはできるのですが、HTMLページのフォームに入力した パスワードやIDなどを読み込むことができません。 どのように、CGIの中に読み込めばいいのでしょうか? よろしくお願いします。
>>850 データーベースは何?
環境は?
ぼやけすぎてだれも相手してくれないと思われ。
>>848 どもども。*他*の832=>835です。まあ、それなりに楽しめましたよ ;-)
さすがに改行には気付くよね。あはは。
>>823 まあ、chompされていればね、良かったよね。ちゃんちゃん♪
ところで $writing =~ /^end$/ もSTDINから入力されるのなら
プラットフォームネイティブな改行がやって来るのだからやっぱりOKじゃないかな?
と書くとファイルからリダイレクトとか なんとか言うやつもいないでしょ。たぶん。
>>849 まんどくさいけど見てしまったからつっこみいれておくか。。。
関数にする必要が無い無意味な括りはやめれ。
関数化するならきちんとローカル化しる。
dbmopen()は速くて俺も時々使うけどデータが大きくなると
ファイルサイズが巨大になり使い物にならないぞ。
ついでにマニュアルも読め。
>Functions obsoleted in perl5
>dbmclose, dbmopen
windowsの場合は\x0D\x0Aを出力していつつ/^end$/でマッチしてたから
\x0D\x0A|\x0D|\x0Aにマッチしていると思ってたけど
プラットフォームに依存せず\x0Dを吐くから/^end$/でもマッチしていたんですね。
ファイル操作時にプチハマリしてしまいそうな事例ですね。勉強になりました。
>>847 頭ごなしに否定しないで自分で検証してみては?
反証をあげずに汚い言葉を吐いていても誰にも相手にしてもらえませんよ。
もし貴方が正しいことを言っているのなら大変興味のある事ですので v^^;v
>>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 を使う癖を付けるといいかもね。
みんな改行コード程度まともに扱えるようになろうよ・・・
perl5.8.4を導入したのですが、ログファイルにARRAY(0x88790)などという文字が保存されたり、 ソースで指定している配列とは違う配列にpushされてたり、 今までのバージョンでは起こらなかった問題が発生してしまっています。 perl5.8以降の仕様変更が原因なのは間違いないのですが、どこを修正すればいいのか全く分かりません。 何か心当たりがある方はいらっしゃらないでしょうか? 宜しくお願いします。
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の部分で駄目なんだろうと思っていますが、代わりの手段が思いつきません。
ご存知の方がいらっしゃいましたら、ご教示の程お願いいたします。
>>859 cpanでモジュールの更新はしましたか?
やってなかったらやってみると良いかも。
>>861 有難うございます。
Active perl5.8.4をインストールしたのですが、cpan.pmもセットになってます。
ということはcpan.pmも5.8に対応したものに更新されてるはずですが、
それとは別に皆さん手動で更新してるのでしょうか?
863 :
七誌 :04/10/13 13:11:53
perlのコンパイルとエディタを両方できるソフトはないでしょいうか? Terapadにプラグをいれるののはちょっと使いにくいw asperl.のようなGUIでの実行、PerlEditのような利便さをかねそなえたものがあるといいんですが・・・ (フリーで 知っていらっしゃる方は教えてくださいまし
>perlのコンパイルとエディタを両方できるソフトはないでしょいうか? 意味不明
perlが使えるIDEってことでしょ
>>865 「perl のコンパイル」とエディタ って事は、Cの開発環境が欲しいって事なんじゃないか?
# んなわけねー
@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の導入の仕方がいまいちわかりません。 初心者なので教えてください。
まずsageる事から覚えろ 話はそれからだ
はい わかりました
「初心者」だったら教えてもらえると思ってんだろうね
>>871 すまんけど、ほんとに1からわからんのよ。
用途は、ルーチンみたいな感じで多少の計算やら、画像判定なんかをしつつ、テキストなんかに入力したい。
検索で引っかかるのはweb用途ばっかりで、よくわからんのよ。
よかったらサイトなんかでもいいんで教えて下さい。
Perl インスコ でググりゃイパーイ出て来るんだがね 最初から他人を頼ってるようじゃ先が思いやられるわ 頼むからもうここで質問しないでくれるか
875 :
デフォルトの名無しさん :04/10/13 19:05:24
レベルひくぅwwwwwwwwww
>>859 遅レス。
ダブルクォート中の@の解釈の仕方 "@hoge" が
どっかで変わったとなんかのデルタで読んだ記憶があるけど
どのperldeltaだったかは失念。
リファレンスのばあいは関係ないかな? 役たたねぇ~。スマン。
878 :
デフォルトの名無しさん :04/10/13 19:52:40
みんな perl -w とか use strict とかしてないの?
Rubyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
>>877 Perl4 → Perl5 で、常に配列変数として展開するよう変更されている。
…10年ほど前の話だけどな。
>>878 最近-wはしないな。use warningsがアホみたいに便利だ。ちとメモリ食うのが難点だが…。
use strictはデフォ。当たり前。
>>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 早速のご回答ありがとうございます。
そっか、そうなのか…。
ただ、use strictしていて(ソフトリファレンス禁止?)も
値が undefのばあいは通ってしまうのですよ。
この場合ってなにか違うのですかね?
別のサーバーからsmb経由でファイルを取ってくることってできますかね? そういうモジュール見当たらないっす・・・
バージョンアップで微妙な仕様変更するくらいなら、 いっそのこと「ワンライナー以外では use strict がデフォ」とかして欲しいですな。
>>886 かるく検索してみたら Filesys-SmbClient つうのが引っかかったけど。
>>885 5.6.0からの仕様で、openの第一引数に未初期化(実質的にundefで初期化)の変数を指定することで
無名のファイルハンドルを作成できるようになった。
これはこういう仕様。ソフトリファレンスとか関係ない。
>>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かそうでないかで動作が違うのはそういう仕様だってことだ。
>>890 ありがとうございます。
未初期化の場合だけの特例なのですね。勉強になります。
ちなみにいくつか試したのですが
open my $foo = undef, "foo.txt"; --> OK
open local $main::foo = undef, "foo.txt"; -->OK
open our $foo = undef, "foo.txt"; --> NG(何も表示されない)
でした。ourは別モノらしい。
>>891 ふむふむ。openでそうした場合は無名のハンドルができるってことですね。
そうじゃなかったらソフトリファレンスつかってよ、と。
そうすると無名subでもいけるかな?
ちょっとやってみます。
サンクスです。
>>893 って無名つながりで連想したけど
それはやりようがないですね。すみません。
>>892 ん?ourもいけたが…。当方version 5.8.4
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 です
>>895 まじ!ですか!!
私はv5.6.0でした(ちと古い ^^;)
>>896 041014.pl の 10 行目に require ~ か use ~ があるのでそれを削除。
v49 とはまた大きく出たもんだな
>>896 do サブルーチン
ってかなり昔の書き方じゃなかった毛?
doを取れば動くよろし。
イースターエッグか?
>>900 Perl5 からは使わないよう推奨されているが、use strict & use warnings 下
でも & 付きで呼んだ場合は何のエラーも吐かずに動くよ。
>>904 ん?試したけど
別に use v49.0.0 してなくても896さんと同じ現象に遭遇するぞ。
>>900 do を消したら解決しました。
ありがとうございます。
do をつけるのは古いやり方なのですか…。
参考にしてたサイトにそう書いてあったので…。
>>906 どうも。
うん。
(原因は俺には分からないけどな… ;-)
ファイルREADを読み込んで、指定した文字列がある行だけをファイルWRITEに書き込みたい場合、 ①open READ, "読み込みファイル"; ②マッチングさせる文字を入力 ③open WRITE, ">>書き込み先のファイル"; ④while (my $line = <READ>) { if ($line =~ /マッチングさせる文字列/ or last) { print WRITE "$line"; } } といったように、ファイルハンドルをそれぞれ読み取りファイル、書き込みファイルと用意していますが、 このようなやり方でいいのでしょうか? 目的の処理はこの流れでできたのですが、ファイルハンドルをわざわざ2つ用意しなくても このような処理をさせることはできるのでしょうか?
素直にそれでいい。
どうもです!
>>890 便利だね。早く5.0系から完全に移行したい。
そんなもの使うくらいなら 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. こう言われます すいませんが教えてくださいお願いします
>>914 > ->[3]->と言うのは調べていてこう記述してあったのでうつしました
自分で理解できてる範囲でプログラミングをしましょう
エラーメッセージの英語くらい読めるようになりましょう
あなたはまずそこから始めるべきです
$file の中身がおかしいんじゃないの。 配列のリファレンスが期待されているのに 普通の文字列(ファイル名)が入ってるから。 PerlMagick使ったことないからわからんけど、 どっかで、 $obj = new HogeHoge($file) みたいに するんじゃないの? んでそれを $obj->Get('format')みたいにする。違う?
>>914 ではないんですが、今perlを勉強しています
それで
>>917 さんの書き込みを見たのですが
newというのは何なのでしょうか?
そのあとのHogeHogeというものもわかりません
また、配列のリファレンスとは配列を示すアドレスですよね?
どこに配列があるのでしょうか?
すいませんが教えてくださいお願いします
>>918 今勉強してるテキストひと通りマスターし終わってからまたおいで。
920 :
918 :04/10/14 14:12:09
>>919 本は読んでません
ネット上でみたりココ見たりしてやってます
>>917 package HogeHogeFile;
sub new { return bless []; }
:
:
以下略
package main;
$file = new HogeHogeFile();
になってるんだろうな。そしてHogeHogeFileの中の人の第4要素がまた
なにかのオブジェクトで、Getというメソッドを持ってるんだろう。
923 :
918 :04/10/14 14:24:33
>>922 perl new
とかで検索したのですが 違うのが引っかかりすぎてみつけれませんでした
ですので、ここできかさせていただきました
>>923 じゃあこれからも検索しづらいものがあったら片っ端からここに質問にくるのかい?
925 :
デフォルトの名無しさん :04/10/14 14:31:06
うざいから早く教えてやれよ
>>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をやろうとおもってるのですが? 主流になっていくやつをやりたいので、是非教えてください
cとjavaじゃあかんのか
pealなんていってるから釣りじゃねーの?
ほっとけ
> Pealの本を出版! 『Perl/CGI プログラミング』では、プログラムの基本的な技術を紹介しているんだ。 ~~~~~~~~~~~~~~~~~~ 本が出てるらしい
>>927 そうですね。このシンタクスを実用化するなら
open my $fh, $file ということですね。
書いた時点で my $fhが何を生成しているのかよく分からんかったので
undefとか1とか突っ込んでた名残です。
なんか、perlopentut見たらいろいろ書いてありました
もうファイルハンドルはいらない♪!?
open my $fh => $file のほうがカコイイよ
936 :
918 :04/10/14 16:17:18
あの どうか教えていただけないでしょうか?
>>936 もしかしたらnewはクラスHogeHogeのコンストラクタです。
クラスHogeHogeは「ほげほげ」と読みます。
$fileか$file->[3]にはきっと'/root/pic/screen.jpeg'という文字列が入っていて
これはblessされたオブジェクトじゃないのでGetを呼び出せず
pealはエラーを吐き出しました。
ちなみにrootでこういった作業するのはセキュリティ上望ましくないので
一般ユーザでのプログラミングをおすすめします。
>>935 renameなんかだと rename $old_name => $new_name でストリーム表現できてよいが、
openの場合ファイルをハンドルに結合するので、ストリーム的には open my $fh <= $file と
書きたいところ。なので => ではダサイということに君もそのうち気付くだろう。
>>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",); } という具合の書き方をいつもしているのですが なんだか重複した記述が多いし、もうちょっとスマートな書き方がないものかと いつもうんざりしています。 こういう場合の定石パターンってなにかあるのでしょうか。 皆さんどうコーディングされてます?
942 :
914 :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にいれる・・
すいませんが教えてくださいお願いします
The $file is referred to by $fh. ($file <= $fh) eg. open $fh => $file ?? !☆???!!
now.. $fh->open($file); is so cool, so sweet, so sexy.
945 :
デフォルトの名無しさん :04/10/14 20:37:33
コンストラクタ インスタンスってなんですか?
低レベルなぺrlすれ
>>944 i agree you
but calling open() method from undefined varable is too strange :)
i agree with you
>>947 Oop!! undef->open() is not implement, yet.
Sorry..
>>949 undef->open() is Black Hole. It's so dangerous.
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の指定の仕方ってあるのでしょうか? この場合はプログラムを書き直すしか方法はないのでしょうか?
I want you to be drawn into a black hole by "undef->open()".. :)
>>951 perlを含まなかったら表示とすればよい
つか、そろそろ 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 後の”が、ねーぞコラ、ぐらい云えば?質問スレなんだらよ。
959 :
デフォルトの名無しさん :04/10/14 21:41:35
>>953 if ($line !~ /$moji/)
といった感じですか?
やはり実行のときに何を入れてもこのままのプログラムでは無理なんですね。。。
>>955 "ru;が"ru";だな。
それ以前に、
my %family_name;
$family_name{"fred"} = "filntstone";
$family_name{"barney"} = "ru;
か
my %family_name =
(
"fred"=>"filntstone",
"barney"=>"ru"
);
ぐらい書いてくれよ(´Д`;
filntstone は正しくは flintstoneだろうが ru が何を意味しているのか激しく気になる。 ルテニウムか? それから for $person ( qw/ barney fred /) { と書けるやつはエラーの意味くらい分かると、なんとなく思うぞ。俺は957ではないが。
965 :
sage :04/10/14 23:11:46
>>962 ありがとうございます
一応そこを見てやってみたのですが・・
??もう一度見直してみます
どうもすいませんでした
&fileはタイプミスですすいません
966 :
945 :04/10/14 23:13:50
本当にわからないんですけど 検索して見てもいまいちピンと来る説明がありません わかりやすく説明していただけないでしょうか? あと->はリダイレクトの逆と考えたらいいのでしょうか?
間違えて名前に書いてしまいました すいません 914でした
>>965 の書き込みの
??はミスです 申し訳ないです
>>965 Image::Magickを使ったことないから全然間違ったこというかもしれないけど
配列がうんぬん、と絡んでくるのは $image = Image::Magick->newで作った
一つの $imageオブジェクトに複数の画像をReadで読み込めるからじゃないのかな?
Photoshopとか使ったことあれば、「レイヤー」を想像すれば(Gimpもそうか?)
何で配列がでてくるのか分かるんじゃないかと思うよ。
だからその部分でエラーが出てくるのは、きっと読み込み方を間違ってるんじゃないか
と想像します。多分ね。
それから -> はリダイレクトではなくて、->の左にある変数が保持している
サブルーチンとかハッシュや配列のフィールドを呼び出す演算子みたいなものです。
というか、リダイレクトの逆っていったいなんだよ? (w
>>914 いやだからお前のPerlの理解はPerlMagickを使うには
まるで不足しているのでまともな本読んで勉強して
からにしろというのが回答。ここでちょこちょこやり
とりしてなんとかなるレベルじゃない。
あれだな
>>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
>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
>975 判別部分はこれだけで良かった_| ̄|○ $flag = not grep { $def{$_->[0]} ^ $_->[1] } @stack;
cat define.h hoge.txt | sed 's/^`/#/' | cpp でいいような。全然perlじゃないなこれ...
蛇足だけど my %family_name = ( "fred"=>"filntstone", "barney"=>"ru" ); より my %family_name = ( fred=>'filntstone', barney=>'ru' ); のがベターかな
PerlでWindowsアプリを書くにはどうすればよいですか?
>>979 さらに蛇足だが、
my %family_name =
(
fred=>'filntstone',
barney=>'ru' ,
);
の方がベター
あと、だれか
>>860 にレスしてやれよ。漏れは質問の意味すら良く分からんが
>>979 これのポイントというかベターな理由はどこなんでしょうか?
ポインタだけでも構いませんのでお願いします。
>>981 >>860 たぶんどっかのformから自動的に結果を得たいのだろうが、そのformから
query出すところがjavascriptで書いてあるので、どういうパラメタを
投げればいいのかわからないという問題と思われる。perlであるかどうか
は関係ないのでスレ違い。
>
>>979 > これのポイントというかベターな理由はどこなんでしょうか?
> ポインタだけでも構いませんのでお願いします。
必須でない物、展開されない物には「"」を使うなって事かと
ところで
>>981 これのポイントというかベターな理由はどこなんでしょうか?
ポインタだけでも構いませんのでお願いします。
>>981 誰も答えてくれないからって自演するなよ・・・
しかもそれがベターって・・・w
>>984 エントリ追加したときに , が無いって怒られるエラーを未然に防ぐ
ブロック末尾の文にもちゃんと ; 付けるのと同じ理由
ださ
989 :
デフォルトの名無しさん :04/10/15 18:38:00
Perlで作ったアプリケーションを一般の Perl をインストールしてない 人にも使ってもらえるように VisualC 等でGUIインターフェスの アプリにしようと思うのですが、VisualC等で Perl の機能を実現 したりあるいはスクリプトをそのまま使う方法というのはないのでしょうか? Perl/TKの存在を知りましたがPerlをインストールしないと動かないようなので・・・
>>989 そんな事知らない貴方が作ったソフトは、誰も使用しませんよ^^
PCの基礎を学んだほうが良いんじゃないんですか?
まだ遅くないと思いますよ?そのレベルじゃ・・やb(ry
991 :
デフォルトの名無しさん :04/10/15 18:52:19
誰も使用しないかどうか十万円くらい賭けてみますか? シェアウェアですが。
小学生かよ
レベルがどうこう抜かしてるガキグラマー相手にはちょうど良いかなと・・・
>>882 レス有難うございます。
""の中にあった@を、""使わないような処理に変更する試みは既に施していましたが、
エラーは変わらなかったです。
また、型ブログもリファレンスも使用してないです。
5.6で問題なく動いていたのに何でだろう・・と思い悩んでおります。
しばらく自サーバを5.6に戻すしか解決策が見当たりませんが、
いつかレンタルサーバにUPしたいと考えておりまして、
でもレンタルサーバは大体5.8なんですよね・・。
他に私と同じような方がいないということは、やはり私のスクリプトミスなのでしょうね。。
もうしばらく考えてみます。アドバイス感謝いたします。
996 :
デフォルトの名無しさん :04/10/15 19:19:38
>>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時間常駐して解答係りになりますよ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。