【Perl】初心者コーナー Part14
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/07/18 16:34ID:jemWJhH31:自分はこう言う事がしたい。
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あたりを見よう。
0587nobodyさん
02/07/30 21:00ID:???だけど検索することはできないんだね
0588nobodyさん
02/07/30 21:11ID:w4X2IPfe0589nobodyさん
02/07/30 21:24ID:???検索してるんだけど、見つからないんだな。
カウントするヤシはイパーイあるんだけど、ログを残すのが無い。
>>590
どこで聞けばいいのだ?
プログラム板は初めてで、初心者の文字があったもんで・・・
0592nobodyさん
02/07/30 23:08ID:???my $hoge;
my $hoge2;
と
my $hoge, $hoge2;
はどう違うんですか?
検索もして自分でも試しましたが答えを見つけることが出来ませんでした。
ご教授お願いします。
0593nobodyさん
02/07/30 23:56ID:???って、全然違うじゃん。
> my $hoge, $hoge2;
myが効いてるのは$hogeだけ。my( $hoge, $hoge2);で上と同じ。
0595nobodyさん
02/07/31 01:01ID:???523 名前:nobodyさん 投稿日:2002/07/28(日) 21:18 ID:???
クソの分際で生意気なチンポ猿だな全く
ムカつくぜ
0597nobodyさん
02/07/31 01:24ID:S7Hc+7gV@X = ("A","B","C","D")
があって、BとCの間にEをつっこむ何かよい手はないでしょうか。
結果的に、
@X = ("A","B","E","C","D")
を作りたいのです。よろしくお願いいたします。
0598nobodyさん
02/07/31 01:39ID:I1Mr+tD00600nobodyさん
02/07/31 02:54ID:???これ以外でWEBページを取得する方法はありますか?
現在借りているサーバーにはモジュールがありやがりやせん。
0601nobodyさん
02/07/31 03:06ID:???面倒なのでコピペ
お前これみて分るか?
use Socket;
$r1=shift(@ARGV);
$html=shift(@ARGV);
$port = 80;
$host = "$r1";
$filename = "$html";
$ipaddress = inet_aton("$host");
$address = pack_sockaddr_in($port,$ipaddress);
socket(SOCKET,2,1,0);
connect(SOCKET,$address);
select(SOCKET);
$ |= 1;
select(STDOUT);
print SOCKET "GET $filename HTTP/1.0\r\n";
print SOCKET "HOST: $host";
print SOCKET "User-Agent: Q51-A";
print SOCKET "Accept-Encoding: gzip";
print SOCKET "\r\n\n";
while(<SOCKET>){
print $_;
}
0602nobodyさん
02/07/31 03:13ID:???LWPは標準モジュールじゃないです。
ActivePerlとかLinuxのディストリには入ってるがな。
ラクダ本くらいは買え。6章にソケット例が書いてある。
0603nobodyさん
02/07/31 03:30ID:y5qu4VWq$a = "abcd";
$a = strlen($a);
echo ("$a\n");
という風な記述をすると思うのですが、これをperlに置き換えたい場合はどの様にすれば宜しいのでしょうか?
0604nobodyさん
02/07/31 03:35ID:???通常であればシェルで
edquota ユーザー名 (Enter)
でエディタが起動して
Disk quotas for user okada (uid xxx):
Filesystem blocks soft hard inodes soft hard
/dev/hdax xxx xxxx xxxx xx x x
上記のテンプレートを編集する事になるのですが、
これを Perl のスクリプトで変更することはできないのでしょうか?
exp) perl ./edquota.pl ユーザー名 blocks値 soft値 hard値 inodes値 soft値 hard値・・
Linux Slackware8.0
Perl5.6 を使用しております。
それでは宜しくお願いいたします。
0607nobodyさん
02/07/31 07:53ID:y2pKIymG示して頂いた例通り(変数名は別のものですがw)試して、巧く機能させる事が出来ました。お蔭さまで助かりました。
何分、糞imodeに対して別途"Content-Length"値を与えなならんと聞いたものですから‥
0608nobodyさん
02/07/31 07:55ID:???0610nobodyさん
02/07/31 08:49ID:???CSSスレで聞け。
0611nobodyさん
02/07/31 09:13ID:phubboAlこれを見れない原因として、何が考えられますか?
0612nobodyさん
02/07/31 09:24ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0613nobodyさん
02/07/31 09:35ID:qpj2RbUE本体からの呼び方の
決まりが書いてあるページが見つかりません。
教えて下さい。
0614613
02/07/31 10:35ID:qpj2RbUE同じファイルにサブルーチンを書いて呼ぶ方法はわかります
別のファイルにサブルーチンを書いて呼び出したいんです
0616nobodyさん
02/07/31 11:51ID:UyjmARAzppm install http://theoryx5.uwinnipeg.ca/ppmpackages/mod_perl.ppd
でwin2000にmod_perlを組み込みたいのですが、、
Error installing package 'http://theoryx5.uwinnipeg.ca/ppmpackages/mod_perl.ppd'
: Could not locate a PPD file for package http://theoryx5.uwinnipeg.ca/ppmpackag
es/mod_perl.ppd
このようなエラーが出ます。URL移動したのでしょうか?
0617nobodyさん
02/07/31 11:58ID:???サーバがメンテ中とかやないの?
0618nobodyさん
02/07/31 12:32ID:???詳細は省き、必要最低限のみ。
サブルーチンの書かれたファイルをSub.pmとする。
その中のサブルーチンをsubとする。
本体の頭に
use Sub qw(sub);
呼ぶときは単に
sub();
サブルーチンファイルの頭に
package Sub;
use Exporter;
@ISA = qw(Exporter);
@EXPORT_OK = qw(sub);
とやって、あとは普通に定義する。
sub {}
0619nobodyさん
02/07/31 12:39ID:???>> my $hoge, $hoge2;
ラクダ本216より
この演算子(my)はコンマよりも優先順位が高いので、2個以上の変数を指定する場合
には、変数の並びをカッコで囲まなければならない。
0621613
02/07/31 12:46ID:???で、できますた!
test_sub.cgiの記述
sub test{print"てすと";}
1;
test.cgiの記述
#!/usr/bin/perl
require './test_sub.cgi';
&test;
>>618様
更に高度な技のご伝授で感激です。
これから解析して勉強します。
お二神様ともありがとうございます。
0622nobodyさん
02/07/31 13:27ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0623nobodyさん
02/07/31 13:31ID:???if($tmp[2] eq $name && $tmp[6] eq $comment) {&error("二重投稿はできません");}
とやったのですが反応しないため
if(($tmp[2] == $name) && ($tmp[6] == $comment)) {&error("二重投稿はできません");}
とやったらできるようになりました。
しかし他の人のコードを見ると前者のようにしてあるのですが
なぜか自分のでは反応しませんでした。
原因がなにかわからないでしょうか?
0624nobodyさん
02/07/31 13:31ID:PJX78SBC$tmp[6]には1番最近書きこまれた記事のコメントが格納されています。
ログファイルに書きこむ際は
my($tmp) = "$no<>$subject<>$name<>$email<>$url<>$time<>$comment\n";
open(DATA,">$logfile") || exit;
unshift(@data,$tmp); print DATA @data; close(DATA);
のようにしています。
一番最近書きこまれた記事の投稿者名やコメント情報は
open(DATA,"$logfile") || exit;
my(@data) = <DATA>; close(DATA);
my(@tmp) = split(/<>/,$data[0]);
のようにして取り出しています。
0625nobodyさん
02/07/31 13:34ID:???\nの扱いがどうなってるかだな。
ログの保存を
my($tmp) = "$no<>$subject<>$name<>$email<>$url<>$time<>$comment<>\n";
に変えて、上の方法にしてみたら?
0627nobodyさん
02/07/31 13:39ID:???0628nobodyさん
02/07/31 14:05ID:???$template->param('ROW',[
{ name => 'Bobby',
nicknames => [
{ name => 'the big bad wolf' },
{ name => 'He-Man' },
],
},
],
);
みたいな処理だと、変数の数が必然的に決まってしまうんで
配列を使って、ネストしたnicknamesに入れるハッシュの数を自由に操作したいんですけど、
0629nobodyさん
02/07/31 14:06ID:???while (@name) {
my %row_data;
$row_data{'NAME'} = shift @name;
push(@nicknames, \%row_data);
}
$name = 'Bobby';
$nickname = 'He-Man';
my %row_data;
$row_data{'NAME'} = $name;
$row_data{'NICKNAME'} = $nickname;
push(@loop_data, \%row_data);
まではいいんですが、@loop_dataに@nicknamesを入れるにはどうすればいいんですか?
push(@loop_data, \@nicknames); などではダメですが
それとも他に配列をネストするための何らかの方法が?
0630nobodyさん
02/07/31 14:12ID:PJX78SBCmy($tmp) = "$no<>$subject<>$name<>$email<>$url<>$time<>$comment<>\n";
こうやってみたんですがだめでした。
0632nobodyさん
02/07/31 15:11ID:PJX78SBCmy(@tmp) = split(/<>/,$data[0]);
$tmp[6] =~ s/\n//;
if($tmp[2] eq $name && $tmp[6] eq $comment) {&error("二重投稿はできません");}
というようにしろということでしょうか?
0633nobodyさん
02/07/31 15:22ID:PJX78SBC0634nobodyさん
02/07/31 15:33ID:???あんたの財布の中身は他人には解らん
変数の中全部吐き出してみろよ
0635comeoneverybody
02/07/31 16:20ID:JJGI7Csk添付ファイル付きメールををセンドメールで送るんですが、
@filesの部分に添付ファイルを入れれます
stdio::sendmail(\%header, $body, $html_body, 0, @files);
こうするとうまくいかないのですが、プログラムの別の部分で
@filesの中身を吐き出してやって、コピペしてやるとなぜかうまくいきます。
stdio::sendmail(\%header, $body, $html_body, 0, '../../aaa.txt',);
すごく単純なことだと思うのですが、なにか解決のヒントください。
おながします。
0637nobodyさん
02/07/31 16:38ID:PJX78SBC1<>書き込みテスト<>名無しさん<>***@***.com<>http://www.***.com/<>2002/07/31 15:14:19 (Wed)<>書きこみテスト<>
です
0638comeoneverybody
02/07/31 16:47ID:JJGI7Cskすると配列そのものを羅列させるには
stdio::sendmail(\%header, $body, $html_body, 0, "@files");
とするべきということですか?
0639nobodyさん
02/07/31 16:53ID:???http://server.maido3.com/
へ飛ばされるんだけど俺だけ・・?
0640nobodyさん
02/07/31 17:05ID:???web powerのstdio.plライブラリーですか。
sendmailのパスが無いようなきがするけど。
その@fileの内容が知りたい。
0641nobodyさん
02/07/31 17:06ID:???0642comeoneverybody
02/07/31 17:13ID:JJGI7Csk>web powerのstdio.plライブラリーですか。
あ、そうです。
sendmailのパスはとうの前に記述してます。
ですから、添付されて無いメールは届きますし、
@filesの中身を吐き出してコピペするとちゃんと添付されて届くんですよ。
中身は
'../aa/1234.txt', '../aa/1235.txt', '../aa/1236.txt',
こんな感じです。
0643nobodyさん
02/07/31 17:33ID:9/C2v2FPタグが禁止なので<,>は<と>に直してデータに保存しています。
で、投稿内容を表示する時は、
$naiyou =~ s/<br>/<br>/g;
こういう感じで改行部分だけ直して表示してます。
で、投稿内容を修正する機能があって<textarea>$hoge</textarea>
という感じで表示して入力してもらいます。
この時、逆に文字の中に<br>が入ってしまって変です。
なので今度は<br>を改行コードに戻して表示しなきゃいけません。
改行コードはOSによって違うので
$naiyou =~ s/<br>/\n/g; # unix
$naiyou =~ s/<br>/\r\n/g; # win
$naiyou =~ s/<br>/\r/g; # mac
という風にOSによって書き分けないといけないですよね?
OSはジャバスクリプトで分ければいいってことでしょうか。
0644nobodyさん
02/07/31 17:34ID:???これかな、何か間違えてるんじゃ無いの?
(\%header, $body, $html_body, 0, '../aa/1234.txt','../aa/1235.txt', '../aa/1236.txt');
こうしたらどうなるの?
0647480
02/07/31 18:12ID:???「コテハンの騎士は一人残らず皆殺しだ(´・ω・`)」(←SWのみすぎ)
ム板Perl6スレでの君の活躍は見事だ。放置プレイマンセーだな(少尿
>>490
あぁ俺英語読めんからいまだにコンパイルできん。
だいたいnmakeうってもできんぞ。詳しく教えろ。
0648480
02/07/31 18:14ID:???ParrotはまえLinuxでmakeできんで泣いたがなぜかCygwinでコンパイルできたよ。
名前しか聞いたことなかったけどおもろそうだな。
とりあえず上げとく(Cygwinとgccまわり&bisonが動けば誰でもコンパイルできる)
http://hiero_pl.tripod.co.jp/parrot.exe
http://hiero_pl.tripod.co.jp/testparrot.bin [parrotテストコード]
↑ホントはtestparrot.pbcだがなんかうまくダウソできんので拡張子はbinにした。
http://hiero_pl.tripod.co.jp/ index.
それなりに向上心があるやつなら.EXEみりゃだうそしてちょっと試すくらいする
だろうからな、、というか俺がそうだ。なんでPerl6スレの糞どもはそういうこと
(物をうぷすること)ことすらせんのかな?
MLでオナ○ーが癖になると怖いな、そうだろJAPH9PWA。
0649480
02/07/31 18:17ID:???*.p6 //perl6 のコード ->parrot/languages/perl6/perl6[perlスクリプト] 使用
*.colac //C#っぽい ->parrot/languages/cola/colacc.exe 使用
*.imc //.,,pasmとなにが違うの? ->parrot/languages/imcc/imcc.exe 使用
*.pasm //、、、アセンブラ? ->parrot/assemble.pl 使用
*.pbc //perl byte Code ->parrot/parrot.exe 使用
[colac の流れ]
./colacc.exe kusokote.colac =>a.imc
./imcc.exe a.imc =>a.pasm
./assemble.pl a.pasm => a.pbc
./parrot.exe a.pbc [実行]
0650480
02/07/31 18:19ID:???./perl6 test.p6 ->test.imc test.pasm test.pbc 生成 ->test.pbc [実行]
*assemble.pl自体はXSとかつかったPerlスクリプトでないのでActivePerlでも実行できた(はず)
perl6もActivePerlで動きそうだけどまぁ試したときは動かんかった。
まぁassemble.plが動けばparrot.exeを試すことぐらいはできるはず。
perl6についてはム板perl6スレに行けば参考リンクが最初に貼られてたので
そっちをミテちょんまげ!。
0651630
02/07/31 19:02ID:???0652597
02/07/31 19:09ID:S7Hc+7gVありがとうございました!
出来ました!!
0653nobodyさん
02/07/31 19:13ID:GgEH/D5c上にも書いてるじゃないか
$foo eq $bar
が真にならないのは$fooと$barの中身が違うからだよ
print 関数の使い方検索して出力してみろよ
もし、同じ文字列なのに偽になるんだったら
サーバの管理者に聞きなさい
0654>651
02/07/31 19:24ID:???0655comeoneverybody
02/07/31 19:27ID:JJGI7Cskそそ、それです。
で、いまやってみましたら上手く行きました。
(\%header, $body, $html_body, 0, '../aa/1234.txt','../aa/1235.txt', '../aa/1236.txt');
これは上手くいくんですが、配列にしたときに上手くいかないんですよ。
0657nobodyさん
02/07/31 20:00ID:???ホントに試したの?
$aa = '../aa/1234.txt'; $bb = '../aa/1235.txt';
(\%header, $body, $html_body, 0, $aa,$bb);
これならどうなるの?
配列の使い方知ってる?
>>656
それはクライアントの仕事だから、その為にContent-typeがあります
HTML書く時に一々ジャバスクリプト? でクライアントのOSを判定
しますか?
そんな事しなくてもクライアントがソースを見るとちゃんと置換されて
ますね
何故ならそれはブラウザちゃんのお仕事だからです
0658comeoneverybody
02/07/31 20:18ID:JJGI7Csk試しました。こっちは必死ですから。
本気でperl始めてまだ2週間です。
配列もなんとなく使ってはいたんですが。
@files=(@files,"'../aa/$form{$my}.txt',");
こんな感じで作ってます
0659comeoneverybody
02/07/31 20:22ID:???それも行けました
0660630
02/07/31 20:25ID:???>>$foo eq $bar
>>が真にならないのは$fooと$barの中身が違うからだよ
>>print 関数の使い方検索して出力してみろよ
>>もし、同じ文字列なのに偽になるんだったら
>>サーバの管理者に聞きなさい
出力しても同じ文字でした。ローカルでテストしてるので鯖管は自分です
print unpack('C*', $foo), "\n";
print unpack('C*', $bar), "\n";
0662657
02/07/31 20:37ID:???ネタ?どう考えてもドキュメント読んだ方が早い
http://www.ie.u-ryukyu.ac.jp/~kono/perlman/cat1/perldata.html
@files = ('../aa/1234.txt','../aa/1235.txt', '../aa/1236.txt');
(\%header, $body, $html_body, 0, @files);
それとそのライブラリ、そのまま使うと何でも通すので
多分攻撃されます($form{$my})、ファイル消されます、入力チェック必須
>>660
良く読んで無いけど同じ文字列をeqで評価して真にならないなら
PERLかOSか機械が壊れてます。
0663nobodyさん
02/07/31 20:48ID:???改行って目に見えないんだよな・・・。
0664comeoneverybody
02/07/31 21:16ID:???なんか間違っているということですか?
ドキュメント読んで出直します。
一応、パスワード入力+アクセス制限+外からアクセスできないディレクトリ
とか使って、セキュリティには気をつけてます。
0665comeoneverybody
02/07/31 21:47ID:???ひらめいたぽ
0667nobodyさん
02/07/31 21:54ID:6r/wlS/6それとそのライブラリ、そのまま使うと何でも通すので
多分攻撃されます($form{$my})
0668630
02/07/31 22:04ID:???プライベート変数myをifで囲んでいたためifから出たら空になってました
1回printで出力してみたのですがそのとき運悪くifの中にコーディングしたため
ちゃんと表示されてしまったということでした。
答えてくださった方ありがとうございました。>>627さんので当たりでした。
0669comeoneverybody
02/07/31 22:06ID:???ありがとうございました。
@files=(@files,"../aa/$form{$my}.txt');
これでやってみようと思います。
キタ━━━━━(゚∀゚)━━━━━!!!!
解決しました。
本当にありがとうございました。
0670nobodyさん
02/07/31 22:32ID:afTQxJxlりゃま本、らくだ本、その他、
初心者向けの古本探して買おうかと思っていますが
最新版でなくてもよいでしょうか?
0671nobodyさん
02/07/31 22:33ID:oq+m6OUNそれでは、<br>を改行コードに戻したい時は「\n」に置き換えれば
あとはどのOSで見ても勝手に改行してくれるという事ですよね?
0672nobodyさん
02/07/31 23:02ID:???古本屋にラクダ本がある素敵な場所があるなら教えて欲しいわ!(w
すれ違いなんで↓いきなさい
http://pc.2ch.net/test/read.cgi/php/988809842/
最新版じゃなくていいだろうが、、ラクダ2版は死んでも買えよ。
0673nobodyさん
02/07/31 23:03ID:???改行されるに決まってるだろ。
それとも誰かにその事の補償でもさせたいのか、裁判官みたいだな
0674670
02/07/31 23:25ID:???誘導ありがとうございます。
らくだ2版っと、メモメモ・・・
親に駄々こねて、買ってもらおうとしたら受験生なので却下されますた。
こんど、参考書を買うと騙してらくだ本買うように企んでいます(藁
お金欲しい・・・・
0675nobodyさん
02/08/01 00:24ID:???$row_data{'NAME'} = $name;
$row_data{'NICKNAME'} = $nickname;
$row_data{'NICKNAMES'} = \@nicknames;
push(@loop_data, \%row_data);
HTML::Templateのループネストって、普通でもややこしいのに、
もっと見通しの良い変数名を使ってホスィぞ。(外と内で同じ
%row_data を使ってるとか)
0677nobodyさん
02/08/01 04:41ID:???ありがとうございます!!
ただ、>>629をループ処理すると、@loop_dataの中身はうまく表示されるんですが、
@nicknamesの部分は最後に入れたハッシュだけが適用されるようですね…
つまり、BobbyやHe-Manの部分をループ毎に変えても、結局最後に入れたハッシュの内容が
全てのNICKNAMESの部分に表示されると・・・。
0678nobodyさん
02/08/01 07:48ID:M7oaAkIZこの意味がおわかりになる方いらっしゃいますか?
おそらく、telnet経由でread cgiにアクセスし、logから住人のアクセス情報を
出すということを言っているのだと思うのですが、実際現在そのようなことはできるのでしょうか?
http://tmp.2ch.net/test/read.cgi/mog2/1028122076/30-59
0679nobodyさん
02/08/01 08:52ID:???2ch全体でログ取ってすらいない。
何か起きたときだけ、緊急に取る。
0680nobodyさん
02/08/01 09:00ID:???windowsしかなくてunixやmacで試せないから聞いてるんだよ。
お前はプログラムしか能のない馬鹿か?
論理的に理解できてるならそれぞれの環境で試さなくてもわかるんだろうが
俺はお前のように論理的にわからないからいちいち自分で試せないことは聞いてるんだよ。
こんなことわざわざ説明しなきゃいけないなんて、だからプログラマー同士って良く対立してるんだね。
わかったら、KENTのlight.cgiはなぜ\rで置き換えているか説明しろ。
0681nobodyさん
02/08/01 09:45ID:???Windowsで試せばいいと思うが。
\nがUNIXでちゃんと表示されるのは当たり前。
\nがWinでOKならMacでもOKだろうと推測する頭を持て。
>KENTのlight.cgiはなぜ\rで置き換えているか説明しろ。
KENTがマカーだからだよ。
改行コードはどれにしてもIEやネスケではちゃんと表示される。
サーバがUNIX系ならUNIXの改行コードを使うのがいいんじゃないかということだな。
0682nobodyさん
02/08/01 10:55ID:xj2aK3qvまず、論理的にわかるように努力しる! 個別に試してうんぬんなんて
無駄なこと。KENTがどうのなんて気にするな。人気があるのはイイ
スクリプトを書いているからじゃない。
0683nobodyさん
02/08/01 11:22ID:???まぁまぁ。マターリしようYO。
そのテキスト形式のログを<pre>で囲んじゃ駄目なのか?
まともなブラウザなら改行コードにかかわらず表示できるYO。
0685nobodyさん
02/08/01 12:46ID:???ああ、妄想ファンタジーに突入してるんか
>KENTのlight.cgiはなぜ\rで置き換えているか説明しろ。
教えて欲しいならコード書け、KENTて誰だ?
まあ推測して書くと、そいつが馬鹿だからだな
perlの改行コードは\nなの、OSがUNIXだろうがマクだろうが
朝鮮人参だろうが関係無い
馬鹿以外の人間はんな事使って3日で気付くんだよな
馬鹿が馬鹿を見本に馬鹿なやり方で馬鹿妄想するから
普通の人間からドンドン遠ざかって行くんだよ
http://natto.2ch.net/denpa/
0686nobodyさん
02/08/01 12:47ID:???お前は根本的に社会生活に問題が有ると思うね
■ このスレッドは過去ログ倉庫に格納されています