Perl 初心者コーナー Part21
レス数が1000を超えています。これ以上書き込みはできません。
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
0002nobodyさん
03/03/18 18:47ID:???Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html
part20 http://pc.2ch.net/php/kako/1042/10422/1042260745.html (タイトルに19と誤記)
[ひまぢん氏のミラー]
Part1 http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2 http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3 http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4 http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5 http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html
0003nobodyさん
03/03/18 18:48ID:???・Perl Com: http://www.perl.com/pub/
・CPAN.com: http://search.cpan.org/
・ActivePerl: http://www.activestate.com/
・CGI-ML:http://forest.ne.jp/cgi-ml/
[お薦め]
・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm ★読んどけ
・Perl Recipes: http://www.effectiveperl.com/recipes/
・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/
・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.html
・Perl初心者の部屋:http://www.harukaze.net/~mishima/perl/
・Perlリファレンス:http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htm
・Perlのページ:http://homepage1.nifty.com/nomenclator/perl/
0004nobodyさん
03/03/18 18:48ID:???・Perl News: http://www.news.perl.org/
・Perl Monks: http://www.perlmonks.org/
・use Perl; : http://use.perl.org/
・Learn Perl - Perl Education: http://www.devdaily.com/perl/edu/index.shtml
・Perldoc.com: http://www.perldoc.com/
・Using Perl5 in Web: http://docs.rinet.ru/Using_Perl5_in_Web/
・Rex Swain's Home Page: http://www.rexswain.com/
・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.html
・Perl Tuts: http://savage.net.au/Perl-tutorials.html
・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htm
・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
・Perlfect Solutions: http://perlfect.com/
・The Perl Archive : http://www.perlarchive.com/
・Perl6 & Parrot VM についての情報: http://dev.perl.org/perl6/
・use Object; : http://perl.infoware.ne.jp/
0005nobodyさん
03/03/18 18:48ID:???0006nobodyさん
03/03/18 18:54ID:???Part20 http://pc2.2ch.net/test/read.cgi/php/1044717887/ (タイトルに19と誤記)
0007nobodyさん
03/03/19 01:13ID:0vdjLWGs#!/usr/local/bin/perl
$ua = $ENV{'HTTP_USER_AGENT'}
if( $ua =~ /^DoCoMo/2.0 N2051(c100;TB)){
print "Location: ../matiuke/jpg/176x198/\n\n";
}else( $ua = ~{
print "Location: ../\n\n";
}
exit(0);
という風に打ったのですが
No Outputと出てしまいお手上げ状態です
・・・
はっきり言ってperlを書くのは初めてなのでまったくといっていいほど初心者です。
ttp://www.nttdocomo.co.jp/mc-user/i/spec/useragent.html
携帯別User-Agent表です。
よろしくお願いします。
0009nobodyさん
03/03/19 01:44ID:???if( $ua =~ /^\QDoCoMo/2.0 N2051(c100;TB)\E/){
print "Location: ../matiuke/jpg/176x198/\n\n";
}elsif( $ua = ~/\Qayaya\E/){
print "Location: ../hoge/hoge\n\n";
}else{
print "Location: ../\n\n";
}
文法コウゾウを理解したほうがよいかと
0010nobodyさん
03/03/19 01:53ID:???UAは末尾まで丸々いるわけ?
そんなに細かく分岐させるの?
DoCoMoの6文字だけか1.0とか2.0までとか・・・
どこかで振り分けCGIを落としてきて使ったほうがいいんじゃないの?
0011nobodyさん
03/03/19 02:07ID:DZ7fCmeZ>7
細かすぎだろ?
0012nobodyさん
03/03/19 02:13ID:EytPlHC0みたいなのを自分流に作ってみたいのですが参考になるサイト
参考になるプログラムみたいなのってありませんか?
0014nobodyさん
03/03/19 02:45ID:???一応突っ込んどくと、 Locationヘッダにパス指定はNG。
ttp://www.studyinghttp.net/rfc_ja/2616/sec14.html#sec14.30
001512 ◆GsKnKxmx8s
03/03/19 02:59ID:???2ch研究さんのアクティブスレッドランキングなのですが
非常に使えるので自分流に改造したいとおもいまして
zenhiteiさんにご相談したところ、ご自由にどうぞとのことだったのです
で、perlをするにしても、あのプログラムの参考になるサイトすら
わからない状態でしたのでここの方々に指示を仰ぎたいなと思い
伺いました。
0016nobodyさん
03/03/19 05:33ID:X4k10DxJ$hoge = 'hoge hoge hoge';
$hoge =~ s/hit/hoge/g;
↑の処理で置換した回数を知りたいです。
お願いします。
0017nobodyさん
03/03/19 05:36ID:X4k10DxJ$hoge = 'hoge hoge hoge';
$hoge =~ s/hoge/hit/g;
です。。。
0018nobodyさん
03/03/19 05:39ID:???001916
03/03/19 05:42ID:X4k10DxJこんな時間にこんなに早くレスもらえるとは思わなかったです!
どうもありがとうございました。
0020nobodyさん
03/03/19 10:19ID:???今はVBSでやってますがあまりうまくないんで、
何かいい方法ないでしょうか?
0023nobodyさん
03/03/19 12:08ID:WfwFmo2+Data::Dumper より速いという Storable を使いたいのですが
うまくいきません。お使いの方、教えてください。
Storable.pm は CPAN より入手しております。
0024nobodyさん
03/03/19 12:15ID:???どう使いたいのかわからんけど
とりあえずドキュメント
http://perldoc.jp/docs/modules/Storable-2.05/Storable.pod
002523
03/03/19 12:27ID:???で AutoSplit にてモジュールを分解して、 autosplit.ix などが
生成されたのですが、結局エラーになってしまいました。
用途は Data::Dumper のように変数をファイルに保存する事です。
002621
03/03/19 12:42ID:???20がやりたいことがよく分からんが
mimetypeを application/octet-stream
とかにすればできるんじゃないの?
00287
03/03/19 13:12ID:0vdjLWGsご指摘ありがとうございます。
1から勉強しなおしてきます。
ビルドすらしていない可能性高し。
makeした?
0031nobodyさん
03/03/19 19:17ID:TkOxs7rIで結果が0.000000000000096
みたいな感じになるんですがこれってバグですか?
0032nobodyさん
03/03/19 19:25ID:???仕様。実用上あまり問題にならないはずだが
有効数字は自分で意識して書かないといけない。
小数は一桁で良いのなら、表示はこうする。
printf "%.1f", 計算結果;
0034T女の竹田
03/03/19 22:31ID:???一瞬>>32みたいなこと思ったけど、よく読むと結果が一兆分の一ぐらいになってるじゃん。
10.1-10で0.0999999999999996になったけど、このことかな?
これは詳しく話すと浮動小数点がどうとかって話になるけど。
0035nobodyさん
03/03/20 01:03ID:jX8BFx3Lprint "あいうえお";
print "かきくけこ";
print "さしすせそ";
これをまとめて書く方法ありませんでしたっけ?
????????????
あいうえお
かきくけこ
さしすせそ
???????????
こんな感じの関数があった気がするんですが・・・
0036nobodyさん
03/03/20 01:16ID:???print "あいうえお\nかきくけこ\nさしすせそ\n";
じゃだめなのん?
print join("\n",@array);
とかかなぁ...
0037nobodyさん
03/03/20 01:25ID:???あいうえお
かきくけこ
さしすせそ
EOF
コレの事?
0039nobodyさん
03/03/20 13:03ID:???ある条件の名前のファイルを取り出す・・・
というのをperlでやることは可能でしょうか?
0040nobodyさん
03/03/20 13:19ID:???ちったー検索しろ。
004120
03/03/20 15:08ID:???フォームの値からHTMLを出力して
そいつをCGI実行時に、ブラウザで表示せずに直接ダウンロードさせたかったってことなんですが
(なんか言い回しがややこしくなりますね…)
application/octet-streamで調べたらこれが見つかりました
http://tohoho.wakusei.ne.jp/lng/200003/00030606.htm
どうやら確実に動作しないようですね
#うちの環境でもMIMEType変更してもIEが強制表示しちゃいました
レスクスコ
0043nobodyさん
03/03/20 17:33ID:gyHuovPaテキスト広告用CGIを使うために
掲示板スクリプトの2行目に require "randbbs.cgi";を
付け足したらエラーになるんです。randbbs.cgiはちゃんと
存在するんですが、何がいけないんでしょうか?
004443
03/03/20 17:35ID:gyHuovPa「広告配信CGIのランダムTEXT広告配信CGI」でした。
0045nobodyさん
03/03/20 17:41ID:???004643
03/03/20 18:05ID:gyHuovPaはい。普通の掲示板のCGIなんで。
0047nobodyさん
03/03/20 18:07ID:???そのCGI設置ページの説明(動かんときの対処法)はひととおり試してみた?
あとさあ、ここPerlスレなんだが。なんでCGIの質問するのよ?
004943
03/03/20 18:18ID:gyHuovPa対処法はひとつだけ書いてあるんですが、だめでした。
パーミションやディレクトリの位置なんかもいろいろ試したんですが。
というかこれってPerlの話じゃないんですか?
違うんだったらやめます。ごめんなさい。
0051nobodyさん
03/03/20 23:07ID:???色々つっこみどころが多いな……
>対処法はひとつだけ書いてあるんですが、だめでした。
その方法を試したのか、試してないのか。
ダメならダメでどのようにダメだったのか。
これらの情報が全く含まれていない。
>パーミションやディレクトリの位置なんかもいろいろ試したんですが。
どう試したのか。
やはりこれも情報がない。
>というかこれってPerlの話じゃないんですか?
このスクリプトはPerlで書かれているが、PerlはCGIのためだけの言語ではない。
なお、CGIには専用のスレッドがある。
最後に一番大きなつっこみを。
なんで2chで聞く? まず作ったところ(作った人間)に聞くのが筋だろうに。
0052nobodyさん
03/03/21 03:15ID:???$text = "テキスト";
$name = "text";
print "$$name";
でできるのですが、$textがmyで宣言されていると
これでは表示されなくなってしまいます。
解決法は無いでしょうか・・?
0053nobodyさん
03/03/21 03:27ID:???%text = ('test'=>'テキスト');
$name = 'test';
print $text{$name};
みたいな・・・
0054nobodyさん
03/03/21 03:50ID:???${$name}と訂正しておきます。
>53の説明していただいた方法も考えたのですが、
頑固ですが、変数名には変数は使うのはむづかしいでしょうか(T_T)?
005554
03/03/21 03:54ID:???ハッシュを使う方向でやってみる事にしました。
0057nobodyさん
03/03/21 06:25ID:???$sousa02=(捜査2課の名簿がHTMLのデータで書かれてます);
〜
$sousa99=(捜査99課の名簿がHTMLのデータで書かれてます);
<input type=radio name="kenkei" value="sousa">捜査
<input type=radio name="sousa" value="01">捜査1課<br>
<input type=radio name="sousa" value="02">捜査2課<br>
〜
<input type=radio name="sousa" value="99">捜査99課<br>
name="kenkei" の value="sousa"と name="sousa" の value="01"をくっ付けて、
変数$sousa01とするにはどうしたらよいのでしょうか?
0058nobodyさん
03/03/21 08:33ID:???データ構造が思いっきり糞。
ハッシュ使え、ハッシュを。
$data{sousa}{1} = 捜査一課の情報;
みたいにすれ。
005953
03/03/21 08:34ID:???まず配列にする事ですな・・・
$sousa[1]=(捜査1課の名簿がHTMLのデータで書かれてます);
$sousa[2]=(捜査2課の名簿がHTMLのデータで書かれてます);
〜
$sousa[99]=(捜査99課の名簿がHTMLのデータで書かれてます);
で、帰ってきたform文が%FORMに入るとした場合
$sousa[$FORM{'sousa'}]
で解決
0060nobodyさん
03/03/21 11:34ID:???Only package variables (globals, even if localized) are
visible to symbolic references. Lexical variables
(declared with my()) aren't in a symbol table, and thus
are invisible to this mechanism.
0061nobodyさん
03/03/21 14:55ID:???「読み書きモードでファイル読んでコード変換して
元のファイルにsjisで書き込む」
このやりかた以外にもっと効率的な方法知ってたら教えてください
006461
03/03/21 17:55ID:???改行のCRLFをLFに変換したいのですがうまくいきません。
\xaを書き込んでもCRLFになってしまいます。
どなたか教えてください。
require "jcode.pl";
open(FH,"< a.txt");
@a=<FH>;
&jcode::convert(\$_, "euc","sjis") foreach (@a);#sjis→euc
close(FH);
open(FH,"> tmp.txt");
foreach(@a){
chomp;
print FH "$_","\xa";#←ここです
}
close(FH);
0065nobodyさん
03/03/21 18:11ID:???006664
03/03/21 18:22ID:???ありがとうございます。うまくいきました。
自動にLF→CRLF変換してしまうのを
binmode(FH);で防ぐんですね。
open(FH,"> tmp.txt");
binmode(FH);#←ここに追加
foreach(@a){
chomp;
print FH "$_","\xa";
}
close(FH);
0067nobodyさん
03/03/21 18:42ID:x5txFKZlスマートな書き方は無いでしょうか?お願いします。
foreach ( readdir(DIR) ) {
next if (/^\.\.?$/);
push @hoge,$_ if ( -d "$_" );
}
0068nobodyさん
03/03/21 18:57ID:???0069ミツマじゃぱん
03/03/21 18:59ID:CvSagfqMどうでもいいんですけどね。
0072nobodyさん
03/03/21 19:17ID:???俺はorを使ってる。
oとrがビジュアル的に「小さくてささやか」なのが好みに合ってるから
・・・ってのは、ネタのようだけど結構本気な理由。
007357
03/03/21 19:33ID:???データを配列に書き換えました。
OKです。
ありがとうございました。
>>58
%kenkei = ("sousa1" => "捜査1課" , "sousa2" => "捜査2課");
って言う風に書き換えました。
$kenkei{'sousa1'}なら捜査1課と出るんッスが、
$kenkei{'sousa$sousa'}だとundefッス。
$sousaの値は1です。
後学のために、房な所教えてくだせぇ〜
0076nobodyさん
03/03/21 21:34ID:???深い意味は無く、ヴィジュアルで(笑)
0077nobodyさん
03/03/21 23:05ID:???優先順位が大幅に違うので要注意。
(orは最下位)
0078nobodyさん
03/03/21 23:10ID:???$a = $b || $c;
open FH, "file" or die;
open(FH, "file") || die;
0079nobodyさん
03/03/21 23:52ID:???片方固定でしか使わない場合は関係ないの?
0082nobodyさん
03/03/22 06:32ID:V7CC4FvX下記の用に、タイムアウト時にバッククォートで囲った処理を
killしたいのですが、どうやっていいのか困惑してます。
良い方法がありましたら、ご指導いただければと思っております。
eval {
local $SIG{ALRM} = sub { die "timeout" };
alarm 10;
$tmp = `処理`;
alarm 0;
};
alarm 0;
if($@) {
if($@ =~ /timeout/) {# タイムアウト時
# 行った処理のプロセスを切る処理
}
}
0083nobodyさん
03/03/22 06:43ID:???2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1:ちょっと大きいCGIなので、負荷を軽くしたい。(CGIです)
2:実行全体にロックをかけて、同時刻に複数人数が処理できないようにしてみたが…
3:それだと、本当に負荷が軽減されてるのか確かめようがなかった。
同時に実行されてない場合は、ちゃんと軽減されてますか?
0084nobodyさん
03/03/22 07:29ID:35k142Ilどこのサイトを見ても、
{n, m} n回以上m回未満にマッチ
と書いてあるのに、
my test = 'affaaffaaafaaaafaaaaafaaaaaafffaf';
$test =~ s/a{2, 5}/X/g;
print $test."\n";
としても、$testは全く変化しません。
なぜでしょうか?
008584
03/03/22 07:31ID:35k142Ilもちろん、
my $test = 'affaaffaaafaaaafaaaaafaaaaaafffaf';
の間違いです。
0086nobodyさん
03/03/22 07:36ID:???じゃねーの?
0087nobodyさん
03/03/22 07:38ID:???my $test = 'affaaffaaafaaaafaaaaafaaaaaafffaf';
$test =~ s/a{2,5}/X/g; ←{ }の中にスペース入れちゃダメ
print $test."\n";
008884
03/03/22 07:39ID:35k142Ilmy $test = 'hoge';
は問題ないず。
my $hoge, $foo = split(/\./, 'hoge.foo');
は、
my($hoge, $foo) = split(/\./, 'hoge.foo');
と書く必要があると思いますが。
どうでしょう?
008986
03/03/22 07:40ID:???ん〜。なんでだろ。分からん。
ちなみに、この記述はperl5未満では使えないよ。
009084
03/03/22 07:40ID:35k142Ilうお、できました。
スペースは無しでしか..
ありがとうございました。
0091nobodyさん
03/03/22 07:41ID:???× my $hoge, $foo = split(/\./, 'hoge.foo');
○ my($hoge, $foo) = split(/\./, 'hoge.foo');
0093nobodyさん
03/03/22 10:28ID:???同時実行されていない場合は、ロック処理の分負荷は増えている。
で、この部分は読んでないのかな?
>いらっしゃーい、Perlの"コーディング"で困ってる人のスレです。
0094nobodyさん
03/03/22 16:05ID:???一部だけ読んで適当に返事するのイクナイ
0095nobodyさん
03/03/22 16:40ID:???パイプつきoopenでPIDを取得しておいて、必要に応じてkill関数で殺す
…と思ってやってみたらうまく行かなかった(お。
0096nobodyさん
03/03/23 08:51ID:???<input type="checkbox" name="sakana" value="たい">たい
<input type="checkbox" name="sakana" value="ひらめ">ひらめ
<input type="checkbox" name="sakana" value="かつお">かつお
<input type="checkbox" name="sakana" value="まぐろ">まぐろ
で、複数選択しても、最後の値しか来ないのですが、どのようにすればよいのでしょうか?
cgi-lib.plを使い、
@arrey = &SplitParam($FORM{'sakana'});でやってみました。
フォームデータの取得は以下の通り
sub form {
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else {
$buffer = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
}
$nameがsakanaで同じだから上書きされているんだと思うのですが、どう回避していいのかわかりません。
0097nobodyさん
03/03/23 09:01ID:???ひとつ。それのどこがPerlの話なんだ?
ふたつ。cgi-lib.plを使っておきながら、自前でデコード処理してんのか? もしそうならとんでもないヴァカだな。
解決策
・CGIのことはCGIのスレに行け。
・cgi-lib.plの最新バージョンとその正しい使い方を学べ。
これで解決。
0098nobodyさん
03/03/23 09:08ID:???>で、複数選択しても、最後の値しか来ないのですが、どのようにすればよいのでしょうか?
ハッシュのキーが値が上書きされるからそうなります。
<input type="checkbox" name="sakana0" value="あじ">あじ
<input type="checkbox" name="sakana1" value="たい">たい
<input type="checkbox" name="sakana2" value="ひらめ">ひらめ
<input type="checkbox" name="sakana3" value="かつお">かつお
<input type="checkbox" name="sakana4" value="まぐろ">まぐろ
等とやって処理を考えないと駄目
0100nobodyさん
03/03/23 09:34ID:???checkboxは、複数選択すると
sakana=あじ&sakana=たい&sakana=まぐろ
みたいに同じnameが複数来るんだよ。
これが分かればあとはなんとかできるでしょ。
010196
03/03/23 09:50ID:???解決しますた。
特に>>97さん、&ReadParse;で桶でした(滝汗)
===以下言い訳===
最初はcgi-lib.pl使ってなかったんだが、複数選択が必要になり、ぐぐったらcgi-lib.plの&SplitParamでできるってので使い始めたわけ。
ヴァカでした。
CGIとPerlの区別も含めて
0102nobodyさん
03/03/23 10:59ID:???その中にいくつもある<a href="mailto:メアド">名前</a>を
名前=>メアドのハッシュを<title>タイトル</title>の
タイトル.txtで残しておきたいんだ。
教えてくれ。
できればタイトル.txtをサーバに保存やブラウザに表示するのではなく、ダウンロードさせたいのだが漏れにはさっぱりだ。
教えてくれ。
0103nobodyさん
03/03/23 11:30ID:???ハッシュにするのはこれでいい?
%hash = reverse $hoge =~ /<a href="mailto:(.+?)">(.+?)<\/a>/ig;
ただ、HTMLのタイトルをファイル名にする場合、ファイル名が日本語になってしまう
可能性がある。OSによっては日本語ファイル名を作れなかったりといろいろ問題が
あるので、回答は省略。
ダウンロード云々はCGIの話になる。スレ違いになるのでこれで勘弁な。
0104nobodyさん
03/03/23 18:41ID:W+/TsMmGもっとも簡潔で一般的なのは何ですか。時間です。
すいませんプログラミング初心者です。
書いてみたのですが、とてもよろしくないと気付いて模索しましたがわからないです。
sprintfでふた桁にしてみるとか、やってみたんですがダメでした。
検索してもSSIしかヒットしないです。すいません、よろしくお願いします。
$hourは0から23までで、$minは0から59までです。
$jikoku=$hour-12;
if ($hour > 12 && $min < 10){
print <<EOF;
$jikoku:0$min
EOF
}elsif ($hour > 12){
print <<EOF;
$jikoku:$min
EOF
}elsif ($min < 10){
print <<EOF;
$hour:0$min
EOF
}else{
print <<EOF;
$hour:$min
EOF
}
笑わないでください。生まれてすいません
0105nobodyさん
03/03/23 18:53ID:???$hour %= 12;
$jikoku = sprintf("%02d:%02d", $hour, $min);
print "$jikoku\n";
>笑わないでください。生まれてすいません
卑下しすぎ。そんなくだらん質問でもない。
0106nobodyさん
03/03/23 18:53ID:???printf("%02d%02d",$mod_hour,$min)
0107104
03/03/23 19:33ID:???ありがとうございます!
パっと見て理解できる能力が、まだないですが
時間がかかるので先にお礼を言わせてください。
メモってお勉強の材料にさせてください、すいません。
ありがとうございました。
0109nobodyさん
03/03/24 18:08ID:JKyHEx6GCGI で HTML のデータを標準出力するようなものを
実行したときには,その HTML が WWW ブラウザに
表示されるのでしょうか?
0112109
03/03/24 18:21ID:JKyHEx6GCGI スレであらためます
0114nobodyさん
03/03/25 00:41ID:???read(STDIN, $str, $ENV{'CONTENT_LENGTH'});
print "$str<BR>\n";
seek STDIN, $ENV{'CONTENT_LENGTH'} ,1;
read(STDIN, $ppp, $ENV{'CONTENT_LENGTH'});
print "$ppp<BR>\n";
この時2回目のreadは無効になってます。
普通のFHはseekできたのですが。
これは仕様でしょうか?
0115114
03/03/25 00:44ID:???seek STDIN, -1*($ENV{'CONTENT_LENGTH'}) ,1;
0116nobodyさん
03/03/25 00:48ID:???$ppp = $str;
これでダメなわけを教えてくれ。
0117nobodyさん
03/03/25 01:08ID:???0118nobodyさん
03/03/25 08:22ID:???0119nobodyさん
03/03/25 10:16ID:ZJloW8nfしたいのですが、Perlでできますか?
0120nobodyさん
03/03/25 10:58ID:???OS は?ファイルシステムは?
誰に対してアクセス制御を行うのか?
自分以外?自分もアクセスできないの?
そもそもローカルの話?もしかして HTTP?それとも FTP?
… Perl でどうこう言う前に、定義すべき条件があるだろが。
01214
03/03/25 10:59ID:4EHffvQl何がアクセスできないようにしたいのか分からない。
Apacheなら無理だろ。
0122nobodyさん
03/03/25 11:18ID:???いや無理でもないさ。
chmod 仕組んだ Perl スクリプトを cron でまわすとか。
.htaccess 更新するような Perl スクリプトを cron でまわすとか。
下位のディレクトリを全て 0700 にしといて、CGI 経由しないと
参照できないようにするとか。# 要 suExec
もっとも、>>119 が自分のWebサイトにおけるアクセス制御を
やりたがたっている、とは限らない罠。
0123119
03/03/25 11:32ID:???>>121
>>122
説明不足ですいません。
プロバイダの共用サーバーで、自分のWebサイトの特定のディレクトリ
に対してやりたいです。すいません。
サーバーの情報は、今見たんですが書いてないのですが、@niftyの会員が
普通に無料で使えるやつです。すいません。
.htaccessは使用できないようです。すいません。
ただ、ちょっとPerlからズレますが、shスクリプトでchmodコマンドが使える
って書いてあります。
シェルスクリプトはわからないので、Perlでしたいです。すいません。
suExecていうのを知らないので、調べて見ます。
すいませんありがとうございます
0124119
03/03/25 11:51ID:???suExecというのは、サーバーにインストールするもののようですが
どうやら、無いようです。
たとえば、「0-7時の間は、このディレクトリにはアクセスできない」
というのを自動で実行させるようなことをしたいのです。
nobodyさんに対してです。よろしくお願い致します。
0125nobodyさん
03/03/25 12:10ID:???とりあえず、アクセス制御をかけたい「コンテンツ」を全てCGI化すれば
お望みの効果が得られるかと。
ただし、>>119 のサイトが人気サイトでアクセス数大ならお薦めできない。
0126nobodyさん
03/03/25 12:20ID:???0127nobodyさん
03/03/25 13:13ID:???0128nobodyさん
03/03/25 13:19ID:???$date = $date - 1;
0130nobodyさん
03/03/25 13:28ID:beWiS6Gq神 の ホ ー ム ペ ー ジ
http://mypage.naver.co.jp/2ko657ih/
0133nobodyさん
03/03/25 14:00ID:???$dayに特定の日にちが入っていれば>>128でOK
timestampだったら24*3600を引けばいい。
0136nobodyさん
03/03/25 14:29ID:???01374
03/03/25 14:30ID:4EHffvQl>chmod 仕組んだ Perl スクリプトを cron でまわすとか
たしかにそうだ。
cronが使えるかが問題だが。
>>119
perldoc -f chomd
0138名無しさん@Meadow
03/03/25 17:29ID:???これはどう?朝7時に起動すれば、0時から7時までアクセスできなくなる?
while (1) {
sleep 60*60*17;
chmod 0700, 'foo';
sleep 60*60*7;
chmod 0755, 'foo';
}
0139nobodyさん
03/03/25 17:52ID:???Nifty って shell 使わせてくれるの?
じゃなければ、suExec 未導入だし無理でない?
foo の owner を nobody にしたら意味無いし。
0140nobodyさん
03/03/25 19:15ID:dPveVoYX「達人が教える〜Perl/CGI道場」
http://www.amazon.co.jp/exec/obidos/ASIN/4844317423/qid=1048586885/sr=1-2/ref=sr_1_2_2/249-9931188-3133920
と,もう一冊推薦図書はないでつか?
(「かんたんPerl/CGI入門」は持ってまつ。)
0141nobodyさん
03/03/25 19:31ID:???2:$com =~ s/ポー/<font color="yellow">テスト<\/font>/g ;
3:それだと、インターナルサーバーエラーが出て動かなかった。
です。
本来出来ないことは分かってるんですが,どうにかならないでしょうか?
御願いします。
0143nobodyさん
03/03/25 19:35ID:???【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
>141
$com =~ s/\Qポー\E/<font color="yellow">テスト<\/font>/g ;
0144nobodyさん
03/03/25 19:54ID:???でもここまでヒント出してあればできるでしょ。
0146102
03/03/25 20:11ID:???遅レススマソ
メアドの件OKでした。
タイトル.txtで保存の件、メアドの件の応用で試しにやってみたらOKでした。
ダウンロード云々の件は日を改めて後日。
0147nobodyさん
03/03/25 22:12ID:???0148nobodyさん
03/03/25 22:44ID:hk3KdRHAそうか。不便だね。>niftyサーバ
0149nobodyさん
03/03/25 23:18ID:???cgiとか作りたいと思ったら本買った方がいいかなぁ?
0150nobodyさん
03/03/25 23:24ID:???まず、配布されてるスクリプトの中身を見て、改造から入る。
次に、Perl関連の紹介などをしてるサイトを回り、基本的なことを覚える。
作るだけならこれで十分。
買うに越した事はないけどな。
0152nobodyさん
03/03/26 02:41ID:???0153nobodyさん
03/03/26 05:13ID:???「ハッシュのキー」が同じなら真を返す。とかそんな技ないでしょうか?
$abc{'aaa'} eq $efg{'aaa'}; #これを真にしたい。(と言うか同じキーかどうかが分かればOK)
もしかして、無茶言ってますでしょうか?
0154nobodyさん
03/03/26 05:24ID:???定数同士なら見りゃわかる。条件式にかけるまでもない。
変数ならその変数同士を比べればよいのでは?
0156nobodyさん
03/03/26 09:38ID:6kbB+W9+$aaa= 0..79;
で
特定の値にだけ、配列の要素を割り当てるってことはできないでしょうか
$aaa= 0..79;
@bbb= ('あ','い','う','え','お');
print "$bbb[$aaa]";
というのをやりたいんですが、
@bbbに0..79までの要素を全て割り当てないで、
0と7と9だけ割り当てたいとか、そんな場合はどうすればよいでつか
if文とか使わないで、「0はこれ!」「7はこれ!」て
定義したいです。
0157nobodyさん
03/03/26 10:53ID:???これってどういう振る舞いをするの?
@aaa=0..79なら0から79までを配列に入れるんだけど。
0158nobodyさん
03/03/26 10:57ID:???意味がわからん……
配列初期化のときにダミー(undefか空文字列)を入れておいて、値のほうを制限。
またはハッシュを使うとか。
%bbb = ( 0=>'あ', 1=>'い' );
0160nobodyさん
03/03/26 11:33ID:???@bbb[0,7,9] = qw(a b c);
0161nobodyさん
03/03/26 11:39ID:???> 0と7と9だけ割り当てたいとか、
$bbb[0]=0; $bbb[7]=7; $bbb[9]=9;
これじゃだめなのか?
0162156
03/03/26 11:50ID:???さむくすでつ!
>158
できた!マヂでできました!超うれしいよ!ありがとう!
質問がおかしくてスマンかったです。
$aaa= $ccc % 80;
の動きをするものです。
>158のやり方ででけました。ありがとう!
そうか!配列じゃダメなんですね!すごいよ!
>>160-161
後で試してみます。qwとかわからないので、本見てみます。
本当にありがとう!やた!やったー!
2chスゴイよ!毎日来ていいでつか?ありがとう!
0163156
03/03/26 12:47ID:w4nYALSA「0はこれ!」「7はこれ!」のやり方はわかったのですが、
「0〜7の範囲はこれ!」はどうしたらいいですか
if文は使いたくないです。
$aaa= $ccc % 80;
@ddd= (0..7,8..15,16..79);
%bbb= ($ddd[0] => 'あ', $ddd[1] => 'い', $ddd[2] => 'う');
print "$bbb{aaa}";
動かないでつ
何がいけないでつか
この事態によく遭遇するんで、困ってまつ。
ハッシュのリストの中で、演算しをつかいたいです。使いたいです
範囲を指定したいんです。したいです
これさえできれば、僕のやりたいことは全部できるんでつ
泣きそうでつ。
0165nobodyさん
03/03/26 14:13ID:???なんでif文を使いたくないの?
最初の質問もそうだけど、何をしたいのかがわからないのよ。
せめてどういう結果が欲しいのかをきちんと提示してくれ。
0166nobodyさん
03/03/26 14:37ID:???これで満足か?
map { push @ddd, 'あ' } (0..7);
map { push @ddd, 'い' } (8..15);
map { push @ddd, 'う' } (16..79);
print $ddd[$ccc % 80];
0168nobodyさん
03/03/26 15:55ID:???0169nobodyさん
03/03/26 16:59ID:???0170nobodyさん
03/03/26 17:21ID:SzbA3L14この$#pastって意味わかる?
#っていうのはそのあと全部無効にするんでしょ?
なにか特別な表現?
0171nobodyさん
03/03/26 17:31ID:???Perl の 配列について調べてみればすぐわかる。
ぜひ自分で答えに辿りつかれたし。
検索キーワードは、Perl 配列 インデクス、かな?
0172nobodyさん
03/03/26 17:45ID:SzbA3L14ありがと。
ぐぐってくる。
0173163
03/03/26 17:53ID:???さむくすでつ!
>>165
僕のパソコンで動かす、日めくりカレンダーをつくってるんです。
僕の誕生日にhttp://127.0.0.1/にアクセスすると、
「誕生日おめでとう!○○(俺の名前)くん!」と出ます。
これは、さっき>>158さんに教えてもらったやり方でできるようになりました。
だけど、例えば15日〜20日まで同じものを表示したいときなど、
どうしたらいいか悩んでます。
if文だと、「14より大きくて21より小さいから、これ!」って発想になるのが
いやなんです。
だから、if文は使いたくないんです。好きじゃないんでつ。重いんでつ
今は練習段階だけど、うまくいったらWebでも使ってびっくりグーグルのように
したいです。
>>166
ありがとう!
mapというのは、ぐぐったらどうやら関数のようでつね
初めて見ました。
僕の持ってるPERL本5冊には、載ってない未知の領域です。
ネット上のリファレンスとか見たけど、いまいちわからないです。
わかったようなわからないような、悩ましい状況です。
悩ましくて苦しいです。あたまの中がループしてます。最後のお願いです
解説してください。これさえわかれば、何でもできるんでつ
お願いします。お願いします
0174座敷荒氏
03/03/26 18:32ID:SqsuYLcBRedHat7.2を使用して「すぐわかるPerl」を参考書に勉強しています。
「すぐわかるPerl」のP.19にファイル名でプログラムを実行するという手順があり、
#! /usr/bin/perl
print ("3 * 2 = ");
print (3 * 2);
print ("\n");
と記述してプロンプトからファイル名を指定しても、
bash: calc: command not found
と表示されるだけで
$ perl ファイル名
で実行したものと同一の結果になりません。
(この場合には3 * 2 = 6と結果がかえってきます)
一行目を
#!/usr/bin/perl
に書き換えてもやはりダメです。
%type -a perlの結果は
perl is /usr/bin/perl
となっています。
原因と対処をご指導ください。
宜しくお願い致します。
0176座敷荒氏
03/03/26 18:51ID:SqsuYLcB一般ユーザー権限で試しています(言い方あってますか?)
>ファイルの先頭に./(ドットスラッシュ)つけてる?
つけていません。参考書に記載がないので。
これはどこに記述すればいいのですか?
#! /usr/bin/perl の先頭に記載して
./#! /usr/bin/perl
とすればよいのでしょうか?
0177nobodyさん
03/03/26 18:52ID:???$ ./calc
ってことだな。
つまり、Perl より先に Linux の勉強をしる、ということだ。
0178座敷荒氏
03/03/26 18:56ID:SqsuYLcBありがとうございます。
言い訳になりますがRedHatも
こないだPerlのために用意したばかりで
勉強不足でした。
なぜこれでOKなのかは自分で勉強したいと思います。
本当にありがとうございました。精進致します。
0180nobodyさん
03/03/26 19:27ID:???少なくてもwebprogでifが重いとかいってるやつは、
短絡的で思い込みが激しくて相対的な思考ができない馬鹿。たいていA型
0181nobodyさん
03/03/26 20:29ID:???やっていられないよな。それにPerlならユーザの知らないところでたくさんの分岐を行っているはずだ。
0182nobodyさん
03/03/26 21:09ID:???アホには妙な先入観があるんでしょう。困った。
0183nobodyさん
03/03/26 21:15ID:???mapは戻り値を捨ててはいけないぞう。ぷぅ。
構造は、map BLOCK LIST、返り値は、LISTの各要素についての、
BLOCKの結果のリスト。
0184nobodyさん
03/03/27 00:54ID:8Ff5snZVから初めていいかよく分からなくなってきてしまいました。
MacOSXを仕事の関係で自宅でも使用しているのでperlは使え
る状態まで設定が終わり、Perlの解説本(とほほWWW入門)
を買ってきたのですが、理解が浅く、自分のやってみたい事
はあたまには浮かぶが、実際にperlで書けない状態です。
慣れるにはどのようにしていったらよいのでしょうか?
本当に困ってます。
馬鹿ですみません。
0185nobodyさん
03/03/27 01:02ID:aF0pcOGYとほほWWW入門がどんなのか知らないけど
初めから読む。
本に書いてあるプログラムを実行する。
分からなかったらそれを書き換えて自分が納得するまで
いじる。ってのをしてます。
独習Perl読んでる。
0186nobodyさん
03/03/27 01:17ID:???そうなんですよね。
どうしても仕事で使うので、いろいろ必要な所をかいつまんで
いるのですが、時間が足りなくもうなんかダメダメになりそう
です。マジで泣きながらキーボード打ち込んでます。
今は使えそうなフリーの素材を使って少し命令をいじって自分
のマシンでテストしています。
俺には向いてないのかなぁ。このままじゃあ、クビになるかもし
れない、でも、ここの皆さんはできている人が多いみたいだし。
生き残るなんてできないのかなぁ。
愚痴になってごめんなさい。
もうちょっと頑張ってみます。
0187nobodyさん
03/03/27 01:23ID:???要するにその「いい勉強法」にたどり着けるかどうかが分かれ目なんだろうなと思う。。
0188鯖仙人 ◆HwSabaHQjA
03/03/27 01:36ID:???ある程度のレベルに達してないとセキュリティ面で穴が空きそうだのう。
もしもの事があればおおごとじゃから諦めなされ。
だからと言ってフリーのものを少々b改造して著作権表示を
すり替えたりせんようにな。社会人としてのルールじゃ。
ここの板が過疎化している通り、webprogを自在に操れる人々は
ネット人口に対してはごく一部じゃ!まだ遅くはないぞ!
何事にも近道は無い。じっくり、まったり勉強なされ。
0189鯖仙人 ◆HwSabaHQjA
03/03/27 01:42ID:???技術評論社の「プログラミングによるセキュリティ強化ガイド」がまあまあいいぞえ。
自分の能力を向上させる為なら金は惜しむな。先人の偉大なる著作物を手に入れるのじゃ。
0190nobodyさん
03/03/27 02:53ID:???とほほな人がイタタな人だから心情的にはお薦め出来ないってのはある。
それに、perlの参考書を買うのもいいのだけどその参考書は二次生成物だから
本の駄目なレベルまでわかるレベルになればマスターした事になると思われ
そいうことで、本としてお薦めは駱駝本になるのだけどね。
別に本を買わなくてもウェブ上で転がってる資料でも問題無いし、
別に本を買ったからといって覚えれる物でもない。
0192173
03/03/27 18:19ID:???条件分岐させるのがいい場合もあるだろうけど、
最初から「これ!」て定義したいものには、if文とかより
もっと効率のいいやり方があるんじゃないかって思っただけだよ!
僕はO型でつ。
バカだけど、バカにされると一応悲しむだけの感情はあるんだぞ!
>>184
戻り値とか返り血とか何でつか
簡単な式でも略して書かれるとわからないレベルでつ
ひもとけないのでつ
ていうか、僕の所有する5冊のPERL本では簡略化されたものは出てこないので
順をおって書かれてないとわからない。わからないー
ほんとにお願いします。
いっこづつ解説してください。心からお願いします
0195nobodyさん
03/03/27 19:04ID:???0196nobodyさん
03/03/27 20:16ID:???Perl流の省略の仕方が理解できない分際で、
if文が重いとかほざくな。
足し算ができない奴に掛け算ができるわけがない。
自分が理解できてることだけでスクリプト組んでろ。
0197nobodyさん
03/03/27 20:43ID:???いいこというなぁ。
漏れも頑張るか・・・。
0198nobodyさん
03/03/27 21:58ID:???map使うのが一番メモリー食うらしいですけどね・・・
>>192
まぁ、順序追ってその時その時で覚えた関数がどう使えるかというのを理解しつつ
やっていくとよいと思うけどね。
いっぺんに効率の良い処理を書こうと思ってもそれは無理だから一度ソース書いて
それがどうやれば見やすくなるかって考え方で逝くほうがいいと思う
0199名無しさん@Meadow
03/03/27 22:06ID:???いいこと言うなぁ。
これで決まりや。
0200nobodyさん
03/03/27 23:06ID:AfQiNFrt挿入する事ができるんでしょうか?
0202nobodyさん
03/03/27 23:18ID:???でいーじゃん
0203nobodyさん
03/03/27 23:25ID:???うーんと、ちょっと違うかもしれません。
要は今見ているページのテキストエリアにperlのgetもしくは
postで任意の文字を入れる事がperlが動作するマシンから実行
できるのかなという事なんですが、説明がうまくできなくてご
めんなさい。
0204nobodyさん
03/03/27 23:31ID:???0205nobodyさん
03/03/27 23:35ID:???うまく説明ができない・・・。
ブラウザからgetやpostで情報を受け取る事ができるなら、
ブラウザのテキストエリアに送る事もできるのでしょうか?
0206nobodyさん
03/03/27 23:35ID:???アホですか?
0208nobodyさん
03/03/27 23:41ID:???全然わかんない
0209nobodyさん
03/03/28 00:07ID:???0211nobodyさん
03/03/28 00:13ID:???は、基本的なHTTPプロトコルを学ぶべき。
HTML文書のフォームから送ると言うことは、FORMタグのアクションに指定されたページに飛ぶのと同じ。
0212nobodyさん
03/03/28 00:16ID:???うまく説明できないなら、まず
言いたいことを整理するか、
やりたいことの具体例を示しなさい。
別にあせらんでもこのスレは逃げません。
0213nobodyさん
03/03/28 00:21ID:???とりあえず思いついた例として
掲示板に書き込みをする際にブラウザを使った書き込みではなく
自分のマシンからperlにて書き込みができないのかなと。
こういう感じでよろしいのでしょうか?
0215nobodyさん
03/03/28 00:36ID:OXxoJAYfありがとうございます。
見よう見まねですが自分で作った掲示板に、自分で作った
perlで書き込みができるのかテストしてみます。
もしよろしければそのhttpをしゃべるスクリプトの例とい
うのがどのように探せばあるのか、教えていただけません
か?
よろしくお願いします。
02164
03/03/28 00:40ID:JsShpJ/5できます。
HTTPとSocketモジュールの使い方勉強したらすぐできる。
0217nobodyさん
03/03/28 00:42ID:td6NGscT02184
03/03/28 00:43ID:JsShpJ/5http://www.scenecritique.com/museum/home/guess/gesuds9/perlduke.htm
0219nobodyさん
03/03/28 00:50ID:???どうもありがとうございます。
長々と説明を続けてしまって申し訳ありません。
アホなので、許してください。
早く皆さんのように質問に答えられるようにスキル
を身につけてみます。
もしその前に挫折して聞きに来る事があるかと思い
ますが、よろしくお願いします。
0220nobodyさん
03/03/28 00:51ID:???荒らしにつかわれることを懸念してか、
POST のサンプルスクリプトは、あまり見つからない。
# まあ、これは俺の検索が甘いだけかもしれんが
書き込むだけなら GET でも可能だし、これなら
Perl Socket HTTP あたりをキーワードにして検索すれば
いくらでも見つかる。
GET で HTTP での会話を知ってしまえば、POST だって簡単。
tcpdump に類するツールを所有しているなら、
それでWWWブラウザとHTTPサーバとの会話の様子を
覗いてみるのもお薦め。
>>218
oioi
0222211
03/03/28 01:10ID:???s/214/215/
02234
03/03/28 01:30ID:JsShpJ/5HTTPは比較的簡単プロトコルだと思うのでネットワーク関係の
プログラム作りたいならHTTP ClientやHTTP Serverを書いてみる
といいかも。
まじめに答えると、
http://x68000.startshop.co.jp/~68user/net/
とか、いいかも。GETはあります。
POSTは上に書いてあるとおりContent-Lengthつけて、ヘッダと
ひとつ空行あけて送るデータを書けばいいだけです。
02244
03/03/28 01:32ID:JsShpJ/5HTTP プロトコル
と書くのは、
Perl言語
と書くのと同じだと思う。
0226nobodyさん
03/03/28 01:43ID:???0227nobodyさん
03/03/28 02:00ID:OFR1eFyuネット上のページを取得するのに、LWP::Simpleとwgetを使う方法があるとのことで、
それぞれで実際に取得するところまで漕ぎ着けました。
対象ファイルのサイズは20〜50kb程で、それぞれの実行時間はほぼ同じでした。
このスクリプトは共用鯖でCGIとして実行するので、負荷が気になります。
負荷の上ではどちらが良いのか、もしくは他の方法があるのか、お教えください。
0228nobodyさん
03/03/28 02:05ID:???Perl言語
と書くのは、
チゲ鍋
と書くのと同じだと思う。
0231nobodyさん
03/03/28 03:55ID:???Perl言語
と書くのは、
POP言語
と書くのと同じだと思う。
0232nobodyさん
03/03/28 06:06ID:???0233nobodyさん
03/03/28 09:23ID:???Perl5以上で記述された、「URL通知システム」どこにあるか知りませんか?
たとえば、あるページを見ている人が自分の携帯電話に、そこで指定されているURLをメールしたい。
そんなのなんですが、よく広告ページの携帯用出会い系サイトなんかで使われているやつです。
もし。公開しているところがあったら教えてください。
ほんとすんません・・・・・・・
0234nobodyさん
03/03/28 09:30ID:CxnPNSFmこういうんじゃないのか。
http://r.gnavi.co.jp/Waiting/?id=g852000
0235bloom
03/03/28 09:35ID:Mi9Fl0u+0236初心者
03/03/28 09:54ID:???クッキーを書き込みたいのです。
で、色々調べて回って、何とかこんな感じでできました。
#1 #!/usr/bin/perl
#2 use strict;&main;exit;
#3 sub main{
#4my $id = "abc";
#5my $value = "";
#6print "Set-Cookie: ".setcookie($id,\$value);
#7print "Content-Type: text/plain\n\n";
#8print "SetCookie!!";}
#9 sub setcookie{
#10my ($id,$cookie) = @_;
#11my $expires = "";
#12my $day = 1;
#13$$cookie =~ s/([^\w ])/'%'.unpack('H2',$1)/eg;
#14$$cookie =~ tr/ /+/;
#15if ($day > 0){
#16my ($mday,$month,$year,$youbi) = (localtime(time + ($day * 86400)))[3..6];
#17$youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$youbi];
#18$month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$month];
#19$year += 1900;
#20$mday = sprintf("%02d",$mday);
#21$expires = " expires=$youbi, $mday-$month-$year 00:00:00 GMT";}
#22return "$id=$$cookie;$expires\n";
#23 }
書き込めるのですが、ブラウザを閉じたら消えるようにしたいのです。
#12行目のmy $day = 1;の数字をゼロにしたけど、うまくいきませんでした。
同じく数字を消してもみましたが、うまくいきませんでした。
どこをどういじれば良いのか分からないので、どうか教えては頂けないでしょうか。
0238236
03/03/28 10:12ID:???Cookieの有無を調べて、abcというクッキーがなければよそに飛ばしたいのです。
#1 #!/usr/bin/perl
#2 use strict;&main;exit;
#3 sub main{
#4 my $id = "abc";
#5 my %cook = ();
#6 getcookie("abc",\%cook);
#7 print "Content-Type: text/plain\n\n";
#8 print "a:$cook{'a'}\n";
#9 print "b:$cook{'b'}\n";}
#10 sub getcookie{
#11 my ($id,$cook) = @_;
#12 my %cook = ();
#13 my $cookie = $ENV{"HTTP_COOKIE"};
#14 $cookie =~ tr/+/ /;
#15 $cookie =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2',$1)/eg;
#16 foreach my $x (split ";",$cookie){ my ($key,$value) = split "=",$x,2;
#17 $key =~ tr/ //d;
#18 $cook{$key} = $value;}
#19 foreach my $x (split ",",$cook{$id}){ my ($key,$value) = split ":",$x,2;
#20 $$cook{$key} = $value;}
#21 }
#13行目に my $cookie = if($ENV{'HTTP_COOKIE'},'abc' ) < 0 ){
print "Location:http://www.hoge.com/\n"; }
とでも書けば良いのでしょうか? それとも全然違う行に全然違う事を書けば良いのでしょうか?
何にしても初心者の私にはこれ以上は難しいでとても困っています。
どうか救いの手をお願いできないでしょうか?
0239236
03/03/28 10:15ID:???0240nobodyさん
03/03/28 10:18ID:???CGI側ではブラウザを閉じたことを判別できないので、無理です。
JavaScriptを併用すれば可能かもしれない。が、これ以上はスレ違い。
0241nobodyさん
03/03/28 10:18ID:???ありがとう御座います。
いいですねえ、こんなの。もっとシンプルに1っ子だけしか送れないやつでも良いんですけどね・
ええっと・・・・・そのですねえ・・・プログラムが置いてあるところが知りたいんですけど・・・・
すみませんが・・・・よろしくおねがいします・・・・・・
0243nobodyさん
03/03/28 10:30ID:???0244227
03/03/28 11:40ID:???お邪魔しました。m(_ _)m
0245236
03/03/28 11:42ID:???#8 print "a:$cook{'a'}\n";
#9 print "b:$cook{'b'}\n";}は
#8 print "abc$cook{'abc'}\n";でした。<(_ _)>
0246nobodyさん
03/03/28 16:44ID:I24HmqWVこれは一体なんの意味があるんでしょうか。
0247kyo
03/03/28 17:25ID:b4ccXG3wどこか分かりやすい解説が載っているサイト知りませんか?
0248nobodyさん
03/03/28 17:29ID:???ログファイルに「スレ文」か「レス文」かを分けるなんらかの目印を入れる。
読み出しの時はその目印でレスかスレかの処理を分ける。以上。
他には書きようがない。
他人のBBSでも眺めれば?
0249nobodyさん
03/03/28 18:02ID:???apple,青森,40
orange,愛媛,20
strawberry,茨城,30
↑これがそれぞれ
@fluit = ('appe','orange','strawberry');
@from = ('青森','愛媛','茨城');
@price = (40,20,30);
こんな感じに配列に入ってるとき、たとえば下のようにすると、、、、
foreach (sort { ($price[$b] <=> $price[$a]) || ($a cmp $b) } 0 .. $#price) {
print "$fluit[$_],$from[$_],$price[$_]\n";
}
apple,青森,40
strawberry,茨城,30
orange,愛媛,20
↑こうなると思うんですが、
ソートする条件をフォームから指定させたいんです。
たとえば、($FORM{'jyouken'} eq "fluit")ならfluitでソートって感じに・・・
どのようにすればいいでしょうか?(説明へたですいません)
0250nobodyさん
03/03/28 18:03ID:???0251nobodyさん
03/03/28 18:45ID:???構造がだめっぽ 自分ならこうする
@data= (
{fluit=>'apple',from=>'青森',price=>40},
{fluit=>'orenge',from=>'愛媛',price=>20},
{fluit=>'strawberry',from=>'茨城',price=>30}
);
@data = @data[sort{$data[$a]->{$FORM{select}} cmp $data[$b]->{$FORM{select}] } 0 ..$#data];
for (0 .. $#data) {
print "$data[$_]->{fluit},$data[$_]->{from},$data[$_]->{price}\n";
}
0252nobodyさん
03/03/28 18:52ID:???えっと、恥ずかしながら
@data= (
{fluit=>'apple',from=>'青森',price=>40},
{fluit=>'orenge',from=>'愛媛',price=>20},
{fluit=>'strawberry',from=>'茨城',price=>30}
);
これははじめて見たんで、何をしてるのか・・・調べてきます。
できれば弄るところが多くなると思うんで、そのままの構造でいきたいんですが、、、
02534
03/03/28 19:08ID:JsShpJ/5扱っているのだと思います。違ってたらスマソ。
俺もこういうのちょっとガンバロ・・
0254249
03/03/28 19:19ID:???↓
}} } 0 ..$#data];
こうですね。動作確認できました。
しかし、なにをやってるか調べてもわからないので、
どう組み込んだらいいのか・・・
この解説ページないですかねぇ
02554 ◆oIfBpVov3.
03/03/28 19:32ID:JsShpJ/5これ
0257nobodyさん
03/03/28 20:35ID:???テンプレートファイルに特定の変数値を流し込むための目印みたいなもん。
s/%%HOGE%%/$hoge_value/;
で、変換しているとか。
0258lanble
03/03/28 20:38ID:iBaRMkHHtext:<head><title>タイトルン</title></head>
があるばあい「タイトルン」だけに変更して表現するときはどうすれば
いいですか?あと
text:<head><title>titlen</title></head>
のtitlenにもマッチさせたいのですが、これらを正規表記一行で表現すると
どうゆうふうになるのですか?
0260nobodyさん
03/03/28 21:25ID:???http://www.din.or.jp/~ohzaki/regex.htm
これ読んでそれでもわからなかったら、
今度は正規表現のスレに行け。
0261nobodyさん
03/03/29 00:45ID:fHpTV+Jc初歩的な質問かもしれないですが・・・・・・・
パスワード制限するページで、
IDとパスワードでアクセス制限
(Basic認証でなく、<form>タグ内と<input tyle= text と passworsで)
して、ページを、
Apacheとperl5の環境でやりたいのですが、
どういう方法があるのでしょうか?
●<input type=hidden>で変数をやりとりする
●クッキーを使う
は知っているのですが、
これしか方法はないのでしょうか?
0262nobodyさん
03/03/29 01:01ID:8vJPU8locgiで以下のを実行させるとフレームが5個くらいできるのだけど
なぜですか?
#! /usr/bin/perl
test();
sub test{
print <<END;
Content-type: text/html; charset=Shift_JIS
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head><title>testdesu</title></head>
<frameset cols="50%, 50%">
<frame name="t2"
src="$ENV{'SCRIPT_NAME'}?frame=test2">
<frame name="t3"
src="$ENV{'SCRIPT_NAME'}?frame=test3">
<noframes>
<p>このページはフレームをサポートしているブラウザで利用する必要があります</p>
</noframes>
</frameset>
</html>
END
}
0265nobodyさん
03/03/29 01:48ID:8vJPU8loなぜ6個でどういう動作しているのでしょうか?
#! /usr/bin/perl
if($FORM{'frame'} eq 'test2'){hidari();}
elsif($FORM{'frame'} eq 'test3'){migi();}
else{test();}
exit;
sub test{
print <<END;
Content-type: text/html; charset=Shift_JIS
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html><head><title>test</title></head>
<frameset cols="50%, 50%">
<frame name="t2" src="$ENV{'SCRIPT_NAME'}?frame=test2">
<frame name="t3" src="$ENV{'SCRIPT_NAME'}?frame=test3">
</frameset></html>
END}
sub hidari{
print <<END;
Content-type: text/html; charset=Shift_JIS
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>test2</title></head><body>test hidari</body></html>
END}
sub migi{
print <<END;
Content-type: text/html; charset=Shift_JIS
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>test3</title></head><body>test migi</body></html>
END}
0266bloom
03/03/29 01:55ID:i2vNq3FD0268nobodyさん
03/03/29 02:43ID:wFiuyLe9よく考えてから質問してくれ
0270nobodyさん
03/03/29 09:39ID:???0271nobodyさん
03/03/29 13:11ID:???後のことは知らんが。
0272nobodyさん
03/03/29 13:35ID:???通信がセキュアであることを判定するようなメソッドが欲しいと思い、
いろいろ環境変数などを探してみたのですが、ぜんぜん見付かりません。
どうやったら確実に判別できるのでしょうか。
もしかして、「https://から始まっていたらセキュア通信!」みたいにすればOKですか?
0273nobodyさん
03/03/29 14:06ID:???isSecua() メソッドとは何をもって通信がセキュアであると判断するんだ?
あと、どこまでのセキュリティレベルを必要としてるんだ?自分で理解してるのか?
それに環境変数ごときで判断して良いなら SSL_* 変数をチェックすりゃ十分だろうし、
https:// から、なんてレベルなら SERVER_PORT でも見りゃいーじゃん。
Perl と関係ねーじゃん。よそ逝け。
0274nobodyさん
03/03/29 15:06ID:GyYYsUNOそげなこといわんと、実装方法教えてくんろ。
0276nobodyさん
03/03/29 19:16ID:???何をもってセキュアだとするのか、定義を決めなければ実装もできんだろうが。
自分がやることやらないで他人に頼ろうとするな。
0277nobodyさん
03/03/29 20:46ID:rt7Ytb+z$value = jcode::sjis($value);と記述しています。
同じことをEncodeモジュールで行うには
どういう風に書き換えたらいいのでしょうか。
一応グーグル検索して
http://www.cise.ufl.edu/depot/www/perl/pod/perljp.html
などを読んでみたのですが、よく分からなかったです;
すみません。
0278nobodyさん
03/03/29 20:59ID:NU31LA3c>ネット上のページを取得するのに、LWP::Simpleとwgetを使う方法があるとのことで、
>それぞれで実際に取得するところまで漕ぎ着けました。
どうやるの??
0280nobodyさん
03/03/29 22:17ID:NU31LA3carigatou
0281nobodyさん
03/03/29 23:42ID:NU31LA3c#!/usr/local/bin/perl
use LWP::Simple;
my $url = "http://www.google.com";
my $content = get($url);
print $content;
exit(0);
ってのをアップしたんだけど500になってしまいます。
なんでだろう。
0282nobodyさん
03/03/29 23:53ID:???LWPが使えないから。
tu-ka,テストはローカルでやれ。
0284nobodyさん
03/03/29 23:56ID:???何でだろうも糞も無い。
0285nobodyさん
03/03/30 00:01ID:???0286nobodyさん
03/03/30 00:15ID:???0289nobodyさん
03/03/30 00:21ID:???500エラーって事はHTTP経由だろ?なら要るだろうが。
>>285
#! /usr/local/bin/perl
print 'Content-Type: text/html', "\n\n";
eval {
require LWP::Simple;
};
if ( $! ) {
print $!
} else {
print 'OK'
}
0291nobodyさん
03/03/30 00:54ID:???ないから使えないだけなのと、自分で置いても使えないのと。
0293nobodyさん
03/03/30 03:20ID:DsnrZpx8なんですけど、すごく遅くて困ってます。
他のマシンでやると速いんですが、自マシンでやると遅いです。
スペック的には一番速いんですが。なんででしょうか?
ご教示ください。お願いします。
0296nobodyさん
03/03/30 04:10ID:???春厨の季節でつね
0297nobodyさん
03/03/30 04:11ID:???なんでも春のせいにする厨房の季節でつね
0298nobodyさん
03/03/30 04:16ID:???「なんでも春のせいにする」と「特定の現象を春厨のせいにする」の違いが分からない厨の季節でつね。
0300299
03/03/30 04:46ID:???特定の現象とはどの現象を指しているの?
0301nobodyさん
03/03/30 05:26ID:C4JPPs9nPerlで掲示板を作り、携帯からそれを利用できるようにしました。
するとauの携帯から書き込む際に
cgi-lib.pl:
Unknown
Content-type:
application/x-www-form-urlencoded;
charset=shift_jis
というエラーが出ます。この原因(とできれば解決法)を
一言でいいのでどなたか教えてください。
パソコンとi-modeからはちゃんと書き込めるんですけど…。
0302nobodyさん
03/03/30 05:48ID:pEUiOEbB結構巨大なcgiとかになってくるとサブルーチンからサブルーチンとか
ピョンピョン跳び回って、なかなか変数や配列の後を追えないと言うか
今、ココに格納されるべき変数は・・え〜っと何だっけ?アレ?
ってな具合になってしまいます。サブルーチンの引数の中にサブルーチンが
含まれててその引数にまたサブルーチンが・・見たいなことになるとマジで
混乱してしまいます。
何か良い方法はないでしょうか?
0303nobodyさん
03/03/30 05:56ID:???0304302
03/03/30 07:12ID:???使わせて貰ってます。変数エクスプローラーってのがあってサブルーチンや
各変数にピョンピョン飛べるのが凄く助かります。
0306nobodyさん
03/03/30 11:31ID:???0307nobodyさん
03/03/30 11:40ID:???http://www.au.kddi.com/ezfactory/tec/index.html
嫁。
0308nobodyさん
03/03/30 16:51ID:???306 :nobodyさん :03/03/30 11:31 ID:[ コレ ]
こういう風に、毎回IPが一緒とは限らない実行側を
どのように判断して毎回同じIDを与えているのでしょうか?
判断材料としてはやっぱり IP、HOST、ブラウザなんかを読んで判定してるんでしょうか?
質問へぼくてすみません。
0309nobodyさん
03/03/30 16:57ID:???0310nobodyさん
03/03/30 17:34ID:???0311nobodyさん
03/03/30 18:20ID:???Perlと何の関係が?
そのうち「Perl初心者な者ですがハヤシライスの作り方について質問です」なんていう
質問が来そうで鬱だ。
0312nobodyさん
03/03/30 18:30ID:???#! /usr/local/bin/perl
print "Content-Type: text/html\n\n";
print 'ハヤシライス';
exit;
0313nobodyさん
03/03/30 18:36ID:???それなら
#! /usr/local/bin/perl
print "Content-Type: text/plain\n\n";
print 'ハヤシライス';
exit;
だろうよ。
0314nobodyさん
03/03/30 20:04ID:lN4HiIUc0315nobodyさん
03/03/30 20:18ID:lN4HiIUc「値に改行コードを含む CSV形式を扱う」
http://www.din.or.jp/~ohzaki/perl.htm#CSVwithCRLF
を使ってみたのですが、
結果、改行を含むセルが、2行として分析されてしまいます。どうすればいいのでしょうか?
■csvファイルは、以下の通りです。
a,1,2,"あああ
いいい",かかか
あ,2839,sw,5,6
■cgiの実行結果は以下の通りです
a12"あああ<br>
いいい"かかか<br>
あ2839sw56<br>
■スクリプトは以下の通りです。
open (IN,"read_csv.csv") or die;
while (my $line = <IN>) {
$line .= <DATA> while ($line =~ tr/"// % 2 and !eof(DATA));
$line =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
@values = map {/^"(.*)"$/s ? scalar($_ = $1, s/""/"/g, $_) : $_}
($line =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g);
# @values を処理する
foreach $column (@values){
&jcode::convert(\$column, "sjis");
print $column;
}
print "<br>";
}
close IN;
0318315
03/03/30 21:24ID:oGZ4ZySMPerlメモにある排他制御を使いたいのですが
(http://www.din.or.jp/~ohzaki/perl.htm#File_Lock)
とりあえず中身がどういう仕組みかわからないながらもとりあえず使いたいのですが、
使用方法がわかりません。。。。
# ロックする(タイムアウトあり)
$lfh = my_flock() or die 'Busy!';
# アンロックする
my_funlock($lfh);
とあるのですが、具体的に、
たとえば、./log/bbslog.txt にロック/アンロックするには、どういう書式にすればいいのでしょう
0319nobodyさん
03/03/30 21:34ID:???いや、仕組みを知るのが先だろう。
こちらのスレが参考になるかも。↓
http://pc2.2ch.net/test/read.cgi/php/1024795138/l50
0321nobodyさん
03/03/30 23:58ID:???http://search.cpan.jp/
ここなんかどうでしょ
で、私の質問ですが、
multipart/form-dataでデータを受け取って
CGI..PMでアップロードしようとしています。
で、
use CGI;
my $cgi = CGI->new;
こうした時点で/cgi-bin(実行path)にtmpファイルが作成されるのですが
これを回避することってできるんでしょうか?
あるいはせめてtmpファイル作成場所の指定をしたいわけです。
ご存知の方教えてください。
0323321
03/03/31 01:15ID:???それやってみましたがダメでした。
あと環境変数TMPDIRを見るようなので
値を設定しましたがダメでした。
http://member.nifty.ne.jp/hippo2000/perltips/Cgi.htm
-private_tempfiles
回避策としてFHをcloseしてやるとtmpファイルは消されました。
結局出力先指定は上手くいきませんでしたが・・。
0324nobodyさん
03/03/31 02:28ID:U3RJ6jN1UNIX環境で云々と書いているので、UNIXなんですかね。WindowsにActive Perlとhttpadじゃだめですか?
0325nobodyさん
03/03/31 02:36ID:???0326nobodyさん
03/03/31 02:48ID:poa5fGTP0328p0604-ip02sasajima.aichi.ocn.ne.jp
03/03/31 05:14ID:E9hS93FY0329nobodyさん
03/03/31 06:04ID:???自分が初心者で、これからPerlをやっていこうとしてて、
使えるサーバスペースがWindowsしかないのなら、とりあえず
UNIXのサーバを借りた方が勉強楽だと思うよ。
0331nobodyさん
03/03/31 06:24ID:???0332nobodyさん
03/03/31 06:33ID:???0333nobodyさん
03/03/31 07:03ID:z41dsEAY将来どこまでやる必要があるかによる。
素人が遊びでやるならWindows+AnHttpd+ActivePerlが簡単でいい。
情報も集めやすいし。
将来、顧客に提供するWebサイトを目標にするなら、すくなくとも
Windowsは避ける。定番のUnix+Apache+Perl だろうね。
敷居が低いからと言ってWindowsを採用すると、保守できないシステム
になり、無理やり保守しようとしてとんでもない人件費がかかったりします。
0338nobodyさん
03/03/31 14:16ID:???Linuxとかの環境での動作確認はしてるだろうけど。
0343nobodyさん
03/03/31 16:04ID:???動いたらOKとかいうより、Perlのバージョンに依存する部分があるか、
コマンドも使うならサーバによって使えないこともあるなど
書く前か書いてる最中にわかること。
0344nobodyさん
03/03/31 16:14ID:???なるほどぉ。。。
ちなみにVine Linuxってやつでもいいんですか?あれならCD持ってるからインスコしてみようかなぁ、とおもうんだけど。
WinとLinuxのデュアルブートっていうのは問題ないんですか?
0347nobodyさん
03/03/31 18:17ID:???漠然とした不安をそのまま投げるなよー。
なんでもかんでも誰かに聞いて苦労をせずに済ませたいなんてのは
プログラマ向けな性分じゃない。
取りあえずそのユーザ側的思考から抜けれ。
0348nobodyさん
03/03/31 18:45ID:???最初からやめとけってこった
0350nobodyさん
03/03/31 19:02ID:a8GlaiRt0351nobodyさん
03/03/31 19:06ID:???無料会員登録で、もれなく商品券が貰えるキャンペーン実施中!!
http://camellia16.fc2web.com/cafesta.html
0352nobodyさん
03/03/31 19:09ID:???0353nobodyさん
03/03/31 19:20ID:WQCBJdN90354nobodyさん
03/03/31 19:24ID:???厳密には無理。
一応、Perl スクリプト内でできるレベルとしては、
環境変数 HTTP_REFERER を見て判断するという方法がある。
その他、.htaccess を利用する方法もある。
こちらの解は該当スレへ。
そもそも、検索かけりゃ一発で答が出ると思うが?
0356nobodyさん
03/03/31 19:37ID:???まぁこの手の質問って、こう返すしかなくない?
0357nobodyさん
03/03/31 19:37ID:a8GlaiRt0358nobodyさん
03/03/31 19:38ID:???ほらよ〜
http://www.google.com/search?num=100&hl=ja&ie=UTF-8&oe=UTF-8&c2coff=1&as_qdr=all&q=%E6%8E%B2%E7%A4%BA%E6%9D%BF%E3%81%B8%E3%81%AE%E7%9B%B4%E3%83%AA%E3%83%B3%E3%82%AF%E3%82%92%E9%98%B2%E3%81%90&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
特定のページを直リンクされたらどうすることも出来ませんがね。。。
0359353
03/03/31 20:04ID:WQCBJdN90360nobodyさん
03/03/31 20:19ID:???0361nobodyさん
03/03/31 20:33ID:???「特定のページ」とやらが同一サイト内なら、有効期限付きのCOOKIEを使う手もあります。
しかし、Perlの話じゃなくなるので、相応しいスレを探してください。
0362nobodyさん
03/03/31 20:34ID:???サーバーの設定に関することは、UNIX板などで聞いた方がいいと思われます。
0363T女の竹田
03/03/31 20:37ID:???まず、サーバの管理者にソケットが使えるかどうか聞いて。
使えないなら何やっても無駄。
使えるなら、もしルート権限があるなら普通にインストール、
ないなら自分の置ける場所にインストールして、スクリプトの方で
パスを指定すれば大丈夫。
0364nobodyさん
03/03/31 20:52ID:???ここのスペースに
http://dream.lib.net/room/cgi/e_upboard.html
これ置いたんですけど、これでアップした画像のURLを
2chなどの外部に貼って表示することが出来ません。
403が出ます。
どうすれば外部から表示出来るようになりますか。
0365nobodyさん
03/03/31 21:13ID:???管理者に文句言え。
0367nobodyさん
03/03/31 21:44ID:rFaVLjrqTelnetモジュールを使用したTelnetで
ポートを変更するにはどうしたらいいですか?
0368nobodyさん
03/03/31 22:28ID:???perldoc Net::Telnet
見れ
0369nobodyさん
03/03/31 22:42ID:rFaVLjrqう〜ん見れません
0371nobodyさん
03/04/01 00:15ID:???これから24時間嘘が飛び交います。
0372nobodyさん
03/04/01 00:21ID:???0375372
03/04/01 00:34ID:???実を言うとTCP/IPプロトコルを作ったのも僕です。
もちろんFTPもですよ
0376nobodyさん
03/04/01 00:47ID:???見なかった事にしといて。
0377nobodyさん
03/04/01 01:40ID:???トップページに閉鎖しますだってよw
0378nobodyさん
03/04/01 01:50ID:???やるとはさすが・・・
0379nobodyさん
03/04/01 02:19ID:???と思ってたら発見
age
0380nobodyさん
03/04/01 03:06ID:???cryptとかpack関数とか関係あるのかなと思って調べてみたんですけど、
cryptはともかくpackって私には理解不能で・・・
2chのIDもどきの作り方、どなたか教えていただけないでしょうか?
0381nobodyさん
03/04/01 03:09ID:???0382nobodyさん
03/04/01 03:51ID:???http://pc2.2ch.net/test/read.cgi/php/1040777088/469
0384nobodyさん
03/04/01 09:18ID:???って言うソースの一部で悩んでいるのですが
$chars[$config{'char'}]{"points_$arg1"}
って何だ?・・理解できない。
何というか配列の構造(変数)?が理解できません。
脳内処理では
@chars = (%config,%etc....
%config = ('char'=>points_$arg1
のように考えてしまったのですがコレは明らかに違う様な気がします。
そもそも連想配列のkeyに連想配列を使えるのか・・?とか言う疑問が
頭の中で反乱してグチャグチャになっとります。
多分こんな説明では教える方もわからないと思いますが
配列の構成みたいなものをビシっと言って頂けるととても助かります。
4/1日ですけどマジ質問です。
0385nobodyさん
03/04/01 09:50ID:???>@chars = (%config,%etc....
>%config = ('char'=>points_$arg1
とか
>連想配列のkeyに連想配列
とか、言ってることがさっぱりんこだが、
$chars[$config{'char'}]{"points_$arg1"}
これは、
$chars[$config{char}]->{"points_$arg1"}
としたほうがわかりいいんか?
use strict;
my %config = (char => 0);
my $arg1 = 123;
my @chars = ({ points_123 => 'hage' });
print $chars[$config{char}]->{"points_$arg1"};
# or
# print $chars[$config{'char'}]{"points_$arg1"};
# same as
# print $chars[0]->{points_123};
わかた?
0386nobodyさん
03/04/01 10:08ID:???my %config = (char => 0);
my $arg1 = 123;
my @chars = ({ points_123 => 'hage' });
print $chars[$config{char}]->{"points_$arg1"};
# or
# print $chars[$config{'char'}]{"points_$arg1"};
# same as
# print $chars[0]->{points_123};
グホッ、やばいです、インダス文字に見えてきました。
しかも->の意味がわかってないし・・
教えて貰った情報を元にもう一回解説サイト回って消化できるようにしてきまつ。
わけわからんこと書いてるのにアドバイスありがとうございます。
0387nobodyさん
03/04/01 10:16ID:???1970年1月1日からの秒数に変換してくれるツールありませんか?
0388nobodyさん
03/04/01 10:44ID:???Time::Localだね
use strict;
use Time::Local;
# Usage:
# $time = timelocal($sec,$min,$hours,$mday,$mon,$year);
my $date = '99/01/22';
my @date = reverse split m|/|, $date;
$date[1]--;
my $time = timelocal(0, 0, 0, @date);
print $time;
0389246
03/04/01 13:54ID:2CNQXE4J別に他の文字とかでもいいんですか?
慣習上の問題ってやつですか?
0390nobodyさん
03/04/01 14:14ID:???カレントディレクトリに CGItemp28729 など
一時ファイルが残ってしまい消えません
#アップロードするごとに増えていく
環境はWinXP+ActivePerl v5.8.0 built for MSWin32-x86-multi-thread
です。
初歩的なところでつまずいてると思いますが
一時ファイルを残さない方法教えてください。
0391251
03/04/01 15:08ID:???関数はunlinkでできるけど安易に使うと全部消去しかねない諸刃の剣
そもそも、自分でスクリプトを書いてて何故ソースが理解出来とらんのだろうかと・・・
0393390
03/04/01 15:16ID:???いや実はUnixではきれいに消えてるんですが
知り合いにソース頂戴と言われて
あげたら環境がWindowsXPで
テンポラリファイルが消えないと文句言われました。
で自分でその環境を作ったらやはり消えない・・・
0394390
03/04/01 15:19ID:???スクリプト起動するごとにそこのディレクトリを
掃除するってことも考えたんですが
なぜ消えないのかの方が疑問になったんです。
んー なんででしょう・・・
0397390
03/04/01 15:55ID:???一応ANHTTPd Apache BJD試してみましたがどれも同じ結果に・・・
ついでに自分の書き方が悪いのかとおもって
他の方が配布しているスクリプトを使ってみても同じでした・・
うーん 気持ち悪い
0398nobodyさん
03/04/01 16:02ID:???うだうだ言ってないで、テンポラリファイルを消している部分の
ソースコードをここに示してください。
また、余計な部分は示さないでください。
0400nobodyさん
03/04/01 16:23ID:???結局、僕は解決できなかったので諦めました。
04014 ◆6ykHaReEM2
03/04/01 16:28ID:2ihQy5Ooforeach (readdir(DIR)) {
/^CGItmp/ && unlink;
}
closedir(DIR);
これでだめだろうか?
04024 ◆6ykHaReEM2
03/04/01 16:32ID:2ihQy5OoUpload終わって、プログラム終了前に↑してもだめなのですか?
04034 ◆6ykHaReEM2
03/04/01 16:34ID:2ihQy5Oo暇あればWindowsで試してみます。
0404390
03/04/01 16:34ID:???それがいちばんよさそうですね
UPしたやつはロックかかってるのかわかりませんが消えません
以前にUPしたやつは消えました。
これって激しく既出の問題だったんでしょうか?
0405nobodyさん
03/04/01 16:40ID:???一時ファイルって作成する場所って自分で指定できないんでしょうか?
0406nobodyさん
03/04/01 16:44ID:???これだと特定のアドレスは阻止できてもhotmail全部は無理みたいです
どうすればいいんでしょうか?
if ($FORM{'EMAIL'} eq "****\@hotmail.com"){ push @err,'・このメールアドレスは使えません'; }
0407390
03/04/01 16:44ID:???原因はファイルハンドルを閉じて無かったことでした。
$filename = $query->param('File');
この状態で <$filename>が存在してしまうので
close($filename);
の一行入れるだけで問題なく一時ファイルは消えるようになりました
くだらん質問してスマソ!!
0409nobodyさん
03/04/01 16:49ID:zxB6PEfRhttp://homepage3.nifty.com/digikei/
0411nobodyさん
03/04/01 16:55ID:???でいいかな?
0414nobodyさん
03/04/01 17:48ID:???の中の ftpcontrol.pl を解読中なのですが、300行目付近の
($boundary) = $content_type =~ /boundary="([^"]+)"/; #";
の行がよくわかりません。左端の括弧が必要な理由と、
右端の #"; が何かよくわかりません。どなたかわかりますか?
0415nobodyさん
03/04/01 18:18ID:???0416nobodyさん
03/04/01 18:30ID:???てのは、なんだかわからん。
普通に考えれば、# 以降は行末までコメントだけど・・・。
0417414
03/04/01 18:40ID:???調べが足りませんでした。
しかし、右端の #"; は謎ですね。コメントにしか見えないんだけど、
何の意味をこめてコメントにしたのかわからないし、
タイプミスだとしても、タイプミスで「"」を入力するヤシがいるのかと問いたい。
0418nobodyさん
03/04/01 18:58ID:???そこへ飛んだりできるエディタが多く存在するのだよ。
そういうエディタで /boundary="([^"]+)"/ なんて行が
あると、クォートの数が揃わんで難儀するのだよ。
0421nobodyさん
03/04/01 19:11ID:???0422bloom
03/04/01 19:13ID:xVxahWvN0423nobodyさん
03/04/01 23:05ID:jYJDEp5Aforeach $line (@template){
$line =~ s/aaa/AAA/;
$hoge = $hoge . $line;
}
print "@template : $hoge";
こうすると、$template[0]自体がAAAになってしまいます。
違うのです。配列の要素は変わらないで欲しいんです。
っていうか、配列の要素に対して置き換えしてるわけじゃないのに
どうして配列の要素の$template[0]が置き換えされちゃうんでしょうか。
$lineに対して処理をしてるのに。
0424423
03/04/01 23:09ID:???配列の要素が変更されてると困っちゃうんです。
0425nobodyさん
03/04/01 23:23ID:???思いっきり配列の要素を変更しようとしています。
) foreach $line (@template){
) $line =~ s/aaa/AAA/;
) $hoge = $hoge . $line;
) }
foreach ループ内では、$line は配列@templateの各要素にセットされます。
$line を変更すると、配列の要素が変更できる、ということです。
変更したくない場合は、一旦別な変数にコピーしてから、扱いましょう。
「コピーする」「セットする」という用語がみそです。
0426nobodyさん
03/04/01 23:34ID:???0427nobodyさん
03/04/01 23:51ID:???0428nobodyさん
03/04/01 23:55ID:wgIEAtF8@arr = ('aaa', 'bbb', 'ccc');
$str = 'zzz';
foreach $str (@arr) {
print $str . "\n";
}
print $str . "\n";
最後に表示される1行は、zzz だよ。
今日は4月1日だな。(笑)
0430nobodyさん
03/04/02 01:09ID:???でも今の、foreachの中で$strが@arrの各要素のエイリアスになる、ということには関係ない。
0432nobodyさん
03/04/02 01:22ID:???0434nobodyさん
03/04/02 04:29ID:???直ぐに出てくるのですが記号等は検索しても何故か引っかからないのでお手上げ状態に
なってしまいます。
0435nobodyさん
03/04/02 05:15ID:???0437nobodyさん
03/04/02 08:30ID:???0438
03/04/02 14:38ID:sWPLndkw投票CGIの多重投票防止をクライアントのNICのMACアドレスを取得
することで実現できないかと考えたのですが、実現可能でしょうか?
また実現可能な場合、どのようなコードを書けばいいのでしょうか?
ご教授ください。
0439nobodyさん
03/04/02 14:53ID:???0441438
03/04/02 15:06ID:sWPLndkwそれでもIPやクッキーよりもましだと思うので、方法があるのでしたら
ご教授ください。
0442nobodyさん
03/04/02 15:09ID:???同じネットワーク内だけじゃ?
0443nobodyさん
03/04/02 15:28ID:???0444nobodyさん
03/04/02 15:35ID:???NetPacket::ARPとか使えば出来そうだけど、
敷居が高すぎてやったことないね。
それよりもネットワーク系超ニガテだけどさ、
442さんの言うとおりイーサネットまででしょ。
多分つかまえられるのはてめーんとこのルータのMACアドレスまでだね。
他はIP+ポートのソケット単位でルーティングされてるんだろうから。
リモートのIPじゃだめなの?
よって、クッキーたべさせなさい。
0445
03/04/02 15:35ID:sWPLndkwクライアント側でipconfig実行してその値を取得できればいいんですけど
そのやり方がどうも分からなくて、Win32::OLE使えば出来そうなんですけど。
http://member.nifty.ne.jp/hippo2000/perltips/Win32/OLE.htm
0447nobodyさん
03/04/02 15:39ID:???0448
03/04/02 15:39ID:sWPLndkwIPだと再ダイアルアップしたらだめだし、クッキーもその都度消されちゃったら
だめなんでMACアドレスならいいかなと。それにルーターまででも桔梗いいん
じゃないかと・・・
0449446
03/04/02 15:39ID:???0450nobodyさん
03/04/02 15:43ID:???だから、てめーんとこのルータまでだって。
ルータ製品を変えない限り何万回でも何億回でも
同じMACアドレスしかつかまえられないでしょ。
そんなクッキーよりIPより無用なものがよかったら
NetPacket::ARP使いなさいってこった。
0451nobodyさん
03/04/02 15:45ID:???果てしなくガクブル系セキュリティホールだな。
しかも、OLEなんて全然関係ないし。
0452nobodyさん
03/04/02 18:04ID:4v5aHOPP<!--here-->
みたいなコメントの部分をCGIで置き換えて出力する部分を作成しています(Perl)。
この、HTMLファイルを、CGIのディレクトリと違うディレクトリにいれたんですが、
これだと、HTMLが画像のリンクなどを含んでいた場合、困ったことになります。
HTMLがCGIから出力された時に、相対パスで入っていると、画像が表示されません。
ホームページの編集ソフトなどで作成したHTMLを、指定フォルダにアップする形にしたいので、
すべての画像パスを絶対パスにするとかそういう解決策は無しで、何かいい方法はないでしょうか?
一般的な解決策などがあるのでしょうか?
0454nobodyさん
03/04/02 18:12ID:???0455nobodyさん
03/04/02 18:21ID:???その相対パスの指定が間違っているだけではありませんか。
結果的に正しい相対パスになるように、書いておくしかないのではないでしょうか。
0456nobodyさん
03/04/02 19:13ID:???なんで<!--here-->は置き換えられてIMGタグは置き換えられないのかと・・・ry
0457nobodyさん
03/04/02 20:21ID:???##################################
$openimg = "svropen.gif";
$closeimg = "svrclose.gif";
open IN, "<$iptext" or die "ERROR:ipファイルが開けません!";
$ipdata = <IN>;
close IN;
if ($ipdata == "close") {
$dispimg = $closeimg;
&dispimage;
} else {
$dispimg = $openimg;
&dispimage;
}
sub dispimage{
print "Content-type: image/gif\n\n";
open IMG, "$dispimg" or die "ERROR:imgファイルが開けません!";
binmode IMG;
binmode STDOUT;
while (<IMG>){
print STDOUT $_;
}
close IMG;
}
__END__
これのopenimgとcloseimg両方を文字で表したいのですがどうすればいいですか?
0458nobodyさん
03/04/02 20:31ID:???0460457
03/04/02 20:43ID:???##############ファイル設定#################
$iptext = "ip.txt";
$open = "あ";
$close = "い";
###########################################
if ($ipdata == "close") {
print "$open\n";
}
else {
print "$close\n";
}
これでは表示されないのかなぁ?
0461nobodyさん
03/04/02 21:04ID:???0462nobodyさん
03/04/02 21:08ID:???open IN, "<$iptext" or die "ERROR:ipファイルが開けません!";
$ipdata = <IN>;
close IN;
を消してんだよ。
0463457
03/04/02 21:10ID:???これさ、imgタグで表示させるから、文字にしても意味ないか、、、
0464nobodyさん
03/04/02 21:15ID:???0465nobodyさん
03/04/02 21:19ID:???0466457
03/04/02 22:19ID:???今やろうとしているのは、
まずip.txtを読みにいって、IPがあれば、「公開」、空白だと「非公開」
(ip.txtの更新はNoDNSというフリーソフトでやってます)
というふうにして、HTMLに表示するCGIを作りたいのですが、どうでしょうか?
0468457
03/04/02 22:38ID:yhPO3ktu$ex=0;
open(FILE,"ip.txt");
while(<FILE>){
if(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/){
$ex++;
}
}
close(FILE);
if($ex){
&settion;
}else{
&unsettion;
}
sub settion
{
print "content-type: text/html\n\n";
print "<html><head><title>公開</title></head>\n";
print "<body><h1>公開</h1></body>\n";
print "</html>\n";
exit;
}
sub unsettion
{
print "content-type: text/html\n\n";
print "<html><head><title>非公開</title></head>\n";
print "<body><h1>非公開</h1></body>\n";
print "</html>\n";
exit;
}
0469457
03/04/02 22:51ID:???わざわざこんなに書いていただいたのに申し訳ありませぬが、
あらかじめいろいろ書いているindex.htmlに付け加える形にしたいのですが、、、
なんどもすいません
0470nobodyさん
03/04/02 23:01ID:yhPO3ktu0472nobodyさん
03/04/02 23:09ID:yhPO3ktuSSIでやるには、読み込みたい部分に<!--#exec cgi="よみこむCGIファイル" -->
でいいとおもいます。
CGIでは・・・やりかたがいまいちおもいつきません。index.htmlのフレームを
わければなんとかなりそうですが・・・
0474nobodyさん
03/04/02 23:19ID:yhPO3ktu0476nobodyさん
03/04/02 23:35ID:yhPO3ktu$ex=0;
open(FILE,"ip.txt");
while(<FILE>){
if(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/){
$ex++;
}
}
close(FILE);
open(FILE2,"+>index.html");
while(<FILE2>){
if(s/<\/body>(.*)<\/html>/\1/ig){
print FILE2 "$_";
}else{
print FILE2 "$_";
}
}
close(FILE2);
if($ex){
&settion;
}else{
&unsettion;
}
0477つづき
03/04/02 23:36ID:yhPO3ktu{
open(FILE3,">>index.html");
print "<h1>公開</h1></body>\n";
print "</html>\n";
close(FILE3);
exit;
}
sub unsettion
{
open(FILE3,">>index.html");
print "<h1>非公開</h1></body>\n";
print "</html>\n";
close(FILE3);
exit;
}
0478nobodyさん
03/04/02 23:46ID:???0479名無しさんパーフェクト
03/04/02 23:50ID:RgSUli0Eそれならまた違うhtmlを編集して最後にそちらに飛ばした方が
0480名無しさんパーフェクト
03/04/02 23:51ID:RgSUli0E0481名無しさんパーフェクト
03/04/02 23:53ID:???0482457
03/04/02 23:56ID:???自宅鯖は<!--#exec cgi="よみこむCGIファイル" -->です。
ってして、あとどうすればいいですか?
CGIファイルはどれにすればいいんですか?
ほんと何も知らないですいません。。
0483nobodyさん
03/04/02 23:57ID:yhPO3ktu0484nobodyさん
03/04/03 00:06ID:os6gOz9aのファイル名をserchip.cgiだとして
それをSSIでindex.htmlに組み込むとすると
組み込みたい場所に
<!--#exec cgi="serchip.cgi"-->
てなかんじでいいとおもいます。
0485457
03/04/03 00:20ID:???0487457
03/04/03 00:49ID:???#!/usr/bin/perl
$ex=0;
open(FILE,"ip.txt");
while(<FILE>){
if(/close/){
$ex++;
}
}
close(FILE);
if($ex){
&settion;
}else{
&unsettion;
}
sub settion
{
print "閉鎖中\n";
exit;
}
sub unsettion
{
print "公開中\n";
exit;
}
これでSSI使ったらできました。
>>468の
(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/)
が違ってるとしかおもえないんですが、、どうでしょう?
0490457
03/04/03 01:05ID:???#!/usr/bin/perl
$ex=0;
open(FILE,"ip.txt");
while(<FILE>){
if(/close/){
$ex++;
}
}
close(FILE);
if($ex){
&settion;
}else{
&unsettion;
}
sub settion
{
print "content-type: text/html\n\n";
print "閉鎖中\n";
exit;
}
sub unsettion
{
print "content-type: text/html\n\n";
print "公開中\n";
exit;
}
直接cgi実行するとちゃんと変わるんですが、SSIにするとうまくいきません。
自宅鯖は<!--#exec cgi="ip.cgi" -->です。って書いたのに、
自宅鯖はです。
になってしまいます。SSIの文まちがってますかね?
0491nobodyさん
03/04/03 01:07ID:???百合親切だな
0492nobodyさん
03/04/03 01:10ID:???ちゃんと設定方法とか読んだのかよ、
つか漏れ的には if(/close/){ が非常に気になるわけだが・・・。
0493457
03/04/03 01:16ID:???#!/usr/bin/perl
$ex=0;
open(FILE,"ip.txt");
while(<FILE>){
if(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/){
$ex++;
}
}
close(FILE);
if($ex){
&settion;
}else{
&unsettion;
}
sub settion
{
print "content-type: text/html\n\n";
print "<html><head><title>公開</title></head>\n";
print "<body><h1>公開</h1></body>\n";
print "</html>\n";
exit;
}
sub unsettion
{
print "content-type: text/html\n\n";
print "<html><head><title>非公開</title></head>\n";
print "<body><h1>非公開</h1></body>\n";
print "</html>\n";
exit;
}
これで直接実行したらできました。あとは、SSIです。。。
0494457
03/04/03 01:25ID:???.htaccess もトクトクでは動作しませんのでこれは変更不可能です。
また、トップページは index.htm , index.html の形式しか許されていませんので、トップページにSSIを利用することはできません。
( ゚Д゚)ポカーン・・・・・
逝ってきまつ
0497nobodyさん
03/04/03 01:33ID:???whileが最後まで回る所とかな。
0498nobodyさん
03/04/03 01:33ID:???「うまくいきません」の定義はなんだよ?
「自宅鯖はです。」って、HTMLソースレベルでみてそれ言ってるの?
SSIコケたら[an error occurred while processing this directive]が出るだろ普通。
ソース見てみ。多分SSIの構文が丸裸かもしれんぞ。サーバが何かわからんけどよ。
あと、ちゃんとエラーを捕捉しろって。
リファクタリングしてやる。
#!/usr/bin/perl -w
use strict;
use CGI::Carp qw#fatalsToBrowser#;
my $ex = 0;
open(FILE, "ip.txt") || die $!;
while (<FILE>) {
if(/close/){
$ex++;
last;
}
}
close(FILE) || die $!;
print "content-type: text/html\n\n";
print $ex ? "閉鎖" : "公開";
print "中\n";
共通化できる所はまとめなさい。
0500nobodyさん
03/04/03 01:44ID:???>>466の「まずip.txtを読みにいって、IPがあれば、」って、
ファイルにはどれだけのデータがあるのか?
IPある無しの答えは1個なのか複数かもはっきりしてないし
0501nobodyさん
03/04/03 01:46ID:???0502nobodyさん
03/04/03 02:20ID:???perl色々勉強してて、「->」につまづいて、もう全然わけわからなくて、
http://www.rfs.jp/sitebuilder/perl/04/06.html
↑ここが一番詳しいかなとおもうんですけど、ここ見ても意味不明で・・・
だんだんやる気なくしてたんですけど、ちょっと教えていただけませんか?
まず、「矢印演算子を使わなければならない理由」、
あるいは、別に使わなければならないわけでもないなら、
「矢印演算子を使うことでどのようなメリットがあるのか」を
できれば、例をだして、「こういう風なことをしたいときにこうする」
または、「こういう風にするときにこうした方がこういうメリットがある」
という感じで教えていただけないでしょうか?
次に
http://www.rfs.jp/sitebuilder/perl/04/06.html
こことかで出てくる、「無名の配列」「無名のハッシュ」・・・
の「無名」ってのはどういう状態を指してるんでしょうか?
あと、そんなことよりこのサイトで勉強しろよってのがあれば、
貼っていただけると自分で勉強してきます
0503nobodyさん
03/04/03 03:19ID:???@arr = (1,2,3,4,5);
ってときは、arr っていう名前が、この配列についてる。
0504nobodyさん
03/04/03 03:53ID:???http://www.namazu.org/~tsuchiya/perl/info/perl-ja_20.html
どうしてもアローを使わなければならないケースは少ないだろう。
0505nobodyさん
03/04/03 05:20ID:???>無名の名ってのは、変数名のことじゃないかなぁ。
そういうことだと思うんですけど、じゃあ、これが無名ってのは、どういう状態なんでしょう?
まだ、宣言されてない変数ってことなんでしょうかねぇ?
>どうしてもアローを使わなければならないケースは少ないだろう。
でも人のソースを解読したいときに激しく不便、ってかできないんです
教えていただいたurl・・・難しい。明日改めて勉強しに行ってきます
0506nobodyさん
03/04/03 07:32ID:Nji/7HYX無名配列、無名ハッシュってのは、多次元のそれらを作るときできる。
@ar=([baka, aho, manuke], 'kuso', 'manko');
ここで($ar[0], 'kuso', 'manko')は、arって名前の配列だな。
だけど(baka, aho, manuke)ってのは、名前のない配列や。
上のは、print $ar[2], "\n";で表示できるが、下のは、
print $ar[0][1], "\n";または、print $ar[0]->[1], "\n";だ。
ハッシュのときは、矢印演算子使うた方が分かりやすいからよく使われる。
0507nobodyさん
03/04/03 07:52ID:Nji/7HYX%hash=('baka' => 'kuso', 'aho' => {'manuke' => 'manko', 'boke' => 'shikko'});
print $hash{'baka'}, "\n";
print $hash{'aho'}->{'manuke'}, "\n";
0508nobodyさん
03/04/03 08:06ID:Nji/7HYX(...)ってのはリスト構造だ。[...]ってのは配列だ。{...}ってのは
ハッシュだ。いいか?だから、
$ar=['baka', 'aho', 'bokenasu'];
$hash={'baka', 'kuso', 'aho', 'manko', 'bokenasu', 'shikko'};
って書くと直接無名配列、無名ハッシュができる。
$ar->[1]とか$hash->{'baka'}ってアクセスするっきゃ内。
0509nobodyさん
03/04/03 08:09ID:Nji/7HYXもう出かけるぞ。
0510nobodyさん
03/04/03 10:14ID:???$hash = {a => 1, b => {c => 3, d => 4};
$$hash{a}
これはちょっと格好悪いから、矢印を導入。
$hash->{a}
$$hash{b}->{d}
$hash->{b}->{d}
#{..}の間の矢印は省略できる。一気にデリファレンスする感じ。
$$hash{b}{d}
$hash->{b}{d}
無名ハッシュに対してスライスを使いたいとき、矢印は使えない。
@$hash{b}{'c', 'd'} # (3, 4)
普通のハッシュに戻す事もできる。
%hash = %$hash;
このとき、
$hash{b}->{d}は、さっきのルールが適用されて、
$hash{b}{d}でアクセスできる。
0511nobodyさん
03/04/03 10:24ID:???%hash = (a => 1, b => 2);
$hash = {a => 1, b => 2};
この2つの状態を比べると、データは同じでも、上の方は、%hashっていう名前が
付いているのに対して、下は、データのアドレスが$hashに入ってる。
つまり、1つの変数にメモリ上のデータが対応している状態を、普通の状態。
変数に対応していないデータの事を、無名だ。という。
0512nobodyさん
03/04/03 10:28ID:???5行目を修正。。
0513nobodyさん
03/04/03 10:31ID:???$str = 'hoge';
$ref->{a}[0]->($str)->$str->$str($str->$str);
0515nobodyさん
03/04/03 12:13ID:???はぁ?
0516251
03/04/03 12:22ID:???例えば、xが2yが3の領域の値を見たい時は
print $area[2]->[3];
あと、xyzの値を登録したい時は
$point[1]->[2]->[3] = 'fujiyama';
こんなふうに呼び出すとか・・・
んで、無名配列はリファレンスの概念を理解すると解り良いと思う
perlだと
配列は @ayaya0 =(1,2,3)
ハッシュは %ayaya1 = (a=>1,b=>2);
で表記出来るのだけど
リファレンスは
$ayaya2 =[1,2,3];
$ayaya3 ={a=>1,b=>2};
や、
$ayaya2 = \@ayaya0;
$ayaya3 = \%ayaya1;
0517251
03/04/03 12:22ID:???$ayaya自体にはデータが格納されている位置情報が入ってる。
だから、データーが巨大でもその位置情報をわたすだけで済むので処理が高速化出来るとかいわれてる。(ソース次第だけね・・・)
んで、呼び出しは
$ayaya0[0]
$ayaya1{a}
ってなることはperl初心者でもわかると思うけど、 リファレンスを参照する場合は
$ayaya2->[0]
$ayaya3->{a}
となる。要は$ayayaだけでは必要とする要素をいままでのままでは書けないから->を使って記述しましょうということです。
オマケで、リファレンスを配列構造やハッシュに戻す時は
@ayaya0 = @{$ayaya2};
%ayaya1 = @{$ayaya3};
まぁ、ルールとしてはこうなんだけどアロー演算子自体が省略可能・・・
$hoe->{a}->[3] なら $hoe->{a}[3] とか
でも
$hoe{a}[3]はこの場合だとNG 何故なら %hoeの aというkeyを参照してしまう為
$hoe{a}->[3] と解釈されてしまう・・・
気をつけなければならない所が多いため最初のうちは演算子等はしっかり付けとくほうがいいと思われ。
で、ココまではハードリファレンスの話、OO思考プログラムはまたルールが違うのでそれは別の話に・・・
0518251
03/04/03 12:36ID:???だったすまね・・・
0519457
03/04/03 13:46ID:???open INPUT, "<ip.txt";
if($_ = /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/){
&START;
}
else($_ = /close/){
&CLOSE;
}
sub START
{
print "content-type: text/html\n\n";
print "<html><head><title>公開中</title></head>\n";
print "<body><a href=\"jump.cgi\">公開中</a></body>\n";
print "</html>\n";
}
sub CLOSE
{
print "content-type: text/html\n\n";
print "<html><head><title>閉鎖中</title></head>\n";
print "<body>閉鎖中</body>\n";
print "</html>\n";
}
これだと、Perlチェックでelseの部分がおかしいって出るので、ぜんぜんわからないので、
↓にかえました。
0520457
03/04/03 13:47ID:???open INPUT, "<ip.txt";
if($_==/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/){
&START;
}
if($_!=/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/){
&CLOSE;
}
sub START
{
print "content-type: text/html\n\n";
print "<html><head><title>公開中</title></head>\n";
print "<body><a href=\"jump.cgi\">公開中</a></body>\n";
print "</html>\n";
}
sub CLOSE
{
print "content-type: text/html\n\n";
print "<html><head><title>閉鎖中</title></head>\n";
print "<body>閉鎖中</body>\n";
print "</html>\n";
}
こうしたんですけど、if文でifが複数あってelseがないっていうのは文法上だめですか?
0521502
03/04/03 13:52ID:???質問しっぱなしで寝まくってました。
で、今ざっと皆さんのレス読み返してるんですが、
>>517さんの一行目でなんとなくメリットがわかりました。
つまり、一旦新たな配列に値をコピーしてからサブルーチンなんかにわたすより、
値の入ってるアドレスを渡した方が、効率的ってことですね?
で、矢印演算子はそれらの代入や参照のときに使うものだと
今からもう一度皆さんに書いていただいたのを読み直してみます。
本当に有難うございます。多分理解できると思います
0522nobodyさん
03/04/03 13:53ID:???0525nobodyさん
03/04/03 14:07ID:???仕様をはっきりさせないから。
ip.txtって複数のアドレスが入ってるの?その場合はデリミタは?
それとも一つあるか、空のファイルのどちらか?
あるいはアドレス以外の何かも含まれているの?
0526nobodyさん
03/04/03 14:45ID:???とか、まぜっかえしてみる。
0528nobodyさん
03/04/03 15:33ID:kftTqlDWhttp://my.vector.co.jp/servlet/System.FileDownload/download/ftp/0/279026/pack/win95/game/table/pachinko/sikisai.lzh
0529nobodyさん
03/04/03 15:56ID:jWA2mxiHhttp://bbs.1oku.com/bbs/bbs.phtml?id=yasuko
0530nobodyさん
03/04/03 16:06ID:???0531CGIでwww上のhtmlソースを取得
03/04/03 16:08ID:507cBmxswww.kasai.fm/perlHTTP/
www.antun.net/tips/cgi/perl.html
tohoho.wakusei.ne.jp/wwwperl2.htm#socket
上記のサイトの通りにCGIを設置しても動いてくれません。
どなたか幅広い環境で動くコードをお持ちでしたら
いただけないでしょうか?
これがどうしても出来なくてもう一週間も製作が止まった
ままになって参ってます、大変ずうずうしいお願いでは
ありますがどうか宜しくお願い致します。m(_ _;)m
0532nobodyさん
03/04/03 16:10ID:+bF3BpEY0chのスクリプトをDLして掲示板を精製したけどその掲示板にアクセスするには何処にアクセスすればいいのですか〜?
(他のサイトではindex.htmlでアクセスしてたが
0533nobodyさん
03/04/03 16:11ID:???自分のコンピュータでやればうまくゆくと思う。
0536nobodyさん
03/04/03 16:13ID:???それそれ。
>>527
ということでhogehoge.cgiというファイルの出力で
print "Content-Type: text/javascript\n\n";
print "document.write(\"$hogehoge");\n";
とかしておいて、
HTMLファイルに
<script type="text/javascript" src="hogehoge.cgi"></script>
と書くと$hogehogeの内容が出てくる。
0537nobodyさん
03/04/03 16:35ID:sUO6GuNu${$hoge} = 'abc';
0538531 CGIでwww上のhtmlソースを取得
03/04/03 16:37ID:507cBmxsそれが..
他人が作ったCGIはちゃんとこの動作を
してるのに自分のは動かないんです...
トクトクサーバのOSはLinuxなのでWINDOWSやUNIXサーバ用に
書かれたコードは動かないんでしょうか..
0539nobodyさん
03/04/03 16:41ID:jWA2mxiH◆よろしく◆
0542537
03/04/03 16:54ID:sUO6GuNu${$hoge} = 'abc';
このような代入の動作は、
$hogeの中身の文字列と同じ名前をもつスカラ変数に 'abc' という文字列を代入する。
$hogeの中身であるスカラへのリファレンスが指している変数に、'abc' という文字列を代入する。
のどちらかが、場合場合で行われる、ということでしょうか。
0543457
03/04/03 16:56ID:???ip.txtには公開状態にしたいときに、1つのIPアドレスが書き込まれています。
閉鎖時は「close」という単語が書かれています。(空ファイルはなんか不安なもので)
それで、一から自分で書き直したのがこれです。
0544457
03/04/03 16:56ID:???open(FILE, "ip.txt");
while (<FILE>) {
if (/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/){
&connection;
}else{
&unconnection;
}
}
close(FILE);
sub connection
{
print "content-type: text/html\n\n";
print "<html><head><title>公開</title></head>\n";
print "<body><h1>公開</h1></body>\n";
print "</html>\n";
exit;
}
sub unconnection
{
print "content-type: text/html\n\n";
print "<html><head><title>非公開</title></head>\n";
print "<body><h1>非公開</h1></body>\n";
print "</html>\n";
exit;
}
なんとなく理解できるんですが、whileの中にifを入れないとできないのがよくわかりません。
if(<FILE> =/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/)
とかだめでしょうか?whileは絶対いるのでしょうか?
0545531 CGIでwww上のhtmlソースを取得
03/04/03 16:59ID:507cBmxsいえ、socketは使えるんです。
http://www.vector.co.jp/soft/unix/net/se220625.html
これを設置したらちゃんと動きますから..
(HP一括ダウンロードCGIです)
このCGIのソースを参考にさせてもらおうとも
思ったのですがあまりに複雑なコードなので,,,
0547457
03/04/03 17:07ID:???open FILE, "ip.txt";
$data = <FILE>;
close FILE;
if($data == "/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/"){
&connection;
}else{
&unconnection;
}
sub connection
{
print "content-type: text/html\n\n";
print "<html><head><title>公開中</title></head>\n";
print "<body><a href=\"jump.cgi\"><font color=\"blue\"> 公開中</font></a></body>\n";
print "</html>\n";
exit;
}
sub unconnection
{
print "content-type: text/html\n\n";
print "<html><head><title>閉鎖中</title></head>\n";
print "<body><font size=\"2\" color=\"red\"> 閉鎖中</font></body>\n";
print "</html>\n";
exit;
}
これは理解できるんですけどねぇ。
はじめに教えてくれた方がwhileを使ってたのが気になりまして。。。
そう、前者はシンボリックリファレンス、後者はハードリファレンスと呼ばれているね。
前者はstrictプラグマで禁止することができる(というか、通常はstrictにしているべき)
0549nobodyさん
03/04/03 17:20ID:???こんな感じで作ってみたんですがもっと効率いい方法あったら教えてくれませんか?
なにぶん素人なんで、どういったコードが効率いいのかわからんのです。。
$copy = $message;
while($copy =~ m{(http://[\w\.\*\+\!\?\\\|\$\@\%\&\#:;/~=-]+)}gi){
my $url = $1;
# 同一ドメイン内へのリンク
if($url =~ /^http:\/\/$ENV{HTTP_HOST}\//i){
$message =~ s/\Q$url\E/<a href="$url" target="_blank">$url<\/a>/gi;
}
# その他外部リンク
else{
my $imenu = $url;
$imenu =~ s/^http:\/\///;
$message =~ s/\Q$url\E/<a href="imenu.cgi\/$imenu" target="_blank">$url<\/a>/gi;
}
}
0551nobodyさん
03/04/03 17:24ID:???仕様があやふやだから回答するほうも迷うんだよ。
whileを使ったのはファイルを最後まで読み込むためだろう。
ファイル中のどこにIPアドレスが入ってるかわからない質問だったから。
>なんとなく理解できるんですが、whileの中にifを入れないとできないのがよくわかりません。
whileのループ内でIPアドレスがあるかどうかの判定しないでどうするっての?
>if(<FILE> =/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/)
ファイルハンドルについて勉強しなさい。
0553nobodyさん
03/04/03 17:35ID:os6gOz9a@f=<FILE>;
$_="@f";
chomp($_);
$text="\"$_\"";
print 'i=';
print "$text;\n";
test.datのなかみは
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
です。
このスクリプトを実行すると
";"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
document.form.text.value=i;
となります。
i="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
document.form.text.value=i;
と言う風にしたいのですが上のようになるのはなんでですか?
0554nobodyさん
03/04/03 17:38ID:???foreach (sort {$POINT{$b} <=> $POINT{$a}} keys %POINT)
でポイントの大きい順にソートできるのはわかるのですが
$name順にソートするにはどうしたらいいでしょうか?
05554
03/04/03 17:43ID:addlh6ntuse Benchmark;として得られたベンチマーク結果、
no1: 5 wallclock secs ( 4.40 usr + 0.01 sys = 4.41 CPU) @ 22727.27/s (n=100000)
このときの、usr と sysってなんすか?
0556457
03/04/03 17:49ID:???open(FILE,"ip.txt");
@data = <FILE>;
close(FILE);
if(@data = "/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/"){
&connection;
}else{
&unconnection;
}
こうですね。でも、なぜif(@data = "/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/")が代入演算子でするのでしょうか。
テキストのデータが*.*.*.*だった場合の処理だから比較演算子ではないんでしょうか?
0557nobodyさん
03/04/03 17:51ID:???#!/usr/bin/perl
open(FILE, "ip.txt");
$data = <FILE>;
close FILE;
if($data =~ /close/){
$dotti='非公開';
}else{
$dotti='公開';
}
print "content-type: text/html\n\n";
print "<html><head><title>$dotti</title></head>\n";
print "<body><h1>$dotti</h1></body>\n";
print "</html>\n";
exit;
05584
03/04/03 17:52ID:addlh6ntopen(FILE,"test.dat");
chomp($text =<FILE>);
close(FILE);
print qq/i="$text"\ndocument.form.txt.value=i/;
こんな感じにしたらどうだろうか?
0560457
03/04/03 17:56ID:???http://www.kent-web.com/perl/chap6.html
ここに@*という配列変数にセットするって書いていたので。。。
0561bloom
03/04/03 18:00ID:iUh0kMHD0562531 CGIでwww上のhtmlソースを取得
03/04/03 18:01ID:507cBmxsまた自力で頑張ろうと思います。m(__)m
0563nobodyさん
03/04/03 18:02ID:???配列ってのは複数のデータを格納するもの。
IPアドレスかcloseという語のどっちかなんでしょ?
それならスカラ変数でいいの。
0564457
03/04/03 18:03ID:???すいません。あと2つだけお願いします。
$data =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/
これですが、「~ 」はどういった意味なんでしょうか?これがないとできなかったんですが、重要なものですか?
それと、なんで「==」ではだめなんでしょうか?
0570553
03/04/03 18:08ID:os6gOz9aすいません。それで試しても結果は変わりません。
ファイルから読み込まずにやるとうまくいくのですが・・・
0572531 CGIでwww上のhtmlソースを取得
03/04/03 18:10ID:507cBmxsおっしゃる通り説明不足でした、申し訳無い..
勉強して出直してきます。m(__;)m
0573nobodyさん
03/04/03 18:12ID:addlh6ntttp://hex51.darktech.org/cgi-bin/ubbs/bbs.pl?frame=2&base=44&no=44
0574nobodyさん
03/04/03 18:23ID:???めちゃくちゃにも程がある
配列も知らん香具師に何ができるんだ?
それにパターンマッチ云々知らなかったとしても
>これですが、「~ 」はどういった意味なんでしょうか?これがないとできなかったんですが、重要なものですか?
↑この発言はないだろ。
それぞれ一文字一文字にちゃんと意味があるに決まってるだろ?
聞く前にネットなり本なりで少しは調べろ
特に配列なんてのは大概一番最初の方ででてくることだ
0575その認識は改めたほうがいいよ。
03/04/03 18:44ID:???0576馬糞はんばーぐJr.
03/04/03 18:52ID:???誰に言ってるんだおみゃーは
0577531 CGIでwww上のhtmlソースを取得
03/04/03 18:58ID:507cBmxsわ.. そのCGIをローカルサーバと無料レンタルサーバで
試してみたところどちらでもちゃんと動きました。(汗
ソースもシンプルなのでとても参考になります。
このCGIを参考に自分のプログラムが動かなかった原因も
調べてみます、感謝っす!m(_ _;)m
0578nobodyさん
03/04/03 19:04ID:???553のスクリプトをWinXP+ActivePerlの環境で実行したら
i="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
となったので、そのスクリプトで問題ないのでは?
0579nobodyさん
03/04/03 19:06ID:???何だろ、俺も知りたい
UN*X の time(1) なら
user ... 実行に要した時間
sys ... システムのオーバーヘッドに要した時間
だけども。同じかな?
0581nobodyさん
03/04/03 22:00ID:???おたくなぁ、同じこと何回もかいてるんじゃねぇよ
現在使える分は5.8
6は使うならば自分でperlをコンパイルせねばならんのだからおたくのレベルにはかんけーねーよ
0583nobodyさん
03/04/03 23:31ID:LZizHVyk全角カナに強制的に変換されたりします。どうやって表示させればよいのでしょうか?
0584nobodyさん
03/04/03 23:38ID:???0586nobodyさん
03/04/04 00:43ID:MGOn1k3AここのUP掲示板です。
http://www.big.or.jp/~talk/t-club/soft/index.html
0587nobodyさん
03/04/04 00:48ID:???【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
0589nobodyさん
03/04/04 01:21ID:???0592nobodyさん
03/04/04 01:52ID:CT5BhxQdできればGETにしたくないのですが。
0593nobodyさん
03/04/04 01:59ID:???完全な方法はない。
保存データとの比較が最も安全ではあるが、間に別のデータが挟まれば結局無意味。
無難な方法はLocation。
0594nobodyさん
03/04/04 01:59ID:???0598nobodyさん
03/04/04 02:01ID:CT5BhxQdありがとう。locationで飛ばしてみます。
0599nobodyさん
03/04/04 02:04ID:CT5BhxQd0600brain
03/04/04 02:28ID:???掲載するにあたって必要なサーバースペースを有料レンタルしています。
お客様に快適なサーバーを提供するためにさまざまなホームページの目的に応じて、
単なるホームページスペースだけではなく、動画やゲームまたは個人放送はもちろん、
そのツールとしてCGI、PHP、SSI、SQLデータベースなどあらゆるサーバースペースを提供しております。
http://www.ebrain21.com/
[email protected]
0601nobodyさん
03/04/04 04:54ID:i3RHe7j/アパッチの1.3.27でActivePerlを使っていて、OSはXPです。
自宅サーバを使って、HPを作っているのですがカウンタが動かないんです。
掲示板は動いているので、CGIはちゃんと使えていると思ったのですが
なぜかカウンタだけ「×」がでたまま動いてないんです。
KENT WEBさんの夢カウンタを使用していて、設定や記述は何度も見直した
のですが、チェックモードでCGIまでのURLを打ち込んでみてもCGIファイルがその
まま開いてしまうのです。
すみませんが、何か心あたりがあえば教えてください。
ちなみに、前もHPを作ったことがあるのですが(同じパソコンで)その時
はちゃんと動きました。そのときは、知り合いに同じ質問をしてフォルダ
オプションから関連付けをしたら動いたような記憶があるのですが、OSを
再セットアップしたのでまた同じ症状になってしまっています。前聞いた
人間は「忘れた」とだけ言って相手にしてくれません(涙
検索しているのですが、なかなか見つかりません。すみませんが、
よろしくお願いしますです。
0603601
03/04/04 07:20ID:i3RHe7j/0605601
03/04/04 07:36ID:i3RHe7j/初心者なので、perlと関係があると思ってました。
別板行きます。
0606nobodyさん
03/04/04 08:12ID:jZjztjzXuse Win32::API;
と、書かれているのですが、これを読み込んだ瞬間にperl.exeのウインドウが閉じてしまいます
どう対処したらよいでしょうか?
0609nobodyさん
03/04/04 09:12ID:fwRQKvSx0610bloom
03/04/04 09:46ID:ZGDQypNs0611nobodyさん
03/04/04 09:48ID:???そろそろ赤字でIP晒して欲しいな。
0612nobodyさん
03/04/04 11:02ID:lpjcObWVで、CSV形式つっても、アプリによって微妙に差があるじゃないですか?
そこで、自分はエクセル用のCSVにしたいと思ってるんですが、
その際の仕様はどーすればいいんでしょうか?
●値は,で区切る
●値の中に"があるときは""と入力
●改行はそのまま改行を入れる。
●数字以外はセルの値を""でくくる
・・・でOK?
0613nobodyさん
03/04/04 11:07ID:???0614nobodyさん
03/04/04 11:37ID:T4cPGriSkeys関数は、ハッシュ変数のすべてのキーをリスト値として返します。
@key = keys( %hash );
キーの格納には乱数を使った手法が使われるため、ハッシュ全体を出力する場合、その順番は保証されません。ですから、@key には %hash のキーが順序を無視して格納されます。
順番通りに格納すればいいのに、どうしてこういう仕様になってるんですか?
perl作ってる人は何を考えてるんですか?
0615nobodyさん
03/04/04 11:37ID:???>>2
> [お薦め]
> ・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm ★読んどけ
0620nobodyさん
03/04/04 13:12ID:???0621nobodyさん
03/04/04 13:16ID:???0623nobodyさん
03/04/04 13:29ID:Oo/SV5Mjのパスを指定することができない(みたい)ので、テストで非常に難儀します。
サンプルのpasswd,groupファイルを読ませる方法はないのでしょうか。仕方なく
Unix::ConfigFileを使っているのですが、重いです。非常に便利で、なおかつどこで
も使える組みこみ関数なだけに惜しい。
0624251
03/04/04 13:49ID:???Win32::APIが入ってないんじゃないの?
>>612
http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values
http://www.din.or.jp/~ohzaki/perl.htm#CSVfromValues
>>614
配列みたいに、キーにはa>bみたいな上下関係無いもん・・・
何をもっての順番なのか意味不明・・・
0625nobodyさん
03/04/04 13:59ID:???>キーの格納には乱数を使った手法が使われるため、
って笑われぞ。ちゃんと順番には出てくる。
メモリーの格納順であって、キーの順番になっとらんだけだつーの(w
0629nobodyさん
03/04/04 14:47ID:???0630nobodyさん
03/04/04 14:48ID:n4Opp+jHヤフーのログイン・ログオンはどういう仕組みなのかな?
0634nobodyさん
03/04/04 18:42ID:???Win板のXPスレで聞いてこい。
0635nobodyさん
03/04/04 18:47ID:jyfKo/rmスルーでつが?それが何か?
0636606
03/04/04 19:09ID:???試しにperl.exeを起動して、最初の一行目に
use Win32::API;
と、入力してリターンを押すとウインドウが閉じてしまってエラーメッセージすらも見れません
win32::apiが入ってない場合はどのようにすればいいのでしょうか?
よろしくお願いします(´Д⊂)
0637nobodyさん
03/04/04 19:16ID:???>ウインドウが
この時点で俺はお手上げだなぁ。
とりあえず、その perl.exe とやらはどこから入手したのさ?
0640nobodyさん
03/04/04 20:50ID:???perl.exeを*ダブルクリックで*起動して、perlがstdin待ちになったところへ
use Win32::API;と入れて、すく終了してウィンドウが閉じたと。漏れはUNIX派なので
ここらへんよく分からんが、WindowsだとCtrl-d押さなくても終了になるんかな。
コマンドプロンプトを知らん人が、Win32::APIなど使えるわけありません。あきらめ
た方が時間の節約になりますYO。
0643606
03/04/04 21:22ID:???一種類だけ動かないんで聞いてみました
0644nobodyさん
03/04/04 21:28ID:OlDxyviA例えばあるページで使用した$test1=10を次のページでも
form変数やurl変数で送らずに使用したいです。
可能でしょうか?教えてくださいまし。
0646nobodyさん
03/04/04 21:30ID:???ファイルに保存しる。
0651nobodyさん
03/04/04 21:47ID:???レベルはそんな所であろうな・・・
一応Un?xで動かないとか訳解らん事言ってるんじゃないのな・・・
ppm install win32-api
とコマンドプロンプトに打ち込めばモジュールはインスコ出来るけど
ttp://member.nifty.ne.jp/hippo2000/perltips/module_install.htm
>606はココ読んで勉強しなさい
0652606
03/04/04 22:05ID:???解決しました
time-hiresとhttp-liteは入れたんですが、一つ足りなかったようですね
なんか勉強不足で訳分からない事言ってたと思いますが
ありがとうございます
0653nobodyさん
03/04/05 01:50ID:???0655nobodyさん
03/04/05 03:40ID:???せっかくだから653が立ててよ
ていうかこのスレでガンガン貼っていってもいい?
一応初心者ってことで質問とは限ってないみたいだし
0656nobodyさん
03/04/05 04:00ID:???http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html
で専用スレ立てる方がいいぞ。
半角空白とかそのまま貼れるし。
0657nobodyさん
03/04/05 04:14ID:???なんでそうなるのよ?
じゃあiisってなにするためにあるの?
0659nobodyさん
03/04/05 05:13ID:???それを確かめるためのif文はどう書けばいいのでしょうか?
要するに、
if (配列@dataに、[0-9],\n,\tとスペース以外が使われている){
&error;
}
この( )の中の記述です。
やっぱforeach等でまわさないとダメっすか?
0661659
03/04/05 06:45ID:???完璧っす!
joinの使い方覚えました!
実は。。。
/^[0-9\n\t ]
を
/[^0-9\n\t ]
って読み違えてて。。。
きゃははははは! (もう笑うしかない。。。 自爆)
0662マリモーマ ◆r6PDGT6Xd2
03/04/05 11:23ID:4Hc1kYlWタイトル 自作CGIを評価するスレ
内容 自分の作った CGIを みんなに評価してもらうレスだよ
0665nobodyさん
03/04/05 12:21ID:???0667653でつ
03/04/05 14:07ID:t4dpk1aS掲示板を作ったのでつが、細かい部分から全体の流れまでを評価してくれるサイトを知りたかったのでつが・・・
0668nobodyさん
03/04/05 14:08ID:???せっかく専用スレを立てたんだから活用してくれよ。
http://pc2.2ch.net/test/read.cgi/php/1049514428/
0669nobodyさん
03/04/05 14:51ID:???LOG書き込み処理
close (LOG);
open (DAT,$datfile) || &error("ファイルオープンエラー : $datfile");
DAT書き込み処理
close (DAT);
↑こんなときにdatfileを開くところでエラーが出たとき、
logfileには書き込まれてるのにdatfileは書き込まれないって事になりますよね?
それを回避するためには↓のようにすればいいのかなぁなんて素人なりに考えたんですが、
おかしいですか?
open (LOG,$logfile) || &error("ファイルオープンエラー : $logfile");
open (DAT,$datfile) || &error("ファイルオープンエラー : $datfile");
LOG書き込み処理
DAT書き込み処理
close (LOG);
close (DAT);
0670nobodyさん
03/04/05 15:31ID:???openとcloseをどう並べ変えようが無理じゃないかな。
DAT書き込みが失敗したらLOG書き込みを「自分で」削除することが必要。
0671nobodyさん
03/04/05 15:43ID:???&errorの中でexitします
んで、質問はopenで失敗したらだったんですが、
たしかに書き込みで失敗したら一緒ですよね
でも例えば$logfileのmax行数が決まってて、
書き込み処理のなかでmaxを超えてたら古いのを削除とかしてると、、、
こういう複数ファイルの処理の時ってどうするべきなんですかねぇ?
みなさん気にせず書いてるものなんですか?
0672nobodyさん
03/04/05 16:01ID:???完全な物を作ってからリネームするのが普通。
0673デフォルトの名無しさん
03/04/05 16:03ID:E+nPGg0Q>↑こんなときにdatfileを開くところでエラーが出たとき、
それより、書き込むには、
open (LOG,>$logfile) ってしなきゃだめだよ。
open (LOG,$logfile) で書き込めてるなんておかしいよ。
慎重に質問しれ。
0674669
03/04/05 16:22ID:???なるほど。テンポラリーを作っといてリネームするんですね
勉強になりました。ありがとうございます。
>>673
すいません。読み込みのところからコピペしたんで忘れてました。
0675nobodyさん
03/04/05 17:40ID:EfZ+i867多分オーバーフローしてるんだと思うんですけどいい方法無いですか?
0676nobodyさん
03/04/05 17:46ID:???0678nobodyさん
03/04/05 18:06ID:MPfOwriqどーもっす。調べてみます。
0679675
03/04/05 18:11ID:MPfOwriqダメでした。
今やりたいのは十進で60桁程度の演算なんですけど
そういう計算したいときにみなさんはどうやってやるんでしょうか?
0683669
03/04/05 18:59ID:???open (LOG,>$logtmp) || &error("ファイルオープンエラー : $logtmp");
LOG書き込み処理
close (LOG);
open (DAT,>$dattmp) || &error("ファイルオープンエラー : $dattmp");
DAT書き込み処理
close (DAT);
rename("$logtmp", "$logfile") || &error("リネームエラー : $logfile"); #※1
rename("$dattmp", "$datfile") || &error("リネームエラー : $datfile");
ちょっと思ったんですけど、↑こういうことですか?
じゃあ※1でエラー出たら一緒じゃないですか?
0684nobodyさん
03/04/05 19:11ID:???リネーム失敗なら、テンポラリを削除して処理を終了でいいでしょ。
読み書きは正常なのに……とかセコいこと考えないで、完全エラー無し以外は
すべて異常終了扱いにしたほうがいい。
0685nobodyさん
03/04/05 19:13ID:???0686nobodyさん
03/04/05 19:15ID:???という配列があって sortすると
1,10,2,22,3となってしまいます。
これを1,2,3,10,22のように実際の大きさ順に
ソートするにはどうすればいいのでしょうか?
0687nobodyさん
03/04/05 19:18ID:???0688nobodyさん
03/04/05 19:20ID:???0691669
03/04/05 19:43ID:???んーよくわからないんですが・・・
>完全エラー無し以外は すべて異常終了扱いにしたほうがいい。
それはわかるんですが、どういう風に書けばそうなりますか?
rename("$logtmp", "$logfile") || unlink("$logtmp");
rename("$dattmp", "$datfile") || unlink("$logtmp","$dattmp");
こういうことですかねぇ?
あと、今まで既にあるデータを読み込まずに
open (DAT,>>$dattmp) || &error("ファイルオープンエラー : $dattmp");
DAT書き込み処理(追加)
close (DAT);
↑こうして追加してたんですけど、
一度テンポラリファイルを作ってリネームとなると、
全て読み込んでから新しいのを足したものを上書き
しないといけなくなりますよね?
処理の重さは変わらないですか?
0692nobodyさん
03/04/05 20:08ID:???でも、やらなきゃならないんなら、しょうがない。
0693nobodyさん
03/04/05 20:16ID:???open (LOG,>>$logfile) || &error("ファイルオープンエラー : $logfile");
$pointer = 0;
$pointer = ファイルポインタを取得する関数
LOG書き込み処理(追加)
close (LOG);
if (!open (DAT,>>$datfile)) {
if ($pointer != 0) {
open (LOG,>>$logfile)
truncate($pointerで切り詰め);
close (LOG);
}
&error("ファイルオープンエラー : $datfile");
else
DAT書き込み処理(追加)
close (DAT);
end
むちゃくちゃだけど、こんなんはどうですか?
0694Perlですが
03/04/05 20:17ID:qMi3a/lAindex.cgiのFORMデータをsubmit.cgiに引き渡して処理させたいのですが、どうやればいいのでしょうか?
親切なアドバイス待ってます。
0695nobodyさん
03/04/05 20:22ID:???http://tohoho.wakusei.ne.jp/wwwxx034.htm
↑ここ見て研究
0696あぼーん
03/04/05 20:36ID:???! i iノノリ)) 〉
i l l.´ヮ`ノリ <先生!こんなのがありました!
l く/_只ヽ
| ̄ ̄ ̄ ̄ ̄|
http://saitama.gasuki.com/mona/
0698Perlですが
03/04/05 20:41ID:qMi3a/lAそれではなくて他に方法はありませんか?
0699nobodyさん
03/04/05 20:55ID:???なんかムカつく。
submit.cgiでおこなう処理をindex.cgiの中から呼べばいいだろ
わざわざ"引き渡す"意味がわからん
0701nobodyさん
03/04/05 21:19ID:???0702nobodyさん
03/04/05 21:48ID:???ちょっと直した
open (LOG,>>$logfile) || &error("ファイルオープンエラー : $logfile");
$pointer = tell(LOG); # ファイルポインタの位置を返す
LOG書き込み処理(追加)
close (LOG);
if (!open (DAT,>>$datfile)) {
open (LOG,>>$logfile) # ←エラーが発生しないことを祈る
truncate(LOG,$pointer);
close (LOG);
&error("ファイルオープンエラー : $datfile");
} else {
DAT書き込み処理(追加)
close (DAT);
}
こんなんでいいのかどうか分からないが・・・
logfileとdatfileの整合性を保つためのもっといい方法があるのだろう・・・
0703nobodyさん
03/04/05 21:51ID:???>>親切なアドバイス待ってます。
>なんかムカつく。
>>694は、あまりにもアレな質問して叩かれたことがあるに1000クックブック
0706nobodyさん
03/04/05 22:28ID:???$pointer = tell (LOG);
windowsじゃtell使えないんでしょうか?
なぜか0を返すんです。
ちゃんとその後printしたものは追加書き込みになってるんですけどねぇ
0707705
03/04/05 22:37ID:???漏れの環境(WinXP+ActivePerl5.6)で
open(FILE,">>test.dat");
$p = tell FILE;
close(FILE);
print "$p\n";
test.datの中身を例えば、
aaa\r\naaa\r\n
として、上のスクリプトを実行すると、
「10」となります。
なんで706さんは0になるのかなぁ。わかんねぇ。
0708nobodyさん
03/04/05 22:42ID:???perl -e open(F,">>hoge");$p=tell(F);close(F);print $p,"\n";
$ wc hoge
1 4 60 hoge
$ perl -e 'open(F,">>hoge");$p=tell(F);close(F);print $p,"\n";'
60
漏れの環境でも正常です。Win2k
$ perl -v
This is perl, v5.6.1 built for cygwin-multi
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) {
}
0810806
03/04/10 05:58ID:???そうですか・・・
そうやって配列に入れてる説明をしてるサイトがあったんで、
もしかしたら、無理なのかなぁと思いながらも質問してみました。
有難うございました
0811nobodyさん
03/04/10 06:00ID:???あぁごめんなさい
sort書いたつもりで、書いてないところコピペしてしまってました。
てか、えっ?
foreach $key (sort { $a <=> $b } keys %hash) {
}
これいけるんですか?確認してきます
0812nobodyさん
03/04/10 06:06ID:???有難うございました。
0813あぼーん
03/04/10 06:16ID:???http://muryou.gasuki.com/hankaku/hankaku03.html
http://muryou.gasuki.com/hankaku/hankaku04.html
http://muryou.gasuki.com/hankaku/hankaku02.html
http://muryou.gasuki.com/hankaku/hankaku01.html
http://muryou.gasuki.com/hankaku/hankaku10.html
http://muryou.gasuki.com/hankaku/hankaku09.html
http://muryou.gasuki.com/hankaku/hankaku08.html
http://muryou.gasuki.com/hankaku/hankaku07.html
http://muryou.gasuki.com/hankaku/hankaku05.html
http://muryou.gasuki.com/hankaku/hankaku06.html
0814佐々木健介
03/04/10 06:16ID:???/_ |
/. \ ̄ ̄ ̄ ̄|
/ / ― ― |
| / - - |
||| (5 > |
| | | ┏━┓| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | | ┃─┃| < こんなサイトを見つけた
|| | | | \ ┃ ┃/ \ 正直、スマンカッタ
| || | |  ̄ \_________
http://saitama.gasuki.com/kensuke/
0815かおりん祭り
03/04/10 06:16ID:???こんなのございま−す♪
 ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜oノハヽo〜
,.-''"¨ ̄●`' ‐(^▽^)
(,,●i,,,i,,,,,,,,i,,,,●),,)⊂ )
) ( || |
( ^▽^) (_(__)
~~~~~  ̄ ̄ ~~~~~ ~~~~~
0816nobodyさん
03/04/10 06:18ID:???0817nobodyさん
03/04/10 11:49ID:???${"data$form{name$no}"}{'age'}
これなんですが、
どうもエラーの原因は「$form{name$no}」これっぽい。
でも、ダブルクウォートの中にダブルクウォートなんて書けないし、どうしたら良いでしょうか?
0818nobodyさん
03/04/10 12:13ID:???> ${"data$form{name$no}"}{'age'}
${'data'. $form{'name'. $no}}{'age'}
とか。
でもそれ、基本的なところから見直したほうがいいのでは・・・。
0819nobodyさん
03/04/10 12:17ID:ofuMCP5lラジオたんぱのサイトからNEWS記事のリンクを取得するCGIなんですが、
突然出来なくなりました。
どこを修正していいか分かりません。
教えてください。
宜しくお願いします。
具体的には取得してきたhtml
と<!---------------------記事部分------------------->
を比較したいんですが…
文字コードが違うのかうまくいきません。
for( $i = 0 ; $i <= $#data ; $i ++ ){
$data[$i] = &PrintSjis($data[$i]);
if( $data[$i] eq &PrintSjis("<!---------------------記事部分------------------->")){
print $data[$i];
last;
}
}
----
宜しくお願いします。
0822鮮民
03/04/10 13:29ID:oo4Xo2Ys$data = {
01 => {
neme => 'name',
age => 'age',
},
};
$data->{$form{'no'}}->{'age'};
こんな感じにしてみたら?
0823817
03/04/10 13:31ID:???どうもです。変数名の中で演算子も使えるとは知りませんで…。
>でもそれ、基本的なところから見直したほうがいいのでは・・・。
出来るだけコンパクトになるよう考えてこれなんですよ…お恥ずかしい限り。
0825nobodyさん
03/04/10 13:50ID:5ksdsSWS<HEAD>内でcharset=iso-8859-1を指定して書かれた
HTMLのフォームから日本語で文章を打ち込んでメールを送信したいんですが
フォームでSUBMITしてCGI(Perl)でテキストエリアに入力された日本語を取得して
sendmailを開いてメールヘッダに
print SENDMAIL "Content-Type: text/plain; charset=iso-8859-1\n";
を指定して所定のアドレスにメールを送信したんですが
outlook expressで受信して開くと思いっきり文字化けしてる感じです。
とりあえずoutlookで見た時に日本語が表示されている必要があるんですが
HTMLのcharsetの方は事情により変更できないので
Perlの方でうまいぐあいに文字コードを変換(?)してメールするようにしたいんですが・・・
なにか方法とか参考になるサイトなどありましたらアドバイスよろしくです
0826nobodyさん
03/04/10 13:55ID:???テキストファイルに落とす等ちゃんとテストしてくれ。
んで、文字コードの件は、Jcode.pm か jcode.pl で。
あと charset に iso-8859-1 を指定したい理由が不明なのだが?
0827nobodyさん
03/04/10 14:05ID:5ksdsSWS一応、実際にメールを送信する前に
フォームに入力された文章の確認画面があるんですが
ここでは正常に日本語が表示されてるようです。
(吐き出されたHTMLのソースを見ると日本語が「???」などとなってる)
メールのヘッダに指定するcharsetは何を指定すればいいのか
分かんないのでHTMLの方とあわせただけです・・・
一応、メールの送信前にはPerl内で
&jcode'convert(*msg, 'jis');
などとはしているんですが、受信したoutlookの方では、そのまんま
日本語の部分が「???」などとなってしまう状態です・・・
jcodeでどんな変換が必要でメールのヘッダに
何のcharsetを指定すべきなんでしょうか・・
0828825
03/04/10 14:08ID:5ksdsSWS「???」の部分は
「&#12354;&#12354;&#12354;」てな感じです。
0829nobodyさん
03/04/10 14:11ID:???charset に何を指定良いか分からん奴が
メールを送信するプログラムを書く時代になったのか…。
すげーショックだ。
>>827
>フォームに入力された文章の確認画面があるんですが
アホ
>jcodeでどんな変換が必要でメールのヘッダに
単なる plain text だろうから、その変換で OK
>何のcharsetを指定すべきなんでしょうか・・
他のメールのヘッダを覗いてみなさい。
っつーか、少しは勉強してからそういうプログラム書いてください。
お願いします。この通りです。
0830鮮民
03/04/10 14:20ID:oo4Xo2Ysレファレンスを覚えてからは管理が楽になりましたよ。
1<>name<>age<>tel
2<>name<>age<>tel
@fields = qw(num name age tel);
while (<FILE>) {
$i = 0;
%hash = map {($fields->[$i++]) => $_ } split /<>/;
push(@lines,\%hash);
$lines{$hash{'num'}} = \%hash;
}
print "$_->{'num'} $_->{'age'}\n" for @lines;
print $lines->{'1'}->{'age'};
順番で表示したり、データをキーで指定できたりと何かと便利です。
初めは、わかりにくいと思いますが、頑張ってみてください。
リファレンスがわかれば、オブジェクト指向も出来るようになりますし。
0832鮮民
03/04/10 14:32ID:oo4Xo2Ys@fields = qw(num name age tel);
$fields = [qw(num name age tel)];
意味は無いけどレファレンス。
0833あぼーん
03/04/10 14:43ID:???0834825
03/04/10 14:49ID:5ksdsSWSメールのヘッダにてcharset=iso-2022-jpを
指定してみましたが、指定する前とまったく同じ結果でした…
フォームから受け取った文字が、すでに
&#12354;&#12354;&#12354;のような形ですので
これを&jcode'convert(*msg, 'jis');してメールヘッダでcharset=iso-2022-jpを
指定しても、そのまんま
&#12354;&#12354;&#12354;で表示される感じです。
でもIEのブラウザですとHTMLソース内の文字が
&#12354;&#12354;&#12354;となってても
画面ではちゃんと日本語に変換されて表示されてるようです。。。
outlookで開いて見る時のエンコードの設定もいろいろいじってみましたが
どの文字コードにしても&#12354;&#12354;&#12354;のまんまのようで・・・
0835nobodyさん
03/04/10 14:55ID:???0836nobodyさん
03/04/10 15:00ID:???0837nobodyさん
03/04/10 15:02ID:???単にそのまま sendmail に渡してるだけでしょ。
> そのまんま &#12354;&#12354;&#12354;
当たり前じゃん。
ちなみに「あああ」って書いたんでしょ?>>834
0838nobodyさん
03/04/10 15:35ID:???> <HEAD>内でcharset=iso-8859-1を指定して書かれた
> HTMLのフォームから日本語で文章を打ち込んでメールを送信したいんですが
ブラウザによってはページの文字コードを無視して送信するものもあるので、
こういったやりかたはあまり推奨されない。
きちんと文字コードを取得してから変換すべし。
0839825
03/04/10 15:37ID:5ksdsSWSはい、「あああ」です。
かいつまんで
http://rivernet.cool.ne.jp/upload/img/200304101536_test.lzh
にテストファイルあげてみました。
HTMLは変更せずにtest.cgiの中だけでなんたら変換して
メール送信してoutlookにて正常に日本語をよみたいんですが・・
0840825
03/04/10 15:39ID:5ksdsSWS[email protected]になってますので、ほんとにテストするときは変更お願いします
0841nobodyさん
03/04/10 16:00ID:???そこまで書いてなぜ正解を書いてあげないの〜?
>>834
>フォームから受け取った文字が、すでに
>&#12354;&#12354;&#12354;のような形ですので
HTMLの ?数字; 表記法を参照のこと。
これを正しい文字コードにそのまま変換できるモジュールあるのかな?
?数字;を抜き出して一文字ずつjisに変換するしかない?
0842841
03/04/10 16:01ID:???>>834
>フォームから受け取った文字が、すでに
>&#12354;&#12354;&#12354;のような形ですので
HTMLの &#数字; の表記法を参照のこと。
これを正しい文字コードにそのまま変換できるモジュールあるのかな?
&#数字;を抜き出して一文字ずつjisに変換するしかない?
0843nobodyさん
03/04/10 16:14ID:???837ですが、
1. 数値文字参照から charset=iso-2022-jp に適合するように変換する
効果的な方法を私も知らない
2. <FORM> のページが charset=iso-8859-1 という時点で
努力する方向が間違ってる気がする
3. 既にPerlの領域じゃない気がする
以上です。
0844841
03/04/10 16:29ID:???どうしてこうなるのか不思議に思ってたんだが、
フォームのページの問題を読み忘れていたようだ…。
というわけで>>825よ。
フォームのページのcharsetを日本語にしてみてくれ。
そもそもの問題はここにあると思われ。
0845nobodyさん
03/04/10 18:09ID:???ユーザーも規約が緩いサイトに流れるけど
多少規約が厳しくても(無論常識内)ファンが絶たないサイトみると
やっぱ実力なのかなぁ、、、とちょっと憧れる。
0846nobodyさん
03/04/10 18:11ID:???0847nobodyさん
03/04/10 18:46ID:???ハッシュだとややこしいことしないと、
いくつ入ってるかを知ることはできないのでしょうか?
0850nobodyさん
03/04/10 18:56ID:???0852nobodyさん
03/04/10 18:58ID:???ハッシュで$#これやってみたら、
期待してたとおりの動作が得られました。
いろんなサイトで探したんですけど、
見つからなかったんで質問させていただいたんですが・・・
それと、皆さん全然違うの書いてくださってますよねぇ?
$#使っちゃだめなんでしょうか?
0853849
03/04/10 18:59ID:???0854nobodyさん
03/04/10 19:00ID:???勘違いしてました
0855847,852,854
03/04/10 19:02ID:???>>849さんのでいけました。
ありが�dです
0856nobodyさん
03/04/10 19:25ID:???0857nobodyさん
03/04/11 03:32ID:Ngj0Yn4X質問させてください。
http://sabbath-jam.com/top/det/det_1.html
↑の掲示板使ってるんですが、改造して、新規投稿があったときに
自分のケイタイにお知らせメールが届くようにしたいんです。
もし可能なら、組み込むscriptを教えていただけないでしょうか?
0858nobodyさん
03/04/11 03:36ID:???(´-`).。oO(ここでもスレ違いとスルーされるだろうな・・・)
0859nobodyさん
03/04/11 03:41ID:Ngj0Yn4X(´-`).。oO(適切な場所に誘導してください。。)
0860nobodyさん
03/04/11 03:45ID:???http://pc2.2ch.net/test/read.cgi/php/1047806915/l50
0861nobodyさん
03/04/11 03:52ID:Ngj0Yn4X神!サンクスでつ
0862nobodyさん
03/04/11 04:03ID:e9H5z3qo何か良い方法ありますでしょうか。
0864nobodyさん
03/04/11 04:22ID:e9H5z3qo言い方悪くてごめんなさい。
私が描いているイメージは
$hash{key} = @array;
こんな感じです。
もしもできればご教授願いします。
0868nobodyさん
03/04/11 15:33ID:????????'??????????????????.????
???????! ??????????????????
0869nobodyさん
03/04/11 17:12ID:+804Cr9xmy $a = 'abcdef';#欲しいのは$a='cdef'。
substr($a, 0, 2);
print $a;
結果
'abcdef'
となってしまいます…
何か良い方法ありますか?
0870nobodyさん
03/04/11 17:18ID:???0871nobodyさん
03/04/11 17:20ID:???http://pc2.2ch.net/test/read.cgi/tech/1048519394/299
0872869
03/04/11 18:18ID:+804Cr9xすいません、勘違いするような書き方でしたね。
欲しいのは2バイト取り除いた後の残りの文字列なんです。
この場合はcdefが欲しいのですがabしか取れないんです…
0873nobodyさん
03/04/11 18:23ID:???向こうのスレで答えもらってるじゃん。
0874nobodyさん
03/04/11 18:27ID:???0875869
03/04/11 18:39ID:+804Cr9xようですね。
どうもスイマセンでした。
0876nobodyさん
03/04/11 18:47ID:???0877869
03/04/11 19:29ID:+804Cr9xいえ、「こちらに行きます」と明記しなかった私が悪いです。
本当に申し訳なかったです。
0878nobodyさん
03/04/11 19:48ID:???向こうで言われた事をそのまま書くだけか?
自分で考える脳は?
そんな考え方しかできないから、適切なスレに誘導してくれた人に対して
お礼も言えないんだよ。
0879nobodyさん
03/04/11 20:17ID:???ほっとけよ、生理が伝染るぞ
0880869
03/04/11 20:36ID:+804Cr9xなんか会社で怒られてるような気分になりました。
よくこんな感じで怒られるんですよ。
自分はトロいのでやれと言われたことしか中々できないの
ですがもっと自分の頭で考えられるように頑張ります。
本当にすいませんでした。
そしてありがとうございました。
0881nobodyさん
03/04/11 20:42ID:nKHFlgQT独り言ヤメレ
0882nobodyさん
03/04/11 21:29ID:???醜いアヒルの子でも見れ
0883nobodyさん
03/04/11 21:33ID:???がんすけも分かっているはず。
0885訂正(鬱だ
03/04/11 21:34ID:???○ガァ助
0886nobodyさん
03/04/11 22:51ID:???○ 板自体を間違えました
0888nobodyさん
03/04/12 01:59ID:Wz2xojvl読み書き両用でファイルを開く時、
open (DATA,"+<./data.dat");
open (DATA,"+>./data.dat");
この両者にはどういう違いがあるのでしょうか。
自分でやってみたところ前者は「>>(末尾に追加)」で、後者は「>(読み込んだ時点でファイルが空に)」と同じようでした。
「読み書き両用」の正しい使い方を教えて欲しいです。
0889nobodyさん
03/04/12 02:13ID:???0890nobodyさん
03/04/12 02:20ID:???読み込みと書きこみを1回のopenでしたいときに使う。
例えば掲示板の削除処理を俺はこう書く
open LOG, "+<", "./bbs.log" or die;
flock LOG, LOCK_EX;
while (defined(my $article = <LOG>)) {
chomp $article;
my($no, $name, $body) = split /\t/, $article;
$no == $delno or push @newlog, $article . "\n";
}
truncate LOG, 0;
seek LOG, 0, 0;
print LOG @newlog;
close LOG;
0891nobodyさん
03/04/12 03:02ID:???while (defined(my $article = <LOG>)) {
next if $article =~ /^\Q$delno\E\t/;
push @newlog, $article;
}
0892nobodyさん
03/04/12 03:29ID:???0893nobodyさん
03/04/12 03:37ID:???があったので質問させてください。
for($w=0;$w<10;$w++){
$f=&k($w);
print"$f\n";
}
sub k{
local($d)=@_;
my($w);
$w=$d*$d;
return($w);
}
というものがあるのですが、2行目の$wには1行目のfor()で決定される数字が
入るのでしょうか?それともreturnでの返り値が入るのでしょうか?
もし前者の場合は返り値はどこにはいるのでしょうか?&k($w)自体に入るのでし
ょうか?
もしも後者の場合は関数kには式だけあって数字がなくなってしまう気がしますが
どこから数字をもってきているのでしょうか?
きっとすごい簡単なことなんでしょうけど、教えていただければ幸いです。
よろしくおねがいします。
0895251
03/04/12 03:45ID:???for($w=0;$w<10;$w++){
$f=&k($w);
print"$f\n";
}
sub k{
local($d)=@_;
my($w2);
$w2=$d*$d;
return($w2);
}
こうすれば理解しやすいかな?
2行目の $wにはforループの$wがはいって、$fにはsub kのreturnが入ります。
おまけで、ソース的にもあやしいんで書きなおし
for($w=0;$w<10;$w++){
$f=&k($w);
print"$f\n";
}
sub k{
my $d =$_[0];
my $w2 = $d*$d;
return($w2);
}
ソースとしては 多分local($d)=@_; じゃなくて local($d)=$_[0];だとおもう
my $d =$_[0]; にしたのはlocalである必要が無い為・・・
0896nobodyさん
03/04/12 03:48ID:???それはsub kの$wはプライベート変数になっているからですよね?
8行目の$w=$d*$d;で2乗していますけど、そこの$dに入る数字は
どこから持ってきているのでしょうか?
よろしければ教えてください。
おねがいします。
0898nobodyさん
03/04/12 05:49ID:???まず
my($d) = @_;
受け側も右側もリストコンテクストだから、
右側の配列の要素0が左がわの最初の変数に入る。例えば
my($d1,$d2) = @_;
だったら
my($d1, $d2) = ($_[0], $_[1]);
と同じ。次に
my $d = @_;
受け側がスカラーコンテクスト、右がリストコンテクストだから、
my $d = scalar(@_);
と同等になる。よって、$dには@_に何個要素が入っているか、その数が
入る。最後に
my $d = $_[0];
受け側も右側もスカラーコンテクストだから、そのまま$dに@_の最初の
要素が入る。
というわけでlocal($d) = @_;というのは文法的には誤りはない。
local()の使い方としては多分間違ってるけど。(my()が正解)
0900nobodyさん
03/04/12 06:05ID:???0901888
03/04/12 10:35ID:???ありがとうございました。
「読み込みと書きこみを1回のopenでしたい」とまさにその通りでした。
truncate関数なんてものがあったんですね。勉強になりました。
おかげさまで無事解決。
0902nobodyさん
03/04/12 11:56ID:9LVB7yXuを
$article while (defined(my $article = <LOG>));
にしている意味は何のためですか?
0905nobodyさん
03/04/12 17:18ID:???0906nobodyさん
03/04/12 17:55ID:???#!/usr/local/bin/perl
my $test = '表示成功';
&test();
exit;
sub test {
print "Content-type: text/html\n\n";
print "$test";
}
__END__
このスクリプトを実行すると、出力が「表示成功」になります。
何故my宣言したのにこのような事が出来るのでしょうか?
0907nobodyさん
03/04/12 18:12ID:???> 何故my宣言したのにこのような事が出来るのでしょうか?
あなたが自宅の部屋に立てたテントの中も
「あなたの自宅の中」だからです。
0908はしのえみ好きー
03/04/12 18:15ID:???## ↓ここから package main;
my $test = '表示成功'; # パッケージに属する変数(my $main::testと等価
&test();
exit;
sub test {
print "Content-type: text/html\n\n";
print "$test"; # ブロック内に$testがないので、$main::testを探す
}
__END__
## ↑ここまで package main;
0909nobodyさん
03/04/12 18:29ID:???アンタ説明うまいな、惚れそうだ!(´д`*
0911nobodyさん
03/04/12 18:59ID:???<LOG> が 0 とか "" とか返したらループから抜けちゃう。
defined でチェックすればファイル末尾に達するまで確実に真値が返る。
0912nobodyさん
03/04/12 19:20ID:???ちょっと気になったので試してみたが、while (defined(my $hoge = <FH>))
while (<FH>) どちらでも "", 0 は出力されたぞ。
0914nobodyさん
03/04/12 19:50ID:???0の行→0\n
空白の行→\n
なわけで、偽にはならんわな。
0916はしのえみ好きー
03/04/12 20:14ID:???0917nobodyさん
03/04/12 20:53ID:???ごめん、while <> の場合は EOF までちゃんとループしてくれるね。
while(defined($var = pop @array)) { ... } てなのが頭にあったのよ。
>>914
$/ の中身が改行とは限らない。
あんまり意味はないけど $/ = \1; で1 byte 単位とか。
0918nobodyさん
03/04/12 21:38ID:???使えない関数がある時evalするべきと聞きますが、そうすると致命的エラーは発生しないものの
当然evalされた関数は実行されないんですよね?
flockとか実行されないとかなりまずいと思うのですがどうなんでしょうか。
evalしたらあとは祈るしかないんですか?
それと使えない関数があるというのはどういうことなんでしょうか。
Perlのバージョンが古いということですか?それともサーバサイドの設定によるものなんですか?
サーバのことは全くと言っていいほど無知なのでわかりません。
だいたい全体の何割ぐらいのサーバが使えないようになっているんでしょうか。
あやしい関数は使うなということなんですかね。
0920nobodyさん
03/04/12 22:25ID:???代替となるロック処理をするのは当然。
evalはエラーを出さなくするための関数じゃないんだから。
truncateとかflockはOSに依存した関数なので、OSがその機能を実装して
いなければ使えない。
0921nobodyさん
03/04/13 00:10ID:???ファイルでやってみたのですが、やはり!? while のループの中に入って
行きました。
while ($line = <FILE>) { ...
と書いたので、読み込まれた文字ゼロ (0x30) だけが $line に代入され、
そのゼロがそのまま while の条件式の値となって、偽と判断されるはず
だと思うのですが、私は何か勘違いをしているのでしょうか。
0923nobodyさん
03/04/13 00:39ID:???失礼しました。誤解を招く書き方でした。
data.txt というファイルを、0x30 という1バイトのみを持つように設定して
プログラムに読み込ませるデータファイルとしました。この 0x30 を、
>>921 の文中の「数字のゼロ」および「文字ゼロ」は、この 0x30 を指す
言葉として使いました。
●data.txt の中身
> hexdump -C data.txt
00000000 30 |0|
00000001
●プログラム
> cat test.pl
#!/usr/bin/perl
open(FILE, "<data.txt");
while ($line=<FILE>) {
print "hoge\n";
}
close(FILE);
●実行の様子
> ./test.pl
hoge
0924はしのえみ好きー
03/04/13 00:54ID:???それは全然意味ないんじゃないのか?普通に0と書くのと変わらないじゃん。
ってことで\x0でやってみた。
$ perl -e 'open(F,">data.txt");print F "\x00";close(F);'
$ dump data.txt
data.txt:
Addr 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 2 4 6 8 A C E
-------- ---- ---- ---- ---- ---- ---- ---- ---- ----------------
00000000 00 .
$ perl hoge.pl
hoge
入ってる。
0925はしのえみ好きー
03/04/13 00:55ID:???おっと、説明不足だったが、
>バイナリで無理やり数字のゼロ
の意味が分からないってことだよ。
0x30を書くんだったら普通にテキストエディタで"0"って書けばいいんじゃん。
0926nobodyさん
03/04/13 01:13ID:???どうやら while の条件部は行入力演算子を使った場合に限って、
真偽値ではなく defined か否かで判定されるみたいだね。
行入力演算子が undef 返すのは EOF に達した時だけだから、
ファイルは全部読まれるみたい。
統一感の無さは Perl らしいけど、便利と言えば便利。
0927nobodyさん
03/04/13 01:15ID:???\0x00とかのコードはどう知ればいいんでしょうか。
どこか一覧表とかあるのかな…。
あと、ずっと気になっていた、画像を生成する際の数字の配列は
みなさんどうやって計算?しているのでしょうか。
0928nobodyさん
03/04/13 01:18ID:???0929nobodyさん
03/04/13 01:23ID:???ダミー画像などでよく見かける、テキストだけで生成してるやつです。
別に、画像を読み込んで出力すれば良いんだけど
どうやるのか気になってたもので。
0930nobodyさん
03/04/13 01:48ID:???色数落としていくとそれになるよ。
0931nobodyさん
03/04/13 02:07ID:???早速明日試してみる事にします。
今日は眠いのでもう寝ます…。
0932はしのえみ好きー
03/04/13 02:18ID:???>\0x00とかのコードはどう知ればいいんでしょうか。
>どこか一覧表とかあるのかな…。
http://www.psl.ne.jp/perl/pdojo00b.html
0933nobodyさん
03/04/13 08:46ID:P9fP4Q1N0934nobodyさん
03/04/13 14:30ID:???>>890 の
while (defined(my $article = <LOG>)) {...
の書き方は助長なのか?
0935nobodyさん
03/04/13 14:45ID:???冗長ですな。
でも、私も厳密に考えたら defined を使って書いていたと思う。
>>926 の
「どうやら while の条件部は行入力演算子を使った場合に限って、
真偽値ではなく defined か否かで判定されるみたいだね。 」
というのはわかったのだけど、なんとなく釈然としない。
マニュアルのどの部分に、そのことが書いてあるんだろう・・・。
0936nobodyさん
03/04/13 14:55ID:???0937nobodyさん
03/04/13 15:00ID:???「どうやら while の条件部は行入力演算子を使った場合に限って、
真偽値ではなく defined か否かで判定されるみたいだね。 」
は違うみたい。
The defined test avoids problems where line has a string value that would be treated as false by Perl,
for example a "" or a "0" with no trailing newline. If you really mean for such values to terminate the loop, they should be tested for explicitly:
while (($_ = <STDIN>) ne '0') { ... }
0938nobodyさん
03/04/13 16:39ID:???In these loop constructs, the assigned value (whether assignment is automatic or explicit)
is then tested to see whether it is defined.
The defined test avoids problems
where line has a string value that would be treated as false by Perl,
for example a "" or a "0" with no trailing newline.
If you really mean for such values to terminate the loop,
they should be tested for explicitly:
while (($_ = <STDIN>) ne '0') { ... }
while (<STDIN>) { last unless $_; ... }
0939nobodyさん
03/04/13 16:40ID:???while (my $line = <STDIN>) { print $line }
これらのループ構造では、(自動的であれ、明示的であれ)指定された値は
defined されてるか否かテストされます。definedされてるか否かのテストをすると、
次の行を伴わない "", "0" のような、Perlでは 偽 として扱われる文字列が
行中にあったときの問題を避けることができます。
もし、おまいが本当にそれらの値("", "0")でループを終了させるのなら、
明示的に次のようにしる:
while (($_ = <STDIN>) ne '0') { ... }
while (<STDIN>) { last unless $_; ... }
↑↑↑↑↑↑↑ いい加減な訳、ここまで ↑↑↑↑↑↑↑↑↑
ということは、
「どうやら while の条件部は行入力演算子を使った場合に限って、
真偽値ではなく defined か否かで判定されるみたいだね。 」
は正しいのか?間違ってるのか?
誰か正確に訳してください。
0940926
03/04/13 17:45ID:???my $file = './test.txt';
open F, '>' . $file or die;
print F '0';
close F;
open F, '<' . $file or die;
A: { print 'A' while <F>; seek F, 0, 0 }
B: { my $foo; print 'B' while $foo = <F>; seek F, 0, 0 }
C: { my($foo, $bar); print 'C' while $foo = $bar = <F>; seek F, 0, 0 }
D: { my($foo, $bar); print 'D' while defined($foo = $bar = <F>); seek F, 0, 0 }
E: { print 'E' while <F> eq '0'; seek F, 0, 0 }
print "\n";
__END__
> perl test.p
ABDE
B が特別扱いっぽく見えるけど、「while の条件部に行入力演算子
のみを置いた場合はデフォルトで $_ に代入」との兼ね合いだろうね。
つまり while <> は while $_ = <> の文法的略記でしかなく、内部的
には後者で処理されてるんじゃないかな。
だから >>926 を厳密に言うと、「while の条件部は $var = <> ならば
defined か否かで判断、そうでない場合は真偽値で判断」だね。
ドキュメント読んでないけど、挙動を見る限りは。
0941nobodyさん
03/04/13 22:40ID:???$logfile = "./accesslog.dat";
$agent2 = $agent = $ENV{'HTTP_USER_AGENT'};
if ($agent =~ /AOL/) { $agent = 'AOL'; }
略・・・
elsif ($agent =~ /PDXGW/i) { $agent = $os = 'H"'; }
if ($agent2 =~ /win[dows ]*95/i) { $os = 'Windows 95'; }
略・・・
elsif ($agent2 =~ /X11/ || $agent2 =~ /SunOS/i || $agent2 =~ /Linux/i
|| $agent2 =~ /HP-UX/i || $agent2 =~ /FreeBSD/i || $agent2 =~ /NetBSD/i
|| $agent2 =~ /OSF1/i || $agent2 =~ /IRIX/i) { $os = 'UNIX'; }
$referer2 = $ENV{'HTTP_REFERER'}
if ($referer2 =~/\w/){$referer = "$referer2";}
open(FILE, ">> $logfile");
flock(FILE,2);
print(FILE "$ENV{'DATE_LOCAL'},$referer,$agent,$os,$ENV{'REMOTE_HOST'}$ENV{'REMOTE_ADDR'}\n\n");
lock(FILE,8);
close(FILE);
exit;
これが動かないのでチェックにかけると、
if ($referer2 =~/\w/){$referer = "$referer2";}
の;}の近くがおかしいとでました。サッパリわかりません。
ちなみに、ここのリファラーのif文を省いたときは正常に実行できました。
0942nobodyさん
03/04/13 22:42ID:???自分で同じものを書くと、;}の近くがおかしいとでます。
さらに、コピペではelsifはひっかからなかったのに、自分で書くと、
elsifというのはおかしいとか注意されます。もうサッパリです。
0943nobodyさん
03/04/13 22:44ID:???$referer2 = $ENV{'HTTP_REFERER'}
if ($referer2 =~/\w/){$referer = "$referer2";}
else{$referer = 'Direct Access';}
です。
0945nobodyさん
03/04/13 22:47ID:???そうなんですけど、自分で書くと、;}のところや、elsifがひっかかります。
チャックプログラムもKENTさんのところのやつです。
なんでですか?秀丸を使ってるんですけど、なにか関係ありますか?
0946nobodyさん
03/04/13 22:50ID:???ほんとに同じ物を書いたのか?
0947nobodyさん
03/04/13 22:54ID:???あ、ほんとだ。できました。ありがとうございます。
どうやら=文書くときにセミコロンを忘れる癖がついていたようで前にもこのようなことがなったんですね。。。
スレ汚しすいませんでした。
0948nobodyさん
03/04/13 23:18ID:pEN/2OPIこのスレに2度とくるな!
と書かれた者ですが質問しても良いですか?
0949nobodyさん
03/04/13 23:19ID:???もしここで私が「ダメだ」と言ったら
ひろゆきさんに問い合わせるつもりですか?
それともいちいち2ch系サイトに
「あなたのサイトをひろゆきさんにチクリます」
とメールを出したり書き込んだりするつもりですか?
0950nobodyさん
03/04/13 23:21ID:???0951nobodyさん
03/04/13 23:23ID:???>ひろゆき氏よりもエラそうな一言
などと反省の色が見えないことを考えると二度と書き込まないほうがよかれ。
0952nobodyさん
03/04/13 23:27ID:???だんご虫が群がってるよね。
あれみたい・・・。 このスレ。
0954nobodyさん
03/04/13 23:30ID:???自演
0955nobodyさん
03/04/13 23:41ID:pEN/2OPI953番さんここの管理人ですか?
0956nobodyさん
03/04/13 23:41ID:???「<tt>while (defined($line = <FILE>)) { ... }</tt> でdefinedがない場合、ファイル末にある改行なしの"0"が正しく取得できるかどうかの調査。
」
というのがありました。
http://www.hyuki.com/pb/pbmldig.html
0958937
03/04/13 23:54ID:???もういいよ。うざいバカだな。
>>956
なるほど。新しい版になると回避するようになってるってことか。
しかし MacJPerl 5.2.0r4 はわけわからんな。何が影響してるんだろうか。
やっぱ>>937-938の通りだな。心配だったらチェックしろってことか。
まあ俺の周りでは5.6以降しかないから大丈夫だろうな。
情報ありが�d
0959948
03/04/13 23:56ID:???955はもろそうですけど。
0961948
03/04/14 00:10ID:???失礼しました。
0962nobodyさん
03/04/14 01:18ID:oETCFM9h0963nobodyさん
03/04/14 01:22ID:???最後の文字の直前に、ピリオドを突っ込む。
以下独り言。
バイト数をメガバイトや、キロバイトという単位で表示したいのなら、
1024で割れば、キロバイトになる。
さらに1024で割ればメガバイトになる。
コンピュータの世界の数字ではないのなら、1024の代わりに1000を使う。
0967nobodyさん
03/04/14 04:08ID:???use strictだと怒られてしまいます。
何故でしょうか…。
0968はしのえみ好きー
03/04/14 05:13ID:???0969nobodyさん
03/04/14 05:44ID:???use strict;
と書くと、
use strict 'refs';
と、書いてあるときと同じ制限(シンボリックリファレンスの禁止)が効いてくるからじゃないかな。
0970はしのえみ好きー
03/04/14 06:28ID:???0971nobodyさん
03/04/14 09:30ID:???処理を行う文字列内に2バイト文字が含まれている場合、処理を中断させたいのですが
Perl でコレに適した関数が存在しますでしょうか?
関数が存在しない場合、この様な処理を行いたい場合どのような考え方を行えばよいでしょうか?
0972nobodyさん
03/04/14 10:03ID:???0973nobodyさん
03/04/14 10:57ID:???それを利用して正規表現でマッチングすれば実現できそうですね!
因みに、コード S-JIS の場合は同じ様な方法で処理可能でしょうか?
0974nobodyさん
03/04/14 12:44ID:???http://tohoho.wakusei.ne.jp/wwwkanji.htm
まず、ここ↑だけでなく、とほほさんのページWWW入門を端から端までざっと読まれたし。
あと、「2バイト文字」 「判定」 とかでぐぐられたし。
0976nobodyさん
03/04/14 14:53ID:???と書くと変数が空になる場合とそのまま表示される場合があるのはなぜですか?
0977nobodyさん
03/04/14 15:06ID:???言いたい事だけだを言って逃げるような人間は必要ない。
0979nobodyさん
03/04/14 15:19ID:???言いたい事だけだを言って逃げるような人間は必要ない。
0980nobodyさん
03/04/14 16:40ID:???0982nobodyさん
03/04/14 23:20ID:Fu0phwZ60983nobodyさん
03/04/14 23:30ID:???答えられねーくせに常駐してんなよ
0987nobodyさん
03/04/15 01:11ID:GCPlWzzFhttp://f9.aaacafe.ne.jp/~raiha/printenv.cgi
誰かこれと同じようなCGIをくんで、どこかにUPしてもらえないでしょうか?
本っ当にすいません、携帯なんで。。。
0989nobodyさん
03/04/15 01:22ID:iui3dkW8あと、この場合のパーミッションはどうしたらよいか教えて下さい。
もしよろしければ、UPしてもらいたいんですが。。。だめですか?
0990はしのえみ好きー
03/04/15 01:35ID:???別にコードに書くわけじゃないよ。http://fh.aaacafe.ne.jp/ ここで聞いて来い。と思ったがろくな説明書いてないな。
ftpでUpしてるならchmodしろ。FTPクライアントによってやり方は違うからそれに関しての質問はスレ違い。
0991はしのえみ好きー
03/04/15 01:35ID:???正:FTPクライアントによってやり方は違うが、それに関しての質問はスレ違い。
0992nobodyさん
03/04/15 03:05ID:???$b = 3;
$c = $a / $b;
だと $c = 3.3333〜になってしまいますし
int($a / $b) だと $c = 3になってしまいます
少数第2位でそろえるためにはどうすればいいんでしょうか?
一応
$c = (int($a * 100)/$b)/100; っていうのも考えて見たんですが
もっとスマートにやる方法ないでしょうか
表示するわけではないのでprintf()は使えません。
0996nobodyさん
03/04/15 07:22ID:HrV7+0uT0997nobodyさん
03/04/15 10:14ID:???じゃあ、立ててくるから待ってて
0998nobodyさん
03/04/15 10:17ID:???Perl 初心者コーナー Part22
http://pc2.2ch.net/test/read.cgi/php/1050369328/l50
0999nobodyさん
03/04/15 13:57ID:???1000nobodyさん
03/04/15 13:58ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。