Perlコーディング初心者質問スレ Part 52
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/09/15(金) 14:01:51ID:gobry0n2【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >>2-10
前スレ http://pc8.2ch.net/test/read.cgi/php/1153987463/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0584nobodyさん
2006/10/24(火) 22:28:54ID:???なんで固定するの?バカじゃね?
0585581
2006/10/24(火) 23:26:18ID:???ローカルファイルを開く場合には HTTP レスポンスヘッダによるメタ情報の供給を期待できないからです。
また HTTP 越しに text/plain なファイルを直接要求する場合であって、サーバの設定が原因で文字化けする場合には、サーバの設定変更が必要になるでしょう。
その権限が与えられていないか、または方法がわからない場合、「文字化けしないようにブラウザでファイルを開く」確実な方法はやはり >>581 で述べたとおりになります。
そろそろ Perl の質問をしてくれるとうれしいです。
0586nobodyさん
2006/10/25(水) 01:27:54ID:???ただそれだけじゃないか・・・
0587nobodyさん
2006/10/25(水) 07:32:20ID:???0588nobodyさん
2006/10/25(水) 07:42:09ID:JgcYGtyQ0590nobodyさん
2006/10/25(水) 07:46:42ID:???0591nobodyさん
2006/10/25(水) 13:09:45ID:???ローカルなら画面右クリック→エンコード
文字化け相談スレはここですか?
0592nobodyさん
2006/10/25(水) 14:04:42ID:???このスレは多いね
見てて、すっげぇ香ばしいw
0593nobodyさん
2006/10/25(水) 14:15:28ID:???0594nobodyさん
2006/10/25(水) 15:29:36ID:???ごくろうさまですお
0596nobodyさん
2006/10/25(水) 15:53:43ID:???質問の仕方が悪いだけ。
0597nobodyさん
2006/10/25(水) 16:01:11ID:???0598nobodyさん
2006/10/25(水) 16:08:37ID:???VIPPERLER最強
0599nobodyさん
2006/10/25(水) 16:31:24ID:???0600nobodyさん
2006/10/25(水) 16:41:05ID:???0601nobodyさん
2006/10/25(水) 16:58:38ID:???0602nobodyさん
2006/10/25(水) 17:34:36ID:???0604nobodyさん
2006/10/25(水) 18:03:17ID:???0605nobodyさん
2006/10/25(水) 18:31:16ID:???だ か ら ど う し た
0606nobodyさん
2006/10/25(水) 18:44:41ID:???つ旦
0607nobodyさん
2006/10/25(水) 18:54:59ID:???0608nobodyさん
2006/10/26(木) 17:17:15ID:QapkI+o5方法はあるのでしょうか?
$delfile = "../test/test_*";
unlink($delfile)
上記ではもちろん成功しませんが、行いたい事はこのような事です。
0609nobodyさん
2006/10/26(木) 17:25:48ID:???0610nobodyさん
2006/10/26(木) 17:31:44ID:???0611nobodyさん
2006/10/26(木) 17:40:41ID:???while(my $file = readdir(DIR)){
next if -d $file;
unlink($file) if $file =~ /DELFILES/;
}
適当すぎるなこれ (;´д`)
0612nobodyさん
2006/10/26(木) 17:58:01ID:???0613nobodyさん
2006/10/26(木) 18:12:33ID:???0614nobodyさん
2006/10/26(木) 18:41:40ID:???0615nobodyさん
2006/10/26(木) 21:44:45ID:???以下のファイルロックでは何か不備があるのでしょうか?
フリーから取ってきた掲示板なのでファイルロックなどは良くわからないんですが・・・。
sub filelock {
foreach (1 .. 5) {
if (-e $lockfile) { sleep(1); }
else {open(LOCK,">$lockfile");close(LOCK);return;}
}
&error("只今他の方が書き込み中です。");
}
0616nobodyさん
2006/10/26(木) 22:05:58ID:???一目でわかるほど明確な不備がある。
-e $lockfileとopen(LOCK,">$lockfile");の間に他のプロセスが割り込めて、それが検知できない。
具体的な安全な方法については色々あるからこの辺でも読んでくれ。
ttp://homepage1.nifty.com/glass/tom_neko/web/web_04.html
0618nobodyさん
2006/10/26(木) 22:07:31ID:???sub filelock {
foreach (1 .. 5) { # 以下の処理を5回繰り返す。
if (-e $lockfile) { # もし$lockfileが既に存在したら(A)
sleep(1); # 1秒待機して(A)に戻る。
} else { # そうでなければ
open(LOCK, ">$lockfile"); # $lockfileを
close(LOCK); # 作って
return; # サブルーチンを抜ける。
}
}
&error("只今他の方が書き込み中です。"); # 5秒待っても$lockfileが存在し続ける場合は諦める。
}
このサブルーチン自体に問題があるとは思えないな。
ファイルロック処理の挿入場所に問題があるかたまたま起こった事故か或いは他の何かだと思う。
というか普通はファイルロックに失敗したくらいで親記事は消えないだろう。
0619nobodyさん
2006/10/26(木) 22:09:15ID:???0620nobodyさん
2006/10/26(木) 22:16:33ID:???0621nobodyさん
2006/10/26(木) 22:18:30ID:???ロックファイルを考える
http://www.tryhp.net/lock.htm
0624nobodyさん
2006/10/26(木) 22:48:56ID:???http://pc8.2ch.net/test/read.cgi/php/1024795138/
こっちは参考にならナイン?
0625nobodyさん
2006/10/27(金) 00:05:23ID:???0626615
2006/10/27(金) 00:30:08ID:???自分ではif文が程度の知識しかないのでとりあえず
>>616さん参考になんとかできないか考えて見ます。
0627nobodyさん
2006/10/27(金) 00:46:20ID:???サンプルはこんな感じです。
#!/usr/bin/perl
@a = ('kon','hazimemasite','gennki','gennkidesu','baka','bakatohananiyo','sayonara','jaane');
for(;;){
print "Please input sentences :";
chomp($n=<STDIN>);
if($n eq $a[0]){
print $a[1],"\n";
redo;
}elsif($n eq $a[2]){
print $a[3],"\n";
redo;
}elsif($n eq $a[4]){
print $a[5],"\n";
redo;
}elsif($n eq $a[6]){
print $a[7],"\n";
exit;
}else{
print "What is 「$n」?\n";
exit;
}
}
0628627
2006/10/27(金) 00:47:04ID:???指定された文字を入力しても上手くいきません。
#!/usr/bin/perl
%a = ('kon','hazimemasite','gennki','gennkidesu','baka','bakatohananiyo','sayonara','jaane');
for(;;){
print "Please input sentences :";
chomp($n=<STDIN>);
if($n eq $a[0]){
print $a{kon},"\n";
redo;
}elsif($n eq $a[2]){
print $a{gennki},"\n";
redo;
}elsif($n eq $a[4]){
print $a{baka},"\n";
redo;
}elsif($n eq $a[6]){
print $a{sayonara},"\n";
exit;
}else{
print "What is 「$n」?\n";
exit;
}
}
自分ではif文内の「$a[x]」がおかしいのかなとは思ったりしてますが・・・
どなたかご教授お願いします。
0629nobodyさん
2006/10/27(金) 01:17:45ID:???配列をハッシュにしてるんだから、
$a[0]は未定義を参照しようとしてる。
use strictすればすぐ分かる間違いなので、使い慣れておくことお勧め。
で、書き直すならこんな感じ。
#!/usr/bin/perl
%a = ('kon','hazimemasite','gennki','gennkidesu','baka','bakatohananiyo','sayonara','jaane');
while (1) {
print 'Please input sentences :';
chomp ( $n = <STDIN> );
print "$a{$n}\n" if $a{$n};
exit if $n eq 'sayonara';
unless ($a{$n}) { print "What is 「$n」?\n" }
redo;
}
exit;
else { print "What is [$n]?\n"; }
0631nobodyさん
2006/10/27(金) 01:19:03ID:???while (1) {
print 'Please input sentences :';
chomp ( $n = <STDIN> );
print "$a{$n}\n" if $a{$n};
unless ($a{$n}) { print "What is 「$n」?\n" }
exit if $n eq 'sayonara';
}
0632nobodyさん
2006/10/27(金) 01:30:03ID:???うわ。。。 いつの間にかterra大先生復活してたのか。
セキュリティホール開けっ放しのCGI配って逃亡した前歴のある人ね。
0633nobodyさん
2006/10/27(金) 03:06:18ID:???ありがとうございます。usetstrict参考にします。
ですが実行するとコマンドプロンプトが終了されてしまいます。
何より、>>630の
print "$a{$n}\n" if $a{$n}; #ここと
exit if $n eq 'sayonara';
unless ($a{$n}) { print "What is 「$n」?\n" } #この行
が理解できませんf- -;)
『print "$a{$n}\n";』は
「配列aの$n番目?を参照する」という意味でしょうか?
0634nobodyさん
2006/10/27(金) 04:04:22ID:???は
print $hoge{$foo}, "\n";
や
print $hoge{$foo};
print "\n";
と同じ。
print "$name君はオナニー大好き";
と
print $name, "君はオナニー大好き";
や
print $name;
print "君はオナニー大好き";
が同じであるように。
0635nobodyさん
2006/10/27(金) 09:43:28ID:???%aはハッシュ
書き直したほうが見やすいかも
%a = (
kon => 'hazimemasite',
gennki => 'gennkidesu',
baka => 'bakatohananiyo',
sayonara =>'jaane'
);
$a{$n}はchomp($n=<STDIN>)より、
入力された文字をキーにしてハッシュを参照する。
0636633
2006/10/27(金) 10:25:36ID:???ありがとうございます。
ですが、「chomp($n=<STDIN>)」で文字を入力する画面にすら行かず終了してしまいます
コマンドプロンプトだからいけないのでしょうか?
0637633
2006/10/27(金) 12:32:36ID:???exit if $n eq 'sayonara';
unless ($a{$n}) { print "What is 「$n」?\n" }
この部分をもう少し無駄のある(これなら省略できるだろうってくらい)表現にするには
どうすればいいでしょうか?
出きればunlessを違う形に出来たらいいなとは思ってますが・・・
0638nobodyさん
2006/10/27(金) 13:59:20ID:???0640nobodyさん
2006/10/27(金) 15:10:04ID:???print 'Please input sentences :';
chomp ( $n=<STDIN> );
if ( $a{$n} ) { print "$a{$n}\n" }
else { print "What is 「$n」?\n" }
if ( $n eq 'sayonara' ) { last }
}
0642nobodyさん
2006/10/27(金) 16:27:26ID:???0643nobodyさん
2006/10/27(金) 17:02:56ID:???0644nobodyさん
2006/10/27(金) 17:07:42ID:???0645633
2006/10/27(金) 21:25:59ID:???>>640のがすさまじくわかりやすかったです。
最終的に
------------------------------------------------------------
%a = qw( kon konnnichiwa
gennki gennkidesu
baka bakatohananiyo
sayonara jaane
);
while (1) {
print "Please input sentences :";
chomp ( $n=<STDIN> );
if ( $a{$n} ) { print "$a{$n}\n" }
else { print "What is 「$n」?\n" }
exit if ($n eq "sayonara");
}
--------------------------------------------------------------------
と、しました。
色々と教えてくださった方、本当にありがとうございました。
0646nobodyさん
2006/10/27(金) 21:43:39ID:???%a = (
kon => 'konnnichiwa',
gennki => 'gennkidesu',
baka => 'bakatohananiyo',
sayonara => 'jaane',
);
0647nobodyさん
2006/10/27(金) 21:51:05ID:???0648nobodyさん
2006/10/27(金) 22:27:39ID:???0649nobodyさん
2006/10/28(土) 00:54:50ID:???cgiを作ろうと思うのですが。
(1)forかwhileで中でcsvの一行ずつopen関数で書き込む
(2)ハッシュに一度格納しておいて後で書き込むか(foreachを使いますが)
どちらの方がサーバに負担が少ないでしょうか?
ユーザが重複している場合、後ろのやり方の方がopen関数を使うのが少なくて済みます。
0650nobodyさん
2006/10/28(土) 01:13:11ID:???0651nobodyさん
2006/10/28(土) 02:53:28ID:???0652nobodyさん
2006/10/28(土) 12:09:18ID:???0653633
2006/10/28(土) 15:46:29ID:???「お前、どっかのサイト見たんちゃうか?」って言われました・・・
まあ、その通りなんですがorz
>>627を素直に配列二つ使って表してみろといわれました。
んで、一応
----------------------------------------------------
@a = ('kon','gennki','baka','sayonara');
@b = ('hazimemasite','gennkidesu','bakatohananiyo','jaane');
for(;;){
print "Please input sentences :";
chomp($n=<STDIN>);
if($n eq $a[0]){
print $b[0],"\n";
redo;
}elsif($n eq $a[1]){
print $b[1],"\n";
redo;
}elsif($n eq $a[2]){
print $b[2],"\n";
redo;
}elsif($n eq $a[3]){
print $b[3],"\n";
exit;
}else{
print "What is 「$n」?\n";
exit;
}
}
----------------------------------------------------------
に、したのですが、もう少しまとめた感じにするにはどうすればいいでしょうか?f- -;)
0654nobodyさん
2006/10/28(土) 15:56:42ID:???@b = qw/hazimemasite gekkidesu bakatohananiyo jaane/;
OUTER: while (1) {
print 'Please input sentences: ';
chomp($n = <STDIN>);
for ($i; $i <= @a ; $i++) {
if ($n = $a[$i]) {
print $b[$i];
redo OUTER;
}
}
print "What is $n?\n";
exit;
}
がんばって自分で書けよ。そのほうがお前のためだ。
0657nobodyさん
2006/11/01(水) 03:26:38ID:???を参考にして、CGI::Sessionを使用したシステムを組んでるのですが、
.sessionフォルダのcgisess_セッションidファイルがたまっていく一方です。
これをうまく消す方法は無いのでしょうか?
0658nobodyさん
2006/11/01(水) 11:24:25ID:???0660nobodyさん
2006/11/01(水) 13:05:08ID:???0661nobodyさん
2006/11/01(水) 21:01:16ID:???のはなぜなんでしょうか?
0662nobodyさん
2006/11/01(水) 21:22:05ID:???0664657
2006/11/01(水) 23:34:18ID:???my @filelist = readdir(SESSDIR);
closedir(SESSDIR);
foreach (@filelist) {
if (/^cgisess_(\w)+$/ && $1 ne $sid) {
unlink("./.session/$_");
}
}
多分これで解決しました
0665657
2006/11/01(水) 23:35:57ID:???0666nobodyさん
2006/11/02(木) 00:17:07ID:???クソじゃん
0667nobodyさん
2006/11/02(木) 01:22:11ID:???今回は確認が不要だったようだけれど、
ちゃんと有効期限を管理するなら、掃除するためのモジュールもあるよん
http://search.cpan.org/~rsavage/CGI-Session-ExpireSessions-1.08/lib/CGI/Session/ExpireSessions.pm
0668nobodyさん
2006/11/02(木) 14:41:12ID:CDbXzZTvどういう風に書いたらいいのか全く想像も付きません。どうか作っていただけないでしょうか?
0669nobodyさん
2006/11/02(木) 14:52:52ID:???0670nobodyさん
2006/11/02(木) 15:06:31ID:???Perlでリクに答えるスクリプトを作るスレ
ttp://pc8.2ch.net/test/read.cgi/tech/1086143976/
0671nobodyさん
2006/11/02(木) 15:14:36ID:???0672nobodyさん
2006/11/02(木) 15:25:31ID:???0673661
2006/11/02(木) 21:04:15ID:???すみませんわかりにくくて。
ttp://pc8.2ch.net/test/read.cgi/php/1137614836/l50#tag230
これをローカルで実験したくてperl5.6.1をダウンロードしてきてまず
while(($key,$value)=each(%ENV)){print "$key=$value\n";}
をコマンドプロンプトで実行したのですがIPアドレスとかが出ません。
web上でやったらうまくいったのですが、関数に制限があるらしく
BBQの方は試せません。どうやったらローカルでできるのでしょうか。
0674nobodyさん
2006/11/02(木) 22:00:31ID:???>>663を無視するな
というか、押したら開かないドアを引いたら開きました。どうやれば押したら開きますか?って質問してるんだぞ。
0675661
2006/11/02(木) 23:06:07ID:???いまだに例えの意味がわかっていないのですが
use strict;
use Socket;
を入れたらBBQが動くのを確認できました。ヒントありがとうございました。
0676nobodyさん
2006/11/02(木) 23:39:27ID:???自分で出来ない理由をしっかり書いておいて、なぜ出来ないかを聞いてたから。
まぁ、動いたなら一歩前進だ。乙。
0677nobodyさん
2006/11/03(金) 19:30:08ID:4xbbPPPU現在ホームページを作っていて、CGIでHTMLとCSSとJavaScriptを出力しようと思っているんですが。
何故かエラーが出ます。
因みに出力の方法はヒアドキュメントでくくって出力しています。
エスケープの問題でしょうか?
それともCGIスクリプトの中にJavaScriptを記述すること自体が不可能なんでしょうか?
どなたか教えてください。
0678nobodyさん
2006/11/03(金) 19:51:29ID:???これでいいんか?
open my $fh, ">>count.dat";
print $fh "\n";
close $fh;
print "Content-Type: text/plain\n\n";
print -s "count.dat";
0680nobodyさん
2006/11/03(金) 19:59:44ID:???sub{$_[0]->(@_)}->(sub{
my($code,$path,$del)=@_;
if(-d $path){
my $del2 = time-(stat$path)[9]>60*60*24;
opendir my $dh,$path;
while(my $dir = readdir $dh){
if($dir ne '.' && $dir ne '..'){
$code->($code,"$path/$dir",$del2);
}
}
closedir $dh;
rmdir $path if $del2;
}else{
unlink $path if $del;
}
},$_) for @ARGV;
0681nobodyさん
2006/11/03(金) 20:11:29ID:???とりあえずコード晒してみ?
0682nobodyさん
2006/11/03(金) 20:19:39ID:4xbbPPPU長すぎてここには貼れません。
とりあえずCGIでJacaScriptが出力可能かどうか教えてください。
■ このスレッドは過去ログ倉庫に格納されています