【Perl】初心者コーナー Part13
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
02/05/30 13:06ID:R2kt1mTx1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIの質問は【CGIだけど、なんか質問ある? part 6】
http://pc.2ch.net/test/read.cgi/php/1019561283/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4】
http://pc.2ch.net/test/read.cgi/php/1012839651/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0002nobodyさん
02/05/30 13:06ID:???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/test/read.cgi/php/1019917048/
[ひまぢん氏のミラー]
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さん
02/05/30 13:07ID:???・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さん
02/05/30 13:08ID:???・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/
[Module]
・Perl Module Reference: http://www.bekknet.ad.jp/~bero/docj/module_/
・PPMPackages: http://www.activestate.com/PPMPackages/
・河馬屋二千年堂's Page: http://member.nifty.ne.jp/hippo2000/index.htm
[Security]
・安全なプログラミングのためのガイドライン:http://www.FreeBSD.org/ja/security/#spg
・Perl security:http://www.perldoc.com/perl5.6/pod/perlsec.html
・Perl security和訳:http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsec.html
・CGI and Security http://www.ansi.co.jp/tech/cgi/security/
・The Unofficial Web Hack FAQ:http://www.nmrc.org/faqs/www/
・How to Write Secure Code:http://www.shmoo.com/securecode/
・Safe CGI Programming :http://www.improving.org/paulp/cgi-security/safe-cgi.txt
[OS]
・Linux日本語マニュアル:http://www.linux.or.jp/JM/
・FreeBSD日本語マニュアル:http://www.jp.freebsd.org/man-jp/
しかしホント人いねーな。前スレ996でとまってるよ・・・1000ゲッターすらおらんのか
0006nobodyさん
02/05/30 19:55ID:???悩める初心者がいないのは喜ばしい事と思おうじゃないか。
>1
おつ。
0007nobodyさん
02/05/31 02:41ID:RZM1Qpf7これってどっからみても2ch型掲示板なんだけど「he-ch_BBS Ver 0.51 (C)shun-K」
ってなっています。この人の自作なのでしょうか??
0009nobodyさん
02/05/31 11:17ID:/ptz9nSf親ディレクトリ名キーに、子ディレクトリ名の配列のリファレンスを入れようとしています。
本中の例を見ていますが、どうしても一行解りません。
du hoge
1425 hoge/hoo
19 hoge/hoo/bee
58 hoge/raa
------プログラム途中より-------
($size, $name) = split;
$dirsize{$name} = $size;
($parent = $name) =~ s#/[^/]+$##; ←これ
push @{ $kids{$parent} }, $name;
矢印行は、どのような処理を行っているのでしょうか。
ヒントでも構いませんのでご指南いただけないでしょうか。
よろしくお願いいたします。
0010nobodyさん
02/05/31 11:23ID:???ヒント:
($parent = $name) =~ s#/[^/]+$##;
これは以下のコードとほぼ同じ
$parent = $name;
$patent =~ s/[^\/]+$//;
0011nobodyさん
02/05/31 12:23ID:JMT5UavWということをするために
use File::Find;
$dir = "C:\\windows";
find(\&print_dir, $dir);
sub print_dir {
print $File::Find::name, "\n";
}
というrecurse.jplを実行すると、
syntax error at C:\Perl\lib/File/Find.pm line 2, near "use 5.005_64"
BEGIN failed--compilation aborted at recurse.jpl line 1.
というエラーが出ます。これはどういうことなんでしょうか。
↓はFind.pmの1行めから4行めまでです。
package File::Find;
use 5.005_64;
require Exporter;
require Cwd;
モジュールを使うのは初めてです。
どうぞよろしくお願いします。
0012nobodyさん
02/05/31 13:22ID:???新鮮なPerlをインストールしてけろ。
001311
02/05/31 13:40ID:JMT5UavWどうもありがとうございます!
JperlじゃなくてPerlでやったら動きました。(Jperlが古いってことですよね。)
ホント助かりました。
0014nobodyさん
02/05/31 13:55ID:9bWUYmPcいろいろそういうモジュールがないかと探したんですけど見つけることができませんでした。何か方法があるんでしたら教えて下さい。
00159
02/05/31 15:20ID:/ptz9nSfうをー
速やかなレスありがとうございました。感涙;;
0016nobodyさん
02/05/31 15:50ID:n686HjoS引数に文字列を入れたら、それぞれの文字のASCIIコードを足して、
10で割ったあまりを返すサブルーチンを作ったんですが、
#呼び出し
$moji = "ABC";
$number = &getid($moji);
print $number;
#ルーチン
sub getid{
local($tmp) = @_;
$id = 0;
@data = split //,$tmp;
$num = grep //,@data;
for($i=0;$i<$num;$i++){
$tmp = ord($data[$i]);
$id += $tmp;
}
return $id %= 10 ;
}
ってやると、返り値が0の時のみ正常に動いて
それ以外の値になる時はこのルーチンの中でプログラムが終わってるようです。
何かヘンなところあるでしょうか?
001716
02/05/31 16:09ID:???これで得た数値を、jcode.plを用いてSJISに変換しようとしたところで止まってたようです。
板を汚してしまい、申し訳ないです。
0018nobodyさん
02/05/31 21:04ID:???どうすればいいか教えてください。
例:
$i = 2
●,◆,★,■,▲,▼
↓
★,●,◆,■,▲,▼
0021nobodyさん
02/06/01 05:07ID:???よろしく
0023山
02/06/01 23:23ID:A+zARsIN($a,$b,$c) = split(/<>/, $line);
if($a eq "abc") { ???????????? }
}
foreachで配列を処理します。$aが、abcだった場合、現在処理中の
配列のセット($a,$b,$c)ごと削除したいんです。
説明わかりにくくてすみませんが、どうすればいいですか?
0024nobodyさん
02/06/01 23:29ID:???これ使って自分でモジュールを作れ。
http://www.vector.co.jp/soft/win95/util/se032901.html
0027nobodyさん
02/06/02 04:53ID:???そもそも、23ってwhileの方が…
それか
foreach(@qq){
($a,$b,$c) = split(/<>/, $line{$_});
~~~
0029もじら
02/06/02 10:42ID:???DBIをどのように設定したらいいかわかりません
どのように答えたらいいかわかりません
0033もじら
02/06/02 14:24ID:???接続ID = pg_connect("","","DB名");
これはPHPの中の記述です
この書き方は何に依存しているかは不明ですが
それでこの関数でエラーがでました
httpd とポスグレの状態は起動しています
どのように起動していればいいかは不明です
テーブルも作りました
ほんとに質問の仕方もわかりません
0034もじら
02/06/02 14:30ID:???おそらくPERLからDB関数でカーソルを得てるとおもうのですが
DB関数はナニに依存しているのか、どこに組み込めばよいのか不明です
VBはOCXとODBCドライバを記述すればよかったのですが
VBでADOをさわったことはあるのですがカーソルは使えます
PERLがカーソル機能をもっているなら、関数を書けばいいだけなのか
不明です。
0036nobodyさん
02/06/02 14:54ID:???PHPだと>>33のようにすればできたけどPerlでDBとのやりとりを行うにはどうすればいいの
他の言語だと>>34のようにできたけど。
やるための準備はできているからPerlでの記述の仕方を教えて。
きっとこんな感じだろ。
0037もじら
02/06/02 15:16ID:???この書き方でDBIの関数を使える
これは正しいですか?
もし正しいなら、DBIモジュールはどこに組み込めばいいのかわかりません
DBIの概要は読みましたが、どこから入手してどこに組み込むのかわかりません
決してソースのキボンヌではないです
でもINSERT文のひとつが実行できたらミッション完了です
よろしくおねがいします
0038nobodyさん
02/06/02 15:21ID:???つーか「モジュールとはなにか」すら理解せずにDBIを使おうとするのは間違ってます。
0039nobodyさん
02/06/02 17:14ID:QCpBS98Orequire 'jcode.pl';
jcode::convert(\$value, 'euc');
jcode::tr(\$value, '0-9A-Za-z', '0-9A-Za-z');
としてみたんですがsjisにしないと文字化けするため、上記のあとの行に
&jcode'convert(*value,'sjis');
をいれてみました。ですが全然変換されない状態です。
アドバイスあればお願いします。
0040nobodyさん
02/06/02 17:23ID:QdZB4aXd004139
02/06/02 17:31ID:QCpBS98OEUC以外の方法はないんでしょうか?
0042nobodyさん
02/06/02 18:04ID:DhpOMnbMリンクのCGIで入力項目を一つ増やしたのですが
ログに記録されません!
どこがおかしいのでしょうか?
http://nyanyanya.hoops.ne.jp/link.txt
増やした項目は bun ってゆーのです。
よろしくお願いします!!
0043もじら
02/06/02 19:07ID:???だからウィンユーザにmakeは不要なのです
私はウィンソック担当だからCGIのインタフェースを理解して
テスト環境を構築してるのです
手順だけわかればOKですので誰かつついてくれませんか?
0044nobodyさん
02/06/02 19:28ID:???シフトJISだとこうかなあ。
$_ = 'TBC個人情報3万件流出';
my @zenkaku = qw(
0 1 2 3 4 5 6 7 8 9
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m
n o p q r s t u v w x y z);
my @hankaku = ("\x30".."\x39","\x41".."\x5A","\x61".."\x7A");
my %table;
@table{@zenkaku} = @hankaku;
s/(\x82[\x4F-\x9A])/$table{$1}/g;
print;
>>40
trは文字単位の置き換え。
$str1 = $str2 = 'abc abz';
$str1 =~ tr/abc/ABC/d;
$str2 =~ s/abc/ABC/g;
print "str1: ",$str1,"\n"; # ABC ABz
print "str2: ",$str2,"\n"; # ABC abz
>>43
帰れ。
004539
02/06/02 19:42ID:QCpBS98Oしかしすごいですねー。
0046nobodyさん
02/06/02 21:18ID:???0047nobodyさん
02/06/02 21:25ID:???こうでよかったね。>>44のは関係ないのと混ぜちゃった。
004839
02/06/02 21:49ID:QCpBS98O>>44のTBCがRABに変換される仕組みを作ってるのは
s/(\x82[\x4F-\x9A])/$table{$1}/g; この一行だと思うんですが
どうしてこれだけで変な変換されるのかわからないです。
まともに変換するためにはどうすれば良いのでしょうか?
また、このコードはどうやって調べてるのでしょうか?
0050nobodyさん
02/06/02 22:02ID:???http://www.bh.wakwak.com/~min/cgi-bin/monoceros.cgi
何がいけないんでしょうか・・・
お教えいただければ幸いです。
0051nobodyさん
02/06/02 22:09ID:???0052nobodyさん
02/06/02 22:10ID:???ttp://tohoho.wakusei.ne.jp/wwwperl2.htm#socket
>50
配布CGIは配布元で聞くべし。
0053nobodyさん
02/06/02 22:11ID:vJY+ySFUそのときのcgiが受け取った数値は文字列として受け取るの?
0054!
02/06/02 22:23ID:0rr9HH/y0055nobodyさん
02/06/02 22:28ID:???うちだと上のままで動くから原因がわからん。
BCがABにずれるんなら、一文字ずれてるのかな。
コードは16進に変えてるだけ。検索すれ。
>>49
なんでさっきから一つズレてるの?
0056nobodyさん
02/06/02 22:30ID:xW341CtXYES
0057nobodyさん
02/06/02 22:30ID:???0058ぎもじら
02/06/02 22:37ID:???でもわかりやすいHP情報助かりました
005939
02/06/02 22:46ID:QCpBS98O>>44のをコピペしたときに my @zenkaku = qw(のあとにつづく部分の
改行をとったんですが、そのときに半角スペースを削ってしまってました。
その影響でTBCがRABに変換されていたようで、うちの地元のTVニュース番組で
RABてのがあって、これはいったいどういうことだろう?と思い。。。
関係なくてすみません。とにかくありがとうございました。
0060nobodyさん
02/06/02 23:32ID:???0061nobodyさん
02/06/03 00:08ID:450OcSEVそれで、10000行の入力でdprofppを使ってプロファイルを取ってみると、
Mymod::BEGINが10000-20000回の間で呼び出されていて、
定義していないはずのmain::BEGINも10000回前後呼ばれています。
perlmodには「BEGINは1回だけ呼ばれる」と書いてあったと思うんですが。
0062nobodyさん
02/06/03 00:49ID:???みなさん、
タカラ(およびコナミ)との『聖戦』が始まりました! これをコピペすれ!
コナミがタカラを買収! 黒幕はコナミか?
http://www.mainichi.co.jp/life/hobby/game/news/news/past/200004/20000427_03.html
株式会社タカラが、「ギコ猫」を商標出願中。 (,,?Д?) 我らのギコ猫を救え!
http://www2.ipdl.jpo.go.jp/BE0/index.html の商標検索から「ギコ猫」入力
=============開始==============
・広報コピペ部隊 できる限り各地にのニュースを伝える 例)タカラの株式スレなど
・テンプレ部隊 関連スレ・抗議文などのテンプレを作る
・法律部隊 法的に議論、打開策を考える
・誘導部隊 各地で出てくるであろう新参にいろいろ教えてあげる
・不買運動部隊 不買運動を広めよ
・株主・IR対策部隊 株価・株主・企業活動としてのPRやIRに対する対策
F5や単なる中傷は控えめに。正々堂々と戦うのだ。
0063nobodyさん
02/06/03 04:44ID:zPDyt+6kソースみんとわからんけど。
BEGINブロックが複数あると、その数だけDProfはカウントするぞ。
あと「use Hoge;」は「BEGIN {require Hoge; import Hoge;}」に等しいから
useを使うごとにBEGINブロックが一個追加されることになる。
しかしカウント数が1万回にもなる理由はわからぬ。
0064nobodyさん
02/06/03 10:16ID:9MQeJRCJcgiでデータを更新し、一番上(1行目)にデータを追加するのですが問題があります。
5行目のデータ(文字数)が長い場合、更新して新しいデータを追加したとき
古い五行目の余分なデータが新しい5行目のデータの最後に付いてしまっています。
open(FILE,"+<$filepath");
#処理は省略
pop @data;#6個目は削除
seek(FILE,0,0);
print FILE @data;
こんな感じでやってるのですが、最後のデータが大きいとデータが残ってしまいます。
どうやればいいのでしょうか。
006664
02/06/03 11:27ID:???できました。
そんな関数truncateがあったとは。
0067nobodyさん
02/06/03 15:53ID:UUcyKeQxこの方法で文字化けを回避しようするとエラーがでます。
エラーをださないようにするにはどうすれば?
0068nobodyさん
02/06/03 15:56ID:???最初からeucを使う。
0071nobodyさん
02/06/03 17:27ID:???@letters 内の、重複した要素を削除する方法を教えてください。
よろしくお願いします。
0073nobodyさん
02/06/03 18:48ID:???すいません、よく意味が分かりません・・
もう少し詳しく教えていただけませんか?
0074nobodyさん
02/06/03 19:00ID:???%mita = ();
foreach $youso (@letters) {
push(@newletters, $youso) unless $mita{$youso}++;
}
0075プロのグラマー
02/06/03 19:09ID:???0076nobodyさん
02/06/03 19:14ID:???perlに必ず付いてくるperldocコマンドつーのがあってな。
シェルとかDOS窓のコマンドラインから>>72みたいのを入力するわけ。
すると-qの後に指定したキーワードに関するFAQが出てくる。
ただしキーワードは英語のみ。だから「重複した要素を削除」の
方法を知りたいなら「remove duplicate elements」で検索する。
0078nobodyさん
02/06/03 21:58ID:wD1usRutよく本を見ると、perlはeucで書けと書いてありますが、これはどういうことなのでしょうか。
私は秀丸で書いてるんですが、eucで保存すると、後で開いたときにすべて文字化けしてます。
「eucで書く」という行為自体がどうすることなのかよくわかりません。
みなさんeucで書かれてるんですか?
0080nobodyさん
02/06/03 22:29ID:???seek前にtruncateすると、printする前に異常終了した場合データが
吹っ飛ぶんで、print後にtruncateした方が良いと思う。
Cookbookのサンプルもそうなってるし。
seek(FILE,0,0);
print FILE @data;
truncate (FILE, tell(FILE));
close(FILE);
0081ぎもじら
02/06/03 23:47ID:???ポスグレのDBIいれようとしたら
c:\>ppm install DBI
でインストできちゃった
なんで?
どんな仕組みになってるのかわかりません
ヨロシコ
0082nobodyさん
02/06/04 00:13ID:???分からない事があったらとりあえず検索するクセつければぁ?(゚Д゚)
0084nobodyさん
02/06/04 01:22ID:???0085nobodyさん
02/06/04 08:43ID:???Perlのバージョンは5.6.1です。
Text::Templateのバージョンは1.43です。
use Text::Template;
$NaviView = 'SHOW';
my $template = new Text::Template (
'type' => 'FILE',
'source' => 'test.html'
) or die;
print $template -> fill_in();
デスクトップでテストするとHTMLファイル内の{$NaviView}が展開されて表示されます。
しかし、cgi-bin/step8/フォルダ内だと、何故か{$NaviView}の部分が表示されません。
ソースは同じなので、原因がわからずに困っています。
どうか助けてください。
008666
02/06/04 09:27ID:b8OuO/Ji自分も調べてみたけど、そっちの方が安全性が高いみたいですね。
なんか、処理速度も速いみたいです。どうもです。
0087nobodyさん
02/06/04 11:32ID:V54BnlXw繰り返したいのですがうまくいきません。どうか助けてください。変数の中に
変数というのは無理なんでしょうか?
for($m=1 ;$m <= 9 ; ++$m){
&print($m);
}
====================
sub print {
my ($i) = @_ ;
$A = "$NO$i"; #←この部分がやりたいことです
print = $A;
}
若輩者ですが、宜しくお願いします。
0088nobodyさん
02/06/04 12:45ID:???$A = "\$NO$i"; でいいのでは。って、こういうことじゃないのか?
ちなみにforの部分は、漏れはforeach(1..9)と書くのが好き。
009061
02/06/04 13:01ID:???レスどうもでした。それと遅レスすいませんです。
tmon.outにはBEGINが数万回記録されていたのに、
BEGINにprint文を入れてみたら1回しか出力されなかったので、
DProfのバグということで落ちついてみます。
本当のところは知らないですが。
0092nobodyさん
02/06/04 13:13ID:???過去スレで出たんだけど、foreachよりもforの方がいいらしい。
foreach(1..9)だと、@_ = (1,2.3,4,5,6,7,8,9);みたいな一時配列を作ってから処理をするからメモリを食うんだと。
まぁ、この程度の数値なら差はないだろうけど、
for($i=0;$i<10000;$i++)
foreach(0 .. 10000)
くらいになると差が出るんじゃないかな?
009361
02/06/04 13:14ID:???#!/usr/bin/perl -w
use strict;
sub LIMIT { 10000 }
for (my $i = 0; $i < LIMIT; $i++) {
}
print "end\n";
このソースで下の測定結果になります。
Total Elapsed Time = 0.019991 Seconds
User+System Time = 0.019991 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
150. 0.030 0.025 10002 0.0000 0.0000 main::BEGIN
0.00 0.000 -0.000 1 0.0000 - strict::import
0.00 0.000 -0.000 1 0.0000 - strict::bits
0094nobodyさん
02/06/04 13:42ID:???過去のバージョンでは確かにそうだったが、
5.005の時点で最適化されたため、今や foreach(n .. m) の方が早い。
あやふやな知識は試してみてから外に出そうな。
0095nobodyさん
02/06/04 13:52ID:???それはPerl4とかの話でしょ。
今はもう一時配列作っていないから心配ないよ。
ちなみに0 .. 10000のほうが速い。ってperlsynに書いてある。
0096nobodyさん
02/06/04 13:53ID:???0097nobodyさん
02/06/04 13:54ID:???すまんがわからん。さっぱりわからん。
俺も幾つか試してみたけど、まるで納得いかない結果になったよ。
多分どこかにバグがあるのは間違いないと思う。
0098nobodyさん
02/06/04 14:12ID:???5.6.0では
Total Elapsed Time = -0.85246 Seconds
User+System Time = 0 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
0.00 0.575 0.105 10001 0.0001 0.0000 main::LIMIT
0.00 0.008 0.008 1 0.0077 0.0076 main::BEGIN
0.00 0.000 -0.000 1 0.0000 - strict::import
0.00 0.000 -0.000 1 0.0000 - strict::bits
Elapsed以外は正しく見えるが...
perltocにdprofpp(utility change)と書いてあるから古いの使ってるんじゃないのか?
009997
02/06/04 14:22ID:???俺のはPerl5.6.1(ActivePerl631) Devel::Dprof 20000000.00_00 だ。
このコードはどうだろう。
俺の環境では、なぜか use ...; をコメントアウトするとまともに動くのだが。
#!perl -w
use less; # strictとかでも同様。lessを選択したのは何の効果も無いプラグマだから
sub limit{ 100 }
sub LIMIT{ &limit }
for(my $i = 0; $i < LIMIT; $i++){}
0100nobodyさん
02/06/04 14:30ID:???レスどうもです。
ええと、perl -versionは5.6.1だったです。dprofppのバージョンは分かりませんでした。
SerioWare GNU/Linux 0.35A附属のものを使っています。
で、この環境では>>99と少し違って、
ちょうど>>94とかぶってたので、forとforeachを調べてみたら、
#!/usr/bin/perl -w
use strict;
for (my $i = 0; $i < 1000000; $i++) {
}
これだとBEGINは1回呼ばれるだけだったです。
0101nobodyさん
02/06/04 14:45ID:???それは知らなかった、サンクス。
もっとも、漏れのプロバのスペースはいまだにPerl4なんだけどな。(涙ッシュ
010298
02/06/04 14:50ID:???ActivePerl 5.6.1でやってみた。結果は異常。
>>98はFreeBSD上の5.6.0。こいつのdprofppにActivePerlで作ったtmon.outを
食わせてみると、ActivePerlと結果同じ。 Devel::DProfのバグっぽい。
0103nobodyさん
02/06/04 16:38ID:???出力だけs-jisに変換してるんですか?
0104nobodyさん
02/06/04 16:44ID:???0106nobodyさん
02/06/04 20:32ID:???しかもfor(my $x; $x < $limit; $x++ ) は本当はwhileだという罠
perl -MO=Deparse,-x3 -e 'for(my $x; $x < 100; $x++){ print "barf\n" }'
my $x;
while( $x < 100 ) {
print "barf\n";
}
continue {
++$x;
}
-e syntax OK
0107nobodyさん
02/06/04 20:50ID:???use Benchmark qw/ cmpthese /;
sub cstyle
{
my $a = 0;
for( my $x = 0; $x < 1000; $x++ ) {
$a++;
}
}
sub pstyle
{
my $a = 0;
for my $x ( 0..999 ) {
$a++;
}
}
cmpthese(
100000,
{
cstyle => \&cstyle,
pstyle => \&pstyle
}
);
Benchmark: timing 100000 iterations of cstyle, pstyle...
cstyle: 95 wallclock secs (94.13 usr + 0.01 sys = 94.14 CPU) @ 1062.25/s (n=100000)
pstyle: 72 wallclock secs (71.58 usr + 0.02 sys = 71.60 CPU) @ 1396.65/s (n=100000)
Rate cstyle pstyle
cstyle 1062/s -- -24%
pstyle 1397/s 31% --
010885
02/06/05 09:40ID:???myで宣言してたのがいけなかったようです。
use strictをコメントアウトしたらうまくいきました。
0110nobodyさん
02/06/05 10:03ID:???0114nobodyさん
02/06/05 14:12ID:O06am5wh2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数:105420人 発行日:2002/05/030
どもども、風薫る5月ワキガも香るひろゆきですー。
今日はどうしても報告したいことがあるですよー。
東京地裁の顔になりつつある今日この頃ですが、最近裁判官がおいらを露骨に馬鹿にするですよー。
裁判を傍聴している人は既にご存知でしょうが、ついこの前は、おいらのことを
「あなたは売春クラブの経営者みたいな言い訳をしますね」
なんて言いやがったですよー。
どうやら売春クラブの経営者は警察に捕まると必ず
「出会いの場を提供しただけだ」
と、見苦しい言い訳をするらしいですよー。。。
そんなセコイ奴等とおいらを並べて語るとは悔しいけど、ストライクですー。。。えぇえぇ、、、
確かにおいらは企業や公人の誹謗中傷を禁止していませんし、削除もしません。
その上、「発信元は判らない」を看板とし、悪質な書き込みをし易い環境を提供し、いやむしろそれを売りにしようと目論んでいますが、そんなことはおいらのクチビルの厚さとは関係ないですよー。。。
ところで、中央大卒のおいらの同級生達がおいらのことを「宅八郎みたいな奴」と罵っているって本当ですか?。。。うぅうぅ、、、
んじゃ!
0115nobodyさん
02/06/05 16:42ID:???中途半端な質問だから一般的な回答をもらったのに、脳内変換するなよ。
ユーザ個別にという前提で聞いてないじゃないだろ。
その場合はユニークなIDとセットで行うのが普通だし、判定なんて
簡単な話じゃないの。
0118nobodyさん
02/06/05 21:36ID:6v6pwQwJコマンドを教えてもらえないでしょうか?
私の調べた範囲ではわからなかったのでお願いします。
0121nobodyさん
02/06/05 22:03ID:???0122nobodyさん
02/06/05 22:16ID:6v6pwQwJ0124nobodyさん
02/06/05 22:19ID:???メール欄にsage
0125nobodyさん
02/06/05 22:57ID:???内容は当方のデータベース内にある情報の中で、各人に必要なものを検索し、
見ていただくというものです。
データはCSVファイルになっております。
そこで質問なのですが、たとえばCSVファイルが
1列目はお店の名前
2列目は「とんこつ」または「しょうゆ」または「しお」
3列目はお店の所在地(都道府県)
という具合に記述されているとします。
このとき当サイトを見た人が、チェックボックスの「東京」「とんこつ」
にチェックを入れて検索をかければ該当するお店がHTMLファイルに出力
されるようにしたいのです。
私はまず何から手を付ければよいでしょう?
ちなみに恥ずかしながらプログラミングの知識はほとんどありません。
「そういうプログラムあるよ」とか「まずこの本買って勉強しなさい」とか
何でもいいですから情報をいただけるとありがたいです。
0129nobodyさん
02/06/05 23:58ID:???レスキューの簡易データベースでも使っちょれ
http://www.rescue.ne.jp/cgi/database/
0130イニシャルN ◆kys8mAGw
02/06/06 00:01ID:???http://pc.2ch.net/test/read.cgi/prog/1023283683/
から来ました。板違いという指摘があってコチラに誘導させてもらいました。
ここのスレで勉強させてください。
よろしくお願いします。
0131nobodyさん
02/06/06 04:26ID:???HPBにMe…
キタ━━━━(゚∀゚)━━━━ !!!
で、何を御所望?
まさか、この辺鄙な板の真っ当なスレまでネタスレに!?
0133イニシャルN ◆kys8mAGw
02/06/06 06:59ID:???あれは使いまわしなので古い内容ですね。
今はタグ打ち、XPプロフェッショナル/2000/NTの3機の環境です。
あ、自宅はMeですが、、、、
ネタスレ、ネタスレと言いますがネタじゃないです。
まじめに勉強しようと思ってますよ。
今、スレ一覧とかみてよいCGIサイトとか
お気に入りにいれました。参考にさせてもらいました。
ありがとうございます。
頑張って調べてそれでもわからなかったら力添えよろしくお願いします。
失礼します。
0134nobodyさん
02/06/06 08:56ID:dEIJexyI心配なら、ScriptAliasでdocumentrootの外に置くといいでしょう。
0135nobodyさん
02/06/06 15:10ID:???↑こんな時、$b をリテラルとして扱う方法ってある?
0136nobodyさん
02/06/06 18:08ID:???ネタスレと言われるのは、単発で立てたからだろ。
まじめに勉強したいならしばらくは2ch外でお勉強した方がいいと思う。
質問するなら>>1の内容を5回くらい声に出してからしてくれな
0137nobodyさん
02/06/06 18:59ID:???ハァ?
まさか
$a =~ m'$b';
とか
$a =~ /\$b/;
とかしたいって意味じゃないよな。
そんなのどんなクソな参考書でも絶対載ってるもんな。
もっとちゃんと説明しねーとワケわかんねーよヴォケ、とだけ逝っておく。
0140138
02/06/06 21:23ID:???俺が言いたかったのは、たまたま見た >>137 の様な人間がなってないような
解答者しかいねぇなって皮肉ったって事。
0142nobodyさん
02/06/06 21:42ID:???0143nobodyさん
02/06/06 21:48ID:???以下の要点を抑えないとまともに答えてもらえないので注意ですよ。
>>1
> 1:自分はこう言う事がしたい。
> 2:それでこんな風にやってみたが・・・
> 3:それだとこんなエラーが出て上手く行かなかった。
0144nobodyさん
02/06/06 22:29ID:???if ($a == 1) { &b }
if ($a == 2) { &b }
if ($a == 4) { &b }
これを短くするにはどうすればいいですか??m(__)m
0147nobodyさん
02/06/07 02:26ID:AfwvfL8+0148nobodyさん
02/06/07 04:15ID:IzDclSQvサブルーチンを作りたいんですが今の知識では書けませんです。
ちなみに仕様上、tableで囲うとかしたくないのです。
ちなみに改行は\rでやっております(どうでもいいですか)。
投稿内容のバイト数をチェックして
その中の\rの数を出して
何文字か毎に割ればいいように思うんですが…
もし良ければ教えてくらさい
0149nobodyさん
02/06/07 05:06ID:???>適度に改行が含まれている
んなファジーに「適度」いわれてもわからんのじゃゴルア。
tableで囲いたくないつーと、1行の文字数は不定つーことかな?
1行の文字数ってか横幅を固定せずに「適度な改行」を判定するなんてこた、
おそらく不可能だと思うが。もすこし詳しく条件を述べたまへ。
0150148
02/06/07 05:35ID:IzDclSQv改行符(\r)無しで○○文字以上文字が続いていたらエラー、という
式を書きたいわけです。
ちなみにたったいま
$comment =~ s/(.*)\r/$1\r/ig;
$oneline = $1;
return $oneline;
で、$onelineが>100だったらエラー、というのを書いてみたんだけど
上手く機能しませんでした
この100って数字は適当なんでどうでもいいです。
要はこの数字がtableで言うところのwidthの役割にはなるかなと
思ったんですが駄目かなぁ
0151nobodyさん
02/06/07 05:43ID:kAPIF1KY前提:
4年に一度は閏年
でも100年毎は閏年ではない
ただし400年毎は閏年
@months = ("0", "31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31");
if (($year%4) == "0" || ($year%100) != "0" && ($year%400) == "0") { $months[2] = "20"; }
三つの式が『||』と『&&』の二つの論理演算子でifの条件文が作られているわけ
ですが、『($year%4) == "0"』と『($year%100) != "0"』と『($year%400) == "0"』の関
係と、その中での『||』と『&&』の関係が知りたいです。
上述のif条件文だとうまく処理されないのに、条件文を
(($year%4) == "0" || ($year%100) != "0" and ($year%400) == "0")
もしくは
((($year%4) == "0" || ($year%100)) != "0" && ($year%400) == "0")
にするとうまくいくんです…。
参考書に書いてある優先順位の意味も分からないし…。
宜しくお願いします。
0152nobodyさん
02/06/07 06:04ID:???100文字ごとにbr要素ぶちこんで改行するとかでどうじゃろ?
それならPerlメモ(>>3見れ)にある
日本語を特定の長さで折り返す方法が参考になった記憶あり。
>>151
おなじアンド演算でも、
&& と || だったら、&&をに計算、次に||を計算する。
and と || だたら、||が先で、次にandを計算する。
こういうふうに、どっちが先に計算されるかってのが優先順位だよ。
わからなかったらカッコ使え。
0153nobodyさん
02/06/07 06:38ID:???0154nobodyさん
02/06/07 07:17ID:???>改行符(\r)無しで○○文字以上文字が続いていたらエラー
簡単に○○バイトで。
print "Error\n" if $comment =~ /[^\r]{10,}/;
嫌なら152の人の示したリンクに飛んでみるとか。
0155nobodyさん
02/06/07 09:47ID:???もし使えるのだったらDate::Calcを使うべし。もうすでに誰かが
書いてあるものならば素直にそれを使うべし。
使えないのだったらもう少しキレイに書けば問題も自然となくなります。
## 多分 $month, $yearをもってきてその月の日数を出したいのだろう
## と仮定・・・
our @MONTHS = qw/ 0 31 28 31 30 31 30 31 31 30 31 30 31 /;
sub get_max_days
{
my( $year, $month ) = @_;
if( $month == 2 && is_leap_year($year, $month) ) {
return 29;
} else {
return $MONTHS[ $month ];
}
}
sub is_leap_year
{
my( $year, $month ) = @_;
if( $month == 2 && $year % 4 == 0 ) {
if( $year % 100 == 0 ) {
return $year % 400 == 0;
}
return 1;
}
return 0;
}
0156nobodyさん
02/06/07 09:54ID:5iJQJUx6まあ凝るならchasenを使って文節のきりのいいところで
改行するということで。
0157nobodyさん
02/06/07 10:06ID:???あと文字列と==を混ぜるのはやめとき。
print "equal!\n" if "a" == "0";
==は数値、eqは文字列。まぁ151のコードだととりあえず関係ないけど。
0158nobodyさん
02/06/07 10:55ID:???些細なことだが、"閏年かどうか"は
引数の月が二月であるかどうかとは無関係だろ?
ついでだからもっと単純に実装してみる
これは
"yearが4で割り切れる、かつ、$yearが100で割り切れない
または、$yearが400で割り切れる場合、真を返す"
と読む
sub leap_year
{
my $year = shift;
return $year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0;
}
0160nobodyさん
02/06/07 13:15ID:???コマンドプロンプトからは動作するのに、ブラウザからは
動作しません。
#### ソース ####
sub ImageProcessing {
local($infilename,$outfilename,$width,$height) = @_;
$image = Image::Magick->new;
$image->Read($infilename);
$image->Scale(width=>$width,height=>$height);
$image->Write($outfilename);
}
ソースに問題はないと思いますが、
$image->Read($infilename);
でファイルが読めてないようです。このcgiファイルと同じディレクトリに
読み込む画像があるのですが、エラーでは画像がないと返ってきます。
この問題が分かる方、是非ご教授お願いいたします。
//// 環境 ////
Windows2k
Apache1.3.24
ActivePerl
PerlMagick
0161nobodyさん
02/06/07 13:16ID:JHi9xs8Bフォームの内容を、フォームとsubmit ボタンを2つづつ使って、
別々のcgiに選んで渡すことはできるんでしょうか?
form1
form2
内容
submit 1
submit 2
みたいな感じで、できるとうれしいのですが。
0162nobodyさん
02/06/07 13:19ID:O+HWTyLIできるでしょう
0163nobodyさん
02/06/07 13:23ID:JHi9xs8Bname 属性をそれぞれそろえても駄目ですよね?
具体的な方法を教えてもらえると、とてもうれしいです
0164nobodyさん
02/06/07 13:26ID:O+HWTyLI0165nobodyさん
02/06/07 13:33ID:???JavaScript使え。
0168161
02/06/07 13:46ID:JHi9xs8Bいちお言っておきますが。166は私ではありません。念のため・・・。
0169nobodyさん
02/06/07 13:54ID:???>163では>162に対するレスとしてその方法を聞いてるように見えたから>165では>161へのレスとしてああ書いた。
そして>167の言うように板違いだから詳細には触れなかった。
0170nobodyさん
02/06/07 13:57ID:???0171nobodyさん
02/06/07 14:06ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0172nobodyさん
02/06/07 14:07ID:???確かに板違いだが、今後同じ疑問をもつ人もいるだろうし
ぐちぐちいうぐらいなら、やり方教えてやったほうが早い。
<HTML LANG="ja">
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<FORM ACTION="" NAME="MyForm">
<INPUT TYPE="BUTTON" VALUE="送信1" onClick="MyForm.action='hoge.cgi';MyForm.submit();">
<INPUT TYPE="BUTTON" VALUE="送信2" onClick="MyForm.action='fuga.cgi';MyForm.submit();">
</FORM>
</BODY>
</HTML>
0174nobodyさん
02/06/07 14:39ID:???0175nobodyさん
02/06/07 15:14ID:???「Perlでできますか?」と聞いてるから問題はない。
「JavaScriptならできるから、そっちで聞け」と答えているなら、それも間違いではない。
「Perlではできない」とだけ答えるよりむしろ親切。
0177nobodyさん
02/06/07 20:59ID:???$EUC_JP_ = '[\x00-\x7F]|[\xA1-\xFE][\xA1-\xFE]|\x8E[\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE]';
@chars = ($str =~ /($EUC_JP_)/g);
よくわからんがこういうことかな?
0178nobodyさん
02/06/07 21:02ID:???質問が意味不明です。
だが、とりあえずここ逝け
http://www.din.or.jp/~ohzaki/perl.htm
0179nobodyさん
02/06/07 23:13ID:VaB1XovqDelphiのような総合開発環境がないので、どこが悪いのか探すのだけで直ぐ数時間ふっとびます・・・
効率のいい手法などあるのでしょうか?
0180nobodyさん
02/06/07 23:28ID:zKprkcjg古典的だがprintデバグ(wara
dieとか使えばデバグが楽になるらしいよ。
0181nobodyさん
02/06/07 23:31ID:???まずは
perldoc perldebug
当然-wスイッチとuse strictは必須
で、デバッグ機能としては…
perl -d script.pl # ビルトインCUIデバッガ
perl -d:ptkdb # GUIデバッガ Devel::ptkdbをインストールする必要あり
perl -d:Dprof script.pl ; dprofpp # Devel::Dprof プロファイラ
perl -MO=Deparse script.pl # オプティマイズの様子を見る ただしかなり不完全
ざっと見てこんなもんかな。
0183nobodyさん
02/06/08 00:24ID:???かったんで実験したら、コンマで繋ぐと上手く行くことがわかった。
例:open() or print "エラーしますた\n", return;
このコンマの意味って、Perl的にどういう意味?
0184nobodyさん
02/06/08 00:35ID:???コンマ演算子は式を左から順に評価し、最も右の式の値を返す。
voidコンテキストだと単に左から順に式を評価するだけ。
print("a"), print("b")
これはprint("a")を実行した後、print("b")を実行せよ、ということ。
ただし>>183は少し違う。
この場合はprintを"エラーしますた\n"とreturnの返り値の二つの引数で呼び出している。
ただしreturnは値を返さず呼び出し元に戻るから、"上手く行く"はずはないんだが…
0185age
02/06/08 00:49ID:???$count++;
の時は1ずつ上がっていたのに
$count+10;
にすると10ずつ上がるどころか全くカウンターが変わりません、
何かやりかたあるのでしょうか?
0186nobodyさん
02/06/08 00:57ID:???即レスどうもです。ラクダ本のコンマ演算子は読んだんですが、
左から順に評価し、は、実行すると言う意味なのね。
ちなみに、昨日の事を記憶で書いたので、今見直したら return
じゃなくて print, redo LABEL;でした。return は実験したか
記憶に無い。鬱
0189nobodyさん
02/06/08 11:45ID:R0Gdpaab何をやってもIPアドレスの方が取得されてしまいます。
$host = $ENV{'REMOTE_HOST};
これ一行だけにすると、何も取得出来ず・・・。
サーバがそういう設定にしているのか・・・。
どうすればいいのでしょうか?
0190nobodyさん
02/06/08 11:46ID:???サーバーの設定によっては使えない。
0191nobodyさん
02/06/08 11:48ID:R0Gdpaab返答ありがとうごさいます。
今使っているところは米tripod、あそこはダメか・・・
0192nobodyさん
02/06/08 11:48ID:???if ( $ENV{'REMOTE_HOST'} ne '' ) {
$host = $ENV{'REMOTE_HOST'};
}
else {
$host = $ENV{'REMOTE_ADDR'};
}
0193nobodyさん
02/06/08 11:58ID:R0Gdpaabそのように設定して、自分のリモホを見たら
10.10.17.178とか表示されました・・・。
どこのIPだ。しかも表示させたいのはリモートホストだし。
tripod逝ってよし
0194nobodyさん
02/06/08 12:03ID:R0Gdpaabこれはサーバの設定だな。
tripodは諦めます。
0195pear ◆FRUIT8pk
02/06/08 14:31ID:???XREAなら gethostbyaddr 関数でホストが取れたと思う。
0196nobodyさん
02/06/08 14:41ID:???全角カナ−>ひらがなへの変換は出来ないのでしょうか?だれか教えて下さい。
0197nobodyさん
02/06/08 14:43ID:JsVHaVnY$addr = $ENV{'REMOTE_ADDR'};
if ($host eq "" || $host eq "$addr") {
$host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2);
}
if ($host eq "") { $host = $addr; }
0198nobodyさん
02/06/08 15:27ID:???jcode.plならtr関数が使えたと思う。
jcode::tr(\$str, 'ァ-ン', 'ぁ-ん');
もしかしてShift_JISには未対応だったかも。
だめだったら自分で変換用のハッシュでも定義して変換しる。
0199196
02/06/08 16:52ID:???返答ありがとうございます。
jcode.plのソースには「Code must be JIS or EUC」とあったので
&jcode'sjis2euc(*ss);
&jcode'tr(*ss, 'ァ-ン','ぁ-ん');
&jcode'euc2sjis(*ss);
こう記述したのですが無理でした。
もしかしてとんちんかんな事を書いてますか?
0201nobodyさん
02/06/08 18:11ID:???199+200の考えでいいと思いますよ。
'ァ-ン', 'ぁ-ん'をEUC-JPの文字コードで書けばいいんじゃない?
&jcode'tr(*s, "\xHH\xHH-\xHH\xHH", "\xHH\xHH-\xHH\xHH");
HHのとこは16進の文字コードで。
0202nobodyさん
02/06/08 19:18ID:Z1wnMQCd上の"1" "2" "3"を一つの()内にまとめる書き方ありますか?
0203nobodyさん
02/06/08 19:44ID:???簡単な方法は、無い。
1,2,3...が多い場合は、ハッシュを使えば若干パフォーマンスは上がるかもね。
use constant true => 1;
%tbl = (
1 => true,
2 => true,
3 => true,
);
if($tbl{$x}){ ... }
0204196
02/06/08 19:51ID:???有り難うございます。早速やってみたところ
カタカナとひらがなを相互に変換してしまいます。
カタカナはひらがなへ、ひらがなはそのままにしたいのですが…
&jcode'sjis2euc(*ss);
&jcode'tr(*ss, "\xa5\xa1-\xa5\xf3", "\xa4\xa1-\xa4\xf3");
&jcode'euc2sjis(*ss);
0205nobodyさん
02/06/08 22:37ID:???第2土曜7時、みたいな感じで・・・
0208nobodyさん
02/06/09 00:27ID:???悶えてるんですか?
ハァハァ・・・・
0210nobodyさん
02/06/09 00:57ID:???サンプルなどを見て研究していたのですが、仕組みがよくわかりません。
ファイルを指定する→送信ボタンを押す→指定したフォルダにファイルが保存される
という一番シンプルなソースコードを、どなたか示していただけませんでしょうか。
0211nobodyさん
02/06/09 01:11ID:???ttp://tohoho.wakusei.ne.jp/lng/199808/98080055.htm
これが参考になるかな?
0212Darkness Tester
02/06/09 10:17ID:???DL・解凍したのはいいのですが、どうすればいいのでしょうか?
0213nobodyさん
02/06/09 10:43ID:???"3 + 5 は?"などと返し、
続いて"8"を入力すると"正解"と返すa.exeがあるとします。
このa.exeをPerlスクリプトから
実行するにはどのようにするのでしょうか?
0215nobodyさん
02/06/09 11:28ID:???配布元サイトで聞く。
大体は配布場所に書いてあるだろう。
少なくともこのスレで聞くのは間違い。
0216nobodyさん
02/06/09 21:05ID:TDG2uPpc板違い。初心者板池
0217nobodyさん
02/06/10 17:07ID:???1.ロック処理
カウントファイルを参照できない場合ロックしたまま解除しない。
2."$count_file"を、うまく参照しない。
例)$count_file = "./count.dat"; OK
$count_file = "dat/count.dat"; NG
###################################################
sub count {
#-日時
&form_decord;
#-ホスト
&get_HostAgent;
#-バックアップ用のファイルを開く
open(IN,"$count_file") || &error("カウントファイルエラー");
$ac_data = <IN>;
close(IN);
($ac_count,$ac_ip,$ac_today,$ac_yes,$ac_day) = split(/\t/, $ac_data);
#今日/昨日のアクセス数の設定
if ($mday ne $ac_day) {
$ac_yes = $ac_today;
$ac_today = 0;
}
#-ロック開始
&lock1;
0218nobodyさん
02/06/10 17:08ID:???#-2重カウント許可
if ($bak_ip){
$ac_count = $ac_count + 1;
$ac_today = $ac_today + 1;
}
#-不許可(IPアドレスで判断)
elsif ($ac_ip ne $Addr) {
$ac_count = $ac_count + 1;
$ac_today = $ac_today + 1;
}
#-ファイルに書き込む
open(IN,">$count_file") || &error("カウントファイルに書き込むことができません。");
print IN "$ac_count\t$Addr\t$ac_today\t$ac_yes\t$mday";
close(IN);
#-ロック解除
&lock2;
}
どこがおかしいでしょうか??
0219nobodyさん
02/06/10 17:42ID:???ロックに問題があるのに、その部分のサブルーチンは出さないわけ?
0220nobodyさん
02/06/10 18:02ID:???【リテラル】で指定しよう
$count_file = './count.dat'; OK
$count_file = 'dat/count.dat'; OK
0221nobodyさん
02/06/10 18:39ID:???>#-日時
>&form_decord;
カウンタにデコードはいりませんよね・・?(しかもdecodeのつづりがまちがってる)
おそらくBBSかどっかからのコピペでしょうか。
自作の前にまずはKENTさんのソースをよく読みましょう(Perl神ですので)
http://www.kent-web.com/count/index.html
0222nobodyさん
02/06/10 18:45ID:???$count_file = './count.dat';
これが原因でした。参照できない場合でもerror後ロック解除できました。
アリガトウございます
0224pear ◆FRUIT8pk
02/06/10 22:05ID:???壊れることってどれくらいあるんですか?
0225nobodyさん
02/06/10 22:30ID:???運次第。
あと、人気次第。
要するに「同時アクセスが発生するか否か」の問題だから、運が悪ければ
たった二人の来客でもファイルが壊れるし、運がよければ数兆のアクセスが
あっても壊れない。
しかし、アクセスが多ければ確率的にその事故は起こりやすくなる。
ついでに言うと、コーディングの話じゃないからスレ違い。
0226151
02/06/11 03:57ID:zdO5gL3p>>155さんや>>158さんが新しい問題をくださいまして、またどうしても分からな
くなったので質問です。
今回は『return』についてです。
$year = "2000";
$month = "2";
@MONTHS = qw/0 31 28 31 30 31 30 31 31 30 31 30 31/;
$MONTHS[$month] = &feb($year, $month);
print "$MONTHS[$month]\n";
sub feb {
my ($year, $month) = @_;
if ($month == "2" and &rule($year, $month)) { return 29; }
else { $MONTHS[$month]; }
}
sub rule {
my $year = shift;
return (($year%4) == "0" || ($year%100) != "0" and ($year%400) == "0");
}
サブルーチンからのreturn返り値はどこに戻るのでしょうか。
とりあえず出力するために$MONTHS[$month]に代入することにしましたが、もっ
とシンプルな方法はあるんですか?つまり3行目に示したように代入する先を
$MONTHS[$month]と指定しなくてもよい$_のような特殊変数があるとか…。
また、>>155さんは以下のようにreturnを三つも使っておられますが、この文だ
と結局閏年であってもそうではなくても返り値は0、すなわちこの処理の場合は
常に『偽』が返ると思うのですが、間違ってますか?
sub leap_year {
my( $year, $month ) = @_;
if( $month == 2 && $year % 4 == 0 ) {
if( $year % 100 == 0 ) { return $year % 400 == 0;}
return 1;
}
return 0;
}
0227nobodyさん
02/06/11 05:28ID:???> 常に『偽』が返ると思うのですが、間違ってますか?
return $year % 400 == 0; は、まぁ置いといても、
return 1; を無視するのはなぜ?
0228nobodyさん
02/06/11 05:48ID:???0229nobodyさん
02/06/11 06:10ID:???>return返り値はどこに
&feb($year, $month); と &rule($year, $month)のトコ
>シンプルな方法
print feb($year, $month);
>returnを三つも
returnで返した時点でサブルーチンはオシマイ
0230pear ◆FRUIT8pk
02/06/11 07:13ID:???丁寧にどうもありがとうございます。。
スレ違い。。確かにそうですね、今後気をつけます。。
0231nobodyさん
02/06/11 09:29ID:???間違ってます。
前に書かれたけど、月の値は意味がないからそれさえ省けば
ちゃんと閏年を返すよ。
## まず月を抜かして・・・
sub leap_year
{
if( $year % 4 == 0 ) {
if( $year % 100 == 0 ) {
return $year % 400 == 0;
}
return 1;
}
return 0;
}
foreach my $year ( qw/ 1900 1940 1980 1995 2000 2002 2004 / ) {
print "$year = ";
print leap_year($year) ? "leap year\n" : "NOT leap year\n";
}
0233nobodyさん
02/06/12 07:36ID:???0236
02/06/12 11:39ID:R7g7sR2Xアップロードさせたいのですが、
6KBぐらいの小さいファイルだとアップ
できるのですがそれ以上大きいのだと
アップロードできず、IEだと「ファイルが
見つかりません」のエラーになります。
# ちなみにSSLでなくても120KBまでしか
# だめなようです。
同じような問題にあたった方いらっしゃいますか?
0237nobodyさん
02/06/12 16:38ID:NJerhR65月の最後の日が簡単に分かる関数がありますでしょうか?
ありましたら教えて頂きないでしょうか?
また、ない場合は、一番サーバーに負荷を掛けずに(軽い)同じ動作を
させるにはどうすればよいか教えて頂けないでしょうか?
自分なりにも考えてみました。
for ( $i = $mday ; ; $i++ ) {
( $k_sec , $k_min , $k_hour , $k_mday , $k_mon , $k_year , $k_day ) = localtime( time + $i * 24 * 3600 );
if ( $k_mon != $mon ){
last;
}
}
0238237
02/06/12 16:40ID:NJerhR65うるう年は、考えることとします。
そうでなければ、31日の月と30日の月、28日の月と3つに分けてしまえば
簡単にできてしまいます。
よろしくお願いします。
0239nobodyさん
02/06/12 16:41ID:???まず、うるう年をどうするか。
はっきり言って、配列にでも月ごとの日数を入れるのが一番軽い。
@monthday = (0,31,28,31,30,31,30,31,31,30,31,30,31);
これにうるう年の処理を加えるだけ。
わざわざスクリプトに計算させる必要性はあるのか?
宿題とか?
0240nobodyさん
02/06/12 16:42ID:???じゃあ、うるう年をどう考えるのか。
今年の2月の日数で求めるのか。
去年の2月の日数を求めるのか。
指定した年の2月の日数を見るのか。
0241237
02/06/12 16:43ID:NJerhR65どうもです。
その月の最後の日(日数)を知ることができる関数が知りたかったです。
それがあれば、一番簡単ですから・・・。
でも、ないようですので、 >>239の方法が一番よいようですね。
0242237
02/06/12 16:45ID:NJerhR65「今」の月の日数を知りたいです。
あと、用途は、プログラムを組んでいて、月の最後の日の23時〜24時だけは
違う画面を表示させるというものです。
0243nobodyさん
02/06/12 16:49ID:???$day = $monthday[$mon];
if($mon == 2 && $year % 4 == 0 && ($year % 100 != 0 || $year % 400 == 0)){
$day = 29;
}
print qq($year $mon/$day<br>\n);
関数はないからこれが一番簡単かな?
しかし、>242のいうのならもっと簡単。
( $k_sec , $k_min , $k_hour , $k_mday , $k_mon , $k_year , $k_day ) = localtime(time);
@localtime = localtime(time+3600);
if($localtime[4] != $k_mon){
print qq(違う画面);
}
月の最後の1時間を判定するだけなら、これで十分じゃない?
0244237
02/06/12 17:09ID:NJerhR65どうもありがとうございました。
0245
02/06/13 00:15ID:N23nK9SFところが、デフォルトの登録ユーザーファイルが、usr.datという名前になっていて、そのファイルを決め打ちでアクセスすると、登録している人のemailアドレスが見れてしまうのです。
外部から見れないようにしたいのですが、そのCGIの説明書では、パーミッションは666にしろ、と書いてあります。
660ではだめなのでしょうか。
それか、ファイル名をaoeriuyba8.datとか、暗号のような名前にすればいいかもしれませんが、探検君とかで見つかりそうな気がします。
0246nobodyさん
02/06/13 00:25ID:???拡張子を.cgiにしとけ。
0247nobodyさん
02/06/13 00:29ID:???とりあえず設置鯖の仕様(.htaccess可?)を確認しろや
続きは適切なスレでやれ
0248151
02/06/13 04:13ID:???ヒントを下さった>>227
『exit』と同じようなものと教えてくれた>>229
例を示してくださった>>231
returnの機能のついでに、評価式の作りかた、それによる分岐のさせかたまで勉
強できました。
後は閏年の数字の関係です…。
400が絡むということは必ず100で割り切れるということだから…
うーん。
この辺は自分で解決します。
ありがとうございました。
0249nobodyさん
02/06/13 10:39ID:???一時ファイル(./tmp/*.tmp)を全削除するのに、
opendir(DIR, "./tmp/");
while ($filename = readdir(DIR)) {
if ($filename =~ /\.tmp$/) {
unlink("./tmp/$filename");
}
}
としてみたが、同じ事を Taintモード下で実現する方法ってありますか?
0250nobodyさん
02/06/13 10:58ID:???いいんじゃないの?
if( $filename =~ /^([^.]+\.tmp)$/ ) {
unlink( "./tmp/$1" );
}
0252nobodyさん
02/06/13 23:27ID:gf2d6vJqと
$s =~ tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;
って、どういうことをしているんですか?
教えてください。
0253 ◆hRKFl5jU
02/06/13 23:32ID:gf2d6vJq0254レス
02/06/14 00:21ID:nWmgmUzWよく分からないのでここでも質問させてください。
掲示板のレス機能のアルゴリズムについて考えていました。
レスをスレに追加して、そのスレをトップに持っていく処理です。
最適な方法やスマートな方法がありましたら教えてください。
・以下、現在考えているアルゴリズムです。
#ターゲット親記事番号
$targetnum = 1;
#テスト用書き込みレス記事 [記事通し番号,レス件数]
$value = "9,0\n";
my @lines = <DATA>;
#レスを書き込み後スレッドをトップに持っていく
$linecnt = 0;
foreach(@lines)
{
($num,$resnum) = split( /\,/, $_ );
if ( $targetnum == $num ){
@sure = splice( @lines, $cnt+1, $resnum ); $resnum++;
unshift( @sure, "$num,$resnum\n" ); push( @sure, $value );
unshift( @newlog, @sure );
$linecnt = $linecnt+@sure;
}else{
push(@newlog,$_); $linecnt++;
}
}
print @newlog;
__DATA__
3,2
6,0
8,0
1,2
4,0
7,0
2,1
5,0
0255レス
02/06/14 00:22ID:nWmgmUzW0256nobodyさん
02/06/14 06:21ID:???すべてのレスを1次元配列@linesに入れてガリガリ処理すると
面倒だし、スクリプトも読みにくいと思う。
レスの配列=スレッド、スレッドの配列=掲示板全体
というデータ構造に直すといいんじゃないか。ちょっと書いてみた。
use strict;
my $targetnum = 1;
my $value = "9,0\n";
# ログを読む
my @threadarray;
my %index_of;
while (my $line = <DATA>) {
my ($num, $resnum) = split(/,/, $line);
$index_of{$num} = scalar(@threadarray);
my $thread = [$line];
push(@$thread, scalar(<DATA>)) while (--$resnum >= 0);
push(@threadarray, $thread);
}
#目的のスレッドを切り出し、レスを追加し、配列の先頭に移動
my $thread = splice(@threadarray, $index_of{$targetnum}, 1);
push(@$thread, $value);
my $resnum = (split(/,/, $thread->[0]))[1] + 1;
$thread->[0] = "$targetnum,$resnum\n";
unshift(@threadarray, $thread);
# 出力
foreach my $thread (@threadarray) {
print "-----\n";
foreach my $res (@$thread) {
print $res;
}
}
0257254
02/06/14 07:35ID:nWmgmUzWさっそくありがとうございます。
ソースまで示してくれて感謝。
早速、トレースして理解してみます。
ところで、ログを変更してもいいとしてもこの方法がいいと思いますか?
掲示板には全然手をつけていないので、今ならログ変更はいくらでもOKです。
0258nobodyさん
02/06/14 08:44ID:???そのログ形式(>>255)だと、「レスのない親記事」と「レス」は
どっちも$resnumが0になるような気がするが
どうやって区別すんの?
0259レス
02/06/14 09:31ID:AMkrWmqxおっ指摘してくれてありがとう。
確かに、区別できないですね。
じゃあ resnamは、親記事自体の番号も含めてってことでおねがいします。
0260nobodyさん
02/06/15 00:42ID:???とりあえずその方法で突き進んで、問題あったら変更すればいいんでないの。
そのためにはログフォーマットに依存するコードは極力書かないようにしる。
行をsplitする生のコードをそこら中にちりばめたりすると、後で泣くこと必至。
0261nobodyさん
02/06/15 01:14ID:4GLBjH4Ittp://www.big.or.jp/~talk/t-club/soft/mini_r6/index.cgi
をTripodに設置したいんですが、Tripodのcgi規定に
「なお、画像は、セキュリティー上の理由から、cgi-bin以下におくと表示されませんので、
必ずTripod内のcgi-bin以外におくようにしてください。」
とあって、画像保存用ディレクトリimg-boxをcgiと同じ場所に置くことができません。
↓参考のページ
ttp://www.ba.wakwak.com/~chikura/050mypaso14gazoukeijiban.html
も見たんですがうまくいきません。
どうか解決法を教えてください。
0262nobodyさん
02/06/15 01:28ID:???設置場所のディレクトリ構造は?
0263261
02/06/15 01:39ID:4GLBjH4Ittp://www.ba.wakwak.com/~chikura/050mypaso14gazoukeijiban.html
を参考にして、
(url)http://cgi.tripod.co.jp/ユーザー名/cgi-bin/imgboard.cgi
cgi-binフォルダの中は
imgboard.cgi,file.dat,fileback.dat,icon.dat,jcode_sj.pl,imgsize.pl,index.html
の7つのファイルが入ってて、
cgi-binフォルダと同階層にpublic_htmlフォルダを置いて、
その中に画像保存用ディレクトリimg-boxを置いてます。
0264nobodyさん
02/06/15 01:52ID:???なるほど、、、。
まず、cgi-bin 以下には CGI および データファイルを置くようにしてみてください。
それ以外は、public_html にすべていれるという形態になるのが普通です。
0265261
02/06/15 01:58ID:4GLBjH4Icgi-binフォルダの中にはimgboard.cgi,file.dat,fileback.dat,icon.dat、
public_htmlフォルダの中にはjcode_sj.pl,imgsize.pl,index.htmlおよび画像保存用ディレクトリimg-boxフォルダを
置くというかたちになるんですか?
0266264
02/06/15 02:02ID:???ディレクトリインデックスの隠し用だったようなので すべて cgi-bin
の中で問題ないようです。
0267261
02/06/15 02:11ID:4GLBjH4I>>264
「なお、画像は、セキュリティー上の理由から、cgi-bin以下におくと表示されませんので、
必ずTripod内のcgi-bin以外におくようにしてください。」
ということで、画像保存用ディレクトリimg-boxをcgiと同じ場所に置かず、
投稿画像の格納ディレクトリ($img_dir = './img-box'; # デフォルト位置)を変更しなきゃならないようなんで、
($img_dir = '/public_html/img-box'; # デフォルト位置)に変更したんですがうまくいきません。
cgiは機能してるんですが、画像がアップロードできません。
img-boxフォルダの中をのぞいても何も入ってませんでした。
0268264
02/06/15 02:20ID:???6300 ステップもあったのでゲンナリしました。
まず、画像の表示は単純に imgタグに直接画像パスを書く方法を採っている
ので HTML と CGI の置き場所が別になっているタイプのサーバではこのまま
では動きません。
0269261
02/06/15 02:25ID:4GLBjH4ITripodはcgiを使う場合のURLが
http://cgi.tripod.co.jp/ユーザー名/cgi-bin/imgboard.cgi
普通のhtmlは
http://members.tripod.co.jp/ユーザー名/
だからHTMLとCGIの置き場所が別になっている訳ですね。
別のサーバー探すしかないか…。
0270264
02/06/15 02:26ID:???$img_dir = '/ユーザ名/public_html/img-box';
0271261
02/06/15 02:43ID:4GLBjH4Iだめでした(爆)。サーバー側の問題?
配布されたcgiに「場所の指定方法は通常は相対パスで指定して下さい」とあったので、
ユーザー名は必要ないのかな?
0272261
02/06/15 02:45ID:4GLBjH4I絶対パスで正解でした。スマソ。
<以下配布されたcgiより>
あなたのプロバイダが、cgiとデータファイルを同じ場所に置くことが出来ない
特殊なプロバイダ(hi-ho等)で、cgiと同じディレクトリやcgi直下に保存
用ディレクトリを作れない場合、絶対パスによる指定が必要となる場合があります。
この場合、5行ほど前にある$img_dirを絶対パス*指定に書換えて下さい。
0273nobodyさん
02/06/15 02:48ID:mydlqxE+それともディレクトリにアップロードするだけでいいの?
0274264
02/06/15 02:55ID:???おそらく imgタグで .. がNGになる可能性あり。
$img_dir = '../public_html/img-box';
または
ソース内で img-box の存在チェックをしているのでWWWサーバのマウントポイント
からの相対パスを使えないのでダメもとでサーバのディレクトリ構造を推測して以下
のように書けばOKかも。
$img_dir = '/home/ユーザ名/public_html/img-box';
0275264
02/06/15 03:02ID:???モジュールって使ったことないけど以下を書いてもダメ?
BEGIN{ unshift(@INC, '.'); };
0276261
02/06/15 03:07ID:4GLBjH4Iダメでした…。
HTMLとCGIの置き場所が同じサーバー探します。
夜遅くまでご親切に、こんな初心者にお付き合いいただきありがとうございました。
すごく勉強になりました。
0277nobodyさん
02/06/15 03:34ID:???*.pmだけで完結してるモジュールは、275の方法でいけるんすけどね。
GD.pmの場合はバイナリコードを作らなきゃあかんかったり、
サーバにないかもしれないライブラリ(libjpeg.soとかlibpng.soとか)を
いろいろ必要とするから、モジュールだけアップロードしても99%駄目。
0278レス
02/06/15 07:31ID:/CDsyhKPうんありがとう。
そうですね、splitを多発すると変更がめんどくさいので出来るだけ少なく作ります。
ログの変更を簡単に出来るように考えてつくろう。
また、質問することがあるかもしれません、その時はよろしくおねがいします。
0279nobodyさん
02/06/16 08:10ID:z5KHLw2yにちゃんねるみたいに「Shift_jis使ってちょ」ってやりたいんです
で、何も考えずにjcode.plのgetcodeを使ったら、
「(´・ω・`)ショボーン」をeucと認識してしまいました・・・(´・ω・`)ショボーン
半角カナが混じってても、きちんとShift_jisと認識してやるにはどうすればいいでしょうか?
Shift_jisかどうかが分かればいいです。
EUCで書かれた「汐涙維」をShift_jisと誤認識してもいいです。
# '汐涙維'(EUC) eq 'ショボーン'(SJIS)
よろしくおながいします
0280nobodyさん
02/06/16 08:59ID:???おれはjcode.plのgetcode関数をちょっと書き換えて
Shift_JISの文字数カウントに半角カナも含めてるよ。
$sjis += length($1) while /(($re_sjis_c)+)/go; #オリジナルのjcode.pl
↓
$sjis += length($1) while /(($re_sjis_c|$re_sjis_kana)+)/go; #修正版
EUC-JPをはねずに通す確率がめたくそ増えるけど気にしない。
あえてShift_JISを使う代償だと思ってあきらめてる。
0281nobodyさん
02/06/16 10:16ID:z5KHLw2yなるほど、これはいいですね。
助かりました。
どうもアリガトウ
0282nobodyさん
02/06/16 22:36ID:Us0jeEkdprint "Content-type:text/html\n\n";
$xx = "abc";
$yy = "def";
if ( あ eq あ ) {
print $xx
} else {
print &yy
}
このようにしても$xxは表示されないのですが、
あ と あ を比べる方法ってありますか?
0284nobodyさん
02/06/16 22:43ID:Us0jeEkd0285nobodyさん
02/06/16 22:51ID:???#!/usr/local/bin/perl
print "Content-type:text/html\n\n";
$xx = "abc";
$yy = "def";
if ( 'あ' eq 'あ' ) {
print $xx;
} else {
print $yy;
}
abc って出ましたが。
0286nobodyさん
02/06/16 23:01ID:Us0jeEkdあぁ〜文字列はシングルクォーテーションで囲ったらイイんですね??
ありがとうございます!
でも あ を a に変えると囲まなくてもいけるみたいですがなぜでしょう??
aも文字列のはず、、、、
0287nobodyさん
02/06/16 23:31ID:z5KHLw2y''か""で囲まないと文字列じゃないぞ・・・
0288nobodyさん
02/06/17 00:35ID:9jM4ZJCTこの
NO_MORE_RESULTS
って、どうしてクォーテーションがいらないのでしょう?
0289nobodyさん
02/06/17 01:01ID:rACyARGq開けない
0290hoge
02/06/17 04:03ID:aKd0pgn8print MOE, "\n";
0291nobodyさん
02/06/17 05:46ID:???ぐーぐるさんに聞いて見れば?キーワードはbarewordとperl。
ていうかおれもPerlのbarewordの扱いについてはよくわからn。
0292nobodyさん
02/06/17 08:51ID:???$foo = bar;
$baz = bar::bax;
print $foo, $bar;
だが"sub bar;"やsubsなどで前方宣言されているとこれらはサブルーチンと見なされる。
use strict 'subs'を使うとこのような裸のワードに対して致命的エラーを発生させられるよ。
0293nobodyさん
02/06/17 09:06ID:???use strict;
my %hash = ( foo => 'bar', baz => 'gad' );
print $hash{ foo }, "\n";
$hash{ baz } = 'boo';
ハッシュキーは基本的に[a-z0-9_]を使ってる限りクオートする
必要はない。また => を使うと、左側のbarewordは自動的に
文字列に変換される。
0294nobodyさん
02/06/17 10:21ID:???(ただし>>293はPerl6でもオーケーっぽい)
ラリーヲールの黙示録2を見よ。
http://dev.perl.org/perl6/apocalypse/2#bareword%20policy
#どこかに黙示録の和訳ってねーですか?あったら教えてください。おながいします。
0295nobodyさん
02/06/17 13:21ID:???0296nobodyさん
02/06/17 21:33ID:8ZfnaOKhWindows上では使えないのでしょうか?
↓
open(FILE, "+>$file");
環境はWin2000+Apache1.3.24です。
0297nobodyさん
02/06/17 21:38ID:???なにが上手くいかないの?
同じ環境できちんと動くけど。
まさか保存されてるファイルが読み出せないとかじゃないよね?
だって最初に初期化してから書き読みモードで開いているんだから。
読み書きモードじゃなくて。
開けないって言ってるから、openが失敗してるんだよね?
ファイルの作成もできないんだよね?
そうだよね?
0299296
02/06/17 21:49ID:8ZfnaOKhA
A 予想ではAが縦にならぶはずだと思うんですけど・・
A
open(IN, "+>$file");
@data = <IN>;
$data = "A\n";
unshift(@data, "$data");
print IN @data;
close(IN);
0300a
02/06/17 22:28ID:???初心者なので何をしてよいのかまったくわかりません。
教えてください。お願いします
0301nobodyさん
02/06/17 22:37ID:???0302nobodyさん
02/06/17 22:46ID:???書き読みモードと読み書きモードの違いってわかる?
書き読みモードの手順
空ファイル作成>ファイル読み書き
読み書きモードの手順
ファイル読み書き
それと、ファイルポインタの変更しないと色々問題出るぞ。
わからないなら無理に読み書きモードは使わない方がいいかも。
0303296
02/06/17 23:12ID:???>書き読みモードと読み書きモードの違いってわかる?
ありがとうございます。分かってなかったですね。。
それでいろいろやってみて
open(IN, "+<$file");
@data = <IN>;
$data = "A\n";
unshift(@data, "$data");
seek(IN, 0, 0);
print IN @data;
close(IN);
これで動くようになりました。「+<」←これ手持ちの本に載ってなかった・・(´Д`;)
0304nobodyさん
02/06/17 23:41ID:/p2D1YQW全ての環境変数を表示した際、他人に見られるとマズイ情報ってありますか?
0305お頼み申す
02/06/18 02:03ID:giO2VPVu普段は掲示板のタイトルが見られる。
でも書き込み(新規スレ立て、レス共に)はログイン/認証しないと
できないというような物はありますか?
探し続けて見あたらず無理なのかなと諦め気味。
いかがでしょうか?
0306nobodyさん
02/06/18 02:23ID:zmbvlCMyというか100%すれ違いです。
0307nobodyさん
02/06/18 03:40ID:7mI4OrKxi-mode版(http://red.tomato.nu/desperado/software/)に、
i-PADv2(http://www.kent-web.com/bbs/ipad/ipad2.cgi)みたいに
返信がいくつ返ってきてるかわかる表示を加えたいんですが・・・
0311nobodyさん
02/06/18 10:45ID:???0312nobodyさん
02/06/18 13:03ID:???Jcode.pmってActiveperlにはインストールできないんでしょうか?
0314nobodyさん
02/06/18 16:38ID:OAKwZ56o#!/usr/bin/perl -w のオプションは機能しませんよね?(実際機能してないようなので。)
0315314
02/06/18 16:44ID:???0316nobodyさん
02/06/18 18:21ID:???use strict;
my ($a, $b);
local $c;
$a = 2;
$b = 3;
$c = $a + $b;
print "Content-type: text/html; charset=EUC-JP\n\n";
print $c;
こうすると
Global symbol "$c" requires explicit package name at (eval 1) line 6.
Global symbol "$c" requires explicit package name at (eval 1) line 10.
Global symbol "$c" requires explicit package name at (eval 1) line 13.
こういうエラーが出るのですが、すべてレキシカル変数にすると動きます。
なぜローカル変数だとuse strictでエラーが出るのでしょうか?
実際のスクリプトは複雑でどうしても$cをローカル変数で使いたいのです。
どうすればグローバル変数を使わずに正常に動かすことができるでしょうか?
0317nobodyさん
02/06/18 21:52ID:???なぜエラーになるかは、perldoc strict を読むべし。
「variable suicide問題を避けるため」らしい。よくわからんけど。
どうしてもlocal変数を使わなくてはいけない場合は、
use vars ('$c', '@array', '%hash'); # perl5.0
または
our ($c, @array, %hash); # perl5.6
みたいに、最初に変数名を宣言(というかシンボルテーブルに登録)しておく。
以上、経験則のみで答えますた。詳しくは識者の登場を待て。
0318nobodyさん
02/06/18 22:39ID:???ありがとうございます。
>use vars ('$c', '@array', '%hash'); # perl5.0
>または
>our ($c, @array, %hash); # perl5.6
これでいけました。恥ずかしながら今まで知らなかったので(汗)、これを機に勉強してみます。
0319nobodyさん
02/06/19 01:44ID:nhdfxt0tmake testをすると、『Test/More.pmが見つかりません』というようなことを言
われます。More.pmは何かのファイルに同梱されてるのでしょうか?
一応以下のURLを探してみたのですが、見つかりません…。
http://www.cpan.org/modules/by-module/
どなたかMore.pmがある場所を教えて下さい。
0320nobodyさん
02/06/19 02:03ID:???0321nobodyさん
02/06/19 02:32ID:???解決しました。
Test-Moreはもう古く、入れるならTest-Simpleでやってくれと
言われて、Test-Simple-0.44.tar.gzを入れました。
うまくいきました。
ありがとうございました。
0322nobodyさん
02/06/19 19:05ID:oqQh34R0画像を表示させたいのですが上手くいきません
print "Content-type: image/gif\n\n";
open(IMG,"test.gif");
binmode(IMG);
binmode(STDOUT);
print <IMG>;
close(IMG);
KENTカウンタからそれらしい部分を
抜き出してみましたが動きません
画像はとほほカウンタのを使ってテストしてるので
変なヘッダーが入ってるということはないと思います。
http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.htmlの
600も試してみましたが動きません…。
誰か助けてください…。(;´д`)
#画像表示すらできない自分が情けない(´Д⊂
0323s
02/06/19 19:28ID:???みたところおかしな部分はないようです。他の部分ってことない?
0324nobodyさん
02/06/19 19:29ID:???> print <IMG>
↑この部分を↓こう変えてみそ
while ( $cb = read( IMG, $data, 2048 ) ) {
print $data;
}
0325LWPを使ってみたいのですが
02/06/19 21:29ID:FGMnMj5WLWPをダウンロードしてきたけど、なんかひとつのpmファイルになってないようで
そのまま使えそうにありません。
使用してるのはwakwakのCGIなので使用条件が載っているページを見てみたのですが
perl5.6で標準ライブラリ?は利用できるようです。
で、標準ライブラリにあるか
試しにuse LWP::Simple;でCGIを動かしてみたのですが、内部エラーになりました。
LWPは、この環境では使うことはできないのでしょうか?
・インストールする方法(できないと思うが)
・インストールせずにデレクトリに配置して動かす方法
・他のCGI可無料HPですでにLWPがインストールされてるのでそこを使うといい
等々、なにか良い方法はないのでしょうか?
使うのは多分LWP::SimpleでHTMLドキュメントを引っ張ってくるだけです。
0326322
02/06/19 21:51ID:???ありがとうございます。
原因はわかりませんが、両方の方法を試してみて
ダメだったので元に戻したら表示されました (´∀`;)意味わかんねス
0327nobodyさん
02/06/19 22:33ID:???LWPはperlコードだけで構成されてるから、自分で入れることも可能だと思う。
ただしLWPが入ってないサーバつーのは、そもそもソケットの使用を禁止してる場合も多い。
そんときはLWPを入れても無意味。
0328LWPを使ってみたいのですが
02/06/20 00:34ID:XCYMLnG6use Socket; 自体は動作しますが、Socketで通信を許しているのは localhostへのsmtp/tcpのみとなります。
だそうです。
これって望み薄ですか?
ちなみにやり方間違ってるっていうチョンボはしてませんよね?(僕)
ただuse LWP::Simple;としているだけなのですが・・・
0329LWPを使ってみたいのですが
02/06/20 01:43ID:+cy8aoAH自作CGIのでバック設定というのができるみたいで
それを使ってやってみました。
最初は、HTTP/Statusのパスがうまく行っていなかったようなので
@INC追加したら、そこはクリアできました。
ただ
unless(defined($content = get $url)){
のところで
Can't call method "get" on an undefined value
が出てしまいました。これは無理と言うことでしょうか?
0330nobodyさん
02/06/20 07:49ID:???>Socketで通信を許しているのは localhostへのsmtp/tcp
駄目ジャン。
smtp/tcpってメール送信用のポートだし。localhostのみだし。
0331LWPを使ってみたいのですが
02/06/20 15:27ID:zhAJDQeRどっか、CGI可無料HPでできそうなところないですかね。
0332nobodyさん
02/06/20 19:54ID:???0333nobodyさん
02/06/21 03:04ID:???0334nobodyさん
02/06/21 03:40ID:ovOj5UMI0335nobodyさん
02/06/21 06:01ID:???できないYO!!
0336nobodyさん
02/06/21 06:03ID:???0339nobodyさん
02/06/21 11:37ID:Qqq2SOCGArray→アレイ とか
$→スカラー とかいうふうに。
require ってどう発音していいかわからないんですよ(汗)。
0340nobodyさん
02/06/21 11:41ID:???0341nobodyさん
02/06/21 12:10ID:???0342nobodyさん
02/06/21 12:19ID:???発音記号の読み方を勉強しましょう。
0343nobodyさん
02/06/21 13:39ID:???普通、発音記号の読み方って授業でやるもんですか?
うちんとこやらなかったんですよ。
商業科だったんで。
parentsとかも、その<p>で始まるやつ!親っていう意味だ! と、いう覚え方してるもんなあ……簡単なのは読めるんですが。
0344nobodyさん
02/06/21 13:43ID:???chdirとか。
Change Directoryの略でええんかい? とか。
まあ、いろいろと疑問があったんで、そういうの解説してるようなサイトとかないかなーって前から思ってたんですよ。
0345nobodyさん
02/06/21 13:48ID:???商業化の中学校なんてあるのか。
>344
その単語で検索をかけるとかしてみた?
ttp://www.google.com/search?as_q=chdir+change+directory&num=100&hl=ja&ie=UTF-8&oe=UTF8&btnG=Google+%E6%A4%9C%E7%B4%A2&as_epq=&as_oq=&as_eq=&lr=lang_ja&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=
1520件もひっかかるんだけど。
0346nobodyさん
02/06/21 13:50ID:???小学校からやり直してきまつ。
0349nobodyさん
02/06/21 16:45ID:???発音記号は英和辞典に載ってる。
読め。
>348
一番上にひっかかるサイトにかなり載ってる。
読め。
じゃなければ検索用語に他のコマンドも入れてみろ。
頭使え。
0350nobodyさん
02/06/21 17:26ID:???脳内では「しーえっちでぃあ」って言ってる・・・(w
0351nobodyさん
02/06/21 20:55ID:???口に出すときは"チェンジディレクトリ"だけど。
0352nobodyさん
02/06/21 20:59ID:YFodOum0英語圏ではちだーですね
0353nobodyさん
02/06/21 21:20ID:???0354nobodyさん
02/06/21 21:52ID:???Makefile.plっていうのは自分で書かなきゃきけないんですか?
自動で生成するツールはないでしょうか?
0357nobodyさん
02/06/22 00:31ID:???挿れようとしたらインストールが完走しない…鬱
俺はできたぜ
0361nobodyさん
02/06/22 01:15ID:???0362nobodyさん
02/06/22 01:58ID:???激しく感謝!!
よく見たらHDD残量が150MBしかなかったので、足りない悪寒でした。
(−_−)ウツダシノウ
嗚呼、10MBもあるドキュメン入れたくねぇ…
0363nobodyさん
02/06/22 09:50ID:???ActivePerlって下の環境残したまま上書きインストール出来るっけ?
最新版にしたくてもそれがほそろしくて試せない…
0364nobodyさん
02/06/22 10:40ID:KPuvG/sZuse LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
my $ua = new LWP::UserAgent;
my $request = new HTTP::Request('GET', $ARGV[0]);
my $response = $ua->request($request);
if ($response->is_success) {
print $response->content;
} else {
print $response->error_as_HTML;
}
で、
hcat.pl http://www.hyuki.com/dp/dp.jpg > dp.jpg
とすして、dp.jpgを見ると、ちゃんとした画像になりません。
どうしてでしょうか。教えてください。
環境は、ActivePerl v5.6.1 built for MSWin32-x86-multi-thread、
windows2000 professional です。
0365xx
02/06/22 10:49ID:???開けないけど容量はあるってことだろうから、ファイルハンドルを binmode
すれば?
できるけどオススメしない。
0368べっくあむ
02/06/22 12:16ID:9y/Dp6Qo書籍やインターネットでやり方を調べていく中で、次のような
注意事項が記載しているものを見つけました。
1:$dbh = DBI->connect(****);
2:$sth = $dbh->prepare(*****);
3:$sth->execute();
4:$sth->finish();
5:$sth = $dbh->prepare(*****);
6:$sth->execute();
7:$sth->finish();
8:$dbh->disconnect();
の様に一回のDBコネクション中で2回のコマンド発行を
するときは、一回目(上記2〜4)と二回目(上記5〜7)で
ハンドル変数名を変えなければならない(例えば5〜7は
$sthではなく、$sth2にする)というものです。
自分の環境下の簡単なプログラム中では問題なく
動いているのですが、本当に注意すべき内容なのでしょうか?
0369nobodyさん
02/06/22 14:04ID:fNvTUaUi..⌒ヽ ' ⌒ヽ /.|:::::::::::|
乂乂|| |乂乂|| | |:::::::::::|
乂乂|| |乂乂|| | |:::::::::::|
乂乂|| |乂乂|| ___|_|:::::::::::|____
乂乂|| |乂乂|| /|::::::::::::::::::::::::::::::::::::::::::::::::::::::::|
 ̄ ̄  ̄ ̄ i |::::::::::::::::::::::::::::::::::::::::::::::::::::::::|
_____ .|/ ̄ ̄ ̄../|:::::::::::| ̄ ̄ ̄/
||L L | L L ||  ̄ ̄ ̄ ̄| |:::::::::::| ̄ ̄ ̄
||L L | L L || | |:::::::::::|
||L L | L L ||_________ .| |:::::::::::|
===========l| L L l================= i |:::::::::::|
二二二二二二ヽ iヽ二二二二二二二二i |:::::::::::|
:::::::::::::::::::::::::::::::::::i ヽ| _____.i |:::::::::::|
 ̄ ̄ ̄ ̄ ̄ ̄ ̄\ ((( )))_______| |:::::::::::|
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|......( ´Д`)._____| |:::::::::::|__
::::::::::::::::::::::::::::::::::::::::: | / (S)::::::i\ ....| |:::::::::::| \
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| .\ ....\|:::::::::::| \
____/|____ .| .\  ̄ ̄
/
| Perlスクリプトから、2ちゃんに書き込める方法を教えてください。
\_______________
0370永久会員パスが書き込みするだけで当たる
02/06/22 14:12ID:E0ppwG7Lhttp://s1p.net/tyyopp
わりきり出会い
UG-S的出会い
PCのみ受付中
男性、女性書き込み
キャンペ-ン中
おかげさまで5000HT
ラッキナンバー
(111,333,555,777,999)
男性、女性書き込み するだけ
当選者には永久会員パスワード
と1万円プレゼント!!
0371nobodyさん
02/06/22 14:57ID:???別に変えなければ動かないということはないけど違う用途の
(ハンドル|オブジェクト|数|文字列|・・・)を同じ変数に代入して
変数を使いまわすのは間違いをおかしやすかったりとあまり良い
スタイルとは言えないかも。
(同様に$sth1、$sth2という名前もお勧めできない)
0372nobodyさん
02/06/22 19:01ID:PwKD5Bpr$dir = ディレクトリ 、 $file = 数字
open(DATAOUT, "+< $dir . $file . '.dat'") || die &Error;
えっとこういう処理があるんですが、読み書きモードでファイルを開けないんです。
というかファイル名を認識してくれないみたいです。
open(DATAOUT, $dir . $thismonth . '.data') || die &Error;
↑このように読み込みモードだとちゃんと認識してくれるんですが、読み書きモードでちゃんと
認識するようにするにはどうすればよいでしょうか?
いろいろ "" を '' にしたり、. を \. にしてみたりしたんですがうまくいきません・・。
お願いします。
0373nobodyさん
02/06/22 19:36ID:???もうちょっとダブルクォーテーションについて考えてみた方がいいぞ。
open(DATAOUT, "+<$dir$file\.dat") || die &Error;
0374372
02/06/22 19:42ID:???おぉ〜〜〜できましたっ!! ありがとうございます!
>もうちょっとダブルクォーテーションについて考えてみた方がいいぞ。
はい考えてみます (´Д`;;)
ありがとう。
0375アルバムモナ
02/06/22 19:57ID:sE7wyej0Exif形式に対応してなくて困っています。
下記のものを改造してExif形式にも対応させたいのですがどのようにしたらいいでしょうか
教えてください。
http://www.aleph.co.jp/~fujiwara/perl/get_imgsize.pl
0376べっくあむ
02/06/22 21:20ID:9y/Dp6Qoありがとうございます。
動作上は問題ないと言うことですね。
>変数を使いまわすのは間違いをおかしやすかったりとあまり良い
>スタイルとは言えないかも。
確かにこんな変数名では、ちょっとしたタイプミスで、
見つけ難いバグを自らの手で作ってしまいますよね。
気をつけてみます。
0377nobodyさん
02/06/22 21:20ID:???そんな3年も前の化石なんか使うなよ。
これじゃだめなのか。
http://search.cpan.org/search?dist=Image-Size
0378nobodyさん
02/06/22 22:37ID:???半角カナを全角に変換とかはしたくないんですけど。。
0379xx
02/06/22 23:26ID:???サーバの環境および現在のフォーム出力文字コードぐらいは書いてもらわないと、、、、
0380nobodyさん
02/06/23 18:26ID:izD8oNpGDドライブにある下記のようなCGIスクリプトをapache経由で実行したら、
. のみでした。
そこで、コマンドプロント上で「perl inc.cgi」と実行したら、
ちゃっんと
C:/usr/local/lib
C:/usr/local/site/lib
.
とでます。
apache経由でも
C:/usr/local/lib
C:/usr/local/site/lib
.
になるようにできますか?
-----
#!/usr/bin/perl
print "Content-type:text/html\n\n<xmp>";
for(@INC){
print $_,"\n";
}
exit;
------
0381nobodyさん
02/06/23 18:30ID:jOy7H3G4原因はよくしらないがperl -Iでどうかね。
それか@INCに対しpushするか。
0383380
02/06/23 19:00ID:???perlをc:/usr/local にインストールしたのですが、
/usr/bin/perl のスクリプトでも使えるように、
C:/usr/local/binをc:/usr にコピーしてたのが原因だったようです。
#前まではできてたのになぁ。。。
0384nobodyさん
02/06/24 01:51ID:???$n=pack "h*", "$_";
print $n;
}
で読み込んだテキストを元にもどす方法ってどうやるんですか?
while(<>){
$n=unpack "h*", "$_";
print $n;
}
じゃだめなんですけど
0385nobodyさん
02/06/24 03:26ID:???それpackとunpackの使い方が逆でない?
while (<>) { print unpack("h*", $_); } # テキスト→16進
while (<>) { print pack("h*", $_); } # 16進→テキスト
0386nobodyさん
02/06/24 18:03ID:pso5a6KFopen(DATA, ">$cdata")|| &write_error;
flock(DATA, 2);
print DATA @newdata;
flock(DATA, 8);
close(KDATA);
などとしています。
このflockは排他処理には役に立たないような事がよく
書かれていますが全く役立たないのでしょうか?
なにも処理しないよりはマシという程度ですか?
0387nobodyさん
02/06/24 18:21ID:???>って宣言するだけです。礼儀正しい人は「もう触ってもいいよ」って言われるまでは触りません。礼儀正しくない人は構わず触っちゃいます。ただそれだけです。つまり、単なる紳士協定。OK?
># これ以上簡単な説明は出来ないよ。
過去スレのJAPUさんのセリフより。
0388nobodyさん
02/06/24 18:41ID:kznFdEhQflock(DATA,8);は別にいらん
0389nobodyさん
02/06/24 19:35ID:???全体を見ないと確かなことは言えないけど、
書き込みのときだけロックしてもだめ。
データの読み出しから書き込みまで、
ずっとロックし続けないと排他処理にならない。
0390nobodyさん
02/06/24 21:50ID:???【Perl】ファイルロック(排他処理)について語ろう
http://pc.2ch.net/test/read.cgi/php/1024795138/
0391386
02/06/24 21:52ID:pso5a6KFありがとうございます。
>>388さん そうなんですか、知りませんでした。
>>389さん これも驚きました。読み込みの時はflock使ってませんでした。
本に書いてあるものをそのまま参考にしていました。
わたしの使い方は問題あるんですね。もう少し調べてみようと思います。
0392nobodyさん
02/06/24 22:32ID:???>>386のロックが役に立たないってのは
open HANDLE, ">file"; # まずfileの中身を空にして開く、と…
flock HANDLE, 2; # ロックするかな
このopen & truncateが問題だろ。
正しくは
open HANDLE "+<file"; # 読み書きモードで開く、と…
>>386の方法でも何もしないよりはマシかもしれんが、
確実に効果がある、とは程遠かろう。
0393nobodyさん
02/06/24 22:49ID:???それをopen(&flock)してる間に処理、っていうのがいいんじゃないかな。
0394nobodyさん
02/06/25 13:52ID:???そういう場合は、やはりgrepでしょう。
@URI = grep { s/^Location_URL=(.*)/$1/ } @list;
0396nobodyさん
02/06/25 15:48ID:???grepで元の配列を壊すのはいかがなものかと。
@URI = grep { /^Location_URL=(.*)/ } @list;
0397396
02/06/25 16:00ID:???ところで元の配列を壊さずに一部を取り出す一番効率の良い方法ってどんなんだっけ…。
@URI = map { substr $_, 13 } grep { /^Location_URL=(.*)/ } @list; # じゃないよな…
0398394
02/06/25 16:24ID:PBYsCZmL元を壊さずにそれ(>>397)より効率のいい方法ってあるんかいな。
0399fusianasan
02/06/25 16:51ID:???59点ってとこだな。
0400nobodyさん
02/06/25 17:02ID:???@URI = map{ /^Location_URL=(.*)/ ? $1 : () } @list;
0402perl5.6.1
02/06/25 21:24ID:???失敗しなくするにはどうすればいいですか?
#!/usr/bin/perl -w
use strict;
sub t($);
open(F, "+<in.txt"); # aが30個くらい並んだだけのファイル
t(*F{IO});
close(F);
sub t($)
{
my $f = shift;
truncate($f, 10) || warn("error");
}
0404nobodyさん
02/06/25 23:21ID:???402じゃないけど質問させてください。
open F, ">file.txt" or die;
my $fh = *F{IO};
print {$fh} "test\n" or die;
truncate *$fh, 10 or die;
close $fh or die;
このコードで、printやcloseは$fhでも*$fhでもオーケーなのに
truncateだけは*$fhしか指定できないんですが、どういうこと?
0406404
02/06/25 23:35ID:???実は402を見てからperlrefとか読んでいろいろ実験してたので、
まだIOオブジェクトがよくわかってないのですが、
これがバグとわかれば安心して眠れます。
0407nobodyさん
02/06/26 03:05ID:???なんでそんなわかりにくいもん使うの?オブジェクト使いたかったら
素直にIO::Fileとか使えばいいのに・・・
0408perl5.6.1
02/06/26 07:02ID:???printに*$fhって渡せました?
おれの環境では下のコードはsyntax errorになるんです。
#!/usr/bin/perl -w
use strict;
my $stdout = *STDOUT{IO};
print *$stdout "test\n"; # print $stdout "test\n";なら大丈夫
>>407
モジュールの使い方を調べたり覚えたりするのが面倒だっただけです。
*FOO{THING}自体はそんなに分かりにくいものでもないし。
関係ないけど、sort { $a <=> $b } @f;の方が分かりにくいです。
use strict;なのに$aと$bは宣言しなくていいのは何、みたいな。
0409nobodyさん
02/06/26 09:25ID:???use IO::File;
my $fh = IO::File->new( $filename ); ## open()と基本的に同じ
print $fh "foobar\n";
のどこが面倒くさいのだろうか。少なくともグロブがなんちゃらとか
考えるよりかはるかにシンプルだと思うんだけどな。大体perldoc perlref
を読んでる暇があるのにperldoc IO::Fileが面倒くさいのもわからんし。
まぁ使いたくなかったらそれはそれでいいんだけど。素直に使ったほうが
楽だし、そのほうがPerl コミュニティのカルチャーにそってると思う。
0410404
02/06/26 09:37ID:???print関数の第1引数は、シンボルでもスカラ変数でもない場合は
ブロックに入れないと構文エラーになるよ。(昨日覚えた)
print {*$stdout} "test\n";
>>409
ほっといてくれー。こういう瑣末なことを調べるのが趣味なんだよー。
たぶん408の人も、おれと同じタイプ。
あ、もちろん実際にスクリプト書くときは素直にIO::File使います。
0411nobodyさん
02/06/26 12:14ID:???ああまぁ趣味のスクリプトとかならいいんですけどね。
プロダクションコードでそういうのを見たくないのでとりあえず
牽制した、ということで。
0412nobodyさん
02/06/26 15:38ID:1ADBKX33(公開といっても使うのはネットの仲間だけ)これだけはしちゃイカン!って
処理とかあるんでしょうか?cgiのバグでunixコマンドを打てるとかっていうのが
気になるんですけど。
>cgiのバグでunixコマンドを打てる
とんでもないのがあるじゃねーか!
0415nobodyさん
02/06/26 16:55ID:???0416nobodyさん
02/06/26 17:29ID:ZfGn23SZ>>412じゃないんですが -T スイッチってどんなものなんでしょう?
-wスイッチはつけるようにしてるんですけど -T スイッチは見たことがありませんでした・・。
0417416
02/06/26 17:36ID:ZfGn23SZhttp://tech-web.net/perlmania/perlrun2.html
汚染チェックをオンにするとか書いてますけど、なんだろう・・?
つけておいたほうがいいのかな。
0418nobodyさん
02/06/26 17:39ID:???Perlで2chのDAT直読みは無理なんでしょうか?
User-Agent: Monazilla/1.00 (toolname/ver) ←こうゆう風にしても
無理なんですけど、、。
0419nobodyさん
02/06/26 18:17ID:???は?
0420nobodyさん
02/06/26 18:26ID:???URLが間違ってるとかそこら変チェックした方がいいかと思います。
#!/usr/bin/perl
use LWP::UserAgent;
my $ua = new LWP::UserAgent;
my $request = new HTTP::Request('GET', 'http://pc.2ch.net/php/dat/1022731565.dat');
$ua->agent('Monazilla/1.00 (libwww-perl/5.65)');
$response = $ua->request($request);
print $response->as_string;
0422412
02/06/26 18:50ID:1ADBKX331行目を#!/usr/bin/perl -T にするって事でしょうか?
unixコマンドを打てる、というバグを発生させないためにはどうすれば
どんな点に注意すればいいんでしょう?
バグというか、何も対策してないcgiだとアドレスのcgi-bin/xx.cgi?の後ろに
いろいろへんなのを入力するとunixコマンドを打てるとかいうバグがある話を
聞いたんですが。
0425fusianasan
02/06/26 19:28ID:???要は、ブラウザ側で入力された値をチェックしないでそのまま以下のような
関数に渡さなければいいだけ。
open
exec
system
qx//
eval
``
0426nobodyさん
02/06/26 19:47ID:CyvQGqzW0427nobodyさん
02/06/26 20:55ID:???そのほか、クロスサイトスクリプティングにも注意。
たとえば、User-agentを内容をチェックせずにそのまま出力しちゃだめ。
ttp://www.ipa.go.jp/security/awareness/vendor/programming/a01_02.html
0428nobodyさん
02/06/26 23:02ID:???0429nobodyさん
02/06/26 23:13ID:???それがバグだったら世界中のPerlUserが嘆くことになるな。
0430nobodyさん
02/06/27 01:16ID:riwIozkn$a = '&xyzあいうえお<A href="http://www.xxx.com">リンク</A>';
$a =~ s/&[^lt;|^gt;]/&/g;
こんな感じで文字列の < と > 以外の & を & に置換したいのですが、
上のようにすると & の次の文字(ここでは x)が消えてしまいます。
どうすれば &xyz とすることができるでしょうか?
0431429
02/06/27 01:19ID:riwIozkn$a = '&xyzあいうえお&<A href="http://www.xxx.com"&>リンク&</A&>';
こんな感じで文字列の &< と &> 以外の & を & に置換したいのですが、
上のようにすると & の次の文字(ここでは x)が消えてしまいます。
どうすれば &xyz とすることができるでしょうか?
0432nobodyさん
02/06/27 01:19ID:???0433nobodyさん
02/06/27 01:21ID:???0435nobodyさん
02/06/27 10:09ID:???それって違うと思うけど・・・
$a =~ s/&(?!=lt;|gt;)/&/g;
じゃないの?[]で囲んだらcharacter classになっちゃうじゃん。
432の正規表現では&のあとの文字がg,l,t,;,|,^だったら&
に変換されないぞ(例:&lz; &gxcv; &;;; )
0436nobodyさん
02/06/27 10:15ID:???s/&(?!lt;|gt;)/&/g;
0437nobodyさん
02/06/27 10:16ID:???0439nobodyさん
02/06/27 17:36ID:???ひどいサイトがあります。思いきってサイト(HDD)をクラッシュさせたいのですが、
何かいい方法はあるのでしょうか?
こちらのIPとか所在がわからないようにしたいのです。
こう言う質問にお答えとなると問題がある場合、こういった専門サイトとかがあれば
お教え頂けないでしょうか。
0440nobodyさん
02/06/27 17:43ID:???ひ
何
こ
こ
お
???
縦読みじゃないのか
0441nobodyさん
02/06/27 17:58ID:???俺はここの一流ハッカーに頼んでHDDを爆発させてもらったよ
http://www.qudsway.com/Links/Doctor/4/Html_Doctor4/4hdo9.htm
0442nobodyさん
02/06/27 19:54ID:???「出力時の数値形式」ということまでは分かったのですが...。
0443nobodyさん
02/06/27 20:11ID:???-wスイッチの元で警告されるように、$#の使用はお勧めできない。
Cレベルでの内部操作だから簡単にDLLエラー(Unixだとコア吐くのかな?)を出せるしな。
それでも使いたければ:
$# = '%.3g';
print 8/9;
0444trrh
02/06/27 23:55ID:mvLF/G5v$file1++;
}
close(file1);
while (<file2>){
$file2++;
}
close(file2);
while (<file3>){
$file3++;
}
close(file3);
while (<file4>){
$file4++;
}
close(file4);
上記のソースを短く出来ませんか?
0445nobodyさん
02/06/28 00:03ID:???ネタはこちらへ。
http://pc.2ch.net/test/read.cgi/php/1024741312/
0446nobodyさん
02/06/28 00:26ID:???マルチ
http://pc.2ch.net/test/read.cgi/tech/1017736187/n186-
0447nobodyさん
02/06/28 17:06ID:???$paturn = '787+8787';
quotemeta $paturn;
if ($mes =~ /$paturn/){
print "Match!\n";
} else {
print "Oops!\n";
}
これだとマッチしないのですが、どうすればエスケープ出来るでしょうか
quotemetaの使い方を間違えてんのかなあ・・
0448nobodyさん
02/06/28 17:09ID:???\Q\E だた・・
perlは忘れ易いよ
0449japh ◆J.5V8ta6
02/06/28 20:48ID:???quotemeta()の使い方間違えてるよ。
$quoted = quotemeta $string;
chop(), chomp()等と違って元の文字列は置き換えないからね。
0451nobodyさん
02/06/28 22:43ID:ZifxuKsx@mon = split(/,/,$mon);
$mon{$mon[1]}++;
}
3行目では何が起こっているのでしょうか?
0452&r
02/06/28 22:51ID:???取得しているといったところでしょうか。
0454nobodyさん
02/06/29 00:03ID:kfva2Nvgppmでsearchを実行しても全く反応がないのです・・・
PPM> search
PPM>
のように、なってしまうのです・・・DBIをインストールしたいがために四苦八苦しているのですが、
どうしても上手いこと行きません・・・もちろんdbi.zipを直接DLして
ppm install dbi.ppd
等も試してみましたが
Could not locate a PPM binary of 'dbi.ppd' for this platform
とエラーが出てしまいます(涙
どうにか対処法を教えて貰えないでしょうか・・?
環境はwin2k perl-v5.6.0 for MSWin32-x86-multi-thred ppm(2.1.2)です
0456こここ
02/06/29 02:20ID:8vz7q6tH説明の通りに設置して、チェックモードでもOKとでたんだけど
Authorization Required
This server could not verify that you are authorized to access
the document you requested. Either you supplied the wrong creden
tials (e.g., bad password), or your browser doesn't understand
how to supply the credentials required.
ってでる。
何が悪いのかわかります?
0457nobodyさん
02/06/29 02:24ID:kfva2Nvgダメです・・・
Installing package 'DBI'...
Error installing package 'DBI':Could not locate a PPD file for package DBI
となります・・・
ネットは常時接続なので、当然繋がったまま実行しているのですが・・・
(。´Д⊂)゜。・ こまった
0459こここ
02/06/29 02:28ID:8vz7q6tHそうです
0463補足
02/06/29 02:52ID:???> PPM doesn't work through a proxy/firewall.
> This can be remedied by setting the environment variable 'HTTP_proxy' to the name and port of your Internet proxy, e.g.:
> C:\> set HTTP_proxy=http://proxy:8080
> If your proxy or firewall requires a username and password, you will also need to set the environment variables 'HTTP_proxy_user' and 'HTTP_proxy_pass'.
多分これね
0464こここ
02/06/29 02:52ID:8vz7q6tH本当だ。
今まであると思ってたIDとパスがなかった・・・
とにかく今やったら出来た。
nobodyさんありがとう!!!
0465nobodyさん
02/06/29 03:21ID:???0466nobodyさん
02/06/29 07:00ID:???∧∧
|\ <ヽ`∀´> /|
ヾ  ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
 ̄ ̄ ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄ ̄ ̄ ̄
| |
/ ̄ ̄ ̄ ̄\/ ̄ ̄ ̄ ̄ ̄\
__/ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ .\__ ドドン!!
___<__)__________ (__>___
0467nobodyさん
02/06/29 12:54ID:xVhrnBTOこいつらの属性を変えてやれば処理を軽くすることはできますか?
初心者なもんで質問が意味不明かもしれません…(汗)
0468&r
02/06/29 12:57ID:???ほんとに意味不明だからびっくりしたYO!
0469あSD
02/06/29 13:16ID:IbvPgwu50471nobodyさん
02/06/29 16:51ID:???初歩的な事で申し訳ございません。
name1<>host1<>ip1<>111<>
name2<>host2<>ip2<>222<>
name3<>host3<>ip3<>220<>
name2<>host2<>ip2<>200<>
name2<>host2<>ip2<>222<>
name3<>host3<>ip3<>220<>
とログファイルに保存をしてありまして、
それぞれの一番右の数の合計を出すにはどうすれば宜しいのでしょうか?
0472nobodyさん
02/06/29 17:01ID:???0474nobodyさん
02/06/29 17:05ID:???>451が参考になるよ。
あれをちょっといじればいい。
0475&r
02/06/29 17:07ID:???こんな感じでしょうか?
$sum+= (split(/<>/))[$[+3] for <DATA>;
__DATA__
name1<>host1<>ip1<>111<>
name2<>host2<>ip2<>222<>
name3<>host3<>ip3<>220<>
name2<>host2<>ip2<>200<>
name2<>host2<>ip2<>222<>
name3<>host3<>ip3<>220<>
0476471
02/06/29 17:25ID:???それは、その感じでまる2日ぐらい悩んだんですが出来ませんでした。
>>475
今、試してみましたが一番右の数の全部の合計した数が出てきました。
0477nobodyさん
02/06/29 17:36ID:???> 1:自分はこう言う事がしたい。
> 2:それでこんな風にやってみたが・・・
> 3:それだとこんなエラーが出て上手く行かなかった。
>
> 1と3が無いと誰も答えられないよ。
> 良い回答は良い質問から。一緒に勉強しましょう。
1はあるけど2と3がないな。
0478nobodyさん
02/06/29 17:39ID:???while(<IN>) {
@host = split(/<>/,$_);
$host{$host[0]} += $host[3];
}
かな?
0480&r
02/06/29 17:52ID:???そうだね。うっかりホスト毎ってのを見逃してた。修行してくる。
0481471
02/06/29 17:55ID:???んーと別に大丈夫ですよ。質問の仕方が悪いのは僕の方です。
>>477
今まで答えて頂けたことは全て一通りやってます。
エラーは出ませんでした。出たとしても;を:と間違えた等その位です。
0484&r
02/06/29 18:04ID:???ハッシュの参照のしかたわかる?
ファイルハンドルが478ではINになっているから統一しているか確認して、
とりあえず以下のようにして出力して確認されない?
for ( keys %host ){
print $_,': ',$host{$_},"\n";
}
0485471
02/06/29 18:04ID:???Thanks!!!!!!!!!!!!!!!!!!!!!!!!
黄金帽と呼んでくれ!!!
0486nobodyさん
02/06/29 18:06ID:???@host2 = grep { /^name1<>.*<>.*<>.*<>/ } @_;
@host3 = grep { /^name1<>.*<>.*<>.*<>/ } @_;
foreach(@host1){
m/^name1<>.*<>.*<>(.*)<>/;
$count1 += $1;
}
これじゃ非現実的だな。スマソ
0488nobodyさん
02/06/29 20:03ID:A6ruKh9Phttp://tmp.2ch.net/test/read.cgi/mog2/1022943102/l50
0489nobodyさん
02/06/29 20:32ID:YfnrInm/0491nobodyさん
02/06/29 20:47ID:???>46 :デフォルトの名無しさん :02/06/29 19:00
>>>1よ
>だいたいPerl関連はWebProg板でやるきまりなんだよ
>そっちへ逝け
0492nobodyさん
02/06/29 21:30ID:???じゃ490はマルチした罰として↓の48に答えること。命令。
http://pc.2ch.net/test/read.cgi/php/997829243/n48-
0493490
02/06/29 21:37ID:???0495nobodyさん
02/06/30 06:36ID:???・ファイルが存在しない
・パーミッションがおかしい
以外にありえるのでしょうか、おねがいします
0496495
02/06/30 06:36ID:wtzA9nm50500nobodyさん
02/06/30 12:37ID:???今だ!200番ゲットォォォッ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ (´´
∧∧ ) (´⌒(´
⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
 ̄ ̄ (´⌒(´⌒;;
ズザーーーーーッ
0502nobodyたん
02/06/30 14:21ID:???排他モードでロックしているというのはあるが。(その場合でも open は可能)
0503nobodyさん
02/06/30 14:41ID:???【Perl】ファイルロック(排他処理)について語ろう
http://pc.2ch.net/test/read.cgi/php/1024795138/
も参照してみては?
0504nobodyさん
02/06/30 15:34ID:???ファイルロックなんてどうせ巷の解説サイトみればすむことなのに、、。
0505nobodyさん
02/06/30 15:58ID:???492は質問ではなく誘導ですが…。
巷の解説サイトにあるファイルロックできみは納得して満足してるんだろうね。
そのサイト教えて。
0507nobodyさん
02/06/30 16:59ID:???だから、きみが納得して満足してるであろう巷の解説サイトを教えて。
どこ?
0508505 ◆EPPSxEpw
02/06/30 17:18ID:???↑適当にグーぐるしてください
ファイルロックは専用のスレもあります
>>504の解説してください。
0509nobodyさん
02/06/30 17:36ID:???そのリンクってはじめて見させてもらったけど大崎さんのスクリプトに
なんで余計なプロセス番号($$)付けてあるの?積算秒を付ける意味を
理解できてないの?
これがきみの言う「巷の解説サイトみればすむ」ってこと?
504の解説:
>ここにいる人は>>492の質問には答えられないレヴェルなのですね。
505に書いたとおり、「492は質問ではなく誘導です」
0510nobodyさん
02/06/30 17:46ID:???> まだ完全ではないのではないかという疑問が残ります。
何が疑問なのかが疑問です。
0511nobodyさん
02/06/30 18:08ID:???この板でこのレスの速さは508さん自身のサイトだったってことかな?
ロックできるかどうかのテストと実際にロックする操作を同時に行なう
ことができる atomic な関数 を使っているからロックが成功するのは
1プロセスであり、そういう意味では同じ名前にロックファイル名に
リネームしてもよいということ。
ここで、なぜ積算秒を付け足したロックファイル名にリネームするかと
いうと、もしデッドロックが残っても作成してから60秒よりも経過して
いるかどうかを確認するからです。
つまりプロセス番号($$)を付ける意味がまったくわたしには理解できません。
0512nobodyさん
02/06/30 18:19ID:???付け足すけどよく見たらさ。
ロック中ファイル名って、$lfh{path} . time . $$ だから
/^$lfh{basename}(\d+)/でマッチさせた $1 って time . $$ の値になる
可能性が大きいよね。(Windows系だと$$は-nnnnnnみたいな形式だったりする
けどさ)
でもその直後に平気で積算秒から $1 の値を引いてタイムアウト値と比較してる
からデッドロックをこれじゃ回避できないんでは?
0513508 ◆EPPSxEpw
02/06/30 18:49ID:???http://pc.2ch.net/test/read.cgi/php/1024795138/
どうせカウンターにしかつかっとらんのやろ。
ほかになんにファイルロックつかっとるのか知りたいDBとか?
>>508のサイトはgoogleでファイルロックで検索したら一番手前にあったから貼った。
------------------------------------------------
俺はXSについて聞いてんだ。
0514nobodyさん
02/06/30 19:14ID:???カウンタ程度ならむしろ使わないほうがいいだろう。うっとうしい。
まぁ、使うとしたら電子商取引システムを構築するときに使うかもな。
さっきのアドレス、きみのサイトだったらなおしとけよ。はずかしいから。
きみの検索でほんとにさっきのサイトがトップでヒットしたんなら、検索能力を
養ってから吠えるこったな。まずこれでも見ておれ。
%perldoc -m perlxs
0515508 ◆EPPSxEpw
02/06/30 19:40ID:???この板に電子商取引システムを構築したりする人間がいるなら
XSぐらい楽勝だろ。
0516nobodyさん
02/06/30 19:52ID:???>>515
で、なに質問してるんだっけ。ていうかあなた質問者本人?
perlxstutの説明に沿ってHello Worldとか作ってみた?
0518japh ◆J.5V8ta6
02/06/30 20:56ID:???perlxstutのサンプルじゃ不満だと?
http://www.kt.rim.or.jp/~kbk/perl5.005/
もっと突っ込んだサンプルが欲しいなら、
CPANから適当なXSモジュール落として参考にすれ
0519nobodyさん
02/06/30 22:15ID:???http://members.tripod.co.jp/ms_mzn/
0520pear ◆FRUIT8pk
02/07/01 05:54ID:???問い合わせたら、「そんなことはない、ソース見直せ」って
言われたんですけど、このソースで表示されなかったらおかしいですよね?
#!/usr/bin/perl
print "Content-type: text/html;\n\n";
print "<html><body>";
foreach (sort keys %ENV){
print "\$ENV{$_}:$ENV{$_}<br>\n"
}
print "</body></html>";
exit;
これは何かこちらのソースに問題があるのでしょうか
よろしくお願いします。
0521nobodyさん
02/07/01 08:04ID:???HostnameLookups off
最近はデフォルトでオフだしね。
http://httpd.apache.org/docs/mod/core.html#hostnamelookups
CGIスレの方が良かったかも。
0522&r
02/07/01 11:41ID:???なんでキーを出力させてないの? たしかにREMOTE_HOSTがない場合もありうる
だろうけど
print "$_: $ENV{$_}<br>\n"
0523pear ◆FRUIT8pk
02/07/01 12:27ID:???最近のapacheではホスト名は取得できないということでしょうか。。
>522
一応、キーは \$ENV{$_} で、表示されています。
0524nobodyさん
02/07/01 15:00ID:???マップの情報が
123456789
123456789
123456789
123456789
123456789
123456789
123456789
とあってたとえば5,3だとしたら
34567
34567
34567
34567
34567
みたいな感じに表示させたいです。
でも、存在しない座標が含まれていたら表示しないようにしたいです。
参考になるようなページでもいいのでお願いします。
0526nobodyさん
02/07/01 17:34ID:???なんか宿題っぽいよなぁ・・・
まぁまずこういう構造体があったとして・・・
my @foo;
for my $idx1 ( 0..9 ) {
$foo[$idx1] = [];
for my $idx2 ( 0..9 ) {
$foo[$idx1][$idx2] = "$idx1$idx2";
}
}
で、まぁそしたらこんな感じか
sub print_matrix_range
{
my $matrix = shift;
my( $x, $y, $range ) = @_ ? @_ : (0,0,$#{$matrix});
my $xstart = $x - $range >= 0 ? $x - $range : 0;
my $ystart = $y - $range >= 0 ? $y - $range : 0;
my $xend = $x + $range <= $#{$matrix} ? $x + $range : $#{$matrix};
my $yend = $y + $range <= $#{$matrix} ? $y + $range : $#{$matrix};
for( my $curx = $xstart; $curx <= $xend; $curx++ ) {
for( my $cury = $ystart; $cury <= $yend; $cury++ ) {
print $matrix->[$curx][$cury],
$cury == $yend ? "\n" : ' ';
}
}
}
print_matrix_range( \@foo, 5, 3, 2 ); # 5=両方向に2マスだから
書き写しに失敗してないといいんだが。
0527質問です。
02/07/01 21:51ID:X3MphqPiこの下のメタタグはどうゆう役割をするのですか?
御答えくださいませ。
<META NAME=robots CONTENT="http://**************/">
0529nobodyさん
02/07/01 21:53ID:YKfyV+9J0530名無し募集中。。。
02/07/01 21:55ID:POquGnWBperlを使って、Submitボタンを押さずにデータをcgiに受け渡すことって
可能でしょうか?
0531nobodyさん
02/07/01 21:57ID:???これで出来るじゃん。
0532名無し募集中。。。
02/07/01 21:57ID:POquGnWBレスどうもです。
すいません、getじゃなくて、postっていうの忘れてました。
0533名無し募集中。。。
02/07/01 22:03ID:POquGnWB0534nobodyさん
02/07/01 22:03ID:???0535名無し募集中。。。
02/07/01 22:08ID:POquGnWBマジっすか。さんくすこ。
あと、折角きたんでもう少し知恵貸して頂いていいっすか?
0536nobodyさん
02/07/01 22:09ID:???0537名無し募集中。。。
02/07/01 22:11ID:POquGnWB旧板のスレから名前とレス抜き出して、外部から新板にカキコ。
とりあえず、gabri dukeと外部のhtmlでsubmitおしての投稿は成功したんで
なんとかperlで自動的に書き込みって可能にならないっすかね?
0538名無し募集中。。。
02/07/01 22:12ID:POquGnWBどもです。537っす。読みにくい文章でスマソ。
0539名無し募集中。。。
02/07/01 22:19ID:POquGnWB0540nobodyさん
02/07/01 22:21ID:???またーり待たれることを推奨する。
0541名無し募集中。。。
02/07/01 22:23ID:POquGnWBマターリ待ってみまふ。どもっす。
0542nobodyさん
02/07/01 22:40ID:133+Yg1+logファイルを移動するだけじゃダメなの。
0543nobodyさん
02/07/01 22:42ID:???perldoc lwpcook読んでみなはれ。
0545名無し募集中。。。
02/07/01 23:09ID:POquGnWBむずい、、、。postのcgi間のデータ受け渡しとLWP::UserAgentを
説明してるページ教えていただけると助かりまふ。おながいします。
0546nobodyさん?
02/07/01 23:34ID:???0547nobodyさん
02/07/02 05:39ID:???なんかうまく言ってない気がします。
マップのデータを1行づつ配列につっこんでやればできるのだろうか…
0548nobodyさん
02/07/02 07:25ID:???自分のBBSに移すなら直接LOG弄ってアプ出来ないの?
つーか連続投稿如きでLWP使わなくて良いと思うけど
LixyとかChannnelとかの厨房ツール拾って来てそれ弄れば良いじゃん?
0549nobodyさん
02/07/02 11:37ID:???「なんかうまくいってません」←コレ典型的な厨の応答だよ?
そんだけじゃ、読んでるこっちには何もわかんないのよ。
バカが直るまでお前は発言禁止。
0550nobodyさん
02/07/02 12:05ID:uXcHDU9t「だろうか…」 ←これもな。独り言を書くな。
0553nobodyさん
02/07/02 15:50ID:???すいません厨丸出しでした。
ちょっと質問の仕方を変えてみます。(526さんのだと特定の組み合わせしかだめっぽかったので)
マップデータが(例えばです。)
@map = (
'0000000000',
'1111111111',
'2222222222',
'3333333333',
'4444444444',
);
と入っている場合に>>524のようなことがしたいです。
0554nobodyさん
02/07/02 17:11ID:???部分マップを別配列に切り出す方向で考えてみた。
my $map_width = length($map[0]);
my $map_height = scalar(@map);
sub max { $_[$_[0] < $_[1]]; }
sub min { $_[$_[0] > $_[1]]; }
sub trim_map {
my ($x, $y) = @_;
my $x1 = max(0, $x - 2);
my $x2 = min($map_width, $x + 2);
my $y1 = max(0, $y - 2);
my $y2 = min($map_height, $y + 2);
return map { substr($_, $x1, $x2 - $x1 + 1) } @map[$y1 .. $y2];
}
my @mini_map = trim_map(5, 3);
print "$_\n" foreach @mini_map;
0556nobodyさん
02/07/02 18:08ID:???0557526
02/07/02 20:12ID:???0558nobodyさん
02/07/02 20:46ID:???$host = $ENV{'REMOTE_HOST'};
で取得したホスト名$hostがaaa.bbb.ccc.dddとなっている場合に
bbb.ccc.dddの部分だけを表示する方法を教えてください。
0559nobodyさん
02/07/02 21:20ID:???0560558
02/07/02 23:20ID:???ありがとうございました。
0561nobodyさん
02/07/02 23:33ID:???0562nobodyさん
02/07/03 05:04ID:???第三者からは見れない入力ページから文章を打ち込み、公になるのはcgiが吐き出した更新履歴ページのみ。
2.で、スクールに通った時作成した、掲示板を改良したが、タグが禁止なのと、<br>が吐き出されて改行位置がおかしくなるので、
以下の処理を丸ごと削除しました。
foreach($text1,$cont){
s/&/&/g;
s/"/"/g;
s/</</g;
s/>/>/g;
s/\r\n/<br>/g;
s/\n/<br>/g;
s/\r/<br>/g;
s/,/、/g;
}
3.構文エラーはなく、動作はしますが、一行置きに改行が入ったり、更新する度に一番新しい記事が何度も表示されたり
と言った具合でお手上げです。超初心者ですみません。この部分だけでは判断できないものでしょうか?
何か解決策ありましたらよろしくお願いします。
0563nobodyさん
02/07/03 05:36ID:???それと、君の質問内容だと perl がほとんど解ってないように見受けられるし、
基本的な所から勉強しようという姿勢も見られないから、まともな解答を
得るのは難しいと思われ
0565nobodyさん
02/07/03 12:18ID:???0566nobodyさん
02/07/03 12:35ID:6OBUBtcaうまくいきません。どうすればよいですか?
$buffer = $ENV{'QUERY_STRING'};
@buf = split( /&/ , $buffer );
foreach $data ( @buf ){
( $name , $value ) = split( /=/ , $data );
};
0568nobodyさん
02/07/03 12:45ID:???@buf = split( /&/ , $buffer );
foreach $data ( @buf ){
( $name , $value ) = split( /=/ , $data );
$FORM{$name} = $value;
};
0569nobodyさん
02/07/03 12:51ID:???0570nobodyさん
02/07/03 13:02ID:???もう過去の遺物か?
0572566
02/07/03 13:20ID:6OBUBtcaなんと便利なものが・・・知りませんでした
勉強してみます。
>>568-569
それで漏れのヴァージン作品がやっと動きました。感激
Thanx ALL
0573562
02/07/03 15:37ID:???どうもすいませんでした。
perlは確かに初心者ですが、何ぶん急いでたもので、、。
御指摘もっともです、すみません。もうちょっと初歩から勉強してみます。
ちなみに改行の件はperlの方ではなくhtmlの
<textarea>タグ内のwrap="hard"をとったら、解決しました。
出直してきます。
0575nobodyさん
02/07/03 20:49ID:???( ´,_ゝ`)プッ
0576nobodyさん
02/07/03 21:51ID:???書き方わかんなきゃ検索でもしてみろ。2510件ヒットしたぞ。
まぁ、ほとんどはたいしたこと書いてないページだが比較的ましなページが
3つほどあるだろう。
0578nobodyさん
02/07/04 06:54ID:wzRa2QN/JavaScriptのrefferが使えないので困っています
他にはどんな方法がありますか?
教えて下さいおながいします。
0579578
02/07/04 06:58ID:wzRa2QN/どのページに戻るかは、そのときによって違いますので
<a herf="リンク元のURL">は使えません
0580nobodyさん
02/07/04 07:17ID:M5QBoHcZActivePerl-5.6.1.633-MSWin32-x86.msi
をインストールして
start ppm3 install http://www.activestate.com/PPMPackages/5.6plus/DBI.ppd
とすると
Can't call method "name" without a package or object reference at D:/ActivePerl/561/site/lib/PPM/UI.pm line 984.
と言うメッセージが出てモジュールのインストールが出来ません。
ActivePerl-5.6.1.633のppm3に何か欠陥があるのでしょうか?
何か私が大間違いをしているのでしょうか?
情報あれば教えてください。
戻るページの数だけ同じCGIを置く
0583578
02/07/04 08:19ID:wzRa2QN/リンクフリーのcgiなので
何ページからリンクされるのか、
どこからリンクされるのかもわからないんです
0584nobodyさん
02/07/04 08:26ID:???REFERER取れないんだからどこから来てるかはわからんよ。仕方ない。
BACKボタンで戻ってくれとかいう説明を書いといたら?
0585nobodyさん
02/07/04 10:01ID:n+YIWuSL000
111
<!---->
222
333
<!---->
444
555
<!---->で区切っている部分を3つに効率よく
切り分けるにはどうしたら良いですか?
元のデータは後で利用しない
分けた変数は$,@どちらでも良い
3パターンあるのですが、より効率のよい
コーディングを教えてください
0586nobodyさん
02/07/04 10:01ID:n+YIWuSL$line = join('',<FH>);
colse(FH);
($top,$middle,$buttom) = split /<!---->/,$line;
open(FH,file.txt);
$/ = '<!---->';
while(<FH>){
$i++
$top = $_ if $i == 1;
$middle = $_ if $i == 2;
$bottom = $_ if $i == 3;
}
colse(FH);
open(FH,file.txt);
$j = \@top;
while(<FH>){
if (/<!---->/) {
$i++;
if ($i == 1) { $j = \@middle; next; }
if ($i == 2) { $j = \@bottom; next; }
}
push(@$j,$_);
}
colse(FH);
0589578=583
02/07/04 13:21ID:???i-modeではJavaScriptが使えないんです
>>584
漏れのスキルでは妥当な線ですね
>>588
なんだか使えそうな・・・それ調べてみます
みなさん有難うございます
0590nobodyさん
02/07/04 13:43ID:???吐く端末もあるけど少数だし。Ezwebはやろうと思えば出来たような気が
しないでもない。携帯端末で普通にREFERER吐くのはドットiだけだった
と思う。
0591578=583 =589
02/07/04 14:30ID:???なるほど、HTTP_REFERERも無理ですか、
「バックボタンで戻ってください」と書く方向にします。
0593nobodyさん
02/07/04 14:35ID:???おれだったら3番目を選びます。
しかし>>587が気になる。なんだろう…。そういや"..."演算子ってあるのよね。
0596585
02/07/04 20:34ID:???すいませんがもっと詳しく書いていただけると
ありがたいです。
>>592
この中では3番目が一番効率よさそうですが
人のソースのもろコピペになってしまうので
あんまり使いたく有りません
別の方法があったらぜひ教えてください
0597nobodyさん
02/07/04 21:18ID:???こんなのはどうすか。586の最後のやつと同じだけど、ややすっきり。
my @arrays = (\@top, \@middle, \@bottom);
my $i = 0;
while (<FH>) {
$i++ if /<!---->/;
push @{$arrays[$i]}, $_;
}
0599nobodyさん
02/07/04 21:42ID:gX+umWUsif ($name eq "りんご") {$img = apple ;}
0600nobodyさん
02/07/04 21:46ID:zS7n4jKKif ($name eq "りんご") {$img = "apple" ;}
0601nobodyさん
02/07/04 21:58ID:gX+umWUsありがとうございました。
0602585
02/07/04 22:05ID:???同じことをするプログラムで
処理まで一緒だとパクリになるので
別の方法は無いかと思って
同じカテゴリーのプログラムが
少ないので同じものを使うと
すぐ分かってしまいます
この処理のやり方が肝になっているので
0604nobodyさん
02/07/04 22:16ID:???書き方変えても処理同じにするんだからきみの嫌うパクリになるんじゃないか?
パクリが嫌ならソースを教えてもらう前に自分で勉強しろ。
0605nobodyさん
02/07/04 22:37ID:ru7/Ktroすみません、うまく説明できないのですが宜しくお願いします。
0606nobodyさん
02/07/04 22:38ID:???0607585
02/07/04 22:49ID:???603は考えて下さった御礼という意味です
ちなみに私は
出てくるものは同じでも、実装方法がちがったら良いのじゃないか
と思っています。
全く同じものを作っても面白みが無いので、+αはしますが
(商業関係は別です特許が絡んでくるし)
0609nobodyさん
02/07/04 22:53ID:gX+umWUs0610nobodyさん
02/07/04 22:55ID:???0611nobodyさん
02/07/04 22:56ID:gX+umWUs0612nobodyさん
02/07/04 22:57ID:GRf17RXg<A HREF="tel:$tel">$tel</A> があるんですが、
Phone to機能のない方だけに、cgiをくっつけたいんですが、
$myd = "http://www.○○○.co.jp/";
if ($myd =~ /<A HREF=\"/) {
$myd =~ s/(\<A HREF=\")(tel:)/moji($1.$2)/eg;
}
moji($1.$2) {
if (!$2) {
$myd =~ s/(\<A HREF=\")/$1test0701_2.cgi?$query/ g;
}
}
print $myd;
うまく切り分けられません 泣)
0613nobodyさん
02/07/04 23:01ID:???Ans ↓の前にカーソルを移動させ[Delete]キーで改行が外れます
0614nobodyさん
02/07/04 23:02ID:gX+umWUsそうじゃなくて、プログラムの中で実行したいのですが・・・。
0616nobodyさん
02/07/04 23:08ID:gX+umWUsすみません
0617nobodyさん
02/07/04 23:13ID:???0619nobodyさん
02/07/04 23:18ID:gX+umWUsif ($name eq "千葉" or "神奈川" or "東京")
0620578=583 =589
02/07/04 23:19ID:???すみません、気付けません(鬱
教えて下さい
0621nobodyさん
02/07/04 23:19ID:???0622nobodyさん
02/07/04 23:23ID:gX+umWUs何度もすみません。ありがとうございました。
0623nobodyさん
02/07/04 23:27ID:???0625nobodyさん
02/07/04 23:30ID:???http://pc.2ch.net/test/read.cgi/php/1019487717/87-
0626nobodyさん
02/07/04 23:46ID:???+ JavaScript の質問用スレッド vol.10 +
http://pc.2ch.net/test/read.cgi/hp/1022077876/l50
「何」にマウスが乗ると音がなるのかも言って聞いてみて・・・
「タグ」と言っている時点で怒られる怖れもあるから
1>>をよく読んでから質問してね。
0627nobodyさん
02/07/05 01:00ID:???もう解決してるみたいだけど、orと||の優先順位に違いを考慮して
if ($name eq "千葉" || "神奈川" || "東京")
こうだと大丈夫だと思うよ。
ヴァカ
0633長文
02/07/05 06:14ID:xwCvs6jwフォルダの中に、
「番号」「単語」「単語の解説」の入ったデータファイルがいくつかあります。
そのデータファイルをまとめる親データを作りたいです。
親データには、
単語に対応する番号を単語を辞書的にソートしたものを入れたいです。
具体的には
ファイル1→01 モナー 「オマエモナー」
ファイル2→02 ギコ 「逝ってよし」
ファイル3→03 ジサクジエン 「イイ!」
親データ→02 03 01
みたいな感じです。分かりづらいでしょうか、、
長文すぎたようなので分割します;
0634長文2
02/07/05 06:15ID:xwCvs6jw$cufld = './';
opendir(DIR, $cufld) or die;
@file1 = sort readdir(DIR);
closedir(DIR);
で、フォルダの中のファイルをリストアップして
foreach (@files) {
で、ファイルをひとつひとつ開いて
open(IN,"$_");
$data = <IN>;
close (IN);
($ind,$word) = split(/\t/, $data);
push (@word , $word);
$NO{$word} = $ind;
}
foreach (sort { $a cmp $b } @word){
print "$NO{$_}\t";
}
という風に出力したかったんですが、
3:それだとこんなエラーが出て上手く行かなかった。
なんだかopendir〜の所で止まってしまいます。
ディレクトリのパーミッションは777にしてるんですが
他にこうやった方が、とか根本的にここが間違ってる、とか
いうところがあったら指摘お願いします。
0635nobodyさん
02/07/05 06:21ID:???@file1を表示してみれば分かるんだけど、opendir() は実際のファイルのほかに
「. (カレントディレクトリ)」「.. (ひとつ上のディレクトリ)」も含まれる。
なのでgrepでもかけて実際のファイルだけ取り出してやらないといけない。
っていうか @file1 と @files って・・書き間違い? (@file1 = @files ?)
0636nobodyさん
02/07/05 06:25ID:???0637長文
02/07/05 07:22ID:xwCvs6jw@file1は写し間違いでした。すみません
grep、調べてみました。頭に入れときます。
>>636
そうですね、自身も含まれちゃうんで
ファイル名ではじこうと思います。
でも、@filesを表示する以前に
opendir()でdieしてるみたいなんですが……
ローカルでも、アップした状態でもやってみましたが
結果は同じでした。
環境によっては使えないとか、そういうことってあるんでしょうか。
サーバはxreaを使ってます。ローカルではMacのWEB共有です。
0638長文
02/07/05 07:24ID:xwCvs6jwこんな時間にありがとうございますです。
0639nobodyさん
02/07/05 07:26ID:q2MOJvqj$line = join('',@lines);
$line = s/***/****/g;
for (0 .. $#lines) {
my($tmp) = $lines[$_];
$tmp = s/***/****/g;
$line .= $tmp;
}
どちらが最適か教えて下さい。
(元のデータは残しておく)
0640japh ◆J.5V8ta6
02/07/05 08:30ID:???Benchmark使ってみろ。
そうすればどっちを使うべきかは一目瞭然。
#!/usr/bin/perl -w
use Benchmark;
use IO::File;
my @lines = IO::File->new(__FILE__)->getlines;
timethese 100000 => {
1 => sub{
my $line;
$line = join('',@lines);
$line =~ s/$/:/g;
},
2 => sub{
my $line;
for (0 .. $#lines) {
my($tmp) = $lines[$_];
$tmp = s/$/:/g;
$line .= $tmp;
}
},
};
0641
02/07/05 12:27ID:L0bSs9Akmod_perl用のディレクトリ以下にあるファイルは全てCGIとして使われちゃうと聞きました。
他のディレクトリに画像を移そうかとも考えましたが、スクリプトの修正個所が多くて大変なんです。
Apacheのhttpd.confの設定とかで利用できる用に出来ませんか?
0642nobodyさん
02/07/05 14:44ID:???できるよ。perldoc cgi_to_mod_perl読め。
あとは下記スレで。
[mod_perlを使おう!]
http://pc.2ch.net/test/read.cgi/php/1005122528/l50
0643nobodyさん
02/07/05 19:28ID:???できるならやり方を教えて下さい。
0644nobodyさん
02/07/05 19:35ID:???opendirとreaddirを使う。
使い方は自分で調べてみよう。
0645nobodyさん
02/07/05 19:36ID:???@readlist = readdir(DIR);
closedir(DIR);
ただ、 . と .. も入るから注意。って、他にもあったな、やりかた。
0646nobodyさん
02/07/05 20:25ID:???@readlist = grep ! /^\.\.?$/, readdir(DIR);
closedir(DIR);
0647nobodyさん
02/07/05 21:05ID:???{
my @dir;
opendir( DIR, $_[0] ) || return 0;
@dir = grep( !/^\.\.?$/, readdir( DIR ) );
closedir( DIR );
foreach ( @dir ) {
if ( -d "$_[0]$_\/" ) {
push( @all, "$_[0]$_\/" );
&filescan( "$_[0]$_\/" );
}
else {
push( @all, "$_[0]$_" );
#print "$_[0]$_\n";
}
}
return 1;
}
0648nobodyさん
02/07/05 23:25ID:St7kmpIx{
}
とかくバカは死ね
0649nobodyさん
02/07/05 23:26ID:???@readlist = readdir(DIR);
closedir(DIR);
splice(@readlist, 0, 2);
0650nobodyさん
02/07/05 23:49ID:???@readlist = <*>;
を愛用してる。こっちは逆にドットファイルが出てこないけど。
0651nobodyさん
02/07/06 01:52ID:???http://pc.2ch.net/test/read.cgi/php/1024741312/71-
0652nobodyさん
02/07/06 05:36ID:???0653nobodyさん
02/07/06 10:20ID:???アナル → <*>
0654643
02/07/06 13:09ID:???ファイルの取得ができました。
さらに、この配列を、最終更新日時順にソートする、、なんてことはできますか?
よろしくお願いします。。
0656Saru
02/07/06 13:21ID:CFBQ9es6どのようにかいたらいいんでしょうか?
今は
s/[0-9]{2}//g;と書いてます。
1桁の数字は残しておきたいんですが…。
どなたかヒントでもよいので教えてください。お願いします。
0657nobodyさん
02/07/06 14:01ID:???0658Saru
02/07/06 14:16ID:CFBQ9es6困っていたのでとても助かりました。
どうもありがとうございます!
0659nobodyさん
02/07/06 14:32ID:???0660nobodyさん
02/07/06 14:54ID:???今クリック数をカウントするCGIを作ってるのですが、
クライアントから送られてくるデータが
id=1&url=http://www.***.com/
だったばあい、
$idの中身を1に
$urlの中身をhttp://www.***.com/
にしたいのですが、今は
$data = $ENV{'QUERY_STRING'};
@data = split(/\&/,$data);
$id = $data[0];
$url = $data[1];
%id = split(/\=/,$id);
%url = split(/\=/,$url);
となんとも効率が悪いやり方なのですが自分の知識ではこのようにしか
やり方が分からないのですがもっといいやり方は無いでしょうか?
それともし$dataに「&と=」が無かった場合はexitで終了させたいのですが
どのように調べればいいのでしょうか?
よろしくお願いします。
0661nobodyさん
02/07/06 15:02ID:???$buffer = $ENV{'QUERY_STRING'};
if (($buffer !~/&/ )&&($buffer !~/=/){exit;}
local(@pairs) = split(/&/,$buffer);
foreach $pair(@pairs){
local($name,$value) = split(/=/,$pair);
$FORM{$name} = $value;
}
0662nobodyさん
02/07/06 15:03ID:???0663nobodyさん
02/07/06 15:12ID:???$FORM{$name} = $value;
これは%FORMというハッシュの中にkeyが$nameでvalueが$valueというのを
代入してる処理なんでしょうか?
0664nobodyさん
02/07/06 15:17ID:???この処理で、
id=1&url=http://www.***.com/ を
id=1 url=http://www.***.com/ に分割し(@pairsに)
foreach $pair(@pairs){
local($name,$value) = split(/=/,$pair);
$FORM{$name} = $value;
}
で それらをさらに分ける。
$FORM{$name} = $value;
は
$FORM{id} = 1;
$FORM{url} = http://www.***.com/;
になるから%FORMに入れられる。あとはこれらを自由に処理するだけ。
0665nobodyさん
02/07/06 15:20ID:???なるほど。理解できました。ありがとうございます。
ちなみにローカル変数はサブルーチン内で使うものでわなかったでしょうか?
サブルーチン化したほうがいいのでしょうか?
0666Saru
02/07/06 15:21ID:CFBQ9es6こちらは2桁ともに削除できるんですね。
勉強になります…!ありがとうございます。
0667nobodyさん
02/07/06 15:22ID:???split(/=/,$pair);
これは
=の前に\を入れてエスケープするんですよね?
0668nobodyさん
02/07/06 15:31ID:???たいていはサブルーチン化して、GETもPOSTも対応してる。
local($pair,$buffer);
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{'QUERY_STRING'};
}
local(@pairs) = split(/&/,$buffer);
foreach $pair (@pairs) {
local($name,$value) = split(/=/,$pair);
$FORM{$name} = $value;
}
0669nobodyさん
02/07/06 16:42ID:up0NZwlmこれを 600 で生成されるようにするにはどうすればよいでしょうか?
CGIはユーザー権限で動いています。
おながいします。
0670nobodyさん
02/07/06 16:45ID:???0672nobodyさん
02/07/06 16:51ID:up0NZwlmumask関数ですね。検索して調べてみます。
0674nobodyさん
02/07/06 17:42ID:stglrVc7openよりはセキュアかもだしな。
0677nobodyさん
02/07/06 21:50ID:pjFxin79どのようにすればよいでしょうか?
0678nobodyさん
02/07/06 21:53ID:???`C:\Program Files\Internet Explorer\IEXPLORE.EXE`
0679nobodyさん
02/07/06 23:30ID:Jm7Ff5yb0680nobodyさん
02/07/06 23:31ID:???0681nobodyさん
02/07/07 01:52ID:iHDNP1fk★の部分の書き方がわかりません。(ぺこり)
他も間違いありましたら教えて下さい。
-------------------------------------
functuon myfun{
P=document.F.E1.value+document.F.E2.value+document.F.E3.value;
T=0;
for(i=0;i<P.length;i++){T=T+eval(P.charAt(i))}
if((T==11)||(T==22)){document.F.E4.value=hoge[T]}
else{while(T>=10){T=T-9;}
document.write(hoge[T])
}
-----------------------------------------
foreach $data ( @buf ){
( $name , $value ) = split( /=/ , $data );
$FORM{$name} = $value;
@list = values %FORM
};
$P = $list[0]+$list[1]+$list[2];
$T = 0;
for($i=0; $i<★; $i++){$T=$T+★($i)};
if(($T==11) || ($T==22)){$list[4]=hoge[$T];}
else{while($T>=10){$T=$T-9;}}
print "hoge[$T]";
0683681
02/07/07 02:18ID:iHDNP1fk整数
document.F.E1.value
document.F.E2.value
document.F.E3.value
計算をするための作業用の変数
P
T
Pのlengthを取得するためのカウンター用の変数
i
他のはformに入力された値を取得するための変数です
0684nobodyさん
02/07/07 02:32ID:???for($i=0; $i<★; $i++){$T=$T+★($i)};
↓
for($i=0;$i<length($P);$i++){$T=$T+substr($P,$i,1)}
0686nobodyさん
02/07/07 12:56ID:xpVArwn6データの受け渡しをするプログラムを作っているんですが、
他のURLへジャンプさせるときに、
<A HREF="http://***/CGIスクリプト名?ジャンプ先URL">ジャンプ</A>
としたいんですが、ジャンプ先URLをフルパスで出せるようにするには
どうしたらいいですか?以下がつくった内容です。
my($encoding) = @_;
my($method) = $ENV{'REQUEST_METHOD'};
if ($method eq 'GET') { $query = $ENV{'QUERY_STRING'}; }
elsif ($method eq 'POST') { read(STDIN, $query,
$ENV{'CONTENT_LENGTH'}); }
local(@query) = split(/&/, $query);
foreach (@query) {
tr/+/ /;
($key, $val) = split(/=/);
$key =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
$val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
$val =~ s/\r\n/\n/g;
$in{$key} = $val;
}
my $req = new HTTP::Request POST => $val;
$req->content_type('application/x-www-form-urlencoded');
$req->content('match=www&errors=0');
my $res = $ua->request($req);
if ($res->is_success) {
$myd = $res->content;
$myd =~ s/(\<A HREF=\")/$1test.cgi?/g;
print $myd;
} else {
print "No!";
}
今の状態ですと、
$myd =~ s/(\<A HREF=\")/$1test.cgi?/g;
をやると、
<A HREF=test.cgi?test/index.html> というような感じになって
<A HREF=test.cgi?http://www.***.co.jp/test/index.html>
というような形になりません。
0687nobodyさん
02/07/07 16:41ID:???入力データをハッキリさせたら正規表現スレで質問すべき問題だろ。
0688nobodyさん
02/07/07 20:52ID:ZrDEUCOM686です。
<A HREF="http://www.test.co.jp/test.cgi?http://www.test.co.jp/next.html">ジャンプする</A>
正規表現スレでやればいいんですか?
それ以前のヴァカなもので、初心者スレで書き込んだんですが、
それも場違い?
答えも見つからず、困っていたのに(泣)
0689nobodyさん
02/07/07 21:33ID:???$link= qq(<A href="CGIのURL?$ENV{'QUERY_STRING'}">XXXへのリンク</A>);
0690nobodyさん
02/07/08 16:37ID:???半角数字以外が入力されたらエラーメッセージを返すとか
どう呼ぶのかわからないのですが、
よく使われる処理のモジュールというかライブラリーと言うのか
そんな感じのものを探すにはどうしたら良いですか?
googleしてみましたがキーワードが甘いらしく見つかりませんでした
0691nobodyさん
02/07/08 16:38ID:ZsVGz1/q0692nobodyさん
02/07/08 16:41ID:???送られてきたデータが /[^0-9a-zA-Z}/ 以外なら die とか。
0693nobodyさん
02/07/08 16:45ID:ZsVGz1/q0694nobodyさん
02/07/08 17:12ID:E09xqBbE1 3 6 10と返ってきてしまうのを、どうにかして
1 3 3 6 10にできないものでしょうか・・・?
0695nobodyさん
02/07/08 17:31ID:???@data = (3,3,10,6,1);
@sort_data = sort
{
$a <=> $b;
} @data;
0696nobodyさん
02/07/08 22:12ID:Hy1uHDxpそれだと、受け取ったURLそのまま出ちゃうんじゃないかい?
0697nobodyさん
02/07/08 23:54ID:HDd0iUwW0698nobodyさん
02/07/09 00:04ID:???0699nobodyさん
02/07/09 00:05ID:???0700nobodyさん
02/07/09 00:06ID:???「アァァァーグヴィ!」
じゃなかったっけ?
0701nobodyさん
02/07/09 00:11ID:???FORMを取得して
$post_mes="mode=view&action=2&no=17&wname=teston&wmail=aaa@aol.com&wcomment=test";
って感じにして(多分ここが違う?)
# POST
print SOCKET "POST $check_host HTTP/1.1\r\n";
#HTTP_REFERERを送信
print SOCKET "REFERER: $referer \r\n";
#User-Agentを送信
print SOCKET "User-Agent: $agent \r\n";
print SOCKET "X_FORWARDED_FOR: $xfor \r\n";
print SOCKET "Accept: */* \r\n";
print SOCKET "Accept-Language: ja \r\n";
print SOCKET "Accept-Encoding: gzip \r\n";
print SOCKET "\r\n";
print SOCKET "Content-Type: application/x-www-form-urlencoded\r\n";
print SOCKET "Content-Length: $length\r\n";
print SOCKET "\r\n";
print SOCKET "$post_mes\r\n";
みたいな感じでやってみたんですが駄目でした。
なんの反応もないみたいです。
なお、いたずら目的ではありません。Perlも自分のPCで動かしてます。
犯罪の悪寒・・・
0705702
02/07/09 00:27ID:???すいません。よく知らなくて・・・
0708.
02/07/09 00:41ID:???0710702
02/07/09 00:45ID:???dukeとか言うのですよね。探してみます
>>709
すいません。
lpwで検索してもよくわかんないと思ったらlwpだったんですね・・
0711nobodyさん
02/07/09 01:01ID:???print while(<SOCK>);
ってして、どんなレスポンス帰って来てるのか読んでみ
0712702
02/07/09 04:02ID:???なんとかPOSTできました。
0713nobodyさん
02/07/09 04:31ID:???ARGV = ARGuments Variable
だろ。
Value = 値
Variable = 変数
少しは勉強しろ
0715121
02/07/09 21:35ID:7t2WvFstちなみに僕はロリです、同士な人はいってください。
http://muke.up.to
0716nobodyさん
02/07/09 22:15ID:jsAirJtA0〜99の数字で(1,2,3,11,34)を含まない、配列を得るにはどうしたら良いのでしょうか?
例えば、(4、5、12)
0717nobodyさん
02/07/09 22:19ID:lugOGira& と = をsplitして文字コードを変換したんですが、
local(@query) = split(/&/, $query);
foreach (@query) {
tr/+/ /;
($key, $val) = split(/=/);
$key =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
$val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
$val =~ s/\r\n/\n/g;
$in{$key} = $val;
}
送られてくるデータの引数が複数ある場合は、このほかに
何かつけ加えなければならない?
0718nobodyさん
02/07/09 22:22ID:???if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{'QUERY_STRING'};
}
local(@pairs) = split(/&/,$buffer);
foreach $pair (@pairs) {
local($name,$value) = split(/=/,$pair);
$FORM{$name} = $value;
}
0719nobodyさん
02/07/09 22:25ID:???0720nobodyさん
02/07/09 22:34ID:???@data = (1, 2, 3, 11, 34);
for ( 0..99 )
{
foreach ( @data )
{
push
}
}
0721nobodyさん
02/07/09 22:38ID:???4, 5, 12を除いてみた.
%exclude = (4 => 1, 5 => 1, 12 => 1);
@data = grep { !$exclude{$_} } 0 .. 99;
0723nobodyさん
02/07/09 22:40ID:lugOGiraそれってどういうこと?
よくわかんない…、スマソ
0724nobodyさん
02/07/09 22:45ID:???より、
=~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1 )/eg;
の方が早いって言いたいんじゃない?
0725716
02/07/09 22:51ID:???>>721
こんなに、すぐレスくれるなんて思っていませんでした。
有り難う御座います。
これから、考えてみます。なにせ初心者な物でチンプンカンプンです。
0726ヽ(`Д´)ノ ウワァァン
02/07/09 23:29ID:gcNlx8b2CGIファイルをエクスプローラーで見ようとすると文字化け! ヽ(`Д´)ノ ウワァァン
レンタルサーバー上にアップしたら文字化けしないのに! ヽ(`Д´)ノ ウワァァン
0727nobodyさん
02/07/09 23:45ID:???print "Content-type: text/html; charset=Shift_JIS\n\n"; ヽ(´∀` )ノ
0728
02/07/10 00:48ID:Q4ccJnsM$a = 10;
だと
$a2 で 20 になるのですか?
するどいな。だれにおそわった?
0730 .
02/07/10 01:09ID:???本当なの?
$a2 って変数は使えないの?
0731nobodyさん
02/07/10 01:13ID:fQbDc9qZ入力した文字を****と表示して
さらにクッキーにも****と記録するにはどうすればいいの?
…別に使う訳じゃないんだけど興味。
0732nobodyさん
02/07/10 01:13ID:???$a - 2 引き算
$a * 2 掛け算
$a / 2 割り算
0734nobodyさん
02/07/10 01:15ID:fQbDc9qZさんきゅ。
後は調べる
0735nobodyさん
02/07/10 06:44ID:???0736由々しき問題でありぞっとしない
02/07/10 07:10ID:???http://www.google.com/search?num=100&hl=ja&ie=UTF-8&oe=utf-8&as_qdr=all&q=%E4%B8%AD%E5%AD%A6%E7%94%9F++%E5%9B%BD%E8%AA%9E%E5%8A%9B+%E4%BD%8E%E4%B8%8B+%E5%95%8F%E9%A1%8C&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
0738nobodyさん
02/07/10 09:20ID:???全てのパスワードを同じ物にするようなマヌケな奴相手ならな。
まぁ、マヌケが多いのは確かだが。
0740nobodyさん
02/07/10 10:21ID:9iF/zPMpうまくいきませんでした
どうすれば良いですか?
#入力されたのが数字かどうかチェック
if($P eq /[^0-9]/){print "数字を入力してください。";}
else{
if($P == /[^0-9]/){print "数字を入力してください。";}
else{
0741nobodyさん
02/07/10 10:24ID:???=~ //
だろ。
0742740
02/07/10 14:18ID:lBfYsgMLできましたーーー!!
ありがとうございます
0745nobodyさん
02/07/10 16:58ID:???0746nobodyさん
02/07/10 17:04ID:???0747746
02/07/10 17:14ID:???0749nobodyさん
02/07/10 19:25ID:???それだと意味が変わるぞ。
>740の書き込みとif文の構成をよく見ろ。
0750nobodyさん
02/07/10 19:28ID:???それやるなら、
if ( $P !~ /^[0-9]+/ ) { }
か
unless ( $P =~ /^[0-9]+/ ) { }
じゃないと。
.htaacessでやるんじゃなかったっけ?
トリッパー使って3時間ほどadminで検索してたら偶然SE付きのがHITしますた
0754nobodyさん
02/07/10 22:02ID:???$fied[1]=~tr/a-zA-Z_0-9\/.\n?-!"#$%&'()\=~|\{\`\+\*}_?><,\/\\\];@\[\\^-/@/cs;
↑このように書くしかないんですかね?
[a-zA-Z_0-9]以外の文字ぜんぶをあらわす特殊変数みたいなのありませんか。
0755nobodyさん
02/07/10 22:03ID:01h+ntYo[^0-9a-zA-z\_]じゃだめなの?
0756nobodyさん
02/07/10 22:18ID:???0758nobodyさん
02/07/10 23:23ID:???じゃだめなの?
0759nobodyさん
02/07/10 23:26ID:PCSWC5jP$arg =~ s/(\W)/'%'.unpack("H2", $1)/ego;
のunpack関数を使ってみたんですが、これだと、
最初の文字1文字しかエンコードされないですよね?
例えば、
$arg=test.html?list=リスト&name=名前
なんかだと、最初の「リ」だけじゃなく、
「リスト」と「名前」の該当する文字全部が
変換されるようにするには、どうしたらいいですか?
0760nobodyさん
02/07/10 23:30ID:???おまいのegoがでてるよ。
0764nobodyさん
02/07/11 01:10ID:???0765nobodyさん
02/07/11 02:32ID:???0766nobodyさん
02/07/11 05:54ID:???君たちは勘違いをしている。s/foo/bar/という構文の中で正規表現は
"foo"の部分だけなので例え"o"オプションをつけたからといって"bar"
のほうにはなんら意味がない。"o"は「正規表現」を一回だけコンパイル
するオプションであって置換内容をコンパイルするものではないという
事だす。
my $target = "AAAcccAAA";
for my $replacement ( qw/ bbb ddd / ) {
my $tmp = $target;
$tmp =~ s/ccc/$string/go;
print $tmp, "\n";
}
0767nobodyさん
02/07/11 07:05ID:???0768nobodyさん
02/07/11 07:13ID:???こっちから、また尋ねないと解らないような質問ヤメテくれ
0769nobodyさん
02/07/11 07:21ID:???説明がおかしかったですか。。例えば、
print "Content-type: text/html;\n\n";
こうゆうのが出力された後ならCookieに書くとかできないじゃないですか
だから、ヘッダが出力されているかどうか調べたいのですが。。
こういたことはできますか?
0770nobodyさん
02/07/11 07:43ID:???>print "Content-type: text/html;\n\n";
こう言うのを探せば良いんじゃ無いの?
端末側で吐いてる事確認したいのなら
オミトロンとかで吐き出せる
0771nobodyさん
02/07/11 09:21ID:???ヘッダとボディの区切りは改行
print "Content-type: text/html;\n";
print "Set-Cookie: name=value;\n";
〜〜〜 ↑ヘッダ 〜〜〜
print "\n";
〜〜〜 ↓ボディ 〜〜〜
print 〜〜〜
0773nobodyさん
02/07/11 14:06ID:???ソース追ってるってことではないです。。
>>771
それは分かっています。
区切りの改行が出力されたらもうヘッダに書き込めなくなるじゃないですか
だから、区切りの改行が出力されたかどうかPerlで調べたいです
こういったことはできないのでしょうか。
0776nobodyさん
02/07/11 14:26ID:???perlではそんなことをいちいち区別してない。
0777nobodyさん
02/07/11 15:13ID:/kd92Z8Gprintの内容を送るだけ、そのあとはhttpdの仕事
判断するなら771の言うように改行を調べれば良い。
our $headers_end;
sub myprint
{
$headers_end = 1 if /^$/;
print @_;
}
とか、どう?。
printをオーバーライドしてもいいかも。
# >>753 トリップ変えました。ありがとう
どういたしますて
0781nobodyさん
02/07/12 02:47ID:???> GDモジュール、どうしても使えない。。
>
> 1 :nobodyさん :02/07/09 00:13 ID:k+y90VS+
> サーバはWebARENA Suite、
> GD.pmを使おうと
> サーバにコンパイル済みのGD1.27をアップするがどうしても
> うまく動かない。
>
> perl: error in loading shared libraries: ./auto/GD/GD.so: undefined symbol: gdImageJpegPtr
>
> こんなエラーが出る。。
> どうすればいいのか。。
> WebARENAはPerlは5.0.503だから、その環境でコンパイルしたものを選んだ。
> なぜだ、、何が、、いったい。。
0782781
02/07/12 02:47ID:0osVMAyz例によって親切には説明するつもりはないのでそのつもりで。
1. とりあえず telnet.cgi をまともに動かして。
2. gd-1.8.4.tar.gz(libgdのソース)というふぁいるをGETして。
3. CPANよりGDモジュールのソースふぁいるをGETして。
4. 二つのファイルをtelnet.cgiと同じdirにUPして。
5. 二つのファイルをtarで解凍して。
6. インストール先dirをcgi-bin以下にlib,include,bin,man作成
7. gd-1.8.4/Makefileを編集(インストール場所を6で作成したdirに設定)
8. gd-1.8.4をmake; make install
9. GD-1.40/Makefile.PLの
$DEFINES .= ' -DHAVE_XPM' if $XPM;
をコメントにする。
10. GD-1.40のDIRで[ perl Makefile.PL LIB=/virtual/おまえのIP/cgi-bin/lib/perl5 INSTALLMAN3DIR=/virtual/おまえのIP/cgi-bin/man/man.3 ]実行
11. 10で出来たMakefileに8でインストールしたgdへのLIBパスとINCパスを追加して,X関連のリンク(だっけ?-lx11とか)を削除
12. make; make install
13. GD使うスクリプトの冒頭で #!/usr/local/bin/perl -I../lib/perl5/i386-linux とでもしてくれ。
15. あとはてめぇでがんばれ。
16. 意味がわからん?ってか,わからんならやらないでくれ。他に迷惑がかかるかもしれんし。
とりあえず,demo/gd_example.cgi は動いたぞ。
# /usr/libにlibgdがあるのにヘッダがない罠…。
いくらわからんからって単発スレは立てないでくれ。
あなたのスレ立てのために他のスレがdat落ちするじゃね〜かよぉ〜。
0784nobodyさん
02/07/12 12:08ID:???if($name eq ''){print "hoge";}
と
print "hoge" if(!$name);
は処理的には同じに思うんですが
書き方以外に何か違う意味とかってあるんですか?
それは処理的に同じではないよ。
$nameが単なる文字列なら結果としては同じことだけど、
もし$nameがオーバーロードされた文字列なら、全く違う結果になることはありえる。
まぁそんなことを聞きたいんじゃないと思うけど、
質問する場合はその辺を簡略化してよ。
で、
if(foo){ bar }
と
bar if foo;
は同じこと。ちなみに
foo and bar;
も同じ。
書き方意外に違う意味は「読みやすさ」だね。
自分が文脈に合う、読みやすい、と思う構文を使えばいいよ。
0786nobodyさん
02/07/12 12:47ID:???$name = "0";
の時に変わるな。
あう、そういえばそうだ。
単なる文字列だとしても別の意味をもつ文だね。
0789nobodyさん
02/07/12 17:48ID:???# ローカル環境(WindowsMe+Apache+Cygwin付属のPerl)では成功するのですが、
# サーバで実行するときには、必ず失敗します。
# コーディング上の落ち度がありましたらご教授ください。
sub create_lock {
my ($lockfile, $retry) = @_;
while (!mkdir($lockfile, 0755)) {
if (--$retry <= 0) {
return undef;
}
sleep(1);
}
return 1;
}
sub remove_lock {
my ($lockfile) = @_;
rmdir($lockfile);
}
#上記関数の利用例
my $lock_handle = &create_lock($dir_lock, $lock_retry);
if (not $lock_handle) {
&print_error($resource{writedatafailed});
}
#ここで処理する
&remove_lock($dir_lock);
0790789
02/07/12 17:48ID:uV0iCTit0791nobodyさん
02/07/12 17:53ID:???ttp://pc.2ch.net/test/read.cgi/php/1024795138/
0793nobodyさん
02/07/12 19:41ID:mbAMx/DLタブ区切りの表から、一行ずつ取得し、grepで検索をかけ、
マッチしたものとマッチしなかったものの一覧を作成したいのですが
・条件に、検索キーワードは複数。(or形式)
・行末に、ヒットしたキーワードのみ挿入(複数のうち、該当した物だけ)
というものがあります。
その時
if(grep /$kw{$key}/,@line){#配列の中にキーワードが入っているなら
chomp @line;
if($check_flag == 0){
push(@result,@line);
push(@result,$kw{$key});#resultに追加
$check_flag = 1;#別のところでフラグに使っている
$flag = $line[0];#別のところでフラグに使っている
$no_count = 1;#一回目かそうで無いかのフラグ
push(@result,"\n");#行末にキーワードをつける
}elsif($check_flag == 1){#二回目からはキーワードのみを最後につける
push(@result,$kw{$key});
$no_count = 1;
とした時、配列の最後に$kw{$key}をpushで押し込むと、強制的に改行が入ってしまいます。
かといってchompをすると、全部改行が消えてしまい、全部のデータで一行扱いになってしまいます。
どうにか最後の改行のみ消す方法はありませんでしょうか?
取得した行+キーワードx個
取得した行+キーワードx個
・
・
というような表を、上記のスクリプトに手を加える程度で
作成することは可能でしょうか?
すいませんが、わかる方がいらっしゃいましたらご教授ください。
0794nobodyさん
02/07/13 00:01ID:???とりあえず突っ込んでおこう。↓は何ですか?
push(@result,"\n");#行末にキーワードをつける
あと$kw{$key} に改行が含まれる可能性は?
つーかそもそも if (grep /$kw{$key}/, @line) { 〜でやりたい事が出来るのかねぇ。疑問だよ。
0795nobodyさん
02/07/13 01:13ID:???どうすればよいでしょうか。
バイナリ化して、プロテクトをかけると聞いて調べたところ、
バイナリエディタというものを見つけましたが、
プロテクトの仕方がどうしても解かりません。
プロテクトするほどのソースは書けませんが、
どうかよろしくお願いします。
0797nobodyさん
02/07/13 22:35ID:xEQW3A4yA :22
B :31
C :13
上記のような二次配列を連想配列をつかって作成したのですが、
これをソートするのはどのようにすればいいのでしょう・・?
知人の考えで、年齢をハッシュのキーにしてソートすると言う案があったのですが、
同じ年齢の場合には、上書きされてしまうのでその案は使えませんでした。
どのようにすればいいでしょう・・?
0798nobodyさん
02/07/13 22:49ID:???print qq($_ : $hash{$_}\n);
}
0799nobodyさん
02/07/13 22:49ID:???適宜修正して。
0800nobodyさん
02/07/13 23:28ID:???今、ラクダ本で、コンパイルについて見ています。
しかし、use Protect ;とファイルにはあるのですが、
この Protectの部分について書かれていません。
use Protect ; は、どうやればできるのでしょうか。
ラクダ本のどこだかわからないが、
それは「自分でプロテクトモジュールを作成してね」という意味だと思う。
とりあえずそれを実装するには、
・Perlに構文の理解
・CPANのFilterライブラリの使用法
・暗号化ライブラリの使用法
が最低限必要だと思うよ。
0802お酢カル ◆myMazZ7Y
02/07/14 01:07ID:???説明できないオナニー野郎は(・∀・)ウセロ!!
まぁ>>800は馬鹿だからこれでいいかと
------------encode-------------------
while(<>){
$n= unpack "h*", "$_";
$n=~y/123456789fedcba/abcdef987654321/;
$e= pack "h*" , "$n";
print $e;
}
0803nobodyさん
02/07/14 01:08ID:???googleで、検索していたのですが、use MD5; というのは、
見つけました。
私には、まだ敷居が高そうです。
e-shoppyというSHOPスクリプトの試用版にバイナリエディタを
使うようにあったので、試用版って、こんな感じで配布しているんだと
思い、気になるので調べていました。
スクリプトを売る前に、試用版として、こんな感じで配布すれば、
ソースがプロテクトできるので、有用だなと興味を持ちました。
0804nobodyさん
02/07/14 02:43ID:vNhQYRiQ今、perlでBBSを書いているのですが、
大体できて知り合いの所に入れてもらったりして
動作確認しました。
色んな環境の人のところで正しく動作したのですが、
(perlのバージョンが5.5or5.6,実行権限がnobody,オーナー等)
一人だけ動作がおかしい人がいるんです。
何がおかしいのか調べてみたら、
サブルーチンでseekさせてメインのルーチンに戻ってくると
seekさせたのが無かったことに?なってるんです。
サブルーチンでどんなにseekさせても
メインのルーチンで続行するとなぜか次の一行は空行、
その次の一行はファイルの一行目を読み込みます。
そのおかしくなる人の環境は
OS NAME = freebsd
PROCESS ID = 5854
PERL EXECUTABLE = /usr/local/bin/perl
PERL VERSION = 5.00503
ってな感じです。権限はオーナー権限です。
他の、perlのバージョンが5.5の人のところではちゃんと動いてます。
この人の環境になにか特別なものがあるとは思えないので、、、
ただ、他の人はみんなlinuxなんですけどそれって関係ありますか?
コーディングの問題かとも思っていろいろ試行錯誤してるのですけど
もう分からないんです・・・
0805nobodyさん
02/07/14 02:51ID:CbCEC3kHソースもどこかにアップしてみてよ。
0806nobodyさん
02/07/14 03:15ID:???UPしてみました。なにぶん、perlでの初めてまともな作成物なので
見るのも辛いところもあると思いますが、よろしくお願いします。
ttp://naha.cool.ne.jp/b3b3b/styx.zip
0808nobodyさん
02/07/14 03:25ID:???もうしわけないです;;
0809nobodyさん
02/07/14 03:42ID:CbCEC3kHsysread関数と他の方法による読み込みの混用が存在しています。
これは、わたしの手元のラクダ本に書いてあることですが、これらの混用は、
あなたがウィザード級の腕前の持ち主でないかぎり推奨できないとあります。
0810nobodyさん
02/07/14 04:04ID:???どっかのサイトで行数を数える一番効率の良い方法ってのが出ていまして、
sysread使ってましたので、行数を数えるのにsysread使ってます。
sysread使わないで書き直してもみます。
いまおかしくなってる環境の当人に連絡が取れないので
今すぐには無理だと思いますが。
ただ、殆どの人のとこでは正常に動いていて
その人のとこでだけ動かないっていうのが気になります。
環境に依存するような問題があるのでしょうか?
(ファイルを扱う関数の、実装の違いとか)
らくだ本欲しいですけど
貧乏なので本屋で眺めるだけです;;
perl は立ち読みと WEB と皆さんの素晴らしい作品で勉強中です。
0811nobodyさん
02/07/14 04:15ID:CbCEC3kH恐らくではありますが、FreeBSD環境では sysread関数と他の読み込みの混用の
面倒をみてくれないということでしょう。
sysread関数というのは、直接システムコールを呼び出しているので混用した
場合に処理に見合った動きが期待できなっかったりするようです。
まぁ、単純に sysread関数を read関数に書きかえるだけで恐らくうまくいくで
しょう。
それから、効率よく行数を数えるのなら以下をやってみてはどうでしょう。
while (<FILEHANDLE>){}
print "全行数は: $.\n";
close(FILEHANDLE);
0812nobodyさん
02/07/14 04:24ID:???最初はこういう方法とっていたのですが、速度が良くないようです。
ベンチとりまくってみましたが、
バッファにsysreadで読んでtrするほうが圧倒的に早かったです。
1000レスとかになるログだともろに差が出てきたので、、、
read で書き直して、ベンチマークと相談して
当人にためさせてみますね。
あと、問題の出ている個所の本元は、&std::pick だと思います。
ここでもsysreadで行数数えているので、ご指摘の問題があるのだと思います。
でもおかしいんですよね、、、
このpickルーチンだけ抜き出した簡単なテスト用cgi作って
彼にためさせたらちゃんと動作してたんですよね。
(任意の行にseekちゃんとしてる)
パッケージとか絡むとなんか違うのかなぁ〜
0813nobodyさん
02/07/14 04:29ID:CbCEC3kH速度の差なんて人間の感覚では気づかない程度のミリ秒単位だからそう
気にすることないと思います。 もしこれが遅いのならC言語などで書く
ようにすることを考えるべきです。
0814nobodyさん
02/07/14 04:44ID:???0.数秒の差だったです・・・
テストケースのログで、
(BBSのトップに○○スレのそれぞれ最新の○件を表示みたいな)
そのスレが1000レスとかあると、一行目からたとえば950行目を探すのに
while (<FILEHANDLE>)式とtr式で物凄い差が出ました。
それが20スレとかあるともう体感できそうなくらいの差だったので。
ベンチマーク用のルーチン作って2000行のログのうち**行目をサーチする、
というのを1000回まわすのを自宅でやってみたところ
tr式の方が15倍くらい早くて、
従来の方法だと固まったんじゃないかってくらい遅かったです(もう一分位;;)
BBSで使う場合1000回も回さないですけど
それでも標準的表示数で0.15秒くらいの差が出てました。
私はもともと最初にプログラムを触った時
みんなマシンパワーがなくてなんでも高速化高速化があたりまえの頃だったので
なんか貧乏癖がついてるのかもしれません。
perlで久しぶりにプログラミングってのを再開してます。
もうちょっとおおらかにプログラミングしてみます。
いろいろ有難うございました。
0815nobodyさん
02/07/14 04:48ID:CbCEC3kH0.1秒でも速くしたいのなら別ファイルに常に行数のみを保存しておく
などの方法もありますが、そこまでしてもPerlで速く処理させたい?
0816nobodyさん
02/07/14 05:02ID:???でも任意の行数にシークするってのはできないですよね。
(関数としてはない)ユーザーが工夫しないと。
書き込みがあったとき、削除のとき、だけは再度行数を取得してます。
もし、別ファイルが不慮の事故でいかれてたら一生ずれたまんまになるので。
perlでそこまでして、とは思ってないです。
生意気そうなこと言って申し訳ありません。
でも出来るだけ早く出来るならそのほうがいいかな〜ってだけです。
c-boardのソースとかみたらなんかすごくてブルーなっちゃって
高速化しないとだれも相手にしてくれないかな、って囚われていました。
早くしなきゃ、早くしなきゃって。
でも殆どの人はそんなこと気にしてないんですよね。
それと単純にベンチで段々確実に改良ごとに早くなってくのが
楽しかった、ってのもあります(笑
まだまだ勉強中の身ですので努力して良い物作れるようにがんばります〜
0817高速化遊戯
02/07/14 05:46ID:Iun5VHk7というはダメですかね?
任意の行に飛ぶ時はこっちをループでまわして
得られたファイルポインタの所にseek、と。
余計なデータが無い分、ループまわすのも早そうだし。
試してないからなんとも言えないけど。
0818nobodyさん
02/07/14 12:11ID:???大して技術も基礎もなってないのに
しかもperlで高速化とか言ってるのは
よく思われないみたいなので、もう言うのやめようと思ったのですが
高速化遊戯さんがレス下さってるので、書きます。
別ファイルだと、結局そのファイルを何らかの形で取り込まないといけないです。
while (<FILEHANDLE>){}が遅いのってベンチとってないから
断言できないですけど、ファイルの大きさうんぬんより
perlの持ってるファイルから一行取り出すための作業が
遅いんじゃないかと思ってます。(憶測で物言ってすみません)
それだったら、もとのファイルの各行にインデックスつけた
データ形式にして、
もしそれが数千行とかあるファイルだったらですけど
いくらかずつseekさせて、インデックスを拾い読みして
目次見たいの作って、任意の行を拾うときは、
その目次見て近そうなとこから探すほうがいいかと思いました。
つづく、、
0819nobodyさん
02/07/14 12:19ID:???ここみたいなBBSで、一応10000レスをリミットにしてるから
9桁(ファイルポインタ)×100 = 1KB程度がインデックスに使われてる
その代わり読み込み時の落ち込みは少ない
レス5850を読む、なら5800行目のfpを探してseek
そこから普通に行処理するだけだから。
後はファイルのお尻〜行を読むtailみたいメソッドを書いてる位。
perlで低レベルの関数使うのは面倒だから、どうしても行読み出しで
グルグルしがちだけど
工夫すれば極端なパフォーマンス低下は防げると思うよ
0820nobodyさん
02/07/14 12:22ID:???>perlの持ってるファイルから一行取り出すための作業が
>遅いんじゃないかと思ってます。(憶測で物言ってすみません)
俺もそう思う。テストした訳じゃ無いけど
sysreadでバイト読みする方がずっと早いと思うよ。
だからと言って、Cでもperlでも低レベルの関数はそれなりに
使い辛い訳で・・・
0821nobodyさん
02/07/14 12:23ID:vNhQYRiQもうログの形式を変えたくなかったのでやめました。
それにせいぜい1000行前後なので直接改行の数を数えることにしました。
それで書いたルーチンが次のようなものです。
(勉強中なのでおかしいとこあると思いますけど、、、)
sub pick {
my $fh = shift;
my $hit = shift;
my $bufsize = 4096;
my ( $per, $buf, $line, $prev );
seek( $fh, 0, 0 );
binmode $fh;
while ( sysread $fh, $buf, $bufsize ) {
$prev = $line;
$line += ( $buf =~ tr/\n// );
last if $line >= $hit;
$per++;
}
my $over = $hit - $prev;
$buf =~ /(^([^\x0D\x0A]*\x0D?\x0A?){$over})/;
seek( $fh, $per * $bufsize + length($1), 0 );
}
これでベンチとってみたらびっくりするくらい早かったです。
一行ずつかぞえるのの、15倍くらいの速さでした。
数千行あるようなファイルをいくつもまわす場合は明らかに
体感できるくらいの差がでました。
それで嬉しくて調子のって使っちゃったです・・・
でも良くないようなので、他の方法探してみます。
(FreeBSDだけなのかな?、ダメなのは)
0822nobodyさん
02/07/14 12:32ID:???最近コード書いてないんで殆ど忘れちゃったんだけど
俺も>>809さんの言うとおりだと思う
Cで速度を求めてfgetsからreadにした時に、そう言う問題に嵌った事有るよ
良く覚えて無いんだけど、結局は低レベルと高レベルの読み込み関数を
併用したのが間違いだったと思う
0823nobodyさん
02/07/14 12:38ID:vNhQYRiQうわぁ、それスマートです;;
とても勉強になります。
今作ってるのはもう固まってきちゃってるので
大きいバージョンUPの時にでもそういう手法でやってみます。
いぱーいレスつけられますもんね〜
>perlで低レベルの関数使うのは面倒だから、どうしても行読み出しで
>グルグルしがちだけど
うんうん。地が貧乏性なので、配列にごっそりとかぐるぐるとか
なんか疑問に思っちゃって。
いろんなBBSのスクリプト見たりあさったりしたんですけど
意外と、みんなぐるぐるで、グルグルでいいんかよ〜って思ってたんです。
だからこういう具体的な工夫例聞けてとてもやる気でました。
0824nobodyさん
02/07/14 12:40ID:???ログのコンバータ書いた方が後々苦労しない気もしないでもない。
これだとシステムよりの関数は一切使ってないから
つーか1000行程度ならぶん回しても問題無いんじゃない?
0825nobodyさん
02/07/14 12:41ID:???0826nobodyさん
02/07/14 12:42ID:vNhQYRiQつかめてきたのでこれから色々その線でしらべて見ようと思います。
0827nobodyさん
02/07/14 12:45ID:???〜〜する清原みたいなバカスレが再現出来ると結構嬉しいもんです(・∀・)
0828nobodyさん
02/07/14 14:31ID:ZiG6NcZV現在、赤帽7.2の上にRPMとして乗っかっているPerlのバージョンは、5.6なのですが、
ある既製のPerlスクリプトを使いたいのです。
そのPerlスクリプトは、Linux上でJperlを必要としているのですが、
私が探した範囲では、Linux用のJperlのパッチは、5.005ベースのものしかありません。
パッチをあてようとしてもうまくあたりません。
この、Jperlを必要としているPerlスクリプトをLinux上で動かすには、
どのような解決策があるのでしょうか。どなたか、よろしくお願いしますです。
0829nobodyさん
02/07/14 14:33ID:???0830nobodyさん
02/07/14 15:00ID:xUfIRkakJperlを必要とする既製スクリプトってたいしたことなさそうだから、
一から自分でコーディングしてみては?
0831nobodyさん
02/07/14 15:29ID:ZiG6NcZV>>830さん
レスありがとうございます。確かに、その通りなんですが、
1>そのスクリプトが200KBほどある
2>日本語の文章の構造解析のスクリプトなので、日本語処理がチョット複雑
3>あくまでもテストとして、ちょっと動かしてみたいだけなので、できるだけ手間を
かけたくない
という理由で、Perl5.005のソースをDLして、それにパッチを当てようと思っていた
のですが、Perl5.005のソースがなんか見当たらないのです。
0832nobodyさん
02/07/14 15:52ID:???簡単に見つかる予感。
0833831
02/07/14 16:00ID:ZiG6NcZVググルで、"perl5.005 src"で見つけました。
すんませぬ。"perl5.005 source"とか”rpm"とかで検索していたオラが
間抜けでした。逝ってきます。
Perl暦2日なんで、許してやってくだされ。
0834nobodyさん
02/07/14 19:04ID:???O_RDONLY = 0
O_WRONLY = 1
O_O_RDWR = 2
とかは分かってるけど
O_APPENDとかは?
検索してもヒットせず…
おしえてくらはい
0835nobodyさん
02/07/14 20:53ID:???http://www.linux.or.jp/JM/html/LDP_man-pages/man2/open.2.html
大体こんな所でしょ
0836nobodyさん
02/07/14 21:01ID:???それって歴史的に環境依存だから0.1位しか信用出来ないよ?
0837二つ目のお気に入りとして使って
02/07/14 23:31ID:gWk8eFjtゲーションリンク機能を使って右フ
レームにリンク先をさくさく表示。
今までのリンク集のようにいちいち
戻らなければならないなんてことは
ありません。
http://home9.highway.ne.jp/cym10262/
0838nobodyさん
02/07/15 00:06ID:???元ファイル開いてメモリに読み込んで別ファイルに書き出すじゃメンドイし
どの環境でも使える方法でなんか一発でする方法ないですか?
copy a b
0843838
02/07/15 00:32ID:???やってみたらやっぱりエラーが出ました。
String found where operator expected at test.cgi line 1, near
(Do you need to predeclare copy?)
syntax error at test.cgi line 1, near "copy "a.txt""
String found where operator expected at test.cgi line 1, near
(Missing operator before "b.txt"?)
Execution of test.cgi aborted due to compilation errors.
0847nobodyさん
02/07/15 07:25ID:???という場合は
if(($data !~ /&/) || ($data !~ /=/)) {exit;}
こうでいいんでしょうか?
0848nobodyさん
02/07/15 07:59ID:Gdw1y7VE私も初心者だから違うかもしれないけど
0849nobodyさん
02/07/15 09:00ID:AMXAGLXX聞くより試した方が早いだろうに。
exit if(index($data,'&') == -1 || index($data,'=') == -1);
こっちのが数倍軽い。美しくは無いが。
0851nobodyさん
02/07/15 12:21ID:???0852nobodyさん
02/07/15 12:44ID:???全くもってうまく動きません。
具体的にもうしますと、最近サイトのトップページでよく見かけるようなミニアンケートを作りたいんですが、
ラジオボタンで選択した値などが、まったく送信されてないみたいなんですが、
htmlファイル上のフォームから、別ファイルのCGIへ値を送信する場合なにか特別なことが必要なのでしょうか?
0853nobodyさん
02/07/15 13:03ID:???↓
送信ボタン押す
↓
ブラウザが、指定されたメソッドに従ってパラメータの名前や値をまとめる
そして cgi に送信
↓
cgi でそれを受け取る
↓
受け取ったのはまとまらさってるので
パラメータの名前や値に分解しなければなりません
↓
分解した
↓
色んな処理
↓
処理が終わったから新しい画面を表示させよう、
表示させるにはブラウザにhtmlを送ります(正確には他にも必要)
↓
cgi からおくらさってきた〜〜
↓
ブラウザに表示
どこでコケてる?
0854nobodyさん
02/07/15 13:18ID:???たぶん、
ブラウザが、指定されたメソッドに従ってパラメータの名前や値をまとめる
そして cgi に送信
↓
cgi でそれを受け取る
あたりでこけてる気がするのですが、
<input type="hidden" name="mode" value="vote">
をフォーム内に記述して、
if($param{mode} eq 'vote'){
簡単な処理
}
としてみても、「簡単な処理」を一切してくれないので、値を送信しないでCGIを起動だけしてる感じです。
$param{mode}が空の時は、投票結果表示の処理をさせてるので、新規ウィンドウに投票結果が反映されていない
グラフがむなしく表示されています。
なにがいけないんだろ。。。。。。
0855nobodyさん
02/07/15 13:29ID:???この処理がやってないぞ。定型。
local($pair,$buffer);
if($ENV{'REQUEST_METHOD'} eq 'POST'){
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}elsif($ENV{'REQUEST_METHOD'} eq 'GET'){
$buffer = $ENV{'QUERY_STRING'};
}
local(@pairs) = split(/&/,$buffer);
foreach $pair(@pairs){
local($name,$value) = split(/=/,$pair);
$FORM{$name} = $value;
}
0856nobodyさん
02/07/15 13:30ID:???0857nobodyさん
02/07/15 13:50ID:???すいません、書き忘れてましたが、データを受け取る処理も書き記しております。
頂いたレスを見ますかぎり、CGI→同じCGIのデータの受け渡しと、特に変わらない処理でデータを受け取れる
ということなのでしょうか。
0858nobodyさん
02/07/15 14:02ID:???0859nobodyさん
02/07/15 14:25ID:???$param{'mode'}にしたら直ったりは?
0861nobodyさん
02/07/15 14:33ID:???$param{'mode'}
$param{"mode"}
どれでも変わらんよ。
0862nobodyさん
02/07/15 14:51ID:???Perlのバージョンに影響されない?
Perl4ならクォートは必須だけど、今更4との互換性を考える必要は無いと思う。
0864nobodyさん
02/07/15 15:59ID:???悪かったな!
漏れのプロバのスペースがPerl4なんだYo!(涙ッシュ
0865nobodyさん
02/07/15 17:20ID:???設置方法が悪いのかな?それとも対応してないとか?
0866nobodyさん
02/07/15 17:20ID:???0867865
02/07/15 17:21ID:XqyW9sRL俺?
0868865
02/07/15 17:22ID:XqyW9sRL0869865
02/07/15 17:27ID:XqyW9sRL0870nobodyさん
02/07/15 17:29ID:???0871nobodyさん
02/07/15 17:30ID:Zf9qVko0http://cgi.tripod.co.jp/
0872865
02/07/15 17:59ID:XqyW9sRL0873nobodyさん
02/07/15 18:13ID:???0874すいません。。。
02/07/15 19:01ID:GXUWDI7HQuid Pro Quo 2.1.2が欲しいんです。
http://www.socialeng.com/html/download.html
で落とせると聞いたのですが、一向につながらない・・・
ここ以外では配付とかされていないんでしょうか??
よろしくおながいします。
ちなみにMacintosh用です。
0875nobodyさん
02/07/15 19:06ID:???とかのスレの方がふさわしくない?
0876nobodyさん
02/07/15 19:25ID:/pkMmlTE配列に入らないのですけれど、どこが変か教えて下さい。
htmlの部分↓
ーーーーーーーーーーーーーーーーーー
<form method="get" action="hoge.cgi">
<input type="text" name="E0" size="4" istyle="4" maxlength="4">年</input><br>
<input type="text" name="E1" size="2" istyle="4" maxlength="2">月</input><br>
<input type="text" name="E2" size="2" istyle="4" maxlength="2">日</input><br>
<input type=radio name="E3" value=1 CHECKED>男<br>
<input type=radio name="E3" value=2>女<br>
<input type="submit" value="押す">
<hr>
</form>
cgiの部分↓
ーーーーーーーーーーーーーーーーーー
$buffer = $ENV{"QUERY_STRING"};
@buf = split( /&/ , $buffer );
foreach $data ( @buf ){
( $name , $value ) = split( /=/ , $data );
$FORM{$name} = $value;
@list = values %FORM;
};
print"list[0] $list[0]<br>\n";
print"list[1] $list[1]<br>\n";
print"list[2] $list[2]<br>\n";
print"list[3] $list[3]<br>\n";
これをやってみるとこんなふう↓になります
ーーーーーーーーーーーーーーーーーーー
list[0] E3の値
list[1] E0の値
list[2] E1の値
list[3] E2の値
0877nobodyさん
02/07/15 19:27ID:???@list = values %FORM;
するのかわからん。
0878すいません。。。
02/07/15 19:43ID:GXUWDI7H逝って来ま。
0879876
02/07/15 19:46ID:???分かりました〜♪ありがとうございます。
$buffer = $ENV{"QUERY_STRING"};
@buf = split( /&/ , $buffer );
foreach $data ( @buf ){
( $name , $value ) = split( /=/ , $data );
$FORM{$name} = $value;
};
print"FORM[0] $FORM{E0}<br>\n";
print"FORM[1] $FORM{E1}<br>\n";
print"EORM[2] $FORM{E2}<br>\n";
print"FORM[3] $FORM{E3}<br>\n";
0880nobodyさん
02/07/15 21:25ID:???print <<"HTML"
<html><body>〜略〜</body></html>
HTML
とやりたいんですがこれだとエラーになります。
タブを入れたまま動くようにするにはどうしたらいいでしょうか?
あとタブを入れてないと動くのですがその中に<a href="mailto:aaaa@hotmail.com">xxx</a>
があるとエラーになります。どうしてなのでしょうか?
0881nobodyさん
02/07/15 21:28ID:???; が入ってないけど、動くの?
>href="mailto:aaaa@hotmail.com">xxx</a>
\でエスケープしたら?
href=\"mailto:aaaa\@hotmail.com\">xxx</a>
0882 ◆Smt8k/ss
02/07/15 21:29ID:wkNqkF1j<html><body>〜略〜</body></html>
HTML
0883nobodyさん
02/07/15 22:32ID:h7+zOLje一応動いたんですがもうちょっと見栄えがいいやり方無いでしょうか?
0884nobodyさん
02/07/16 00:48ID:???<html><body>〜略〜</body></html>
~;
@はエスケープしる
0885nobodyさん
02/07/16 02:17ID:???ダイス機能付きのチャットを作っているのですが、どうにもrand関数の値が偏ります。
3D6(6面ダイス3個の判定)の場合、1個目の数字が連続で同じ数字になります。
試しにWeb上にアップして試した所、そっちでは3個目の数字が連続で同じ数字になりました。
これはrand関数において仕方のないことなのでしょうか?
もし解決策などがあるのでしたらご教授いただけると嬉しく思います。
以下はダイスロール部分のソースです。
# $in{'dice_any'}にダイスの数、$in{'dice'}に何面ダイスかの情報が入ってくる。
srand(time);
$dice_roll = qq(<br><b><font color=0000FF>$in{'dice_any'}D$in{'dice'} ダイス判定</font></b> <font color=0066FF>);
$dice_all = 0; # ダイスの出目の合計用の変数
$plus = "";
while($in{'dice_any'} > 0){# ダイスの数が尽きるまで
$dice = int(rand($in{'dice'})) + 1;
$dice_roll .= qq($plus$dice );
$dice_all += $dice;
$in{'dice_any'}--;
$plus = "+ ";
}
if($dice != $dice_all){# ダイスが2個以上なら
$dice_roll .= qq( = <b>$dice_all</b>); # 合計値表示
}
$dice_roll .= qq(</font> );
# この後$dice_rollをログに保存
どなたかよろしくお願いします。
0886nobodyさん
02/07/16 03:00ID:???0887885
02/07/16 03:07ID:???0888nobodyさん
02/07/16 03:09ID:1NQx5kwR|
|-folder1
|-main.cgi
このようなファイル構造なんですが
main.cgiからtest.plを参照することは可能なんですか・・?
0889887
02/07/16 03:13ID:1NQx5kwRずれてる自己レス・・・
root にtest.plが有って
folder1にmain.cgiが有る状態です
つまり下位のファイルに参照できるかどうかと言うのが疑問なのです・・・
0890nobodyさん
02/07/16 04:53ID:???require '/home/mona/public_html/test.pl';
大体こんな感じ。鯖でちがう。
0891nobodyさん
02/07/16 06:01ID:???ソケットプログラム書くときサーバからのレスポンス(OK 200とか)がうざいんですが
これを消す方法ってないんですか?
0892887
02/07/16 06:35ID:1NQx5kwRwinだと相対パス行けるのですが
いざUPするとできません・・・
相対的にはこんな感じで
../member/data/point.pl
絶対的には
/home/as***/public_html/*****/cgi-bin/member/data/point.pl
こんな風なのですが・・・
HTTPを使う限り、それを消す方法は無いよ。
単に無視するだけなら可能だけどね。
その場合は最初の空行までを読み飛ばせば良い。
>>892
パーミッションがあれば、相対でも絶対でもいけると思うけど。
0894nobodyさん
02/07/16 08:49ID:???0895852
02/07/16 09:20ID:mWVjtM4S送信ボタンに、onMouseUPで新規ウィンドウを開き、そこにデータを受け取った後の結果を表示させるようにCGIにリンクさせてるんですが、
そのjavascriptをいれてると、データが送信されてないみたいです。
試しに投票フォームと同じウィンドウ上で結果を表示させると、うまくいきました。
submitボタンにビヘイビアを仕込むとダメなんでしょうか?
0896ぽよぽようんこ(本物)
02/07/16 13:47ID:???0897chmod
02/07/16 14:34ID:2idpGCxqでファイルがブラウザから見られるのに
$de="0755";
chmod $de, $filename;
でにするとファイルが見られなくなります。
chmod($de, $filename);
もダメです。
どなたか変数で指定する方法を教えて下さい。
0898chmod
02/07/16 14:36ID:2idpGCxqあれ文字化け?してるけど、
コロンでなくカンマです。
0899ぽよぽようんこ(本物)
02/07/16 14:43ID:???0900chmod
02/07/16 14:46ID:2idpGCxqchmod($de,$filename);と755を751にしたらでできました。
しかしFTPプログラムでこのファイルを見るとなぜか
-wxr-xrwxになっています。どうしてでしょう。
0902nobodyさん
02/07/16 15:11ID:???0903nobodyさん
02/07/16 15:12ID:???0904nobodyさん
02/07/16 15:37ID:2idpGCxqumask(0)です。
$de=0755;とかにするとその時点で正しく数字が入りません。
やはり変数を使って設定をするとパーミッションがぼろぼろになります。
Perlの仕様ということで考えます。
0905nobodyさん
02/07/16 15:46ID:???$de_octet = oct($de);
perldoc dhmod
0906885
02/07/16 15:52ID:???ありがとうございました。
srand(time() ^ ($$ + ($$<<15)));
0908nobodyさん
02/07/16 16:07ID:???0909852
02/07/16 16:53ID:???0910nobodyさん
02/07/16 18:06ID:AR5JuM+5今までの出会い系サイトとは一味もニ味も違うサイトです。バーチャルタウンを実際に体験できます!!!
詳しくは下記UELをクリックして、確かめて!!
http://www.e-mansion.co.jp/co/ac.html
0911nobodyさん
02/07/16 18:13ID:XozL7fM5■■■バカ名言■■■
バカって言うだけの奴ほど役に立たないものはない。
助けるか、無視するかをしなさい。
バカというだけというのは、助けもせず、無視もせず、
レスを余計に増やし、雰囲気を悪くする。
そういうのに限って突っ込まれれば適当にごまかしたり、逃げていく。
■■■どうせ六でもない奴だろうが■■■
0912nobodyさん
02/07/16 21:41ID:???陸でもない/碌でもない
バカって言っていいですよね?
■■■どうせ六でもない奴だろうが■■■
■■■どうせ六でもない奴だろうが■■■
■■■どうせ六でもない奴だろうが■■■
■■■どうせ六でもない奴だろうが■■■
■■■どうせ六でもない奴だろうが■■■
バカハケ━━━━━(゚∀゚≡゚∀゚)━━━━━━ソ!!!!
0913nobodyさん
02/07/16 23:36ID:???0916nobodyさん
02/07/17 06:20ID:???0917nobodyさん
02/07/17 07:08ID:???$x = qq{<a href="http://www.yahoo.co.jp/">Yahoo! Japan</a>};
$x =~ s/<.+>//g;
のようにすると、最初の < と最後の > で全部消えてしまいそうな気がします。
最短マッチとかを使えばいいんでしょうか、使い方がわからないので教えてください。
(Perlメモを読んだところEUCしかできない方法らしいので
SJISでもやりたいので質問です)
0918nobodyさん
02/07/17 07:41ID:???0919nobodyさん
02/07/17 07:52ID:SEvMu7le$x =~ s/<[^>]*>//g;
>>918
年月日時秒を分解して
(年は-1900してから)全て秒に直して足せば良いんじゃないの?
0920nobodyさん
02/07/17 07:53ID:???timelocal();
0921nobodyさん
02/07/17 07:53ID:???0922919
02/07/17 08:08ID:???0924nobodyさん
02/07/17 12:49ID:???ってやるとunix/perlでは成功するんですが
ActivePerlじゃ成功しないんです。
rename("onefile","pict\$hensuu");
うえのようにしてもだめでした。たすけてちょんまげ
…普通に成功してるけど?
というか、失敗したら$!を見る癖をつけよう。
rename(...) or die $!;
0926nobodyさん
02/07/17 14:25ID:tZJ3+xnSエスケープしなきゃ駄目だよ
pict\$hensuu
↓
pict\\$hensuu
0927nobodyさん
02/07/17 14:52ID:tZJ3+xnSでも動く所がActiveperlさんの偉い所だったり
MACだとこうは行かないそうで
0928nobodyさん
02/07/17 16:15ID:???MACのPerlってどんなんなんですか?
OSXで動くならまぁわかるんですが。
PerlでIriaみたいなの作ったら需要ありますかね?
Macでダウソマネージャーってありましたっけ?
0929nobodyさん
02/07/17 16:28ID:???WWWcp
両方で検索してみれ。ただWWWcp最後にいつ使ったか
忘れたけど俺が使ったバージョンではマルチホーミングに
対応してなかった気がする。
つーか需要も何も難しくないからめずらしくも無い。
0930924
02/07/17 17:45ID:???perl -e 'print $^O;'とかできないんですけど、、
ほかにもいろいろ違うのかな?
0931nobodyさん
02/07/17 17:48ID:???MSWin32
C:\>
ちゃんとなるよ。
0932nobodyさん
02/07/17 17:49ID:???linuxの使い方は必須で覚えないとダメですか?
0933nobodyさん
02/07/17 17:50ID:???0935nobodyさん
02/07/17 18:02ID:0WM/CdU+Perlでこれは可能ですか?
あるソースの保守をやっているんですが、ファイル名をパスの階層ごとに変数にしてて
もうわけがわかりません。変数展開したソースがホスィのです。
こんな感じ
open ("< /foo/bar/giko");
を、わざわざ
$FOO_dir = '/foo';
$BAR_dir = "$FOO_dir/bar";
$GIKO_file = "$BAR_dir/giko";
open ("< $GIKO_file");
としている。こんなのが何十個もある。
残念だけど、プリプロセッサは無いよ。
その目的なら、デバッガが適当かなぁ。
perldoc perldebug
日本語ドキュメントなら、不完全だけど河馬屋のがあるよ。
http://member.nifty.ne.jp/hippo2000/perltips/perldbg.htm
0937nobodyさん
02/07/17 23:14ID:0q/AG7/8超初心者的質問ですが、探しても答えが見つからなかったので質問させてください。
flockでロックしたファイルは、他のcgiからの書き込みに対しても有効ですか?
あるCGIスクリプトでflock中のファイルについて、他のCGIスクリプトからの書き込みも防ぐことができるのでしょうか。
flockは、ファイルハンドルを指定して行うので、1つのCGIスクリプトでしか効果がないのかも知れないと心配になりました。
申し訳ありませんが、どなたかご存じの方、ご回答いただければ幸いです。
0938コギャル&中高生
02/07/17 23:23ID:q1y9WZogお役立ちリンク集
必ず役立ちます
コギャルとH出来るサイトはここ
ヌキヌキ部屋へ直行便
↓
http://kado7.ug.to/wowo/
http://kado7.ug.to/wowo/-a.htm
0939nobodyさん
02/07/17 23:37ID:/oUfi8FN今までの出会い系サイトとは一味もニ味も違うサイトです。バーチャルタウンを実際に体験できます!!!
詳しくは下記UELをクリックして、確かめて!!
http://www.e-mansion.co.jp/co/ac.html
一つのスクリプトでしか効果ないとしたら、
全く同じ二つのスクリプトがあったらどうなると思う?
1バイトだけ違って他は同じスクリプトがあるとしたら?
そんなんじゃ困るでしょ。
当然だけど、他のあらゆるスクリプト、プロセスに対して有効だよ。
ただし、flockの仕様上「書き込みを防ぐ」ことは出来ないから注意してね。
0941nobodyさん
02/07/17 23:47ID:???全部のスクリプトが正しくflockしてれば排他処理はうまくいく。
flockは紳士協定だから、flockせずにいきなり書き込むような無法者がいると破綻する。
そのファイルにアクセスするのが自作CGIのみなら大丈夫だろ。
0942937
02/07/17 23:48ID:NR9AAdwqまた、flockは書き込みを防ぐのではなく、オープンを防ぐのですよね。
こちらもご指摘ありがとうございました。
0943937
02/07/17 23:51ID:NR9AAdwq>>942さんもありがとうございました。
自作スクリプトだけなので、大丈夫そうです。
安心しました。
本当にありがとうございました。
・・・あ、もちろん、ファイルハンドルは毎回違っても大丈夫ですよね?
>>940さんがあらゆるプロセスに対して有効って言ってくださっているので、
そういうことですよね。
では、頑張ってつくります!
ありがとうございました!!
0944937
02/07/17 23:52ID:NR9AAdwq>>941さんでした。
本当にありがとうございました。
0946nobodyさん
02/07/18 00:21ID:???flockの仕組みってのは信号機みたいなもんなんだよ。
"赤だったらちょいと立ち止まってくれ"という合図に過ぎない。
だから、無視しようと思えば無視できるんだよ。
無論、そんなことをしていればいつか事故が起こるのは必至だけど。
…てな説明を何処かで読んだよ。
0949nobodyさん
02/07/18 03:09ID:ES5M+zj/0950nobodyさん
02/07/18 03:19ID:???これ完璧だと思うけど、違うの?
open(OUT, "+< outfile.txt");
flock(OUT, 2);
truncate(OUT, 0);
seek(OUT, 0, 0);
print OUT "........";
close(OUT);
0951nobodyさん
02/07/18 03:24ID:???それのどこが完璧なのか聞きたい。
tu-ka,ファイルロックスレに逝って叩かれてこい。
別に問題ないのでは?
>openとlockの間に他プロセスからのopenが来たらどうするつもりなんだろう・・・。
とのことだけど、ファイルを破壊しているわけじゃないので無問題でしょ。
「他プロセスからのopen」がファイルを破壊したりflockを伴わなかったりしたら
そりゃ問題だけど、そんな赤信号を無視して突っ込んでくるヤツを止めることは出来ないし。
0954バカです
02/07/18 11:38ID:w/uBOa7pmySQLとPerl使っているのですが,ハッシュのことがよく分かりません。
while(@res = $st->fetchrow_array) {
$data{$res[0]}=1;
}
こうすると、ハッシュdataに何も入って無いのですが、↓の様にすると
ちゃんと、ハッシュに格納されます。何故ですか?
$i=0;
while(@res = $st->fetchrow_array) {
$data[$i]=$res[0];
$i++;
}
foreach(@data){$data{$_}=1}
0955nobodyさん
02/07/18 13:17ID:pqv4qZv6sub A{
$a = "aaa";
&B;
}
sub B{
print $a;
}
&A;
サブルーチンAの中にサブルーチンBがある時、
Bの始めに引数の取得をしなくてもBの中で$aって使えるんでしょうか。
というか、今やったら出来たんですけど、どうしですか?
引数は必ず受け取らないとダメなんですよね?
0956nobodyさん
02/07/18 13:19ID:pqv4qZv6>Bの始めに引数の取得をしなくてもBの中で$aって使えるんでしょうか。
Bの呼び出しの時に引数を与えなくてもBの中で$aって使えるんでしょうか。
0957nobodyさん
02/07/18 13:20ID:???だって、$aはmyなりlocalなりしてないのでスコープがグローバル。
もっともやってはいけないコーディング法の一つです。
0958nobodyさん
02/07/18 13:21ID:???Perlはデフォでグローバル変数扱いになるから使える。
0959nobodyさん
02/07/18 13:25ID:pqv4qZv6sub A{
&B;
}
sub B{
@array = @_;
print $array[0];
}
$a = "aaa";
&A($a);
この時、Aで引数を取得しないで飛ばしてBで取得しちゃってもいいんでしょうか。
0960nobodyさん
02/07/18 13:26ID:???0961ぽよぽようんこ(本物)
02/07/18 13:27ID:???おいっ! my と local の違いを勉強せいっ!
この場合、local でも使えるだろ!
0962nobodyさん
02/07/18 13:37ID:Rz8eDFr/グローバルな特殊変数。
0964nobodyさん
02/07/18 13:42ID:pqv4qZv6グローバル変数は引数を与えたり取得なんかしなくても
どこでも関係なく使えるってことだ!!
0965nobodyさん
02/07/18 13:42ID:???ネタ?
グローバルが最悪というが、状況次第だろ
それにこれはローカルが要求される程
莫大な規模ではないし
>>960
ダネ
Bが@_ではなく、$aで取得すれば問題ない
0967nobodyさん
02/07/18 13:43ID:???>グローバルが最悪というが、状況次第だろ
こんな小規模なプログラムかつ引数で渡せるものをわざわざグローバルにすべきではない。
0968nobodyさん
02/07/18 13:44ID:???0969nobodyさん
02/07/18 13:45ID:gTYoTB/Pどこでも使える=グローバル
局所でしか使えない=ローカル
0972nobodyさん
02/07/18 13:46ID:gTYoTB/Plocalだとそこから呼んだサブルーチンでも有効。
>>955だとlocalにしても使えるがmyだと引き渡されない。
0973nobodyさん
02/07/18 13:49ID:???0975nobodyさん
02/07/18 13:49ID:???じゃあさ、
sub a
{
local($x);
&c();
}
sub b
{
&c();
}
sub c
{
print $x
}
ってした場合はどうなるの?
0976nobodyさん
02/07/18 13:52ID:pqv4qZv60977nobodyさん
02/07/18 13:53ID:???どこかで読んだ場合よ。
localが呼び出しサブルーチンでも有効なら
場合によっては動かない組み合わせが出てくるだろうという話。
0978nobodyさん
02/07/18 13:58ID:So56onukだから一般的にはmyを使って、サブルーチンは引数使って呼ぶのがお勧めです。
0979nobodyさん
02/07/18 14:17ID:???$a = "aaa";
&a($a);
sub a{
&b;
}
sub b{
print $a;
}
これで、bの中の$aがちゃんと表示されちゃうんだけどなぜ。
0980nobodyさん
02/07/18 14:30ID:???つーかaはやめれ
0981nobodyさん
02/07/18 14:40ID:???ネタでやっているなら、ごめんね
あまりにも、ウザイので↓みて、調べてね♀
ttp://www5a.biglobe.ne.jp/~n_rieko/perl/9.htm
0984nobodyさん
02/07/18 15:14ID:???必ず使う変数を渡すして受け取って使うものだと思っていたのに
そんなことしなくても使えることがわかったので混乱しています。
で、myを使えば他のサブルーチンでは使えないはずなのに
使えるからさらに混乱しています。
0985nobodyさん
02/07/18 15:23ID:???0986nobodyさん
02/07/18 15:48ID:???ラクダ本p217より
このようなプライベート変数のスコープ内から呼び出されるサブルーチンからは
テキスト上で、サブルーチンがその変数のスコープ内で定義されている場合を除き
プライベート変数を見ることができない。
サブルーチンaおよびbがmy $aのスコープ内で定義されていますので、
表示されます。要するに仕様です。
>980
myで修飾された変数はパッケージ変数とは関係ありません。嘘は駄目です。
0988nobodyさん
02/07/18 16:05ID:???- use strict を使わないで使用した(宣言しなくても使用するだけでいい)Perlの変数は全て現在のパッケージのパッケージ変数になる。
- パッケージ変数は同パッケージ内ならどこからでも呼び出せる
以上を踏まえた上で元のコード(にちょっと手を加えたやつ)を
説明すると:
sub OUTER {
## この時点で$VARIABLEはパッケージ変数として宣言される
$VARIABLE = "aaa";
INNER();
}
sub INNER {
## OUTER()と同一パッケージ内なのでこの$VARIABLEもOUTER()で
## 宣言された$VARIABLEと同じ物を指す。よって"aaa"とプリントされる。
print $VARIABLE;
}
OUTER()
===
でも以上は悪いコードの見本みたいなもん。ちゃんとuse strictとmyを
使えば混乱しない:
use strict;
our $PACKAGE_VARIABLE = "foo";
sub INNER
{
my $inner_lexical_variable = shift;
print "PACKAGE_VARIABLE => $PACKAGE_VARIABLE\n";
print "LEXICAL_VARIABLE => $inner_lexical_variable\n";
}
sub OUTER
{
my $outer_lexical_variable = shift;
INNER( $outer_lexical_variable );
}
OUTER( "aaa" );
0989nobodyさん
02/07/18 16:06ID:???これは&SUBROUTINE;という表記がちょっと特殊だから起こる。
サブルーチン内で&SUBROUTINE;という表記でさらにサブルーチンを呼ぶと、
現在の@_の値をそのままそっくりSUBROUTINE()に渡す。
sub OUTER{ &INNER }
は
sub OUTER{ INNER(@_) }
と同じ事になるわけ。だから外側で呼んだサブルーチンの引数がそのまま
内側のサブルーチンで使えるわけ。これも特殊な状況でない限り使用は
お勧めしない。
0990nobodyさん
02/07/18 16:07ID:???これは実際に代入をしてみると差がでてわかる。
use strict;
my $GLOBAL = "ORIGINAL";
sub print_global
{
print "\$GLOBAL is $GLOBAL\n";
}
sub WITH_LOCAL
{
print "OUTSIDE of BLOCK\n";
print_global();
{
local $GLOBAL = "NEW VALUE";
print "local()ized \$GLOBAL\n";
print_global();
}
print "OUTSIDE of BLOCK (again)\n";
print_global();
}
【Perl】初心者コーナー Part14
http://pc.2ch.net/test/read.cgi/php/1026977659/
0993nobodyさん
02/07/18 16:35ID:???>> while(@res = $st->fetchrow_array) {
>> $data{$res[0]}=1;
>> }
>> こうすると、ハッシュdataに何も入って無いのですが、
$st->fetchrow_arrayが、
(2ch, mona, giko)
というリストを返したとします。
2行目で
%dataの、key: 2chのvalueを1にしていますが、それ以外に何もしていません。
よって、2ch => '1' となるだけで、(それ以前に空なら)%dataには何も入りません。
>> $i=0;
>> while(@res = $st->fetchrow_array) {
>> $data[$i]=$res[0];
>> $i++;
>> }
>> foreach(@data){$data{$_}=1}
この場合は、カウントアップして繰り返しをやっていますので、配列dataの要素に順
番に格納されていきます。
2つめのブロックで、dataの要素をキーとした値をすべて1にしていますので、dataの
要素に格納された分だけ%dataに値が入ります。
しかしながら、上記のコードはまったく意味不明です。
fetchrow_arrayメソッドの仕様をお願いします。
0994バカです
02/07/18 18:04ID:eilzvUxcレスありがとうございます。
う〜ん、私にとっては、難しいいですね。基本的なこと分かってないみたいで、精進したします。
変な質問して申し訳ありませんでした。
fetchrow_arrayメソッドは、数字列が入っているだけです。
grep関数でこの数字列以外の配列を、取り出そうとしていた、だけなのですが
途中だけ経過だけ書いてしまいました。
すいませんでした。
0995名無し孫
02/07/18 18:36ID:nyw/MMTK↑この自動インストールプログラムを
作成するには何言語を習得すればいいのですか?
0996こっそり1000ゲッター
02/07/18 18:42ID:???0997こっそり1000ゲッター
02/07/18 18:42ID:???0998こっそり1000ゲッター
02/07/18 18:42ID:???0999こっそり1000ゲッター
02/07/18 18:43ID:???1000nobodyさん
02/07/18 18:43ID:oI8Joy3910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。