Perl 初心者コーナー Part21
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/03/18 18:47ID:Dujz7IUF【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 9
http://pc.2ch.net/test/read.cgi/php/1041530204/
参考書籍の話題は、【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0709nobodyさん
03/04/05 22:51ID:???調べてきます。
0710
03/04/05 23:10ID:sLGWgkab0711nobodyさん
03/04/05 23:11ID:RuMeXkuC0712nobodyさん
03/04/05 23:27ID:???0713間違えた
03/04/05 23:28ID:???0714nobodyさん
03/04/05 23:30ID:RuMeXkuCありがとうございます.できました!
0715nobodyさん
03/04/06 00:32ID:httIMQcy0716
03/04/06 00:43ID:88ZLH8qE$ENV{'HTTP_COOKIE'}に値がはいっていれば在り、無ければ無し
0717nobodyさん
03/04/06 00:53ID:/U6PDdMCそれは自分のCGIから吐き出されたクッキーなんですか?
0718
03/04/06 01:00ID:88ZLH8qEそれはクッキーの設定次第w
http://www.futomi.com/lecture/cookie/index.html
自分とこのクッキーかどうか確認したい場合は、クッキーの内容を確認してw
http://www.futomi.com/subroutine/getcookie.html
0719nobodyさん
03/04/06 02:34ID:ONKJQ6B10721間違えた
03/04/06 02:58ID:???でいいだろ。
0722nobodyさん
03/04/06 03:07ID:oW/lvYediisを作動させてブラウザからcgiの確認なんかはできるんですけど、
コマンドプロンプトでの動かし方がわかりません。
どこかの説明で「コマンドプロンプトを開いてper-vと打ち込む」
って書いてあったんですけど、
>'perl-v' は内部コマンドまたは外部コマンド、
>操作可能なプログラムまたはバッチ ファイルとして認識されていません。
ってでてきます。
それ以前に最初から、
>C:\Documents and Settings\***>
これが表示されてるんですけど、この後にperl-vって打つのであってますか?
つまり
>C:\Documents and Settings\***>perl-v
こう打つと
>'perl-v' は内部コマンドまたは外部コマンド、
>操作可能なプログラムまたはバッチ ファイルとして認識されていません。
こうなります。
0723nobodyさん
03/04/06 03:11ID:???まず
C:\Documents and Settings\***>perl -v
と打ってみろ。それでも失敗したら
C:\Documents and Settings\***>PATH
の結果を貼れ
(>>721の名前欄無視して)
0726nobodyさん
03/04/06 03:22ID:???この前見たページ確認しにいってきたらスペース入ってました。
すいませんでした
0727nobodyさん
03/04/06 03:43ID:ONKJQ6B1アクセス解析の入っているページで
use LWP::Simple;
my $url = "http://yahoo.co.jp/";
my $content = get($url);
print $content;
と、ソースを取得した時に
アクセス解析でlwp-trivial/1.35解析されずに
Monazilla/6.00と解析されるようにしたいです。
0729nobodyさん
03/04/06 04:02ID:???$ua->agent(Saitama');
perldocなり、cpan也でもうちょっと調べるべきであるかな
0730nobodyさん
03/04/06 08:03ID:xn7ICdMG.cgiのファイルをいじっていて、その中にメールアドレスを
書こうとしたらエラーになります。
どうも@を書くとエラーになるようですが
cgiの中に@を記入したい場合どうしたらよいのでしょうか?
0731nobodyさん
03/04/06 08:09ID:???書こうとしているのだと想像します。
その場合、@ が配列変数として認識されてしまっているので、
@ の直前に \ をつけて書くことをお勧めします。
あるいは、変数が展開されないシングルクォートで、文字列
をくくるという方法もあります。
今後は、エラーが出たときは、エラーメッセージをここに
貼り付けてご質問されることをお勧めします。
0732nobodyさん
03/04/06 08:09ID:???$email = "foo\@example.com";
$email = q([email protected]):
0733あぼーん
03/04/06 08:37ID:???( ´∀`)/<先生!こんなのがありました!
_ / / / \___________
\⊂ノ ̄ ̄ ̄ ̄\
||\ \
||\|| ̄ ̄ ̄ ̄ ̄||
|| || ̄ ̄ ̄ ̄ ̄||
http://saitama.gasuki.com/saitama/
0734nobodyさん
03/04/06 08:41ID:???0735あぼーん
03/04/06 08:42ID:???http://muryou.gasuki.com/moe/jaz04.html
http://muryou.gasuki.com/moe/jaz03.html
http://muryou.gasuki.com/moe/jaz02.html
http://muryou.gasuki.com/moe/jaz01.html
http://muryou.gasuki.com/moe/jaz06.html
http://muryou.gasuki.com/moe/jaz05.html
http://muryou.gasuki.com/moe/jaz08.html
http://muryou.gasuki.com/moe/jaz07.html
http://muryou.gasuki.com/moe/jaz10.html
http://muryou.gasuki.com/moe/jaz09.html
0736nobodyさん
03/04/06 11:52ID:xQ2onnJ6自鯖構築に利用したいのですが、独自ドメインからWebサーバーに飛ばして、
そこで、perlが処理するのですが、
if ($自鯖稼動状態 == 1) {
print "Location: $ZISABAurl\n\n";
} else {
print "Loaction: $WEBSABAurl\n\n"
}
みたいにしたいのですが。
0737bloom
03/04/06 12:25ID:Ne2teiuv0738あぼーん
03/04/06 12:39ID:???/:\.____\
|: ̄\(∩´∀`) \ <先生!こんなのがありました!
|:在 |: ̄ ̄ U ̄:|
http://saitama.gasuki.com/aomori/
0739あぼーん
03/04/06 12:43ID:???! i iノノリ)) 〉
i l l.´ヮ`ノリ <先生!こんなのがありました!
l く/_只ヽ
| ̄ ̄ ̄ ̄ ̄|
http://muryou.gasuki.com/koumuin/
0740邪穂
03/04/06 13:36ID:xn7ICdMG(´皿`;)了解しました。どうもありがとうです。
0741nobodyさん
03/04/06 18:25ID:???http://pc2.2ch.net/test/read.cgi/tech/1048519394/l50
0744nobodyさん
03/04/07 12:23ID:???0745nobodyさん
03/04/07 21:42ID:???0746nobodyさん
03/04/08 05:31ID:???0747nobodyさん
03/04/08 07:17ID:???#param.text
$param1 = 'value1';
$param2 = 'value2';
という変数宣言文が有り、これを読み込んで記述された通りの変数に展開
するにはどうすれば良いのでしょうか?
open( FILE , 'param.txt');
@buf = FILE;
close(FILE);
foreach(@buf){
$_;
};
print "param1 = $param1\nparam2 = $param2\n";
という感じにしても駄目でした。
0748nobodyさん
03/04/08 07:27ID:???直接の回答じゃないけど、スカラー変数の名前をtxtファイルで
指定しとくのはやめたほうがいいんじゃないかな。
ハッシュでやりましょう。
0749747
03/04/08 07:41ID:???いや、本当はやりたくないんですが、既存のFileを再利用しつつ
新規のprogramを作れというデムパな指令がおりてきまして・・・
なにやらNTT謹製のcgiがこの方法を使っているとかで、既存のFileを
出来るだけいじらずにProgram側で処理しなくちゃならんという事に
なったので困っている次第なのです。
#やっぱ'$'消して連想配列に突っ込むってのが一番安全な方法かなぁ。
0750nobodyさん
03/04/08 07:52ID:???じゃだめなの?
0751nobodyさん
03/04/08 07:56ID:???perl -e '$a="param1"; $$a="value"; print $param1;'
っていう方法もあるよ。
適当に書くと
foreach(@buf){
my ($var,$val) = split(/=/,$_);
$$var = $val;
};
print $param1;
(合ってるかな?)
0752nobodyさん
03/04/08 08:03ID:???open(FILE , 'param.txt');
@buf = <FILE>;
close(FILE);
foreach (@buf) {
my ($var, $val) = split(/\s*=\s*/,$_);
$var =~ s/^\$//;
$val =~ s/^["']//;
$val =~ s/;\s*$//;
$val =~ s/["']$//;
$$var = $val;
}
print "param1 = $param1\nparam2 = $param2\n";
0753747
03/04/08 08:11ID:???えぇと、元になるparam.txtが複数(別名で)有って、呼び出される時の
パラメータ(formの内容次第)で読み替える様にしなくちゃならんので
requireは使用不可と判断しました。
>>751
なるほど、「可変変数」という手が有ったのですね。
あとは改行と「'」消しだけで問題無く(根本的解決では無いが)出来そう
です。
ありがとうございますです。
0756747
03/04/08 11:02ID:???whichfileが存在しない場合ってエラーになりませんでしたっけ?
・・・という事を考えて敢てFile読み込みの方向で考えていたんですが。
0757nobodyさん
03/04/08 11:05ID:KoNa94bz記事の削除機能、修正機能を加えたいと思っています。
記事ナンバーとパスワードを入力し、該当の記事を引き出す事には成功しましたが、
そこからのログファイルの操作?がよく分かりません。
よろしければご教授下さい。お願いします。。
0758nobodyさん
03/04/08 11:11ID:???それだけでどうやって答えろって(ry
該当レスをテキストエリアにでも表示させて編集後に再書込み
該当レスを削除してログを前につめるか削除メッセージで代替して再書込み
そんなとこじゃないの
0759757
03/04/08 11:33ID:sQEXk45Gすいません、、ありがとうございます。
0761nobodyさん
03/04/08 17:58ID:???ディレクトリを削除ってことはできないですかね?
rmdirじゃあ、中に入ってると消してくれないんで
0763nobodyさん
03/04/08 19:07ID:???思いついたんだけど、同じ事考えた人っている?
0764nobodyさん
03/04/08 19:08ID:???れすどうもです。
これは何でしょう?コマンドかなんかでしたっけ?
んーやっぱりディレクトリの中調べて、全部消してrmdirにしようかな
0765nobodyさん
03/04/08 19:17ID:???http://www.linux.or.jp/JM/html/GNU_fileutils/man1/rm.1.html
0766nobodyさん
03/04/08 19:35ID:???print OUT "$data0\n";
print OUT "$data1\n";
print OUT "$data2\n";
print OUT "$data3\n";
print OUT "$data4\n";
print OUT "$data5\n";
print OUT "$data6\n";
print OUT "$data7\n";
print OUT "$data8\n";
print OUT "$data9\n";
print OUT "$data10\n";
ってやってます。
もっと簡単にできる(書ける)方法を伝授くださいませ。
0768nobodyさん
03/04/08 19:50ID:???$data{$i} = "$i番目の要素";
}
for ($i = 0; $i <= 10; $i++) {
print "$data{$i}\n";
}
こんな感じね。
0773nobodyさん
03/04/08 20:44ID:???0774nobodyさん
03/04/08 21:11ID:???0775nobodyさん
03/04/08 21:12ID:???本当にあった怖い話実況スレと間違えた・・・
0776nobodyさん
03/04/08 21:49ID:???0777nobodyさん
03/04/08 23:02ID:???perldoc File::Path
>>747
my %files = (
foo => 'foo.pl',
bar => 'bar.pl',
foo_alias => 'foo.pl',
);
my $configfile =$files{ $form{wichfile} };
do $configfile if -e $configfile;
0779nobodyさん
03/04/09 00:39ID:XTBH8kIamod_perl でeval ってやっても問題なし?
eval ってその中に書かれた文字列をコードとして認識するってことは
その中の文字列をコンパイル→実行 ってわけだよな?
mod_perl ってコンパイルしたコードをメモリに置いておくもんだが、
eval でコンパイルされたコードはゴミとしてメモリに残ったりしない?
あと、@list = qw(a,b,c,d,e,f,g);
ってのがあるとき
$list[2] は c
$list[5] は f
ってのは当たり前なんだが、
$list[25] ってのを参照しようとしたら
普通は未定義値となると思うんだが、-w スイッチつけると
Use of uninitialized value in concatenation
とかエラー出る。
mod_perl で安定したプログラム作るとき、
こういうのもやめたほうがよい?
0780251
03/04/09 01:41ID:???せめて配列を覚えよーよ・・・
0781nobodyさん
03/04/09 05:00ID:7s8viccHevalの実行結果が残ると思っているならんなことはない
というか、oオプション使ったマッチングで結果が残らないようにわざとevalでくくったりする
evalの中はコンパイルされないのよ。単なる文字列だから。だから実行中にランタイムエラーを拾える。
未定義値の参照は、mod_perlでも問題ないよ。(たしか)
ただ、未定義の領域にアクセスするなんてperlだから許されることで、
お勧めはしない。
(個人的には-wオプションでランタイムで出る警告気にしてたらperl使う意味無いと思うけど。)
0782nobodyさん
03/04/09 05:36ID:???evalは>>781の通りで、mod_perlでの問題はないはず。
蛇足だがグローバル変数のほうを気にしたほうが。
-wでのwarnは、漏れは気にしてしまうほうだが
配列の添字を直接指定して使うことがあまりない。
必要なときはdefinedや要素数で念のためチェックする。
本当にその警告が出ても問題ない場合は、no warnings 'warnings-category';として一時的に警告を無効にすればいいんだし。
0784nobodyさん
03/04/09 13:23ID:azVD19ZGあるでしょうか?
外のサーバにアドレスを吐き出すプログラムを置いて、チェックする方法以外を
教えてください。
0785nobodyさん
03/04/09 13:26ID:1sAaMz5Uバイナリーファイルを読み込もうと思うのですが、
どうも変数に何も入らないみたいです。
open(IN, 'test.bin');
binmode(IN);
sysread(IN, $buf, 64);
close(IN);
何がいけないのでしょうか?
0787785
03/04/09 13:48ID:1sAaMz5U自分はC長いことやってて、perlは初心者なんですが、
perlだとテキストを行単位で読み込むことは簡単ですが、
バイナリーをバイト単位で読み込む方法がよくわからない。
というか、どうやってもうまくいかない。
Cだとstdioでもioでもバイナリー読み込みは簡単に出来るのに
perlにはそういう機能が無いのかなと思って。
0789nobodyさん
03/04/09 14:04ID:???何がいけないんだろね。
とりあえず俺の環境ではそのソースで動いたよ。
syswrite で変数の中身出して目で比較したんだけども。
0791785
03/04/09 14:08ID:1sAaMz5Uまったく別の部分が原因でデータがうまく取得できてなかったみたい。
つまんない質問でスレを汚してしまってすみませんでした。ペコーリ
0792nobodyさん
03/04/09 18:28ID:yosCCaSF4と6の列を入れえるときは
$a = 4;
$b = 6;
とフォームからもってきます。
例:
7<>こんにちは<>2002/4/9<>
6<>おはよう<>2002/4/9<>
5<>おやすみ<>2002/4/9<>
4<>さようなら<>2002/4/9<>
3<>ごきげんよう<>2002/4/9<>
▼(4と6を入れ替え)
7<>こんにちは<>2002/4/9<>
4<>さようなら<>2002/4/9<>
5<>おやすみ<>2002/4/9<>
6<>おはよう<>2002/4/9<>
3<>ごきげんよう<>2002/4/9<>
この様な形で再度ログファイルに保存したいのです。
push関数で上手くいかないものなのでしょうか?
ご教授をお願いします!
0793nobodyさん
03/04/09 18:34ID:???0794nobodyさん
03/04/09 18:35ID:???0795nobodyさん
03/04/09 18:40ID:???自分なりに使う関数を思いついてるのに、何故実行に移さぬのですか。
GOサインもらわんとコード書けんわけでもないでそ。
0797792
03/04/09 18:47ID:FE+VX2Y9色々と試行錯誤しているのですが、
実行すると…
7<>こんにちは<>2002/4/9<>
4<>さようなら<>2002/4/9<>
5<>おやすみ<>2002/4/9<>6<>おはよう<>2002/4/9<>3<>ごきげんよう<>2002/4/9<>
と入れ替えた場所以降が全てつながってしまいます。
使う関数はspliceの方がベストなんでしょうか?
0799792
03/04/09 18:56ID:FE+VX2Y9入れ替えるところだけを変えるので、
そこは\nを入れているのですが…
0800nobodyさん
03/04/09 19:00ID:???0802nobodyさん
03/04/09 19:08ID:???0803nobodyさん
03/04/09 19:27ID:2liy07Cv素敵な お相手が貴方を待っています!
もちろん 女性は完全無料です!
http://www.sweet.st
0804nobodyさん
03/04/09 19:32ID:???やっちゃぇ〜ぱぱぁん♪
0805nobodyさん
03/04/10 02:09ID:???chop;
my ($no,$aisatu,date) = split(/<>/);
・
・
・
push(@new,$_\n)
}
0806nobodyさん
03/04/10 04:43ID:???0807nobodyさん
03/04/10 05:27ID:???}
こうすると、キーを文字コード順で並び替え、
処理することができるんですが、
数字順?で並び替えて処理するのは可能でしょうか?
可能なら方法など教えていただけないでしょうか?
つまり上のなら
122 , 13 , 1778 , 2
と並ぶとおもいますが、
2 . 13 . 122 . 1778
でソートして処理したいってことです。
0809nobodyさん
03/04/10 05:53ID:???>こうすると、キーを文字コード順で並び替え、
残念。そのままでは並び替えはされません。
文字コード順に並び替えるには、sort をつけるだけでok。
foreach $key (sort keys %hash) {
}
数字順にするには、sortに条件式を指定してやります。
foreach $key (sort { $a <=> $b } keys %hash) {
}
■ このスレッドは過去ログ倉庫に格納されています