Perl コーディング初心者質問コーナー Part35
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/05/26 16:48ID:kkhhiYmo【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0773nobodyさん
04/07/06 02:32ID:???cookieのexpiresに使える形式の時間の取得って、
gmtime time
だと全て数字だから微妙に違うよね。
cookie用に使える形式にするのに自分でルーチンを作ろうかなとか思ってるけど、
既存のモジュールで、こういうメソッドもってるやつないのかな?
0774nobodyさん
04/07/06 02:52ID:???http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI/Cookie.pod
0775nobodyさん
04/07/06 04:13ID:???http://cachu.xrea.jp/perl/
0777nobodyさん
04/07/06 08:08ID:???PERLでは引数が整数であるか、少数点つきの数字であるかを判定してくれる関数はないのでしょうか?
0780nobodyさん
04/07/06 10:23ID:???print "ぎーーーーーーーーーーーーーーーーーーーーーーーっ" if not $answer - int $answer;
0781777=773
04/07/06 10:33ID:???>>774
なんかムダなソースを読みこんで重くしたくないから、自分で作ってみた。
野暮ったいソースだから、見にくいけど、色々突っ込んでくれるとありがたい。
とりあえず2時間後のGMTを計算するサブルーチン。
ifのとこは上から
処理1.何も繰り上がらず2時間だけプラス
処理2.日、曜、時刻だけ繰り上がり
処理3.処理2+月も繰り上がり
処理4.処理3+年も繰り上がり
一応うるう年は4で割り切れるって部分だけは採用してる。100年とか400年とかは
どうせ生きてないから無視した。
0782777=773
04/07/06 10:39ID:???( my $sec , my $min , my $hour , my $mday , my $mon , my $year , my $wday , my $isdat , my $yday ) = gmtime time;
$year += 1900;
my @wday = qw/Sun Mon Tue Wen Thu Fri Sat Sun/;
my @mon = qw/Jan Feb Mar Apr May Jun Jul Aus Sep Oct Nov Dec Jan/;
my @a = qw/31 28 31 30 31 30 31 31 30 31 30 31/;
if ( !($year % 4) ) { $a[1] += 1 ; }
my @b = qw/00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60/;
my $timer;
if ( $hour < 22 ) {
$hour += 2;
$timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
} elsif ( $a[$mon] != $wday ) {
$hour -= 22;
$wday += 1;
$mday += 1;
$timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
} elsif ( $mon != 11 ) {
$hour -= 22;
$wday += 1;
$mday -= $a[$mon];
$mon += 1;
$timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
} else {
$hour -= 22;
$wday += 1;
$mday -= $a[$mon];
$mon += 1;
$year += 1;
$timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
}return $timer;}
0783nobodyさん
04/07/06 10:41ID:???cookieの有効期限はリミットの2030付近にするのがナウイですよ。
0785777
04/07/06 10:53ID:???のところは
$mday -= $a[$mon] -1;
だった。
0787nobodyさん
04/07/06 12:22ID:???0788nobodyさん
04/07/06 13:40ID:DU8HZvlsabc:123
aiu:456
1.
open(IN, "list.txt");
while (<IN>) { print; }
close(IN);
2.
open(IN, "list.txt");
while (<IN>) {
$tmp = <IN>;
print "$tmp<br>\n";
}
close(IN)
1.だと abc:123 aiu:456 と出力されるのに
2.だと abc:123 としか出力されないのはどうしてでしょうか、、?
0791nobodyさん
04/07/06 13:57ID:DU8HZvlsすいません、aiu:456 としか出力されない の間違いでした・・・
0792nobodyさん
04/07/06 15:02ID:DU8HZvlsopen(IN, "list.txt");
while (<IN>) { 処理 }
データを1行単位で読み込み、データのある行が存在する間は while文で繰り返す
という意味ではないのでしょうか、、、?
0793nobodyさん
04/07/06 15:11ID:???$tmp = <IN>; # ここで list.txt の二行目が読み込まれる
print "$tmp<br>\n" # 当然 $tmp の中には二行目しか入っていない
0794nobodyさん
04/07/06 15:37ID:DU8HZvls<IN>で取得したものは$_ に代入されるのですね。
本当に助かりました。有難うございます。
0795nobodyさん
04/07/06 15:44ID:???# 何だか表現が微妙に気になる…。
1: abc:123
2: aiu:456
3: abc:123
4: aiu:456
5: abc:123
ファイルの中身をこの5行にして、実験してみるのもいいかも。
0796nobodyさん
04/07/06 15:49ID:???早速100行くらいにして試しています。
0797nobodyさん
04/07/06 18:37ID:???っでねが?
0801nobodyさん
04/07/07 03:43ID:Dj0xztEm受け取った変数を自動的に
別ファイルへ渡す処理はどうやってすればいいのでしょうか?
(フォームを使えば変数を渡せるけど、
自動的には不可能ですよね?)
ヒントでもいいので教えてくだせえ
0803nobodyさん
04/07/07 11:11ID:???use CGI;
$q = CGI->new;
$hash = $q->Vars;
print $hash;
としたら
HASH(0x8158408)と表示されます。
%hash = $q->Vars;
だとeachなどを使ってもキーなどが出てきません。
色々と検索をするのですが、どうして良いものか解からなくなってきたので
どなたか良い方法を教えて下さい。
いちおう、下記のサイトは見たのですが上手く目的のことができませんでした。
簡単なCGI
http://member.nifty.ne.jp/hippo2000/perltips/Cgi.htm#FETCHING_A_LIST_OF_KEYWORDS_FROM
0804803
04/07/07 11:20ID:???自分で色々と勘違いをしていました。
自己解決しました。
0805nobodyさん
04/07/07 12:12ID:lnfuZW7Xその関数を抜けたときって
require したファイルの内容は有効なんでしょうか?
0809nobodyさん
04/07/07 16:32ID:???1: abc:123
2: aiu:456
3: abc:123
4: aiu:456
5: abc:123
open(IN, "list.txt");
while (<IN>) {
$tmp .= $_;
}
print "$tmp\n";
0811nobodyさん
04/07/07 16:46ID:???open(IN, "list.txt");
while ($tmp = <IN>) {
print "$tmp<br>\n";
}
close(IN)
暗黙の$_使うか明示的に一時変数$tmpを使うか、だけの違いだろ。
>>808
間違ってるよね
0813nobodyさん
04/07/07 17:04ID:???0814nobodyさん
04/07/07 17:42ID:???0815801
04/07/07 17:54ID:Dj0xztEmこの方法、他にないんでしょうか?
0817nobodyさん
04/07/07 18:12ID:???0818801
04/07/07 18:17ID:Dj0xztEm変数を送る部分を、
クリックしなくても変数を送れるようにしたいんです。
意味分かりますかね?perlの超町長初心者なんで勘弁してください。
どうかよろしこです
0819nobodyさん
04/07/07 18:36ID:???perlの問題じゃないです。
要は【submit】ボタンを押さなくても、submitされるようにしたいって事?
JavaScriptとかで勝手にクエリ送るとかか?
やっぱ、perl関係ないです。
0820nobodyさん
04/07/07 18:37ID:???ちゃんと持ってるもの全部吐き出してください。
0821黒死犬 ◆EgxBlf8nvc
04/07/07 18:39ID:???<input type="hidden" name="Name" value="Value">
</form>
<script language="PerlScript">
$window->document->all->forms->send->submit();
</script>
これで出来んじゃないか(テストしてない)
てか板違い
0822nobodyさん
04/07/07 18:42ID:???ユーザ側の視点だと「自動的」「クリックしなくても」で済むんだろうけど、
プログラムにとっては「ある条件が満たされたとき」じゃない?
その「ある条件」は、あなたしか知らないわけですよ。
# で、JavaScriptで何かしらのイベント拾うんだろーけど。
0824nobodyさん
04/07/07 20:13ID:???・・・何故お前が皆に叩かれてるのか未だに分かってないのか???
下の二つを実行してみなさい。そして首吊ってください。
# 1
while (<IN>) {
$tmp = $_;
print "$tmp\n";
}
# 2
while (<IN>) {
$tmp .= $_;
print "$tmp\n";
}
0825nobodyさん
04/07/07 20:39ID:???@d = ( " abc ", " bcd ", " cde " );
for($i=0;$i<@d;$i++){ $d[$i] =~ s/^\s*(.*)\s*$/$1/; }
これをもうちょっとスマートに書いてみたいですが
どしたらいい? for文ははずせないのかな
0826黒死犬 ◆EgxBlf8nvc
04/07/07 20:45ID:???0828nobodyさん
04/07/07 21:40ID:???何で俺にレスしてんの?
しかもみんなって・・・
日本語理解してるか?
ついでいっとくと俺は質問者でも解答者でもない。愉快な煽り厨
0829nobodyさん
04/07/07 21:40ID:???お前大丈夫か?
どこが叩かれてるんだ?>>810は・・・
レス一つもないじゃん。
まさか勝手に前の人と同じと認定してるとか?
0832nobodyさん
04/07/07 21:59ID:???ググっても使用例が見つからなくて困っています。
0833nobodyさん
04/07/07 22:09ID:???もっとググれ
0834nobodyさん
04/07/07 23:02ID:???http://www.google.co.jp/search?hl=ja&ie=UTF-8&c2coff=1&q=Perl+%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%A2%E6%95%B0&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
PHPしか出てきませんが・・・
0835nobodyさん
04/07/07 23:07ID:???ttp://www.google.co.jp/search?q=Perl+-PHP+%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3&ie=UTF-8
( ゚д゚)ポカーン
0837nobodyさん
04/07/08 00:41ID:???0838nobodyさん
04/07/08 03:00ID:???<q cite="http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlstyle.html">
戻り値をただ単に捨ててしまうような void 文脈で、grep()やmap()、
`backticks` (訳注: `ls`のようにバッククォートで括った実行文のこと)
を使うことは避けましょう。そういった関数はすべて戻り値を持って
いるのですから、それを使うべきです。戻り値に用がないのであれば、
代わりにforeach()を使ったループか system()関数を使いましょう。
</q>
>>825
s/^\s+//, s/\s+\z// for @d;
0839nobodyさん
04/07/08 03:04ID:LQirb/WJwindowsで他のサーバのディレクトリを
ネットワークドライブに割り当て
その中のファイルに対して
-e を実行したらエラーしか返ってきません。
自分のサーバ内なら正常にファイルを検知できたのですが
ネットワークドライブはファイルの検査ができないのでしょうか?
$Path="d:/data/"
$Data="test.dat"
if(-e "$Path$Data")
0840nobodyさん
04/07/08 03:04ID:o03xV6akdo $line = <FILE> until (($line eq "<HOGE>") || (eof FILE));
だと$line eq "<HOGE>"がいつまでも真になりません。
$line =~ /<HOGE>/だと真になってくれますが、「含まれる行」ではなく「一致する」行を検出したいのです。
上のやり方だとなぜ出来ないのでしょうか?
0841nobodyさん
04/07/08 03:34ID:???do { chomp($line = <FILE>) } until $line eq "<HOGE>" || eof FILE;
do { $line = <FILE> } until $line eq "<HOGE>\n" || eof FILE;
0842nobodyさん
04/07/08 03:38ID:???$line =~ /^<HOGE>$/
0843840
04/07/08 04:02ID:???回答ありがとうございます。しかしそれでも解決しませんでした・・・
がその後自己解決しました。
アップロード時の文字コード変換が原因で認識しなかったようです。
# 最近HDが吹っ飛んでOSアプリすべてを再インストールしたために、FFFTPの転送設定が正しくなされてませんでした
<FILE>をアスキーモード転送でアップしたところ正しい挙動になりました。
0844nobodyさん
04/07/08 08:07ID:???だれも指摘してないが、その置換では末尾の空白は
とれないよ。先に.*の方に食われちゃうので。838は
黙ってさりげなく直しちゃってるけどな(笑)
0846nobodyさん
04/07/08 11:32ID:lii7HGr3PCやドコモの携帯では普通に書き込めていましたが、auで試したら、
書き込んだ内容がURLエンコードされたまま書き込まれてしまいました。
なぜでしょうか。
書き込まれた内容 : %92x%82%ea%82%c4%83X%83%7d%83%93
デコード処理部分
sub getparam{
my($QUERY_DATA,@pairs,$pair,$key,$value,%FORM);
if($ENV{ 'REQUEST_METHOD' } eq "POST"){
read(STDIN, $QUERY_DATA, $ENV{'CONTENT_LENGTH'});
}
@pairs = split(/&/,$QUERY_DATA);
foreach $pair (@pairs){
($key,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/"/"/g;
$value =~ s/&/&/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\r\n|\r|\n//g;
$value =~ s/\,/、/g;
$value =~ s/\t//g;
$FORM{$key} = $value;
}
return(%FORM);
}
0848847
04/07/08 11:39ID:???0849nobodyさん
04/07/08 13:09ID:???自分のスクリプトから欠陥を見つけられないならauの方の糞さを疑ったらどうだ?
三菱から欠陥を見つけられないなら乗り手の方の糞さを疑ったらどうだ?
0850nobodyさん
04/07/08 13:26ID:???よく眺めてみるのがいいかもね。
0851nobodyさん
04/07/08 13:29ID:???横軸が等間隔じゃないデータは
扱いにくそうだな
ほかにグラフ描くいいライブラリないかな
0852nobodyさん
04/07/08 14:03ID:???独り言の前にCPAN
http://search.cpan.org/search?m=module&q=Graph&n=100
0853nobodyさん
04/07/08 14:09ID:???http://pc5.2ch.net/test/read.cgi/php/997829243/
の方がベターと思われる
0854nobodyさん
04/07/08 16:34ID:???http://developer.apple.com/internet/webcontent/xmlhttpreq.html
これ使えばいけるかもね
0855nobodyさん
04/07/08 17:51ID:fxJBz/QH#!/usr/local/bin/perl -Tw
use strict;
my $data = './data.dat';
open COUNTER, "+<", $data or die "$data:$!";
my $count = <COUNTER>;
$count += 1;
seek COUNTER, 0, 0;
print COUNTER $count, "\n";
close COUNTER;
#html排出
print "$count";
exit;
なんどやっても、おかしいと思うところやタイプミスを直しても動きません(Internal Server Error)
どこが間違っているのでしょうか?勉強後初プログラミングなもんで…
ご教授よろしくお願いしますm(_ _)m
0856nobodyさん
04/07/08 18:01ID:???cgiのパーミッションは755
datのパーミッションは777
です。よろしくお願いします
0858nobodyさん
04/07/08 18:11ID:???速レスありがとうございます。
-Twが間違っているのですか
あの、よろしかったらどのようにすればよいのか教えていただけないでしょうか?とりあえず抜いてみたのですが、事態は変わらず…
0861nobodyさん
04/07/08 19:59ID:???ヘッダ書け。
#!/usr/local/bin/perl
use strict;
my $data = './data.dat';
open COUNTER, "+<", $data or die "$data:$!";
my $count = <COUNTER>;
$count += 1;
seek COUNTER, 0, 0;
print COUNTER $count, "\n";
close COUNTER;
#html排出
print "Content-type: text/html;";
print "$count";
良心で書いてやったぞ(藁
0862nobodyさん
04/07/08 20:14ID:???まともにエラーも確認できないようじゃ、大変だよ。
見られない環境なら↓こんなんもあるし。。。
http://www.kent-web.com/utility/index.html
0863nobodyさん
04/07/08 20:21ID:UcZ/C4OX$testdat = 'c:/Program Files/Apache Group/Apache2/cgi-bin/test.dat
open IN, $testdat or die "$!\n";
while(<IN>){
chomp;
$record{(split(/<>/,$_))[0]} = $_;
}
print (((sort keys %record))[-1]);
でテストすると、syntax error at test1.cgi line 8, near "open "
Execution of test1.cgi aborted due to compilation errors.
が、出てしまいます、これはどこを縦・・・じゃなくて
どうやって原因をつきとめていったらいいのでしょうか?
0864名無しさん@Linuxザウルス
04/07/08 20:29ID:3Hvq7uliあったら最初は楽しいかもしれんが、ウダイだろ
0865863
04/07/08 20:34ID:7oRlGTHBperl -cw test1.cgi
で出てきたものです。
0866名無しさん@Linuxザウルス
04/07/08 20:37ID:3Hvq7uliかえしてくれるやつを作るとしたら
まず何をすればいいのでしょうか?
0867863
04/07/08 20:44ID:7oRlGTHBnear "open " のところがわかりません。
近いっていったいなにが?って感じです。
0868nobodyさん
04/07/08 20:49ID:???0869nobodyさん
04/07/08 20:51ID:???0870nobodyさん
04/07/08 21:05ID:???よくWebサイトに『〜〜100の質問』ってありますよね。
あれを簡単にHTMLで出力できるようなCGIを作ってるのですが
うまくうごかなかったので、質問させてください。
処理の流れは以下の通りです。
1.テキストファイルから質問を読み込む
2.質問を一度表示させる。その際、1つの質問に対して1つのテキストエリアをつける(sub quesView)
3.テキストエリアに回答をいれ、一番最後に出力というボタンをおすことにより、HTML出力のサブルーチンに移動(sub sub regist)
4.HTML出力
質問を読み込んで出力できているのですが
HTML出力するときのサブルーチンにうまく移行できていないみたいなのですが
どうあがいてもうまくいきません。
よかったらご教授いただけませんでしょうか?
【サンプル】
ttp://cgi.www5f.biglobe.ne.jp/~c-fellow/cgi-bin/04_test/100/100q.cgi
【ソース】
ttp://www5f.biglobe.ne.jp/~c-fellow/cgi-bin/04_test/100/100q.zip
ソースはコピペだらけで、汚いと思いますが、宜しくお願いします。
0871名無しさん@Linuxザウルス
04/07/08 21:17ID:???開店前の銀行がどうしたんだ?
■ このスレッドは過去ログ倉庫に格納されています