【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あたりを見よう。
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:???ファイルは変わっていない。
0588名無しさん@Meadow
02/09/04 12:03ID:gOg0cXWU書き込む前でしょ。
while($logsize > $maxsize) {pop @data; ↑$logsize = (stat($logpass))[7];}
矢印のところで書き込まないと・・・
それより別の方法を考えたら?
0589nobodyさん
02/09/04 13:23ID:???0590nobodyさん
02/09/04 14:56ID:???foreachでまわして一行ずつlength関数でバイト数を調べるほかに何か方法ありますでしょうか?
0591nobodyさん
02/09/04 15:15ID:???0592nobodyさん
02/09/04 15:23ID:2Otyyhgvここのメル友募集用掲示板で会員用サイトを作りたいのですが、
http://tsubaki.sakura.ne.jp/~campus/grooweb/jewel.html
メールを送る時にID&PASSでアクセス制限をかけたいのです。
どの様に作ったら良いのでしょうか?
0593名無し
02/09/04 15:51ID:AttOz/Tz回答が書かれているのを見つけられないので
以前、質問した人に代わってお聞きします。
CookieをOnにしないと弾き出してしまう
ここで使っているものみたいなCGIのスクリプトを
扱っているようなホームページは知りませんか?
もちろん、ここにスクリプトを書いて下されば
もちろん、なおさら有り難い事ですが…
0594b
02/09/04 16:01ID:07M2lj7H0595nobodyさん
02/09/04 16:12ID:A3ZRMRKj実行する際に、専用のSSLサーバー(ttps://***.site-secure.net/)
を通すとInternalServerErrorが出てしまいます。
どなたか分かる方いたらお願いします。
0596nobodyさん
02/09/04 16:19ID:???, - - 、 /ヽ
/ O \グヒャッ ! /ヽ、 / ヽ
,, : ,ー, O | / _,;, -'''"~~ ヽ
'' ; ∴_ノゝ ゝ /o O ヽ
ヽ ,;''"~"'';, / ┌─┐ ノ( ヽ
_ノ| ;;'';;'';;'';;'' | / | ⌒ | <スレ違いもはなはだしいわ!
ゝ、ヾ ヾ | ト、 | /
/ ヽ ヾ ヾ ヾ、 \ノ ノ
ノ\_ヾ ヾ /⌒ヽ、 ___/、
ノヾ ヾ_ _/ ノ, ヽ
ヽ、ゝ ノ ノ ハ ヽ
ゝ、 ノ ノ、 ノ ゝ | )
ー─一'´ ゝ、 l'´
) /
CGIだけど、なんか質問ある? Part 6
http://pc.2ch.net/test/read.cgi/php/1025930486/
0597nobodyさん
02/09/04 17:33ID:???どんなスクリプトでも頭に以下のような文を入れれば弾ける。
unless($ENV{'HTTP_COOKIE'}){
print "Set-Cookie: value=check; path=$ENV{'SCRIPT_NAME'} domain=$ENV{'HTTP_HOST'} expires=Fri, 31-Dec-2010 00:00:00 GMT\n";
}
&error_end('くっきーオンにしてちょ') unless($ENV{'HTTP_COOKIE'});
0598593
02/09/04 19:35ID:rVUPKdSlどうも有り難うございました。
まさか、こんなに早く教えて頂けるとは思いませんでした。
ところで
expires=Fri, 31-Dec-2010 00:00:00 GMT\n
の部分なのですが、ここの記述は
絶対こうでなくても構いませんよね。
0600名無しさん@Meadow
02/09/04 21:42ID:rtiaBVOu$ perl -e '@ar=qw(a b c d e f); print length("@ar"), "\n";'
11
0601nobodyさん
02/09/04 22:06ID:???一気に消す方法はないでしょうか?ご教授頂けないでしょうか?
0602名無しさん@Meadow
02/09/04 22:18ID:rtiaBVOu$ perl -e 'system("rm -rf ./dir");'
./dirってとこは、消すディレクトリのパスを入れてね。
0604601
02/09/04 22:33ID:???0605名無しさん@Meadow
02/09/04 22:35ID:rtiaBVOu>そう言う方法があるのですがね。
~~
逆説の「が」ですか?
だったら、
$ perl -e 'use File::Path; rmtree ("./dir");'
0606601
02/09/04 22:42ID:???そういう意味じゃないです(;´Д`)
そちらもダメでした・・・
logフォルダーに 1 と言うフォルダーがあり、
その中に、0.log 1.log ・・・ 10.log
と言うファイルが有るので、それをフォルダーごと消したかったんです。
説明が悪かったのかも知れませんが・・・
0607名無しさん@Meadow
02/09/04 22:50ID:???>そちらもダメでした・・・
perl5でしょ?
libディレクトリにFileモジュールが入ってないってこと?
考えがたい。
じゃスクリプトミス?
use File::Path;
rmtree("./dir");
ってちゃんと書いた?
じゃファイル属性を確認してちょ。
0611nobodyさん
02/09/05 04:56ID:???\r\nって\nにしちゃダメなんすか?
特に動作に問題は見当たらないしファイルサイズも削れるんで\nでいきたいんすけど。
それとも不都合な環境とかあるんでしょうか。
0612名無しさん@Meadow
02/09/05 05:34ID:???改行は、<br>で表すんだから、別に構わんです。
ただ、編集環境がwindows(MS-dos)なら、普通、¥r¥nが自動的に
つくんですが。いちいち変換するの?
0613611
02/09/05 05:48ID:???改行コード自体いまいち理解できてないんですすんまそん。とりあえず
print "Set-Cookie: $cookie\r\n";
とか
print "Content-type: text/html; charset=EUC-JP\r\n\r\n";
とかの\r\nを\nにしちゃまずいんかなと思ただけ、というか
\nでいけるならなんでわざわざ\r\n使ってるんだろうとか思ってみただけれす。
レスどうもっした。
■ このスレッドは過去ログ倉庫に格納されています