【Perl】初心者コーナー Part15
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/08/08 23:19ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 6 (その2)
http://pc.2ch.net/test/read.cgi/php/1025930486/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4】
http://pc.2ch.net/test/read.cgi/php/1012839651/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0486初心者の依頼者(´∀`; ◆3zTzMwh2
02/08/29 17:16ID:w2vhS8x7↑に答えが出てることはわかっているんですが、理解できません。
fusianasanで表示されるやつはどうやって取得するんですか?
0488初心者の依頼者(´∀`; ◆3zTzMwh2
02/08/29 17:20ID:w2vhS8x7別に
0490nobodyさん
02/08/29 17:30ID:SCkpIe5Lありがとうございます。
0491nobodyさん
02/08/29 18:02ID:???2chの使い方になると思うんだが、この板から全文検索したいんだが、どうすればいいの?
「全部表示してブラウザで検索」しかないのか? それとも googleに拾ってもらわなければいけないのかな?
0492nobodyさん
02/08/29 18:03ID:???google de "string site:www.2ch.net"
0494424
02/08/29 19:47ID:k9SFERS8有難うございました。
私の勘いで、作成したいスクリプトの記述が間違っていました。
すみませんでした。
(勉強の為、書いて頂いたソースは保存しました)
以下、教えて頂きたい内容です。
任意の文字列が含まれる1行を抽出し、複数の該当文字列を
新しい文字列に置換えるスクリプトを作成したいのですが、わかりません。
(置換え対象の文字列には、手入力の文字列も含まれます)
495の様に、メールアドレスで行を取得し、
@oldに格納されている全ての文字列を個々の変数に代入して、
ファイルに出力させるスクリプトを作成しましたが、うまく動作しません。
確認出来たエラーは2点です。
1.ファイルの一行目しか$lineに入りません。
その為、該当レコードがあるにも拘らず、「データがありません」と
なってしまいます。
2.レコードの改行が削除され、次のデータが同じ行に出力されてしまいます。
($old1,$old2,$old3,$old4,$old5) = split(/,/,$old);
@oldから抽出する上記以外の方法がわからず、困っています。
ソースは495です。お願い致します。
(改行が多く書き込めなかった為、分けました。)
0495424
02/08/29 19:47ID:k9SFERS8置き換えたい変数です→($new1,$new2,$new3,$new4,$new5)
open(IN,"data/data.csv") or die;
while($line = <IN>){
chomp($line);
if($line =~ $mail){
push(@old,$line);
} else {
print "該当するデータがありません。\n";
exit(0);
}
foreach $old (@old){
($old1,$old2,$old3,$old4,$old5) = split(/,/,$old);
}
open(OUT,"+<data/data.csv") or die;
print OUT "$old1,$new2,$new3,$old4,$new5";
close(OUT);
print "書き換えが完了しました。\n";
exit(0);
}
close(IN);
exit(0);
0497nobodyさん
02/08/29 20:22ID:???何をやりたいのだか解らないんだけど。
>>425 をこうするって事かしら。
foreach(@old){
if(s/$mail/$replace/g){push(@new,$_)}
}
print OUT "@new";
使用している各関数がどういう働きをするものかよく調べた方が良いと思います。
ラクダ本を買うとか。
0498nobodyさん
02/08/29 21:09ID:mQvrBYqz何も手を加えてないのに、昨日まで動いてたcgiが動かなくなったんですが、
これは何が原因でどうすれば直るんでしょう。
kentのyybbsを色々いじってたんですけど、文法エラー解消しても動かないので
まずは無改造のスクリプトをただ上げたんです。
そしたら動かない。
しかも、それまで使ってたスクリプト(2つあるうち1つだけ)が突然internal server error。
頭抱えてます。
どなたか助けてください。
0499nobodyさん
02/08/29 21:12ID:0ltwZgpC1件につき最大10.000円の高額収入。月収100万円以上も可能。
■画期的なビジネス!
インターネットを利用したこれまでにない斬新で画期的なビジネスです。
■誰でも出来ます!
インターネットができる環境の方なら誰でも参加可能です。
インターネットを利用したビジネスですので、自宅や会社で好きなときにで
きるビジネスです。
■専門的な知識は一切不要!
ビジネスに必要なツールは全て当社で用意いたします。
また、サポートも万全です。
■詳細は今すぐこちらから
http://www.future-web.tv/haru/
0503498
02/08/29 22:31ID:mQvrBYqz逝ってきます。
0504424
02/08/29 23:02ID:zsUv5K1Pレス有難うございました。
書き方が悪くてすみませんでした。
>>425 様にも>>426で教えて頂いたのですが・・・。
置換え前の文字は$mail以外、変数では無いので
マッチさせる事が出来ない状態でした。
ファイルから文字を取得し、変数に格納したいと思っていました。
入力フォームを作り直します。
0505505
02/08/29 23:31ID:kiu2pPYaopen(HTML, ">hoge.html") || &error("HTMl化に失敗しました。");
print HTML &end;
close(HTML); }
開いたファイル(hoge.html)に書き込みたくて上のように記述したのですが、
ファイルを開いて直接サブルーチン(&end)を使うのは無理なのでしょうか。
0506_
02/08/30 00:12ID:???/ ̄ l | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
■■-っ < >>505んな こたァない
´∀`/ \__________
__/|Y/\.
Ё|__ | / |
| У.. |
0508505
02/08/30 13:07ID:tuhObyZ6&header;
open(IN,"$file") || &error("$file を読み込めません");
@lines = <IN>;
close(IN);
foreach $line (@lines) {
local($name,$url,$mail,$body,$hogehoge) = split(/<>/,$line);
&output;
}
&footer;
exit; }
こんな感じです。
0510
02/08/30 13:29ID:UPHK1/CWフォントサイズを大きくしたり、名前を変更している人がいました。
どうやったらできるのでしょうか?
0512nobodyさん
02/08/30 13:43ID:???戻り値を print 死体なら
return @lines;
だろうけど…。どう説明して良いやら。
>>510
そのチャットの管理人に聞いて下さい。
0513
02/08/30 13:45ID:UPHK1/CWソースを書き換えるのですか?
どうやれば書き換えられますか?
0515_
02/08/31 12:58ID:???substr($_, 8, 1)= "\x89";
substr($_, 14, 1)= "\x81";
print;
0516>_
02/08/31 13:40ID:???0517517
02/09/01 03:40ID:+nm+B08x知りたい場合はどうしたらよいでしょうか?
例えば
$a = { 'b' => [ $c = { 'd' => 'e' } ] };
とあった場合に、
&rel($a,$c) = '{b}[0]' みたいな出力を得たいのですが…
0519nobodyさん
02/09/01 10:55ID:???0520_
02/09/01 11:03ID:???一応、やってみたけどこんな感じでいいのかな?
sub rel{
my( $key, $i, $rel );
GOOD_BYE:
for $key ( keys %{$_[0]} ){
for ($i=0; $i<=$#{${$_[0]}{$key}}; $i++){
#if ( ${${$_[0]}{$key}}[$i] == $_[1] ){ print "goo\n"; }
$rel= "{$key}[$i]",last GOOD_BYE if ${${$_[0]}{$key}}[$i] == $_[1];
}
}
$rel;
}
0521_
02/09/01 11:05ID:???sub rel{
my( $key, $i, $rel );
GOOD_BYE:
for $key ( keys %{$_[0]} ){
for ($i=0; $i<=$#{${$_[0]}{$key}}; $i++){
$rel= "{$key}[$i]",last GOOD_BYE if ${${$_[0]}{$key}}[$i] == $_[1];
}
}
$rel;
}
0527nobodyさん
02/09/01 13:54ID:???0528517
02/09/01 15:43ID:+nm+B08xやっぱりbreadth-firstサーチをしないとできないってことっすかね?
>>520,521
ありがとうございます。が、より一般的なケース(リファレンスの構造を問わない)が対象なのです…
0529517
02/09/01 15:47ID:+nm+B08xそれをどうにかして逆に辿れないものかと思うのですが…
0530nobodyさん
02/09/01 16:23ID:oCDCWNWk0531 ◆4XfSMGTg
02/09/01 16:27ID:A6Gp7Ink0532nobodyさん
02/09/01 17:54ID:???0533_gunzip ◆H/XdoCNg
02/09/01 18:23ID:???いい加減だが...。
#!/usr/bin/perl
use strict;
use Data::Dumper;
my $a = { d => "e" };
my $b = { b => [$a] };
my $c = { f => { g => $b } };
print 'rel($b, $a) = ', rel($b, $a), "\n";
print 'rel($c, $a) = ', rel($c, $a), "\n";
print 'rel($c, $b) = ', rel($c, $b), "\n";
sub rel ($$)
{
my $dumper = new Data::Dumper([@_]);
$dumper->Indent(0);
$dumper->Dump() =~ /\$VAR2\s+=\s+\$VAR1->(.+);$/;
return $1;
}
-------------------------------------------
rel($b, $a) = {'b'}[0]
rel($c, $a) = {'f'}{'g'}{'b'}[0]
rel($c, $b) = {'f'}{'g'}
0534517
02/09/01 23:45ID:???そうですよね…、クイックハックならData::Dumperを使うのが一番手っ取り早いんですが、
リファレンス構造を全てtraverseするので実行速度が…
ダイレクトに辿るとしたっら、やっぱり要素ごとにリファレンス元を
保持するようなarrayを持たせるしかないですかね。。
0535nobodyさん
02/09/01 23:58ID:???デバッガでも作ってるの?
0536nobodyさん
02/09/02 01:22ID:???ネット初心者なんで本当に分かりません。誰か教えて下さい。
0537nobodyさん
02/09/02 01:29ID:???HTML、CSS,JavaScriptやブラウザーなど
Webプログラミング
PerlやCGI、PHP,Ruby等
0538nobodyさん
02/09/02 01:31ID:???Webプログラミング→プログラマがやる
0539nobodyさん
02/09/02 01:34ID:???ありがとうございます。と言っても、本当はよくわかりません(w
仕事の内容がどう違うか分かり易く教えて頂けるとありがたいんですが。
>>538
ありがとうございます。
0540初心者
02/09/02 02:28ID:???最初にエディタやコンパイラーは、何を落とせばよいのでしょうか?
先輩の皆様お薦めのものなどございますでしょうか?
使ってるPCはWinMEなのですが、ご教授お願いします。
0541nobodyさん
02/09/02 02:31ID:???自分が使いやすいと想うテキストエディタを使え。
>コンパイラー
落ち着け。
ActivePerlでも落としとけ。
0542nobodyさん
02/09/02 02:48ID:???sortはできたのですが
opendir(DIR, "$logdir") ;
@2ch = readdir(DIR);
closedir(DIR);
ファイル名を読み込んでいる様子で。
検索してやり方を探してみたのですが自分では分かりませんでした。
アドバイスお願いいたします。
0543518
02/09/02 06:08ID:???禿同。(w
>>528
BFS でなく DFS ですかね。>>533 とどっちが速いかは
調べてませんが、泥臭く書くとこう。
sub rel {
my ($foo, $bar, $idx) = @_;
my $rv;
if (ref $foo eq 'ARRAY') {
for (my $i = 0; $i < @$foo; $i++) {
$foo->[$i] eq $bar && return $idx . "[$i]";
$rv = rel($foo->[$i], $bar, $idx . "[$i]") and return $rv;
}
}
elsif (ref $foo eq 'HASH') {
foreach my $k (keys %$foo) {
$foo->{$k} eq $bar && return $idx . "{$k}";
$rv = rel($foo->{$k}, $bar, $idx . "{$k}") and return $rv;
}
}
return;
}
つかそこまで速度を求めるほどデカい or 深いんでしょうか?
これ以上はもう perl のソース読んでねとしか。
0544nobodyさん
02/09/02 06:28ID:???readdirのリファレンスを穴が空くほど読め
それはopendirしたディレクトリのファイルリストを得る関数だ
だいたい複数ファイルを読み込んでsortって何だ?
そのファイルにはASCIIデータが1行しか入ってない事が保証されてんのか?
要リファクタリングと思われ
0546nobodyさん
02/09/02 10:34ID:???0548nobodyさん
02/09/02 10:45ID:Bmg2BPcQ月と日にちを取得したいのですが、
$tm=time;
($sec,$min,$hour,$mday,$mon)=localtime $tm;
とやらないといけないのですか?
$sec,$min,$hourが余計なんですが...
0549nobodyさん
02/09/02 10:48ID:???0550nobodyさん
02/09/02 12:02ID:???<a href="" target="_blank"></a>
で囲みたいのですが、どうやってアドレスと判定すればよいのでしょうか?
0551nobodyさん
02/09/02 12:27ID:???仕様です
>>550
$message =~ s/(http:\/\/[\w\/\.\?~&=@;#%-]+)/<a href="$1" target="_blank">$1<\/a>/gi;
0554548
02/09/02 12:39ID:???なるほど。
$tm=time;
($mday,$mon)=(localtime $tm)[3,4];
で、できました。
ありがとうございました。
(undef,undef,undef,$mday,$mon)=localtime;
0558542
02/09/02 19:45ID:???@txt = <TXT>;
&unlock_close(TXT);
open(OUT,"> x.txt");
print OUT "@txt";
close(OUT);
&lock_open(TXT, "a2.txt");
@txt = <TXT>;
&unlock_close(TXT);
open(OUT,">> x.txt");
print OUT "@txt";
close(OUT);
&lock_open(TXT, "x.txt");
@txt = <TXT>;
&unlock_close(TXT);
foreach $m (@txt) { chop($m); }
でできました。opendirの意味がいまいちわからなかったので544さんの「それはopendirしたディレクトリのファイルリストを得る関数だ」
の助言で納得できました。おさわがせしてすみませんでした。ありがとうございます。
0559nobodyさん
02/09/02 20:49ID:???@txt = &lock_open("a.txt");
とか
print OUT &lock_open("a.txt");
とか
chop @txt;
とか。どーでもいーけど。
0561nobodyさん
02/09/02 20:56ID:???0563nobodyさん
02/09/02 21:53ID:Ldjfc++cその際にタイムアウトの時間を設定することは出来ませんか?
例えば、10秒以内に取得できなければ、エラーを出して終了するとか出来ませんか?
現在↓みたいにして取得しています。
よろしくお願いします。
#---------------------------
use Socket;
my $sock_addr = pack_sockaddr_in(80, inet_aton("2ch.net"));
socket(SOCKET, PF_INET, SOCK_STREAM, 0);
connect(SOCKET, $sock_addr);
select(SOCKET); $|=1; select(STDOUT);
print SOCKET "GET / HTTP/1.0\r\n";
print SOCKET "\r\n";
while (<SOCKET>){m/^\r\n$/ and last;}
while (<SOCKET>){print;}
#--------------------------
0564nobodyさん
02/09/02 21:55ID:???$time=$^T;
if(int($^T-$time)>=10){shutdown(2)}
0567nobodyさん
02/09/03 00:40ID:???ヽ(´∀`)ノ
( へ)
ヽ
0568nobodyさん
02/09/03 00:41ID:???0570nobodyさん
02/09/03 18:24ID:???0571nobodyさん
02/09/03 19:43ID:bBGpZ26t0572nobodyさん
02/09/03 19:48ID:???0573f
02/09/03 19:51ID:K/olstAP---●●●変態痴女を紹介致します。●●●---
例えば>欲求不満オマ●コヌレヌレ女・露出オナニー痴女・
フェラチオおしゃぶり女・ミニスカ・ノーパン娘・巨乳パイズリ娘・
アナルSEXおねだり娘・オマ〇コ弄られマン汁グチョグチョ女・
SM牝豚・緊縛・浣腸・スカトロ・等・・・刺激を求めています。
●●●学生・OL・主婦・モデル・牝豚・女王様・オカマ等・多数!●●●
090-8002-8356番
-----------------------------
http://www.mttdocomo.jp/
-----女性アルバイト随時募集・高収入(日払い)月100万円可能-----
http://www.mttdocomo.jp/
Iモードはこちら→http://www.mttdocomo.jp/i
0574nobodyさん
02/09/03 20:21ID:OLMxXVpc0575初心者
02/09/03 23:24ID:KI0OEEO7perlで、他のurlに変数と値をポスト送信してアクセスする方法はありますか?
print"Location: http://〜";
はうまくいきませんでした。お願いします。
詳しい方、教えてください。
0578初心者
02/09/03 23:34ID:KI0OEEO7ふつう、<a>タグの記述だと、
"〜.cgi" method="post" postdata="name=value&name2=value2"
とかになるのかな?と思うのですが(htmlではなくhdmlで作業して
いるので、そういう記述になっています)、
GETメソッドなら
print"Location: http://〜.cgi?name=value&name2=value2";
みたいなやり方で出来るのかもしれませんが、
postだとどうなのかな?と。
perl自体、初めて触ったという話にならない初心者なので、
正直まいっています。
詳しい方、またそうでない方も、参考程度の意見で構わないので、
聞かせていただけたら幸いです。
0579bloom
02/09/03 23:43ID:L4DD9EQOhttp://www.leverage.jp/bloom/start/
0583T女の竹田
02/09/04 01:43ID:???ソケットで繋いで、Content-Lengthを書いて、その後は普通に
データを送る。
POST http://www.perl.org/survey.cgi
Content-Length: 66
Content-Type: application/x-www-form-urlencoded
name=Gisle%20Aas&email=gisle%40aas.no&gender=M&born=1964&perc=3%25
って感じで。
(参照:http://member.nifty.ne.jp/hippo2000/perltips/HTTP/Request/Common.html)
ただ、こうするともちろんレスポンスもらうのはスクリプトだから注意して。
そのままprintしてやればとりあえずOKだけど、ブラウザのURLが
POST送ったスクリプトのままだから、相対リンクのイメージとかが
めちゃくちゃになりそう。
ダミーのHTML用意して、フォーム書いて、OnLoadかなにかで送るのが
一番早いかなぁ。
0584nobodyさん
02/09/04 02:59ID:???http://www.parkcity.ne.jp/~chaichan/qanda/qa3100.htm?02-09-04-02-58
0585nobodyさん
02/09/04 09:33ID:???# 記事の最大保存容量(単位:KB)
$maxsize = 100;
$maxsize = $maxsize * 1000;
$logsize = (stat($logpass))[7];
while($logsize > $maxsize) {pop @data; $logsize = (stat($logpass))[7];}
書き込み処理の直前に↑のようにやってみたんですがうまくいきませんでした。
変数を書き出したりしてみたんですが原因がわからず困っています。
どなたかわかりませんでしょうか?
0586名無しさん@Meadow
02/09/04 10:08ID:???ファイルは変わっていない。
■ このスレッドは過去ログ倉庫に格納されています