【Perl】初心者コーナーPart10
レス数が1000を超えています。これ以上書き込みはできません。
0001名無しさん@お腹いっぱい。
02/02/24 22:18ID:zOj6Yq/31:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけど、なんか質問ある?part5】
http://pc.2ch.net/test/read.cgi/php/1009331505/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
過去ログ、その他の役立ち情報は>>2-10を見よう。
0002名無しさん@お腹いっぱい。
02/02/24 22:19ID:???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/test/read.cgi/php/996075607/
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/test/read.cgi/php/1009549309/
[ひまぢん氏のミラー]
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
0003名無しさん@お腹いっぱい。
02/02/24 22:20ID:???・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 Recipes: http://www.effectiveperl.com/recipes/
・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
・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/
[Document&Tutorial]
・Perl News: http://www.news.perl.org/
・Perl Monks: http://www.perlmonks.org/
・PerlMonth - Online Perl Magazine - : http://www.perlmonth.com/index.html 接続不能
・use Perl All The 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/
0004名無しさん@お腹いっぱい。
02/02/24 22:21ID:???・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/
0005名無しさん@お腹いっぱい。
02/02/24 22:28ID:???スレたてご苦労様です。
perlでつくられたCGIを改造しようとしています。
2MB(2-3000件)程度のデータを読み込んで、名簿を表示するデータベースCGIです。1件1行のSCVになっています。
鯖への負荷を少なくするために、このCGIのメモリ負荷を調べたいのですが、どのような方法があるでしょうか?
ローカル環境はANHTTPD+win2000+activperlでperl歴2ヶ月ほどの厨です。
0006名無しさん@お腹いっぱい。
02/02/24 22:29ID:????
0007名無しさん@お腹いっぱい。
02/02/24 22:34ID:???……すみません、「メモリ使用量」です。
SCVじゃなくてCSVだし……。
鬱死
0008名無しさん@お腹いっぱい。
02/02/24 22:44ID:???使ったことないけど,このモジュールどう?
http://search.cpan.org/search?dist=Win32API-Resources-0.06-PPM
0009名無しさん@お腹いっぱい。
02/02/25 00:27ID:R6P89Flyhttp://ime.nu/www.baseball-lover.com
0010名無しさん@お腹いっぱい。
02/02/25 01:05ID:???0011名無しさん@お腹いっぱい。
02/02/25 05:18ID:???試してみます。ありがとうございました。
0012名無しさん@お腹いっぱい。
02/02/25 13:12ID:NWj5gfpZそん結果を、別の新しい窓に表示するようにするには、
何をどうすれば良いですか。
0013名無しさん@お腹いっぱい。
02/02/25 13:17ID:???はあ?
0014名無しさん@お腹いっぱい。
02/02/25 13:23ID:l+IIkoIf質問する場所を間違えました。すみません。
0015名無しさん@お腹いっぱい。
02/02/25 17:23ID:???0016出来の悪い子
02/02/25 17:41ID:KjItHBP9ヒントありがとう
まだちゃんと動作していないが出来が悪いなりに頑張ってみるわ
ありがとうございます。
0017名無しさん@お腹いっぱい。
02/02/25 18:01ID:???がんばれ〜
0018名無しさん@お腹いっぱい。
02/02/25 23:18ID:???perlでcgiを作るための解説をおこなっているwebサイトを探しております。
どこが、ここはすごくいい。と思うサイトがあれば教えてください。
自分の環境はwin98です。
あと、初心者ですのでできれば初心者用にかかれた解説のほうがいいです。
0019名無しさん@お腹いっぱい。
02/02/25 23:23ID:???とほほのperl入門->
どこか忘れたけどモジュールの使い方のページ->
perlmanj
と読み進めた。とほほはCGIについての解説もあるしおすすめ
0020名無しさん@お腹いっぱい。
02/02/25 23:24ID:???http://www.google.com/search?as_q=perl+cgi+%8F%89%90S%8E%D2&num=100&btnG=Google+%8C%9F%8D%F5&as_epq=&as_oq=&as_eq=&lr=lang_ja&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=
0021名無しさん@お腹いっぱい。
02/02/25 23:28ID:???とほほですか。ありがとうございます。読んで見ます!
>>20
どうもです〜
0022名無しさん@お腹いっぱい。
02/02/26 13:33ID:???0023名無しさん@お腹いっぱい。
02/02/26 15:57ID:6ZaEzTsaなんでだ?、このやろう
0024名無しさん@お腹いっぱい。
02/02/26 16:18ID:oAR1gQdGCGIからファイルのパーミッションを変更することってできますか?
具体的には644のファイルを666に変更したいんですが…。
やっぱり無理でしょうか。何か抜け道はないものか。
0025名無しさん@お腹いっぱい。
02/02/26 16:19ID:???chmod();
0026名無しさん@お腹いっぱい。
02/02/26 16:26ID:oAR1gQdGそれは試したんですが無理でした。
こんなログを発見…。あんまりスマートじゃないなぁ。
http://tohoho.wakusei.ne.jp/lng/199905/99050165.htm
原理的に無理なのだろうか。
0027名無しさん@お腹いっぱい。
02/02/26 16:44ID:???0028名無しさん@お腹いっぱい。
02/02/26 16:48ID:???0029名無しさん@お腹いっぱい。
02/02/26 17:09ID:???2ch:厨房質問に煽りで返す
これじゃ>27や>28が逆上するのも仕方ないな。
まぁおまえらはとほほで質問してなさいってこった。
0030名無しさん@お腹いっぱい。
02/02/26 17:15ID:???そもそも君に権限がないファイルはパーミッション変えられない。
また、SuEXECじゃないスクリプトはnobodyなんかで動いているから、
最初から書き込み権限がないファイルは変えられない。
そもそも、これはWebProgな質問ではないような気もするがそれは黙認。
もんだいは、/etc や /var あたりにおいたしようとしてないか?
ってことか?
0031名無しさん@お腹いっぱい。
02/02/26 18:22ID:ntDTlW+cパーミッションを変更する予定のファイル、ディレクトリを、CGIが実行
されるときの権限(nobodyとか)にしておけばオッケーだよー。
003226
02/02/26 20:50ID:oAR1gQdG>>30
オイタしようってんじゃなくて、
Webエディタみたいなものを構築してるんです。
アプされたファイルを書き換えれる奴。
666のファイルは難なく書き換えできるんですが、
デフォルトの644はもちろんダメ。
全部FTPで666に設定するのは何かと不便だし、
CGI側から変更できる方法はないかなぁ、と。
>>31
これはもちろんFTPで事前に変更しておく、ってことですよね?
(nobodyやら何やら、その辺にはほとんど知識ないんで調べてきます…。)
0033名無しさん@お腹いっぱい。
02/02/26 21:12ID:???setGIDとかな。
ディレクトリに実行権限与えるのは・・・無意味か。
0034名無しさん@お腹いっぱい。
02/02/26 21:13ID:???FTPクライアントにケチつけるなら自分で作ればよかろう。
HTTPの次くらいに簡単だ。
0035名無しさん@お腹いっぱい。
02/02/26 21:16ID:???まぁ一番簡単なのが、ネット使うのやめちゃう事だね。
003626
02/02/26 22:01ID:oAR1gQdGまとめ
・FTPで作成したファイルの所有者はユーザー。
・だから、nobody権限で動くCGIではパーミッション変えられない。
・ならばCGIをユーザー権限で動かせばいい! → suidperl
・CGIのパーミッションを4755にすればsuidが効く!
でも、4755ってtelnetじゃないと変えられない?
また詰まった。
参考にしたページ:
ttp://x68000.startshop.co.jp/~68user/webcgi/permission.html
http://www.google.co.jp/
0037名無しさん@お腹いっぱい。
02/02/27 01:58ID:???意味分からんけど、ビット立てるだけならFTPでもTELNETでも
CGIからでも出来るだろchmod4*** FTPクライアントのカスタムコマンド
とか調べれ
後suidperlは若干挙動が違うんで(セキュリティ絡み -Tスイッチ)調べる様にな
0038名無しさん@お腹いっぱい。
02/02/27 07:25ID:DxoLEIHk一晩延々悩み続けてるので、誰かサクッと蒙を開いてくれると嬉しいです。
これ、ディレクトリ階層動いた途端にopenに失敗するんですけど
なんででしょう?
use File::Find;
finddepth(\&wanted, '.');
exit;
sub wanted {
my $name = $File::Find::name;
print $name, "\n";
open(IN, $name) or die;
close(IN);
# open(IN, "./test/hoge.h") or die; # これは動く
# close(IN);
}
% tree.pl
./tree.pl
./test/hoge.h
Died at tree.pl line 10.
0039わかりません
02/02/27 11:33ID:/Q61BdR8@photo_urls=("$i_photo_url1","$i_photo_url2","$i_photo_url3");
foreach(@photo_urls){
if($_ ne ''){
if($_ =~ /^http.*jpg$/){
$i_comment = "$i_comment<br><IMG src=\"$_\">";
}else{
&print_error("写真URLの入力が正しくありません。注意&解説を参照して確かめてください。<br>Macintosh環境でも拡張子(.jpg)をつけて下さい。");
}
すみません。
↑ここらへんで拡張子JPGだけしか選べなくなってるのを、gifも選べるようにしてあげたいんですが、
どうしたらいいですか?つまり、JPGとGIFを認めてあげたいんですが・・・。
エラーばっかりでわけわかめです。
誰か教えて下さい。お願いします。
0040名無しさん@お腹いっぱい。
02/02/27 11:35ID:???スクリプト改造工房 Part4
http://pc.2ch.net/test/read.cgi/php/1012839651/l50
0041わかりません
02/02/27 12:00ID:/Q61BdR80042名無しさん@お腹いっぱい。
02/02/27 12:47ID:Sg/A5twOhttp://www.e-words.ne.jp/
にあるような、先頭文字での見出し(A B C D ・・・)による
検索ってどのようにするのでしょうか?
もしかしてログファイルに先頭の文字をひとつずつ
手動入力しなくてはならないのでしょうか・・・
0043名無しさん@お腹いっぱい。
02/02/27 12:50ID:???$sata =~ /^$sentou/;
0044名無しさん@お腹いっぱい。
02/02/27 13:45ID:???お、私も一瞬悩みました。
で、カレントディレクトリが変更されてるんじゃないかと思って、
perldoc File::Find してみたら、その通りだそうです。
You are chdir()'d to $File::Find::dir when the function is called.
だってー。
004538
02/02/27 17:02ID:???ああああ、やっぱり大ポカだった(笑)。
open(IN, $_) or die;
に変えたらサクッと動きました。ありがとー! 一生恩に来ます。
004642
02/02/27 17:43ID:Sg/A5twOやはり手動入力が一番速いのかな、、、
0047
02/02/27 23:55ID:KPo4U5H6JAVAスクリプト、JAVAをOFFにしてアクセスした人に、
「JAVAをONにしてください」と表示して、
アクセスさせないためのス8クリプトを、教えてください。
よろしくおねがいします。
0048名無しさん@お腹いっぱい。
02/02/27 23:56ID:???<NOSCRIPT>Java on plz</NOSCRIPT>
004947
02/02/28 00:04ID:Xg1/i20oええと、
JAVA SCRIPTの場合はどうなるのでしょうか?
ありがとうございます。
それと、
「JAVA、(スクリプト)をONにしてください」
と表示させたいのですが、どうしたらよいでしょうか?
掲示板にその機能を追加するには、サブルーチンにすればよいのでしょうか?
どうもありがとうございます!
0050名無しさん@お腹いっぱい。
02/02/28 00:06ID:???あんた、CGI組んだこと無いだろ。
もしかしたらHTML書いたこと無いだろ。
0051
02/02/28 00:12ID:Xg1/i20ohtmlで、それを表示させるように書いたあと、
そのあと、JAVA OFF で相手を飛ばした時にどうしたらよいのでしょうか・・。
0052名無しさん@お腹いっぱい。
02/02/28 00:13ID:???CGIわかってない奴には説明が出来ない。
意地悪ではなく必然的に。
0053名無しさん@お腹いっぱい。
02/02/28 00:18ID:Xg1/i20oそれでは最後に、コンパイルの遣り方を教えてください・・。
JAVAのソフトをダウンロードして設置する事は、
「JAVAを理解していないけど、CGI、PERLは完全に理解している」
人には可能でしょうか?
コンパイルは、コンパイラを使うだけなので、
JAVAを解っていなくても出来るでしょうか?
(PERLとかを理解していればです。)
よろしくご回答お願いします。
レス感謝であります。
0054名無しさん@お腹いっぱい。
02/02/28 00:19ID:???何を訳のわからんことを・・・。
0055エフェドリンながヰ
02/02/28 00:21ID:lx9+LUUJhttp://www.puchiwara.com/hacking/
韓国バージョンも出るらしいし。
0056名無しさん@お腹いっぱい。
02/02/28 00:23ID:Xg1/i20oJAVAアプレットのソフトを設置するのに、
「コンパイル」という作業があった時に、
JAVAを理解していない人(但しPERLなどは理解している)に、
設置は可能でしょうか?ということです。;
宜しくお願いします。
0057手まん
02/02/28 00:25ID:micBAvGr使えるモジュール調べるにはどうしたらいい?
一覧とかだせんかね?
0058名無しさん@お腹いっぱい。
02/02/28 00:26ID:???0059名無しさん@お腹いっぱい。
02/02/28 00:26ID:???はぁ。。。
0060手まん
02/02/28 00:27ID:micBAvGrいくらなんでも、そのくらい出来るべ、
アップレットだろ、変わったクラス使ってないだろ、
サーブレットになると、色々めんどいけどな、
0061名無しさん@お腹いっぱい。
02/02/28 00:27ID:Xg1/i20oJAVAアプレットのプログラムをコンパイルして設置する時、
JAVAアプレットを理解していない人に設置は可能なのでしょうか?
よろしくおねがいします。
0062手まん
02/02/28 00:29ID:micBAvGrだいジョブ、できる、できる、
問題無い、
駄目だったら、漏れがやってやる、
金取るけど、
時給1万だけどな
0063名無しさん@お腹いっぱい。
02/02/28 00:29ID:???=日本語を理解出来ていませんが私は手紙を出せるでしょうか?
0064
02/02/28 00:30ID:Xg1/i20oついでに、掲示板のソースから、
JAVAアプレットの仕掛けがあることを解らないように隠すには、
どうしたらよいのでしょうか?
宜しくお願いします。
0065名無しさん@お腹いっぱい。
02/02/28 00:31ID:Xg1/i20o手紙は、日本語じゃなくても出せますよね・・説明お願いします。
自給1万ですか・・。
全部込みで5000円ならどうでしょう。
0066名無しさん@お腹いっぱい。
02/02/28 00:32ID:???0067名無しさん@お腹いっぱい。
02/02/28 00:32ID:???前来たIPアドレス抜き野郎か。
みんな放置。さんざん荒らしやがって。
なんかレベルの低いのが混ざってると思ったらあいつだったか。
0068名無しさん@お腹いっぱい。
02/02/28 00:34ID:???http://sound.jp/jun88/java/myjjava.html
の「強制ジャンプ」がいんじゃない?JavaスクリプトがONの人だけ、
どっかのページにジャンプできる。
Offの人は、そのページに取り残されたまま。
次に、JavaがONの人だけ飛ばしたい場合は、
強制ジャンプするアプレットを貼っとけばいんじゃない?
JavaがOffの人は、そのページに取り残される。
組み合わせるってーと、Javaスクリプトで強制ジャンプするアプレットの
タグを出力すればいんじゃないでしょうか。
0069名無しさん@お腹いっぱい。
02/02/28 00:35ID:???放置ですよ。
0071名無しさん@お腹いっぱい。
02/02/28 00:39ID:Xg1/i20o0072名無しさん@お腹いっぱい。
02/02/28 00:40ID:???@INCを順番に readdirで見ていくとか。
File::Findとかモジュール使えばもっと簡単にできるかも。
0073手まん
02/02/28 00:46ID:micBAvGrもよろしく頼むよ。
しっかしここ、すっげぇ〜イキヨイであがってくなぁ〜
まだまだPerlの需要ってあるみたいだなぁ〜
0074名無しさん@お腹いっぱい。
02/02/28 01:01ID:???>イキヨイ
勢い。
>まだまだPerlの需要ってあるみたいだなぁ〜
その通り。
0076名無しさん@お腹いっぱい。
02/02/28 02:38ID:???正規表現の入門にもちょうど良いわい。
0077名無しさん@お腹いっぱい。
02/02/28 09:55ID:???RE-C(正規表現C)が出たら迷わず乗り換えるw。
0078名無し
02/02/28 18:12ID:SOksZdMX書き込むルーチンみたいなのが分からないので誰か教えてください。
0079名無しさん@お腹いっぱい。
02/02/28 18:13ID:???それを考えるのがおもしろい。
0080名無し
02/02/28 18:17ID:SOksZdMXマジレス希望。
0081名無しさん@お腹いっぱい。
02/02/28 18:18ID:???マジレスじゃん。
0082名無し
02/02/28 18:28ID:SOksZdMX掲示板作りたいので
内容をログファイルに書き込む
ルーチン教えてください。
0083名無しさん@お腹いっぱい。
02/02/28 18:34ID:???ファイルにログを書き込む
ファイルを閉じる
0084名無しさん@お腹いっぱい。
02/02/28 18:37ID:???BBS Re-Designっていい本が出てる、読む。買って。
0085名無し
02/02/28 20:26ID:SOksZdMX買えるほど金無いです。
0086名無しさん@お腹いっぱい。
02/02/28 20:28ID:???0087名無しさん@お腹いっぱい。
02/02/28 20:28ID:???で、>>83じゃだめなの?
0088名無しさん@お腹いっぱい。
02/02/28 20:30ID:???ファイルを操作するにはどうしたらいいんですか?
ソースで教えてほしいのですが。
0090名無しさん@お腹いっぱい。
02/02/28 20:34ID:???もう一度>>1を読んできなさい。
0091名無しさん@お腹いっぱい。
02/02/28 20:35ID:???いい人過ぎ。
0092名無しさん@お腹いっぱい。
02/03/01 00:20ID:X6rC0lr1モジュールとかインストールしないで
さくっと転送するにはどんな方法がありますか?
どれも結構ややこしそうで挫折しかかってます…
0093名無しさん@お腹いっぱい。
02/03/01 00:35ID:???formのほうに
<form enctype="multipart/form-data" method="POST" action="ほげ">
って書いて、CGIのほうは標準入力から読み込むだけだよ。
0094名無しさん@お腹いっぱい。
02/03/01 00:38ID:???FTP。
フォーム使ったアップロードならRFC読んで自分でデータ切り分けたりしないと
いけないから,素直にモジュール使っちゃえば?
0095名無しさん@お腹いっぱい。
02/03/01 00:55ID:DUUG9VQmさっぱりわかりません。dbmopen だと(これも使ったことないんで
よくわかりませんが)
#%hash は定義済みとして
dbmopen(%hash, "data_base", 0644);
while (($key, $value) = each %hash) {
$hash{"$key"} = $value;
}
close(%hash);
こんな感じで外部ファイル化したいんですが、tie の場合、どういうふうに
書けばいいんでしょうか?
0096名無しさん@お腹いっぱい。
02/03/01 03:45ID:uLWuBwxzuse AnyDBM_File ;
$db_flag = O_RDONLY ;
tie ( %hash , 'AnyDBM_Files' , 'database' , $flags , 0644 ) ;
while ( ( $key , $value ) = each ( %hash ) ) {
push @array , "$key\t$value" ;
}
untie ( %hash );
こんな感じ。tieもdbmopenもほとんど変わらない。
使い方はgoogleででも検索したらいっぱい出てくると思う。
もし、tieでもうまく行かないのならそのコードが変。
特に$hash{"$key"} = $value; の部分が怪しい。
仮に書いただけにしても、意味のあるコード書くのが普通と思われ。
009795
02/03/01 09:30ID:dR5S0Mwbおかげ様でうまくいきました。実は質問する前に丸一日googleで色々
調べて見よう見まねでやってたんですが、use Fcntl;が抜けてたせいで
うまくいかなかったようです。
ありがとうございました。
0098名無しさん@お腹いっぱい。
02/03/01 12:49ID:???世の中何でもPerlでやればいいと思ってしまう罠。
例えばエディタの置換機能を忘れていて
s/<td><\/td>/<td>a<\/d>/g;
してしまう罠。
009992
02/03/01 23:43ID:X6rC0lr1素直に使っちゃいたい、んですが、
モジュールのインストールが不可能なので無理です…。
現在、どっかのアップロード式BBSから切り出す方向で検討しています。
jcode.plみたいな引数渡したら勝手にやってくれる
ライブラリがあればいいんだけど、ないよなぁ…。
0100名無しさん@お腹いっぱい。
02/03/01 23:48ID:???0102名無しさん@お腹いっぱい。
02/03/02 00:17ID:???cgi-lib.plはイヤ?
0103名無しさん@お腹いっぱい。
02/03/02 00:21ID:7JCmBc0Wたとえば
・文字列を複数行として扱う
・大文字、小文字を区別しないで検索
の場合
変数 =~ /文字列/i/m;
でOKでしょうか?
0104名無しさん@お腹いっぱい。
02/03/02 00:24ID:???/〜/im;
0105名無しさん@お腹いっぱい。
02/03/02 00:29ID:7JCmBc0W0106nobodyさん
02/03/02 02:34ID:Lu4QyfYXしたけど、見つけられんかった。
0107nobodyさん
02/03/02 02:39ID:???もしかしたらモジュールであるのかもしれないけど、
http://www.google.com/search?hl=ja&q=perl%82%C5ftp&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
とりあえずどんぞ。
0108nobodyさん
02/03/02 06:20ID:LaOqrqUmただし『+』『-』『=』『!』『?』は使えるようにしたいです。
if ($password =~ /\W/) {}などとすると全部のメタ文字にマッチしてしまうの
で、どうにかしたいのですが、良い方法が思い付きません。[^\+\=\-\!\?]辺り
で試してるんですが、どうもうまく行かなくって・・・。
0110nobodyさん
02/03/02 07:42ID:???sub test {
print $x;
}
ここで"aaa"を$xに入れるには
$x = $_[0];
としないと駄目でしょうか?
sub test($x : $_[0]){}のように変数名を指定したいのです
0111nobodyさん
02/03/02 08:02ID:???> $x = $_[0]
そのようにして下さい。お好みで $x = shift;
引数を保証したいならプロトタイプ。
0112110
02/03/02 08:29ID:???$x = $_[0]; でいくことにします。
0113nobodyさん
02/03/02 08:53ID:???0114nobodyさん
02/03/02 10:08ID:???ハッシュを使う
$hiki{'x'} = 'aaa';
&test(\%hiki);
sub test{
%hiki = %$_[0];
print $hiki{'x'};
}
0116名無し
02/03/02 14:46ID:FrK2+WoO同意。
114のやり方だと容量増えるだけだと思われ。
0117nobodyさん
02/03/02 15:43ID:???sub x
{
%arg = @_;
print "$arg{a}\n";
print "$arg{b}\n";
}
x(a => 10, b => 100);
0120nobodyさん
02/03/02 16:18ID:???いや、厨房質問くさいんだけど、
再帰って
sub x
{
my($hh) = @_;
if($hh != 0)
{
return &x($hh - 1) * 2;
}
else
{
return 1;
}
じゃないの?}
0121川o・-・)
02/03/02 17:44ID:BzlXRQCM>>110 は「複数ある、それぞれが省略可能な引数を渡したいので、呼び出し元で名
前をつけたいんだが、どうすればいいわけ?」と聞きたいのだと思う。で、回
答は>>114と>>117で。
>>113 できます
>>114 どうせコピーするならリファレンスじゃなくていいんじゃない。
で、サブルーチン内で引数を書き換えないのなら、
コピーせずに$hiki->{x}でいいね。
>>115 110の問題を解決しているわけだが、、、
>>116 猫の額程度の容量を気にしてどうする、、、
>>117 保守的なコピーが必要ならこれで
>>118 「再帰」を勉強しましょう
>>119 プロトタイプ宣言の恩恵を受けるには呼び出しより前に書かなきゃね
>>120 正解
012392
02/03/02 19:41ID:???イヤじゃないです。迷ってます。
CGI.pmはでかくて評判悪いので、
CGI_Lite.pmかcgi-lib.plを使おうと思ってるんですが、
どっちを使おうかなぁと…。
実際問題、この二つってどう違うんですか?
もちろん全然違うプログラムってのはわかってるんですが、
用途が似てるから…。
012492
02/03/02 19:43ID:???CGI.pmもcgi-libも使わずにアップロードできるスクリプト。
http://tohoho.wakusei.ne.jp/cgi/wwwupl2.txt
ちなみにとほほ氏謹製です(w
0125nobodyさん
02/03/02 19:43ID:???0127nobodyさん
02/03/02 20:39ID:???ファイルのどこにヘッダーがあるのかわからん。。
0129nobodyさん
02/03/02 21:06ID:MILA+IA2単に生URL見せたく無いだけなんで、
簡単なロジックで、encode,decode出来ればいんすけど、
どでしょ?
0131115
02/03/02 21:18ID:???他の言語みたく
void Hoge (int n) {}
って渡し方が出来るかってことじゃねーの?
だからハッシュでってのは見当違いかなと。
まぁいいけどさ。
0135asahi
02/03/02 22:15ID:???あぷろだでアップ時の残り時間を
表示させるのにはどうすればよいのでしょうか?
スレ違いだったならごめんなさい
0137nobodyさん
02/03/02 22:18ID:???適当なところに以下の文を追加
print scalar localtime;
これで分からなきゃCGI改造スレ行け。
その際はそのアップローダのソースをどこかに上げろよ。
0138137
02/03/02 22:19ID:???残り時間はサーバー側じゃ無理だわな。
0139nobodyさん
02/03/02 22:30ID:???から無理じゃないっしょ?
0141nobodyさん
02/03/02 23:03ID:???表示できるじょ。
0142nobodyさん
02/03/02 23:07ID:???が効いて送り終わって無くても応答取ってるかも。
実験してみよう。
0143nobodyさん
02/03/03 04:22ID:???表示させたいという場合はどのように記述すればいいのか教えてください。
例
a1,a2,a3,a4,a5,a6,a7,a8,a9,
b1,b2,b3,b4,b5,b6,b7,b8,b9,
とデータがある時に左から5列目、つまりa5とb5を取り出す。
よろしくお願いします。
0145129
02/03/03 05:00ID:IQ08Jes1URLでパラメータで渡したいから、URLで使える文字だけにしたいんよね、
エスケープシーケンスだと長くなっちまうから、ちょっとねぇ〜
0146nobodyさん
02/03/03 05:20ID:vLChsjTspush @array , (split /,/)[4] ;
}
print @array ;
こんな感じかな?
0147nobodyさん
02/03/03 06:25ID:???0148nobodyさん
02/03/03 07:54ID:qCUfXnEh指定した長さのランダムな文字列って事?
使用する文字列の範囲を教えて。
0149nobodyさん
02/03/03 08:09ID:+mcyIDOm$str =~ s/$str1/$str2/;
なのですが $str1,$str2 にも "/" "." などが入っているのが問題なのだと思うのですが
うまくいきません(というか無限にループしているみたいになっています)
$str =~ s/\Q$str1/\Q$str2/;
というのを見つけたのですが、$strが"\"マークだらけになってしまいます
どうしたらうまく置換できるのでしょうか?
0152nobodyさん
02/03/03 14:11ID:IQ08Jes1perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "ja_JP.ujis",
LC_ALL = "ja_JP.ujis",
LC_MESSAGES = "ja_JP.ujis",
LC_CTYPE = "ja_JP.ujis",
LANG = "ja_JP.ujis"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
This is perl, v5.6.1 built for i586-linux
Copyright 1987-2001, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'. If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.
って感じで、localeでしかられちゃうんだけど、どしたらええのかね、
ちなみに、環境変数は
export LANGUAGE=ja_JP.ujis
export LANG=ja_JP.ujis
export LC_CTYPE=ja_JP.ujis
export LC_ALL=ja_JP.ujis
export LC_MESSAGES=ja_JP.ujis
こんな感じにしてます
0155152
02/03/03 14:21ID:IQ08Jes1Linux(slackware)
0156暗号化だが
02/03/03 14:29ID:IQ08Jes1漏れは、URLで使える文字に変えるってのが知りたい
極力、1バイト、一文字に抑えて、足りない分は、
!Aとかで、2文字にしていく、ハフマンのエンコード部なんか
参考になりそうだなぁ〜とか、思ったりしてた。
暗号化ってより、圧縮、変換の話か・・・
0157IQ=8 だって --->
02/03/03 14:30ID:???0159nobodyさん
02/03/03 15:30ID:???長さが長くなるのくらいあきらめろ、って気がしてきた。
URLに使われる文字がABCDEFGHだけだとして、
tr/ABCDEFGH/DGFHCEAB/;
ってのはどうだ?
0161156
02/03/03 15:59ID:IQ08Jes1必要に感じた事無い?
0163143=151
02/03/03 16:42ID:K6uur/rZcsvから情報を選び出すことは出来たのですが、
次はそのデータを比較して、条件に合ったときだけ取り込みたくて
以下のようにしたのですがうまくいきません。
アドバイスお願いします。
open(DATAFILE,"data.csv");
while (<DATAFILE>) {
push @TMPDATA ,(split /,/)[0,5] ;
if (@TMPDATA[0] < @TMPDATA[1])
{
push @TIME ,(split /,/)[1];
}
}
それとスペースも入ってない空欄
1,2,,4,←こんな状態
の部分はどのように判別すればいいのですか?
よろしくお願いします。
0165163
02/03/03 17:27ID:K6uur/rZ参考にして
push my @TMPDATA ,(split /,/)[0,5] ;
としてみると、思い通りに動きました。
空欄の処理の仕方も何方かアドバイスお願いします。
0166nobodyさん
02/03/03 19:22ID:zlwT/08tCGIを動かそうとしたらエラーになってしまいます。
原因は何が考えられますか?
Win2K(SP2)+Apache1.3.24+Perl5.6.620です。
0172nobodyさん
02/03/03 21:08ID:???例えば、以下のコードはSynax OKだが実行した瞬間死ぬ。
#!/usr/bin/perl
foo()
__END__
0173nobodyさん
02/03/03 21:14ID:/fm96Lfbのplファイルが黄色いボールのアイコンになってしまいました。
この関連付けを解除する方法は無いですか?このままでも問題無し?
あと、いずれはCGIスクリプト書けるようになりたいですが、まず最初の
段階ではActivePerlをインスコして参考書読みながらコマンド打っていくの
がいいんでしょうか?サーバソフトとかまだ入れてないんですが・・
0175166
02/03/03 21:16ID:zlwT/08tApacheのログを見たら分かりました。
print "Content-type: text/html\n\n"を忘れてBad headerでした。
超初心者的ミス、鬱だ。
0176173
02/03/03 21:24ID:/fm96Lfbそんな事言わずにお願いします。
>インストールして
訂正します。すみませんでした。
ちなみに参考書は「すぐわかるPerl 深沢千尋/著」を買ってきました。
0177nobodyさん
02/03/03 21:26ID:???その本は素晴らしいよ。
基本的にはコマンドプロンプトでPerl a.cgiとするのが王道。
俺は秀丸マクロで開発環境作ったけど。
0179163
02/03/03 23:17ID:K6uur/rZCSVデータの中に空欄があったら処理を実行せずにデータがあればそれから処理を実行したいんです。
0180163=179
02/03/03 23:22ID:K6uur/rZopen(DATAFILE,"data.csv");
while (<DATAFILE>) {
push my @TMPDATA ,(split /,/)[0,5] ;
if (@TMPDATA[0] < @TMPDATA[1])
{
push @TIME ,(split /,/)[1];
}
}
のifのところで@TMPDATA[0] 、@TMPDATA[1]のどちらかが空欄なら以下の処理をせずに終わりたいんです。
0182nobodyさん
02/03/03 23:42ID:???0183nobodyさん
02/03/04 00:10ID:???strict下ならvarsモジュールを使えばいいのに。
localとは違うからいいの?
018495
02/03/04 00:12ID:KNDHr4Nosub sub_routin {
my (%data) = @_;
use strict;
use Fcntl;
use SDBM_File;
my %hash = ();
my $data_base = 'data_base';
tie (%hash, 'SDBM_File', $data_base, O_CREAT|O_RDWR, 0666);
#この命令自体はあまり意味は無いが、要はハッシュのハッシュを使いたい
foreach my $number (1..100) {
while ( my ($key, $value) = each (%data) ) {
$hash{$number}->{$key} = $value;
}
}
untie (%hash);
}
上のように、tieからuntieの中でハッシュのハッシュを使おうとすると
Can't use string ("HASH(0x1c37ddc)") as a HASH ref while "strict refs"(以下略)
などと怒られてしまい、使えません。多次元構造のデータの外部化って無理なんですか?
0185183
02/03/04 00:12ID:???http://www.midnightroam.org/source/minibbs2_77.txt
0186nobodyさん
02/03/04 00:16ID:???$hash{$number, $key} = $value にすれば?
0187nobodyさん
02/03/04 00:17ID:???漏れの場合はvarsを知らなかったので、myを
使ってる。「strict使ったら怒られたから、
myを付けたらOKだった」という感じだった。
varsを使った方がいいのかな。
0189149
02/03/04 02:25ID:zvOvcxtF自分なりにいろいろやってみたのですが、全く別の問題だと分かりました
$string = 'Watashi ga Kaita. Watashi ga Keshita';
while ($string =~ /Watashi/igo) {
$value = 'Watashi(=Yamada)';
$string =~ s/Watashi/$value/i;
}
print "$string";
なのですが、無限にループ(?)しているような状態になります
表示したい文字列は
Watash(=Yamada)i ga Kaita. Watashi(=Yamada) ga Keshita
にしたいのです
この例の場合には置換で1行で出来るのですが、whileループの中で
いろいろと処理をさせたいのでこの様にしています
$value = 'Ore(=Yamada)';
$value = 'Yamada';
のようにすると無限ループのような状態にならずに
Ore(=Yamada) ga Kaita. Ore(=Yamada) ga Keshita
Yamada ga Kaita. Yamada ga Keshita
と変換されて表示されるのでパターンマッチに使った文字列から
始めない場合はうまくいくようなのですがその理由も良くわかりません
なんかそもそもアプローチ自体がおかしいような気がしてきてはいるのですが
ご教授いただけるとうれしいです
0190nobodyさん
02/03/04 02:27ID:???>表示したい文字列は
>Watash(=Yamada)i ga Kaita. Watashi(=Yamada) ga Keshita
Watashi(=Yamada) ga Kaita. Watashi(=Yamada) ga Keshita
です 申し訳ありません
0191nobodyさん
02/03/04 03:03ID:???鯖に存在するファイルの読み書きは知ってるんですが
ファイル自体を出力する処理方法ってありますか?
(更新ごとに新しいファイルを出力するみたいな)
よろしくお願いします。
0196nobodyさん
02/03/04 10:14ID:???Watashi ga Kita Watashi ga Kita
↓
Watashi(=Yamada) ga Kita Watashi(=Yamada) ga Kita
↓
Watashi(=Yamada)(=Yamada) ga Kita Watashi(=Yamada)(=Yamada) ga Kita
↓
Watashi(=Yamada)(=Yamada)(=Yamada) ga Kita Watashi(=Yamada)(=Yamada)(=Yamada) ga Kita
$string =~ /Watashi$s/igo
0199nobodyさん
02/03/04 13:40ID:???0200nobodyさん
02/03/04 13:43ID:???-P causes your script to be run through the C
preprocessor before compilation by Perl. (Because
both comments and cpp directives begin with the #
character, you should avoid starting comments with
any words recognized by the C preprocessor such as
"if", "else", or "define".)
0202nobodyさん
02/03/04 13:52ID:???0203nobodyさん
02/03/04 13:56ID:???use constant NDEBUG => 1;
use constant STRING => "hello, world!\n";
if(defined &NDEBUG){
print STRING;
else{
# ..
}
それはそうと>>201は何故こんなに偉そうなんだ?
0205nobodyさん
02/03/05 06:00ID:???whileループの突入条件とそのループ内で同じ文字列のマッチングを行っているのが原因。
これでは文字列のどこまでマッチ作業を試行したのかわからなくなってしまうよ。
具体的にはwhileループ内のマッチ作業によってpos($string)がundefで上書きされてしまう。
$string = 'Watashi ga Kaita. Watashi ga Keshita';
while ($string =~ /Watashi/ig) { # ←◆g修飾詞によってpos($string)が設定される。
$value = 'Watashi(=Yamada)';
$string =~ s/Watashi/$value/io; # ←◆pos($string)がundefで上書きされる。(゚д゚)マズー
}
print "$string";
要するに$stringのマッチ開始位置が巻き戻ってしまう。
このため突入条件のマッチングはg修飾詞があっても常に$stringの先頭から行われてしまい、
$string内にWatashiという文字列がある限りwhileがループを続けてしまう。
>189がやりたい(であろうと漏れが考えた)事をむりやり書き下してみると、
# pos再設定とマッチ以後の文字列置換でむりやり解決
$string = 'Watashi ga Kaita. Watashi ga Keshita';
while ($string =~ /Watashi/ig) {
$value = 'Watashi(=Yamada)';
my $position = pos $string;
if (substr($string, $-[0]) =~ s/Watashi/$value/io) {
$position += length $value;
}
pos $string = $position;
}
print "$string\n";
こんな感じになるんだろうか。でもこんなスクリプトは見た事が無い。
アプローチというか何というか、たぶん他にもっと良い書き方があるのだと思う。
単純に解決したいならループ内で $string =~ s/Watashi(?!\(=Yamada\))/$value/io とか、
処理を挟むなら $string =~ s/Watashi/&process(...)/eg とか。
取り敢えず、普通whileの突入条件とそのループ内で同じ文字列のマッチングは行わない。
perlretutやperlop,perlfaq6などを読むと良いかもね。
つうか正直何をやりたいのか良くわからないから的外れかもしれない。そんときゃスマソ。
0206nobodyさん
02/03/05 06:12ID:???$position += length($value) - length('Watashi');
だね。どーでもいいか。
0207nobodyさん
02/03/05 13:00ID:???&subname; で飛ばす場合は、どちらの方がメモリ消費が少ないのでしょうか?
自分は()を付けると、サブルーチン先の@_と、呼び出しもとの@_は別物と認識するので、
@_に代入するとその分メモリを消費するが、何も代入しない場合はどっちでも変わらないのでは?
と考えるのですが
0208208
02/03/05 22:03ID:OFFg29v+いつも「エラー2」が出てしまいます。何でうまくいかないのかさっぱり分かりません。
どなたかお知恵を貸してください。
acountlist.dat はこんな感じになってます。
id01:pwd01:point01
id02:pwd02:point02
...
------------------------------------------------------------
print "IDを入力してください\n";
$id = <STDIN>;
chop($id);
print "パスワードを入力してください\n";
$pwd = <STDIN>;
chop($pwd);
open(DATA,"<../xxxxxxx/acountlist.dat") or die;
while($line = <DATA>){
chop($line);
@acount = split(/:/,$line);
if($id eq $acount[0]){
if ($pwd eq $acount[1]){
print "いらっしゃいませ $acount[0] さん\n";
print "現在あなたは $acount[2] ポイントお持ちです\n";
exit;
}else{
print "エラー1";
exit;
}
}else{
print "エラー2\n";
exit;
}
}
close(DATA);
------------------------------------------------------------
0209nobodyさん
02/03/05 22:23ID:???acountlist.dat (accountlist.datのスペルミスだとは思うけど)
の最初の行に書いてある人はOKだね。
0210nobodyさん
02/03/05 22:24ID:???それじゃid01の人しか受け付けないよ.
0211208
02/03/05 23:22ID:???おかげさまでうまくいきました。
0212nobodyさん
02/03/05 23:55ID:???どうせましょう
0213nobodyさん
02/03/06 10:16ID:???データベースから引っ張ってきた件数をGoogleみたいに
1 2 3 4 5 ・・ と自動的にリンクを貼りたいんですが。
0214nobodyさん
02/03/06 10:23ID:???10〜100までの10の倍数の乱数を出したい場合。
1〜10の乱数を出して10倍する。
0215nobodyさん
02/03/06 10:25ID:???ひょっとして、乱数は関係ない?
foreach(1 .. 100){
if($_%10==0){print qq(10の倍数);}
}
って事?
0217nobodyさん
02/03/06 14:04ID:???10の倍数とか関係なかった(ごめん)
どうやったらデータベースから引っ張ってきたデータ件数を
Googleみたいに 1 2 3 4 5 ・・ ってリンクできるんだろ
perlじゃないのかな・・・
0218nobodyさん
02/03/06 14:13ID:???$i=0;
foreach(1 .. $n){
if($_%100==0){print qq(<a href=./hoge.cgi?start=$_>) . ++$i . qq(</a>);}
}
googleはこんな感じだろ。
0219nobodyさん
02/03/06 14:16ID:???$j = HIT数;
for($j=0;$j<=$n/100;$j++){
print qq(<a href=./hoge.cgi?start=) . ($j*100) . qq(>$j</a>);
}
ちなみに>218でもこの方法でも0 1 2 3 となるから、実際には1を足すように。
0220nobodyさん
02/03/06 14:17ID:???>219の最後の一行は忘れて。
頭寝てるかもしれないからもう沈むわ。
混乱させてスマン。
0225nobodyさん
02/03/06 16:04ID:???の略ですm(_ _)m
0226nobodyさん
02/03/06 21:21ID:qVNAtP8C教えて下さい。
0227nobodyさん
02/03/06 21:29ID:???正規表現に通したりすると落ちたりするんですか?
あと2バイト文字でファイル名を作らせるのはまずいですか?
URIエスケープすればどうだろう?
0228nobodyさん
02/03/06 21:33ID:???この辺を参考に。
0230nobodyさん
02/03/06 22:04ID:???ありがとう。
メールやネットニュースが対応してないので使わないクセを付けようということなのかな。
そういや,おれの通ってる大学のイタイ教師がメールのフッタに
「半角カナが世にはびころうとする風潮に断固反対する会 会員No.xx」とか書いてたのを思い出した。
どーでもイイが・・・
0231かなり初心者
02/03/06 22:08ID:+Uo+pWisそれを<a href="3"> >>3 </a>のように置換するやり方ってどうやるので、
しょうか?(ちなみに、数字は可変します。)
お願いします。(コードでご説明下さい。)
0232nobodyさん
02/03/06 22:11ID:???$message =~ s/>>([0-9]*)/<A HREF="$1">$1</A>/g;
0233nobodyさん
02/03/06 22:12ID:???$message =~ s/>>([0-9]*)/<A HREF="http://xxxx.xx.com/xxx.cgi?Res=$1">$1</A>/g;
などにすると良い。
0234nobodyさん
02/03/06 22:14ID:???だった。
0236nobodyさん
02/03/06 22:17ID:???じゃないとバグるな。
0237nobodyさん
02/03/06 22:19ID:???0238かなり初心者
02/03/06 22:27ID:+Uo+pWis数字なのですが、2桁の場合も考えられます。
その場合でも、ご提示頂いた物でOKなのでしょうか?
お願いします。
0239nobodyさん
02/03/06 22:30ID:???ローカルで試してみろよ。
できるから。
0240235
02/03/06 22:33ID:???oを付けると、正規表現中に変数があっても、その正規表現の
コンパイルを最初の一度しか行いません。そのため、
2度目以降のマッチングの際にコンパイルしないぶん早くなります。
なので、通常正規表現中に変数を入れない場合はoをつけとく
方が有利です。
で、正規表現中に変数があって、それが変更される
にもかかわらずoを付けると、当然予期する結果が得られません。
0241かなり初心者
02/03/06 22:34ID:+Uo+pWis助かりました。(^_^;)
0242nobodyさん
02/03/06 22:35ID:???なんだこいつは?
EUCもS-JISも悪。JISに統合せよ,だと?
半角カナもJISが対応していないから使うな,ということなのか。
正直WebページのキャラセットにJISなんて使う気もせんが・・・
http://www2.justnet.ne.jp/~chic/TRON005.HTML
http://homepage1.nifty.com/VET06031/kanaok/kanaok.html
0244nobodyさん
02/03/06 22:36ID:???なるほど!ええこと聞いた!情報ありがとう。
>239
ほんまかいな・・・
foreach(1..100000){}で囲むのか?(笑
0245nobodyさん
02/03/06 22:42ID:???meta で指定すれば問題ないやろ?
0248nobodyさん
02/03/06 22:50ID:???ごめん,今気付いたんだが>237へのレスだと思ってた・・・
変なこと言ってすまん・・・
0251nobodyさん
02/03/07 06:18ID:WTUe3Qf10252nobodyさん
02/03/07 08:50ID:hIR8dzV60253nobodyさん
02/03/07 09:09ID:???http://www.google.com/search?hl=ja&q=CGI+User-Agent&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
0258nobodyさん
02/03/07 13:23ID:???意味わかりませんか?User-Agentってようは相手のブラウザを認識するのですよね?
私が聞きたいのはページ(htm,html,texなど)で作成したものに直リンクできない
ようにするための参照制限のことです。
今のところCGI関連のホームページで色々探してみましたが、不可能という答えしか
掲載されていませんでした・・・。
もし知っている方がいらっしゃいましたら教えて下さい。
0260nobodyさん
02/03/07 13:32ID:???だから、CGIでページを生成することにして、そのページへ
携帯電話からアクセスしてきたら弾けばいいじゃん。
htmlファイルへのアクセス制限は、CGIとは別問題で、
.htaccessでDoCoMoからのアクセスを拒否するだけだよ。
0261nobodyさん
02/03/07 14:04ID:???ありがとうございました。
>>259
もしかしたらいい案している人いるかもしれないから
聞いたんじゃん?
代用できる方法知ってるかもしれないし。
私CはわかるけどPerlはさっぱりわからんのじゃ!
初心者なんだから・・・
0262nobodyさん
02/03/07 14:11ID:???初心者である事を免罪符のように使う人物である。
0264nobodyさん
02/03/07 14:21ID:???0265nobodyさん
02/03/07 14:24ID:???i-modeのページも、あれでいて結構気を使うんだよ。
半角カナにしろだの、ここは絵文字にしろだの、クライアントが
うるさいんだよね・・・
0268
02/03/07 14:47ID:q6SBx/iVサンプルとか載ってるととっても助かります
教えて下さい。
0269nobodyさん
02/03/07 14:49ID:???0271nobodyさん
02/03/07 16:32ID:???0272nobodyさん
02/03/07 16:36ID:???よそで基礎知識を付けてからのほうがデマ吹き込まれなくていい。
あらゆる書籍、webサイトで調べてそれでもわからなかったときの
最後の手段が2ch
0276nobodyさん
02/03/07 17:02ID:???0277271
02/03/07 17:05ID:???http://www.harukaze.net/~mishima/perl/perl_j.html
0278nobodyさん
02/03/07 17:09ID:???0279前述のs///oの質問した人
02/03/07 17:13ID:???そのとおりである!
・・・おれはよく甘えるがなー・・・
いやおれも分かる範囲ならできるだけ答えるよ。
でも>261は最初の質問の時点でスレ違いだったからなぁ・・・
0280s///o厨
02/03/07 17:16ID:???試しに自分のページを「エンコード:西ヨーロッパ言語」で見てみ。
それが毛唐ドモのPCに映る画面。
0281nobodyさん
02/03/07 18:09ID:???0282nobodyさん
02/03/07 18:10ID:???0283nobodyさん
02/03/07 18:13ID:???_ _
〃┏━━ 、
>− )
パタパタ | ノノソハ))) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(((\リリ ´ー` リ < 変なこと言うけどPerl/CGIの入門書。
((ニE/⌒ヾ∞"ヽ 上にも書いたけどCGIはある条件さえ満たせば言語は問われないんだ。
(こ) ∞ |こ) 無理してCでの入門書を探すより腐るほど出てる詳しいPerlでの本の方が参考になるよ。
く__∞,ノ 上にも書いたけどPerlはCとかなり似ているから結構読めるよ。
し' し'
暇だから簡単にまとめておくね。
POSTの場合、データは標準入力に入る。
GETの場合、データは環境変数QUERY_STRINGに入る。
リモートホストなどのステータスは環境変数に入る。
出力は標準出力に対して行う。
出力の前にprintf("CONTENT-TYPE: text/html\r\nr\r\n");を忘れないでね。
うぐぅ。あんまり祐一の役にたてなかった気がするよぉ。
0284nobodyさん
02/03/07 19:59ID:???<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function WindowOpen(){
window.open("ここにページの名前.htm")
}
</SCRIPT>
</HEAD>
<BODY onunload="WindowOpen()">
</BODY>
</HTML>
0286nobodyさん
02/03/08 04:19ID:rUODFwebお絵描き掲示板を設置しようかと考えているのですが、
割り当てられた容量が5MBとやや少なめ(と、言われた)なのです。
お絵描き掲示板は負担がかかると聞いたのですが
出来るだけ負担を軽くするようにするにた例えばどのような工夫が必要でしょうか。
要領を得ない質問で申し訳無いですが、ご指南下さい。
0287nobodyさん
02/03/08 04:48ID:???小さなスペースみたいだから、画像サイズが(小さく)選べてjpegに対応してて、
画像圧縮率も変えられるようなのが良いんでない?
荒らし対策も考えると、しぃちゃんのPaintBBSアプレット使った奴がいいかも。
というか、ここは自分でコードを書く人の為のスレッドだよ…。
0288nobodyさん
02/03/08 10:15ID:???一行も書けないよ〜〜〜
0289nobodyさん
02/03/08 11:00ID:wwEgc1iJ頂いてやって来ました。
Apache 1.3.12 文字化け問題で、サーバの管理者にiso-8859-1を削って貰いました。
でも、依然としてMac+ネスケ4.xの環境で、cgiからの飛び先がhtmlだったり、
htmlとcgiの混合フレームの場合に化けます。
化けるのはいずれもhtml部分で、cgiは問題ありません。
そこで.htaccessに AddTypeを入れたところ、Mac+ネスケ環境では改善したのですが、
必ずWIN+ネスケ6.xにおいて激しく文字化け、リロードしても改善されない、という現象に陥ってしまいます。
cgi、html、いずれもshift_jisで書いて、保存してあります。
metaにはshift_jis指定をしています。
また化けhtmlに影響している、cgiに Content-Type: text/html; charset=Shift_JIS とcharestを追記すると、今度はサバエラになってしまいます。
勿論「;」や「"」には気をつけています<削除しないように
スキルがないなりに、\や\nをつけたり色々やってはみました。
はー。何ででしょう?
というか、一番不可解なのは、.htaccessに AddTypeを入れると、
どうしてネスケ6.x+WINで必ず文字化けしちゃうのか、分からないのです。
基礎知識がないので、この状態でいっぱいいっぱいです。
どなたかアドバイスをお願いいたします。
0290nobodyさん
02/03/08 11:12ID:???0291nobodyさん
02/03/08 11:13ID:???始めにhtmlの文字コードは?と聞いたものですが。
cgiも書けるのでしたw
>cgiに Content-Type: text/html; charset=Shift_JIS とcharestを追記すると、今度はサバエラになってしまいます。
コード見せてもらえればツッコミは入れられるかなと思います。
http://www.harukaze.net/~mishima/perl/cgi-tech-tips.html
に一通り文字コード対策載ってますね。
0292289
02/03/08 11:26ID:wwEgc1iJprint "Content-type: text/html\n\n";
print "<html><head><title>$main_title</title>\n";
print "<META content=\"text/html; charset=Shift_JIS\" http-equiv=Content-Type>\n";
print "<META content=text/css http-equiv=Content-Style-Type>\n";
&style;
でしょうか?
一緒に来て頂いて有り難うございます(笑)<291
<291
EUCは試してみていません。<html
保存をEUCにして、metaも変更してみる、という意味ですよね?
っつか、恥ずかしいのですが、eucで書いた事ないので、オノレに不安です。
0293nobodyさん
02/03/08 11:38ID:???0294289
02/03/08 11:46ID:wwEgc1iJ有り難うございます。
CGIは無事動きましたが、依然として最終飛び先のhtmlは化けてます…
0296茶文字 ◆xELvisFU
02/03/08 14:14ID:???>>294
最終飛び先のHTMLはCGIが生成しているのではなくて、もろHTMLなの?
フレームを使っているという話だったから、frameset定義ファイルと
各フレームに入るページの文字コードをそろえておいた方が安全な気はする。
0298289
02/03/08 14:33ID:wwEgc1iJ有り難うございます!(笑)
もろHTMLです。
cgiが生成しているのではありません。
メールフォームを送信し終わった後の飛び先のフツーのhtmlが化けます。
またフレームの方は上フレームがcgi、下がhtml(cgiが生成ではありません)
こちらも文字コードはshift_jisにて一貫させております。
つまり具体的には二箇所化けているのです。
ぶっちゃけて言えば、チャットの入り口と、送信フォームの最後の飛び先です。
メタはタイトルの上に置いたり、色々したんですが、どーしても化けるんです〜。しくしく。
0299茶文字 ◆xELvisFU
02/03/08 15:16ID:???どんな化けかたしてます?
HTMLによるマークアップが反映されているけど文字が判別できないのか、
HTMLの跡形もなくテキストがだーっと続いてる状態なのか。
後者だとしたらバイナリでPUTしてもーたっつー可能性も考えたんだけど。
# 鳩丸見てきたけど、frame要素にtype属性とcharset属性は存在しないみたいっすねぃ。
0300289
02/03/08 15:41ID:wwEgc1iJこんな感じです<ちなみに「戻る」です。
説明が後からになってしまって申し訳ありません。
サーバのapacheのバージョンが上がる前は普通に表示されていました。<チャットも送信フォームも
例の問題のapacheにバージョンアップした途端に駄目になったものです。
朝からずっと皆さんには色々とアドバイス頂いて恐縮です。
引き続きアドバイスお願いいたします。
0301286
02/03/08 15:43ID:???スレ違いだったのですね・・・気づかずに失礼しました。
レスありがとうございます。とても参考になりました。
しぃちゃんのPaintBBSアプレットにしたいと思います。
0302nobodyさん
02/03/08 15:53ID:???ttp://www.ecc.u-tokyo.ac.jp/guide/faq/charset.html
これとかじゃないのかな?
『文字化け』『Apache』のGoogle検索で一発で出たんだけど。
0303nobodyさん
02/03/08 15:55ID:???これも同じかな?
0304nobodyさん
02/03/08 16:28ID:???きも
0305289
02/03/08 16:42ID:wwEgc1iJその通りです。
Google等で検索結果は全部目を通し、その結果、ap_send_error_response() のiso-8859-1 を iso-2022-jpに変更を
サーバ管理者にお願いしたのですが、Mac+ネスケで化けるために
自分で.htaccessを書き、そこにAddTypeを記述、アップすると、
Mac+ネスケでは改善しますが、WIN+ネスケ6で文字化け
(.htaccessのあるディレクトリ全部)、という現象に陥って困っているのです。
0306nobodyさん
02/03/08 16:51ID:???print "Content-Type: text/html\n";
print "Location: hoge \n\n";
これで試してもダメだった?
Locationで化けるって事だよな?
飛び先とか漠然とした言い方をせず飛ばす手段を説明しる。
0307nobodyさん
02/03/08 16:55ID:+6IU9s64001,a1,b1,c1
002,a2,b2,c2
003,a3,b3,c3
004,a4,b4,c4
005,a5,b5,c5
のようなデータからランダムに1行拾って書き出したいんですがどうすればいいのでしょうか
0308289
02/03/08 17:02ID:wwEgc1iJ有り難うございます。
で…この板の敷居が高いという言い訳になってしまうのですが…
それはドコに入れれば良いのでしょう?
CGIの中の print "Content-Typeの行のあたりにさっくり入れても大丈夫でしょうか?
また飛ばし先のURL指定は、CGIそのものではなく、
set.plまたはcustom.cgiのような、設定ファイルに記入という方式なのです。
CGIを理解してない癖にゴチャゴチャとごめんなさい。
0309nobodyさん
02/03/08 17:10ID:???そりゃCVSじゃなくてCSVだ。意味が全然違うぞ。
ちゃんと調べてから聞こうねー。
http://www.din.or.jp/~ohzaki/perl.htm#File_Random
0310nobodyさん
02/03/08 17:14ID:???質問を変える。
あんたが使ってるCGIとやらは、誰が組んだものだ?
無料配布されているものか?
自身で組んだものではなさそうだな。
無料配布のを使っているならこっちに行って配布先を明記の上で相談した方がいい。
スクリプト改造工房 Part4
ttp://pc.2ch.net/test/read.cgi/php/1012839651/
>1にあるように
>いらっしゃーい、Perlのコーディングで困ってる人のスレです。
ここはPerlの「コーディングで困ってる人」のスレなんだ。
たらい回しみたいになって悪いね。
もし、配布物でないのなら、あんたの使ってるCGIとやらを拡張子「.txt」にしてアップしてくれ。
ソースが見れないと具体的なことは言いにくい。
はっきり言ってしまうと、あんたの説明じゃ埒があかない。
0311nobodyさん
02/03/08 17:27ID:???ローソン
イレブン
ミニストップ
サンクス
のようなチェーン店からランダムに1店舗拾って経営したいんですがどうすればいいのでしょうか
0312289
02/03/08 17:37ID:wwEgc1iJ自分ではperlは書けない部外者がグズグズとごめんなさい。
使っているのは、無料配布されているCGI軍団です。
おっしゃる通りです。
教えて頂いた場所へ行ってみますね。
お騒がせいたしました。
0313nobodyさん
02/03/08 20:54ID:d+W0Gg3j使えるならやり方を詳しく教えてください。
お願いします。
0314nobodyさん
02/03/08 21:00ID:???>いらっしゃーい、Perlのコーディングで困ってる人のスレです。
0315nobodyさん
02/03/08 21:26ID:???http://www.google.com/search?hl=ja&q=XP%82%C5Apache%82%CD%8Eg%82%A6%82%E9%82%CC%82%A9&lr=lang_ja
0316nobodyさん
02/03/08 21:27ID:???313はXPでapacheを起動するperlスクリプトのコーディングで困ってるんだよ。
system("c:/progra~1/apache/httpd.exe");
0318ge
02/03/09 00:54ID:oQUE7R44エラーがあった場合に、
'C:\Program Files\httpd\cgi-bin\test\test.cgi' script produced no output
とでるだけでエラーが出ないのですが、
DOS から perl を打った時のようにエラー表示したいのですが、
どうしたらよいでしょうか。
0320ge
02/03/09 00:56ID:oQUE7R440321s///o厨
02/03/09 01:08ID:???anHTTPdは安定しないしすぐリソース喰うので好きじゃないが。
0322nobodyさん
02/03/09 01:38ID:kV8ZYAMBuse CGI::Carp 'fatalsToBrowser';
ちかいもんはでるよ。
0323nobodyさん
02/03/09 02:03ID:???0324nobodyさん
02/03/09 03:56ID:???なにも出力しないで終了しやがったってことだろ。
「出力こねーぞ!」ってエラー出してるだろ。
プログラムを見直せ。
AnHTTPDだと、[GI出力を検査]のチェックボックスにチェックがしてあれば、
Perlのエラーを表示してくれるだろ。
0325nobodyさん
02/03/09 06:20ID:???PerlへのパスがPerl.dllになってるとエラー吐かないことあるよね。
Perl.exeだと吐くけど。
0326nobodyさん
02/03/09 09:38ID:biqte+lk0327nobodyさん
02/03/09 11:15ID:fgv50gi6print "777777777777777" % "10" . "\n" ;
これの答え、5になる奴いない?
バージョン5.00503で、答え5になるやつが
あったんだけど、誰か詳細しらん?
0329nobodyさん
02/03/09 11:35ID:fgv50gi6わざとやってんだよ、
いいから、お前はすっこんでろな。
0330nobodyさん
02/03/09 11:36ID:???http://pc.2ch.net/test/read.cgi/tech/991994996/505-519
0332nobodyさん
02/03/09 11:42ID:???http://www.tvdo.net/mrcam/vaiolx/
落ち着いてここのライブ映像でも見てくれ。激しく無料だ。
0333nobodyさん
02/03/09 12:21ID:???0334nobodyさん
02/03/09 12:44ID:???【青春の】衛藤家ライブカメラウォッチ【1ページ】
http://kaba.2ch.net/test/read.cgi/net/1015644999/l50
専門スレがたちました。
0335nobodyさん
02/03/09 13:17ID:???何熱くなってるんだかわからんが、もっとマターリ逝こうよ。
最近人少なくなってるんだからさ。
で、本題ね。
プログラミングやるんなら、16ビット・24ビット・32ビットの最大値くらいは
知っておくべき。
これヒントでもあり解答でもある。
0337nobodyさん
02/03/09 13:47ID:???0338nobodyさん
02/03/09 14:07ID:fgv50gi6おまえ、恐ろしいしったかバカだなぁ〜
あのよ、数字が小さくてもなんだよ。
でな、Perlのバージョンが同じでも、ライブラリのバージョンの違いで、
結果が変わるわけな、
でな、漏れが聞きたかったのは、libcとか、glibcのバージョンの依存があるとかよ、
そおういう事聞きたかったのよ、
ほぉ〜、ビット最大値ねぇ〜、今年になってから変わったっけ?
0339nobodyさん
02/03/09 14:31ID:???> でな、漏れが聞きたかったのは、libcとか、glibcのバージョンの依存があるとかよ、
> そおういう事聞きたかったのよ
じゃあ最初からそう書けばいいのでは。
あなたのような性格の方はこの板よりマ板向けかと思われます。
0340nobodyさん
02/03/09 16:21ID:???では初めからどうぞ。
0341nobodyさん
02/03/09 17:16ID:7LzSOF3K今、imode端末からcgi(perl)をたたくプログラムを作ろうと思ってるのですが
UIDの取り方のアドバイスをいただきたいのです^^;
NULLGWDOCOMOという文字を入れておけば、imodeサーバー側でユーザーIDに変換
してくれるとあったのですが
formをいくつか配置してあるものに
<form method="POST" action="test.cgi?uid=NULLGWDOCOMO">
とかけばよいのでしょうか?
ためしにサーバーにあげてテストしたところuidの値をみたら
そのまま文字列が入っていました。。
どなたかご教授いただけたらうれしいです。
よろしくお願いします。
0342>>341
02/03/09 20:19ID:???でどうでしょう
0343nobodyさん
02/03/09 20:19ID:???0345テストテスト
02/03/10 10:24ID:FplTavEMdocomoに登録申請されて許可されているディレクトリ以下であれば
UIDなる物に変換されます。いよゆるMYMENUです。
勝手なサーバーにやっても変換されません。
ドコモはPOSTサポートしています。一部のウンコ機種だけ使えないだけ。
0346nobodyさん
02/03/10 11:46ID:???ハッシュに、いくつの連想配列が含まれているのかを知りたいのですが、
やり方がわかりません。
わからないので仕方なく、
foreach (keys %HASH) { ++$HASH; }
のようなことをやっています。なにとぞお助け下さい・・・
0348nobodyさん
02/03/10 11:54ID:???0349ドビギナー
02/03/10 12:38ID:???1、最適なRWIN値ってどー出すの!?
2、「同時に張るコネクション数」ってどーゆーこと!?
お前ら、助けて下さい!
0351nobodyさん
02/03/10 12:40ID:Pl5m+TdB自分も>>346 のに興味あったので
%hash = (A=>1,B=>2,C=>3);
$i = %hash/2;
print $i,"\n";
print scalar %hash;
をやって試してみたんですが,
3
6
と予想したのに
1.5
3/8
が表示されました。
なんでこうなるんですか?
0354テストテスト
02/03/10 12:49ID:FplTavEM板違い。そんなものビギナーが気にする必要なし。
どこかのアアホサイト見てるんだけうが
HTTP 1.1でセッションを100個張るレジスト書き換え.regファイルとか
配布してるが、意味がないしスーパー迷惑なのでやめれ。
0355347
02/03/10 12:51ID:???$num = keys %HASH;
でいいみたい。(keys のかわりに valuesでもいいんだって)
http://plaza27.mbn.or.jp/~satomii/jdoc/perltut/associative.html
0356ドビ
02/03/10 12:52ID:???あと、板違いってことも気付いた。
ごめんな。
0358351
02/03/10 13:02ID:???%hash = (A=>1,B=>2,C=>3);
$i = %hash;
print($i,"\n");
print(%hash+0);
だと
3/8
3
になりました。
OS依存かと思って調べてみたら
http://www.kt.rim.or.jp/~kbk/perl5.005/perldata.html
>返される値は使 用しているエントリの数と、割り付けられているエントリの数を、スラ ッシュで区切った文字列です
らしいです。
お騒がせしました。
0359nobodyさん
02/03/10 13:10ID:???%h = (1,2,3,4,5,6,7,8,9,10);
print scalar keys %h,"\n";
print scalar %h,"\n";
が
5
4/8
って返ってくるんだよね。エントリ=要素ではないのかな。
0362nobodyさん
02/03/10 15:12ID:GU0dbd6s調べることってできるんでしょうか。例えば、bbs.cgiっていうCGIの中で、
bbs.cgiっていう文字列を自動的に得たいのです。同じコードをあっちこっちで
使っていて、更新するときに中身の書き換えを不要にするためです。
0363341
02/03/10 15:12ID:Ew4WhUAiそか、、NTTが許可したサーバーでだけ使えるんですね^^;
アドバイスありがとうございました。
0365nobodyさん
02/03/10 15:21ID:GU0dbd6sお、それはヒントですか?調べてみます。ありがとうございます!
0367365
02/03/10 15:28ID:???なんでだ??うそっぱちか?
>>$0 #perlスクリプトのコマンド名
コマンド名ってのがcgiファイル名ってことですね??言葉が難しいや。
0369365
02/03/10 15:34ID:???できたー!!すげー、一見汎用性あるっぽくてカコイイ!!
0370nobodyさん
02/03/10 15:35ID:???なんかエラーがでて文字列の長さが取得できないんですが…。
0371370
02/03/10 15:40ID:???何故…。
0372370
02/03/10 15:44ID:???#!perl
use utf8;
length '時';
__END__
しかし問題なのは実際のコードでは use utf8 などしていないということ(鬱
0373365
02/03/10 15:56ID:GU0dbd6sなんていうんだろう、urlっていうのかパスっていうのか、よくわからないんですけど
http〜〜〜cgi-bin/bbs/bbs.cgi
みたいな感じのものを調べたいのです。
0374nobodyさん
02/03/10 16:00ID:???utf8で保存してる?
>しかし問題なのは実際のコードでは use utf8 などしていないということ(鬱
何か他にモジュール使ってない?
0375nobodyさん
02/03/10 16:06ID:???print 'http://' . $ENV{'HTTP_HOST'} . $ENV{'SCRIPT_NAME'};
で出るかな?
0376370
02/03/10 16:08ID:???どうやらDBI+DBD::SQLiteでDBからフェッチした文字列がおかしい模様…。
でもJcode::getcode()で調べてもEUC-JPなので謎です。
0380nobodyさん
02/03/10 16:26ID:???そうするとpanicは避けられるっぽいです。
ただそうすると大幅に書き換えなければいけないので出来れば避けたいです…。
# とりあえず完全に再現できるスクリプトを書き中…
0381365
02/03/10 16:28ID:GU0dbd6s>>375、>>378
ありがとうございます!$0みたいにずばりはないんですね。
ちょっと調べてみます。
0382370
02/03/10 16:48ID:???これで
"panic: utf8_length: unaligned end at test.pl line 20."です
#perl -w
use DBI;
unlink 'test.db';
my $dbh = DBI->connect('dbi:SQLite:test.db');
$dbh->do(<<_SQL_);
CREATE TABLE test( foo CHAR(100) );
INSERT INTO test VALUES('テストだよ');
_SQL_
my $sth = $dbh->prepare(<<_SQL_);
SELECT * FROM test
WHERE foo like '%';
_SQL_
$sth->execute();
$\ = "\n";
while($_ = $sth->fetchrow_arrayref()){
print length($_->[0]);
}
__END__
0384nobodyさん
02/03/10 16:58ID:???use Jcode; して、20行目を
print length (jcode($_->[0])->utf8);
にしてみるとどう?
0385370
02/03/10 17:07ID:???->utf8()では問題無しですが、->euc()だとpanicです
察するに内部フラグがどうにかなってるっぽいんですが…。
# さっきのスクリプト後半
$\ = "\n";
print join ' ', unpack 'C*', ('テストだよ');
print length 'テストだよ';
while($_ = $sth->fetchrow_arrayref()){
print join ' ', unpack 'C*', ($_->[0]);
print length $_->[0];
}
__END__
出力:
165 198 165 185 165 200 164 192 164 232
10
165 198 165 185 165 200 164 192 164 232
panic: utf8_length: unaligned end at test.pl line 23.
0386384
02/03/10 17:23ID:???utf8なやつだと解釈しようとして失敗してる(eucなんだから当然)からなわけで。
だからlengthに渡すものをutf8に変換しておこう、と言う改造をしてみたんだが。
納得いかないならこんなのとか。
{
no utf8;
$\ ="\n";
while ($_ = ....){
print length($_->[0]);
}
}
0387384
02/03/10 17:34ID:???なんか勘違いした事書いたかも。スマソ。
0388370
02/03/10 17:41ID:???申し訳ない、>>384が目に入ってませんでした。
それでOKです!
いろいろ試した結果、eval qq{"$_->[0]"}でも正常化できるみたいです。
でもno utf8じゃダメっぽいです…。
とりあえず、解決たので一安心です。
どうもありがとうございました。
0389nobodyさん
02/03/11 01:26ID:???今さらでスマンが、
keysやvaluesでいくと%HASHが巨大だった場合に危険じゃない?
どうせやるなら
++$num while (my ($key, $value) = each %HASH);
とか?めんどくさいけど。
0390nobodyさん
02/03/11 01:56ID:???代入はいらないのじゃない?
0391nobodyさん
02/03/11 02:00ID:???スカラコンテキストで使うとそれぞれの数を返すっていうkeysやvaluesの機能でしょ.
内部でいちいち展開して数を数えるような,非効率的な事はやっていないと思うよ.
use Benchmark;
my $num = 0;
my %hash;
for (1 .. 1000000) { $hash{$_} = $_ }
timethese 1 => {
'++' => sub { ++$num while (my ($key, $value) = each %hash) },
keys => sub { $num = keys %hash }
};
# 結果
#
# Benchmark: timing 1 iterations of ++, keys...
# ++: 5 wallclock secs ( 4.79 usr + 0.00 sys = 4.79 CPU) @ 0.21/s (n=1)
# keys: 0 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)
0392nobodyさん
02/03/11 02:46ID:???$num = keys %hash;
○
++$num while each %hash;
×
++$num foreach keys %hash;
0393nobodyさん
02/03/11 13:07ID:ILIPqmP1while文で只管ぐるぐる回して
5秒ぐらいで処理を抜けるような感じにしています。
でも、なんかもっとちゃんとした方法があると思うんですがどんな方法があるんでしょうか?。
0395393
02/03/11 14:17ID:???やはりこういうものがあったんですね(^^
ありがとうございました。
もっと勉強してきます・・・
0396nobodyさん
02/03/11 18:53ID:???コレを見てくれ!
0397nobodyさん
02/03/12 02:51ID:???スクリプトがわからないのでお教えいただけませんでしょうか?
または参考URLをお願いします。
0398nobodyさん
02/03/12 02:56ID:???0399sage
02/03/12 03:05ID:XpAJ+W0c0401nobodyさん
02/03/12 03:31ID:???基本はこれだけど, Perl5からは srandで種作らなくても自動で最適な種が作られるようになってる。
srand time;
print rand 100;
0403nobodyさん
02/03/12 04:52ID:52qV3w5qシステム公開してるとこ、無いですかね、
しっかりした、ソース見て勉強したいんですけど、
0404nobodyさん
02/03/12 04:53ID:52qV3w5q0〜100未満のランダムな数がくるぞ
(少数含むから、気をつけれ!)
0405nobodyさん
02/03/12 06:34ID:mNSx+HCB「更新」ボタンの無効化ってどうやるんですか?
0406nobodyさん
02/03/12 07:25ID:???・・・
0409nobodyさん
02/03/12 10:43ID:???それか、アプローダとかでリロードしないで欲しいとか。
0410nobodyさん
02/03/12 11:09ID:???0411370
02/03/12 11:10ID:???ふと思いついてDevel::Peekでダンプしてみたところ
SV = PV(0x1c4a57c) at 0x1c2f258
REFCNT = 1
FLAGS = (POK,pPOK,UTF8)
PV = 0x1c8aff0 "\245\306\245\271\245\310\244\300\244\350"\0
CUR = 10
LEN = 11
やっぱりUTF8フラグが立っている模様。
これ、バグですよねぇ…。英語書ける方、誰か報告してくれないかな…。
0412405
02/03/12 13:34ID:eWSq/Ah6submitでhtmlの情報をcgiに送る。
↓
cgiがログファイルをいじる。
↓
cgiが呼び出されて表示されたその画面で「更新」ボタンを押す。
↓
もう一度ログファイルをいじる。
↓
ログファイルが変になる。
↓
(+д+)マズー!
具体例。
ログファイルの配列:@array=(0,1,2,3)
一度目push(@array,4);という命令を出す。→@array=(0,1,2,3,4)→ログファイルに書き込む
リロードするともう一度push(@array,4)を実行する→@array=(0,1,2,3,4,4)
→困る。どなたか対策を教えてください。
0413nobodyさん
02/03/12 13:46ID:pCWuH9pI掲示板CGIの改造をしたいのですが、
チェックボックスを付けて、それがオフの場合投稿を弾いてメッセージを表示するにはどうしたらいいのでしょう?
0414nobodyさん
02/03/12 13:48ID:???前回の内容と比較すれば?
それとcgiに書き込んだあと、htmlファイルにリダイレクトさせるとか。
そうすれば更新ボタン押してもhtmlファイルをGETするだけでしょ。
0415405
02/03/12 13:50ID:eWSq/Ah6ありがとうございます。
でも、すみません、リダイレクトって何ですか?
0417nobodyさん
02/03/12 14:11ID:???> チェックボックスを付けて、それがオフの場合投稿を弾いてメッセージを表示する
INPUT TYPE=checkbox とか、
フォームデータのデコード とか、
検索かけてみて、それでも解らなければそこを聞くのが良いんでない?
と初心者の俺が口を挟んでみるテスト。
0418nobodyさん
02/03/12 14:25ID:h6G3oh/xアドバイスありがとうございます。
かすってるサイトを発見したので、掲示板に応用するため試行錯誤してみようと思います。
0419nobodyさん
02/03/12 14:39ID:???初心者のくせに的確だぜ。
このままではわしの地位が・・・。
大きくなる前に潰しておかねばの・・・ふぉっふぉっふぉ。
と、何かを企ててみるテスト。
0420nobodyさん
02/03/12 14:51ID:h6G3oh/xコメント入力欄のあたりに
<INPUT TYPE="checkbox" NAME="a" VALUE="b">書きこみをOKする<BR>
って入れて、名前が入ってないとエラーを返す部分があったのでそこに
if ($a eq "") { &error("オンにしてちょ。",'NOLOCK');
ってやってテストしてみたらオンでもオフでもエラーを返されてしまいました。
別にvalueがbの場合用の処理(?)を書かなくてはいけないのでしょうか?
ちなみに上のは名前が入ってないとエラーを返す部分をちょっと変えただけです。
0421nobodyさん
02/03/12 14:52ID:???プログラム組むのを仕事にしてる人からしたらメチャメチャだろうけど
自分なりに考えて掲示板組んでみたりしたもので。
やっぱり頭使って悩みながら覚えるのが一番上達早いかなと。。
>>417
あ、もし具体的な改造依頼するなら改造スレッドでよろしく。
スクリプト改造工房 Part4
http://pc.2ch.net/test/read.cgi/php/1012839651/
0422nobodyさん
02/03/12 14:57ID:h6G3oh/xそっちに行きます。スマソ
0424nobodyさん
02/03/12 15:16ID:???とりあえず、$aじゃなくて$FORM{'a'}とかじゃないのか?
0425nobodyさん
02/03/12 16:50ID:+eqUJIVRHTTPリクエストを送って反応がなかった場合スクリプト自体が止まってしまいます
リクエストを送って30秒間反応がない時には次の処理に行く といった処理をするにはどうすればよいのでしょうか?
0427425
02/03/12 17:19ID:???ありがとうございます。
0428nobodyさん
02/03/12 18:15ID:???Perlメモのファイルロックなど自前のファイルロックもありますが,
flockが使える環境ならできるだけflock使ったほうがいいんでしょうか?
0429nobodyさん
02/03/12 18:17ID:???読んだことないけど,このあたりは大きそう。
http://www.h14m.org/
http://tds.dive-in.to/
0431nobodyさん
02/03/12 18:20ID:???下手に自前でやるより信頼できると思われ。
WinNT環境だと,flock使ってもロックしないって話を聞いたことがあるような。ないような。
0432nobodyさん
02/03/12 19:57ID:???漏れも迷わずflock()使う。
プロセスが死ぬとロックが自動的に外れるところがおいしい。
ちなみに、Solarisでは、ライトオープンしないと排他ロックできないという
ことに気づくまで、結構悩んだ。(なんか他のOSだとリードオープンでも排他ロック
できちゃったりした記憶が・・・)
0433ぼくフェロー
02/03/12 20:11ID:/5Jn0bAA$a='100' => 数値
$a='-10.0' => 数値
$a='1e+10' => 数値
$a='abc' => 数値ではない.
のような判断をしたいのですが良い方法が分かりません.
すなわち,ある変数 $a に文字列が入っているのですが,
数値を表すことができるか否か判別するよい方法はないでしょうか?
0434nobodyさん
02/03/12 20:15ID:???マルチポストするくらいなら正規表現でも書いてろ。
0435ぼくフェロー
02/03/12 20:21ID:/5Jn0bAA0436428
02/03/12 20:44ID:???信頼性も自前<<flockなのか。
なら自前lockのメリットはプラットフォームの問題のみなのか。
素直にflock使うか・・・
0437ぼくメイト
02/03/12 20:51ID:???あ、こんなところでもお会いしましたね。記念に。
$tmp = $a;
$tmp++;
print "$a is num\n" if $tmp == $a+1;
0438nobodyさん
02/03/12 21:02ID:???>数値を表すことができる
↑この仕様がわかりませんが、
if ($a =~ /^([+-]?\d*\.?\d*)([eE][+-]\d+)?$/ and $1 !~ /^[.+-]*$/)
みたいな感じかな?
数字が(Perlの変数で表せないほど)たくさん並んでもマッチするけど・・・
0439nobodyさん
02/03/12 21:40ID:p/r//4Piこれで正しく判定できますか?
eval {flock DATA,1 or die $!};
print "flock使えません\n" if $@;
0440nobodyさん
02/03/12 22:52ID:???http://www.jp.qmail.org/q103/jman5/maildir.html
0441nobodyさん
02/03/12 23:18ID:???~~~~~~~~~~~~~~~~
0442nobodyさん
02/03/12 23:21ID:p/r//4Pihttp://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_3.html#SEC35
>flock()はBSD起源ですが現在ではほとんどの(但し全てではない)Unixで利用できます。
>単一のホストでは簡単で効果的ですが、NFSでは全く使えません。 これはファイル全体を
>ロックします。
>さらに紛らわしいことに、 ポピュラーなプログラミング言語Perlは
>必要であればそれ自身のflock()関数を実装し、 完全な移植性があるように
>見せかけています。
0443440
02/03/13 00:06ID:???lockdを再起動すると回復したりする。 (らしい)
直接の担当じゃないから、ほじってないんで… 謎
0444nobodyさん
02/03/13 00:06ID:J00pd5X0例えば成績データとかで、
ishida,80
inoue,70
gotou,70
satou,65
shibata,90
suzuki,80
のような物があった時
1位,shibata,90点
2位,ishida,80点
2位,suzuki,80点
4位,inoue,70点
4位,gotou,70点
6位,satou,65点
と表示したいのです。
考えれば考える程複雑になっていくので…
0445nobodyさん
02/03/13 00:10ID:???同点を求める。ループ回して見つかった物を次々リストにプッシュすれば良かろう。
処理が終わったら処理後のデータを−1とする。
↑を最大値が−1になるまで続ける。
とかね。ループだらけでシンプルじゃないな。
sortで並べて一つ上のデータとどう得点の場合は上と同じ順位を表示とか。
0446nobodyさん
02/03/13 00:37ID:???$score = 101;
for($i = $j = 0; $i <= $#r; $i++){
if($r[$i]->[1] < $score){
$j = $i ;
$score = $r[$i]->[1];
}
$r[$i]->[2] = $j;
}
0447パッチ
02/03/13 00:38ID:???0449nobodyさん
02/03/13 00:42ID:???$score{$name} に点数が入っていて、100点満点だとします。
while( ($n,$s) = each %score) { $inverse{sprintf("%03d $n",$s)} = undef; }
$rank = 0; $last_score = -1;
foreach(sort {$b-$a} keys %inverse ) {
/(\d+) (.+)/;
$rank++ if $1 != $last_score;
$last_score = $1;
printf("$rank位,$2,%d点\n",$1);
}
てのはどうでしょう。
0450449
02/03/13 00:47ID:???最初の%inverseへの代入は無駄でした・・・
foreach (sort {$score{$b}-$score{$a}} keys %score) {...}
てすればいいのねー。
0451448
02/03/13 01:08ID:???0454nobodyさん
02/03/13 01:16ID:???ソートだとこんな感じかな
並べ替えて,前の点数と同じなら同位,違うなら上から数えた順位。
while(<DATA>){
chomp;
($name,$score) = split /,/;
push @score, {name=>$name,score=>$score};
}
my $allrank = 1;
my($prevscore,$rank);
foreach(sort {$a->{score} <= $b->{score}} @score) {
$rank = $allrank if ($_->{score}!=$prevscore);
print "$rank位,$_->{name},$_->{score}点\n";
$allrank++;$prevscore=$_->{score};
}
__DATA__
ishida,80
inoue,70
gotou,70
satou,65
shibata,90
suzuki,80
0455nobodyさん
02/03/13 01:39ID:???@score = map { $_->[0] }
sort { $b->[1] <=> $a->[1] or $a->[0] cmp $b->[0] }
map { [$_, (split /,/)[1]] }
<DATA>;
叩き台にでもなれば。
0457448
02/03/13 01:48ID:???0458わんらいな−
02/03/13 02:13ID:???map {
do{
$ninzu++;
$rank = $ninzu if ($_->[1]!=$prevscore);
$prevscore=$_->[1];
};
[$rank, $_->[0], $_->[1]]
}
sort { $b->[1] <=> $a->[1] or $a->[0] cmp $b->[0] }
map { [split /,/] }
<DATA>
)
{print "$_->[0]位,$_->[1],$_->[2]\n"}
0459458
02/03/13 02:15ID:???0460nobodyさん
02/03/13 02:59ID:???0461nobodyさん
02/03/13 03:12ID:???print関数使った直後にデータが出力されるようになる。
指定しないと,ある程度出力データが貯まってから出力される。
http://tohoho.wakusei.ne.jp/wwwperl1.htm#Tokushu
0462nobodyさん
02/03/13 03:15ID:???0463444
02/03/13 03:43ID:MYvm6b7t>446-448さん
簡潔すぎて・・意図する所がわからず
悩みに悩んだ結果がこれですけど、これでいいですか??
参照はかなり苦手です。。しかも無名配列。。
でも、おかげさまでかなり勉強になりました。
結果はばっちりでした。
@data = <DATA> ;
@tmp = map {(split /,/)[1]} @data;
@data = @data[sort {$tmp[$b] <=> $tmp[$a]} 0 .. $#tmp];
foreach ( @data ) {
chomp ;
($name,$score) = split /,/ ;
push @r , [ $name , $score ] ;
}
$score = 101;
for($i = $j = 0; $i <= $#r; $i++){
if($r[$i]->[1] < $score){
$j = $i ;
$score = $r[$i]->[1];
}
$r[$i]->[2] = $j + 1 ;
}
for ( $i = 0 ; $i <= $#r ; $i++ ) {
print "$r[$i]->[2]位,$r[$i]->[0],$r[$i]->[1]点\n" ;
}
__DATA__
ishida,80
inoue,70
gotou,70
satou,65
shibata,90
suzuki,80
tanaka,80
0464444
02/03/13 03:43ID:MYvm6b7t結果が・・・
1位,shibata,90点
2位,tanaka,80点
2位,ishida,80点
2位,suzuki,80点
3位,gotou,70点
3位,inoue,70点
4位,satou,65点
みたいになります。。
やはりループの回数数えないといけないんですね。
それと「100点満点だとして」というのが
どこに影響してるのかよくわからないんです。。
>454さん
一番素直に理解できました。
ソートのとこの式がちょっとおかしかったですけど。
(sort {$b->{score} <=> $a->{score}} @score)
ですよね。
ともかく、皆さん本当にありがとうございました。
全部理解してテストするのに2時間程かかりました。
もっと勉強せねば。。
0465nobodyさん
02/03/13 03:44ID:XatxhEQY結果だけ表示したいんですけど、途中まで書いたんですけど、わからなくて…
$dir = '.';
opendir(DIR, $dir) or die;
@file = sort grep { /\d+\.html/i && -f "$dir/$_"} readdir(DIR);
closedir(DIR);
foreach(@file){
if( $_ =~ /<a href="http:\/\//i ){
s/co\.jp/ne\.jp/g;
print;
}
}
0466nobodyさん
02/03/13 04:27ID:???いや、単なる個人的意見ですが。
>>465
HTML::LinkExtor使うと簡単ですよ。
0467nobodyさん
02/03/13 04:32ID:???引数で指定されたディレクトリに移動して.をopendir
readdirを見ていき$_が
・ディレクトリなら再帰(引数は今見てる$_)
・HTMLファイルなら開いて痴漢してプリント
全部見終わったら..に移動
な関数を作る。でいいのでは?
465は自力でできそうな気がするのでわざとコードは書かない(w
0468nobodyさん
02/03/13 04:55ID:???foreach (@file) {
open FH, $_ or die $!;
while (<FH>) {
if (m{<a\s+href="(http://[^"]+\.co\.jp[^"]*)"}i) {
$1 =~ s/\.co\.jp/.ne.jp/g;
print "$1\n";
}
}
close FH;
}
--------------------
use IO::Dir;
use HTML::LinkExtor;
foreach (grep { /\.html$/i } IO::Dir->new(q/./)->read) {
my $parser = HTML::LinkExtor->new;
$parser->parse_file($_);
foreach my $elem ($parser->links) {
$elem->[0] eq q<a> or next;
while (@$elem) {
my ($attr, $value) = splice @$elem, 0, 2;
next unless $attr eq "href"
and $value =~ m{http://.+\.co\.jp/?}i;
$value =~ s/\.co\.jp/.ne.jp/g;
print $value, "\n";
}
}
}
双方とも動作確認無しですが。
0470470
02/03/13 08:13ID:DQ1JFad8以下のようにソートすると当然、文字コード順で愛知(アイチ)、
愛媛(アイヒメ)……という順番になります。([18]が住所です)
-----------------------------------------------------------
# 都道府県別にソート
if($sort == 3){
@LINES = sort { (split(/\,/,$a))[18] cmp (split(/\,/,$b))[18] } @LINES;
}
-----------------------------------------------------------
これを都道府県コード順にソートするにはどうしたらよろしい
でしょうか?
http://www2.odn.ne.jp/sasabomb/tables/jisx0401.html
もちろんCSVに都道府県コードは含まれていません。どなたか
ご教示よろしくおながいします。
0471nobodyさん
02/03/13 08:27ID:???47都道府県名をあなたが望む順番でリストに格納。
そのリストに従ってデータをソートするルーチンを書く。
愛媛も愛知も同じ愛である以上、一緒に並ぶのは当然。
0472ほい
02/03/13 09:55ID:68BwgqOIif($sort == 3){
$i = 0;
undef(%pref);
foreach $pref_name ('北海道','青森県','岩手県','宮城県','秋田県','山形県','福島県',
'茨城県','栃木県','群馬県','埼玉県','千葉県','東京都','神奈川県','新潟県','富山県',
'石川県','福井県','山梨県','長野県','岐阜県','静岡県','愛知県','三重県','滋賀県',
'京都府','大阪府','兵庫県','奈良県','和歌山県','鳥取県','島根県','岡山県','広島県'
,'山口県','徳島県','香川県','愛媛県','高知県','福岡県','佐賀県','長崎県','熊本県'
,'大分県','宮崎県','鹿児島県','沖縄県') {
$pref{$pref_name} = $i++;
}
@LINES = map {$_->[0]}
sort {$pref{$a->[18]} <=> $pref{$b->[18]}}
map {[$_, split /,/]} @LINES;
}
0473nobodyさん
02/03/13 10:29ID:auK7WJtB残ってますよね。
掲示板作ってるんですが書きこみ後リロードすると二重投稿になっちゃうんですよ。
どうやって回避するんでしょうか?
0474nobodyさん
02/03/13 10:36ID:???1:投稿内容を直前のものと比較して、一致したら書き込み拒否する。
2:書き込み後Locationで別のページ(そのBBSでも問題なし)に飛ばす。
0475473
02/03/13 10:46ID:auK7WJtBありがとうございます。
1:は考えたんですがプログラム的にカッコよくないかと思ったので・・・
2:でやってみます。
助かりました。
0476nobodyさん
02/03/13 10:50ID:???ただし、2の場合、投稿ボタン2度押しには対応できないという事を忘れずに。
1ならそれも防いでくれるけどね。
0477473
02/03/13 11:06ID:???ええ!?そうなんですか?じゃあやっぱり1でやりますね。
どうせソースなんか僕しかみませんしね。
あ、でも、連続して削除する時のチェックボックスなんかは
間違いでなく一致しちゃうこともありますよね。
そこらへんの実践的なテクニックって皆さんどうやって習得されてるんでしょうか?
Perlは独学の方も多いと思いますが・・・
(ちなみに僕は元COBOLプログラマです)
0478nobodyさん
02/03/13 13:28ID:???レンタル掲示板を自分でやろうとすると、
どうすればいいのでしょうか?
プログラムは1個で、設定ファイルを顧客分つくるのでしょうか?
また、自分が借りているティーカップでは、
アドレスの拡張子がhtml になっています。
これ、なんでhtml なんでしょうか?
レンタルの仕組みと関係あるんでしょうか?
0479nobodyさん
02/03/13 13:38ID:???もっと基本的なところから勉強しないと問題外。
具体的にはHTMLタグとかから。
0482nobodyさん
02/03/13 15:16ID:nYyCnnqMhttp://www.hoge.com/cgi-bin/foo.cgi
というCGIに対して、
http://www.hoge.com/cgi-bin/foo.cgi?http://www.bar.com/aaa/bbb.txt
という風にURLを渡して、
bbb.txtの内容を読みこんであれこれ処理したいんですが、
bbb.txtの内容を読みこむにはどうやればいいんですか?
何かモジュールを使うんでしょうか。
0486nobodyさん
02/03/13 15:38ID:???検索サイトって知ってる?
0487460
02/03/13 16:14ID:???ありがとう。
「バッファリングの防止」というものは知っていたんですが具体的に何をするものかがさっぱりでして・・・。なるほど。
例えは悪いですが,普段はコンパイラが(print構文を)食べて,ある程度たまってからウンコ(出力)するんですね。
しかし$_ = 1;を指定しておくと食べながらウンコするわけか。
そうかそうか。
0489レンタル掲示板
02/03/13 16:57ID:???それをレンタルする仕組みが知りたいんですが・・・
なんで、htmlかも知りたい。
0490nobodyさん
02/03/13 17:03ID:???まずはcgiのソースを読んで意味が理解できるようになれ。
そうすれば両方の答えが自然に出てくる。
perlの書き方も知らない人間には教えられないって。
数字を知らない人間に算数を教える事は出来ないだろう?
>>1-10くらいにはいいリンクも揃ってるんだしがんばって勉強してくれ。
0491レンタル掲示板
02/03/13 17:10ID:???0492nobodyさん
02/03/13 17:17ID:???HTMLソース見ろ。
0493レンタル掲示板
02/03/13 17:29ID:???4桁の数字がIDになっています。
ということは、
そのID専用のスクリプトを
ひとり1個ずつ
サーバーに置いているということでしょうか?
0494nobodyさん
02/03/13 18:48ID:???0496レンタル掲示板
02/03/13 19:55ID:???書いてあるページとかあるのかな?
0497レンタル掲示板
02/03/13 20:01ID:???0498449..450
02/03/13 20:42ID:???あ、ごめん。たしかにそうなりますね(^^;;
あと100点満点どうこうは、>>449のsprintfで%03d(3桁)
にしてるためだったのですが、>>450で訂正したようにすると、
その制限は無くなりますです。
0499春chu駆除係
02/03/13 20:51ID:???Hyper Text Markup Language だから、ふつー拡張子は .html だろ。
あんたは普段 .html じゃない拡張子でhtmlファイルを保存してんのか!?
0501nobodyさん
02/03/13 21:00ID:???MS-DOSは8.3形式。
あらゆるOSとの互換性を考慮するなら拡張子をhtmとしても何ら問題ではない。
それか、あんた世の中にはWindowsしか動いてないとか?w
だから平気でファイル名に%20(スペース)入れるバカが出てくるんだな。
0502460
02/03/13 21:05ID:???おれもマジレスしようかと思ってたがやめといてよかった。
ヒマな厨房が無理やり揚げ足とりのワナを張ってる気がしたんだよ。
0504460
02/03/13 21:46ID:???ただでさえ人の少ないWebProg板なのにJAPUや_GUNZIPなんかも揚げ足取られてどんどん出ていった・・・。
0509470
02/03/13 21:56ID:???すいません、難しくて理解できないんです。申し訳
ありませんが、もう少し易しくご教示いただければ
幸いです。よろしくお願いします。
>>472
ありがとうございます。その通りやってみましたが、
ソートされずにそのまま出力されてしまいました。
0510nobodyさん
02/03/13 21:56ID:???> HTML文書の拡張子は通常 .html なのですが、Windows 3.1など古いシステムでは拡張子に3文字までしか使用できなかったため、
> Windows系では未だに .html の代わりに .htm と記述するケースが多いようです。
> HTML文書の擴張子は不定です。仕樣書のどこにも「HTML文書の擴張子は*.htm/*.htmlでなければならない」等とは書かれてゐません。例へば、cgiの吐出すHTML文書に擴張子は附いてゐません。それでもcgiの吐く文書は立派なHTML文書です。
> サーヴァからhttp應答ヘッダにContent-type:text/htmlを附けられて送信された文書は皆HTML文書です。
> 擴張子が*.htmlの文書を「HTML文書」と看做すのは、
> 擴張子で文書の種類を判斷するWindows(や、Windowsの使用に合はせて擴張子でも文書の種類を判斷するMac)だけです。
0511460
02/03/13 22:02ID:???ぷっ,その書き込みでおれが一番救われた(笑
0512nobodyさん
02/03/13 22:03ID:???>>504
Mainが誤りだと指摘されたのがそんなに悔しかったのか?
大文字小文字を識別する言語なら当然だろうが。
それとも、まさか指摘するべきじゃなかったと言いたいのか?
0513nobodyさん
02/03/13 22:04ID:???0514460
02/03/13 22:09ID:???Mainとmainが黒と白以上に違うもんなのは十分承知。
ちなみに勘違いしてるようだが,おれは最近そのスレ見つけたんだよ。
書き込みすらしたことない。
0516レンタル掲示板
02/03/13 22:33ID:???どういう仕組みなの?
細かいところはどーでもいいので、大きな部分が知りたい。
0517nobodyさん
02/03/13 22:37ID:???もう出てくんなよ
0520460
02/03/13 22:50ID:???ごめんよ。
0521nobodyさん
02/03/13 23:14ID:???0522nobodyさん
02/03/13 23:19ID:???通常、私は
&hoge;のような形でサブルーチンを使っているのですが、
&hoge("section1","section2");
のような引数をかっこに入れた使い方を見たことがあります。
取り立ててその使い方がわからなくても使えてはいるのですが、
もしよろしければ、これの意味を教えて下さいませ。
0524nobodyさん
02/03/13 23:33ID:???読んでいません。
普通、なにかの処理のなかで
&sub_routin 呼び出せば、そこまでのグローバル変数と$_がそのまま使えますので、
それ以上の使い方をしたことがないのです。
ですから、よく、というか、全く理解していないのが現状です。
人の作ったCGIを、自分の好みのデザインに変えるくらいの作業しかわからないのですが
このあたり、どういう意味なのか理解したいなとは思っています。
お願いします。
0526春chu予防係
02/03/14 00:47ID:???&sub_routine('hoge','pau');
で呼び出すと、
sub sub_routine {
($a,$b) = @_;
...
}
とすることで、$a,$bに引数を受け取れます。
グローバル変数で受け渡しすると、どの変数をどこで書き換えたか
管理するのがめんどうになってくるので、引数で渡したほうが
べんりですよ。あとからそのサブルーチンを使いまわすときも
効果大です。
perlは、他人のソースから学ぶのが非常に困難なトリッキーな
言語だと思いますので、入門書等の平易なソースを見ながら
勉強したほうが楽だと思います。
ちなみに私は、一度書いた自分のソースでさえ、あとから見ると
なにをやってるのか、その記述にどんな必然性があるのか、
わからなくなることがしょっちゅうです。
0527526
02/03/14 00:51ID:???すまぬ。
($a,$b) = @_;
↓
local($a,$b) = @_;
に訂正です。
余計な疑問が沸かないように省略したら、逆にグローバル変数と
変わらなくなってしまった・・・アフォだオレ
0528nobodyさん
02/03/14 00:53ID:???print $answer; # 15
sub plus {
my ($x,$y) = @_; # @_は&plus(ここ)にあったものを渡す 今回は@_ = [5,10]
my $xy = $x + $y;
return $xy; # 返す
}
本読まないで言語習おうなんて甘いと思うけどね
0529nobodyさん
02/03/14 01:17ID:???print $answer;
sub plus {
return $_[0] + $_[1];
}
俺ならこうしちゃうけど、一度変数に格納した方がいいのかね?
0531nobodyさん
02/03/14 01:39ID:???0532nobodyさん
02/03/14 01:57ID:???>>529
あとから見るときの為に分かりやすい名前つけておいた方がいいとか読んだから
俺は変数に入れてるけど、使う人の好みだよね。
0533526
02/03/14 02:07ID:???すまぬ。いつものくせで
local($a,$_) = @_;
とか書くもので。
みんな、関数の中で $_ つかうときどうしてるのー?
0536nobodyさん
02/03/14 02:13ID:???漏れの場合、
&hoge($_);
sub hoge{
$temp = $_[0];
}
とかにしちまう。
0538nobodyさん
02/03/14 02:52ID:???クッキーの解説でも「パスが省略されると、アクセスしたリソース(HTML、CGI)のパスがセットされます。」とか本当にあってる?
とほほではそのスクリプトのフォルダ全部にパスかかるって書いてたと思うんだけど・・・
参考にしても大丈夫かな?
0539nobodyさん
02/03/14 06:55ID:???正規表現で前方一致させるにはどうしたらいいんでしょう?
$i = 0;
undef(%color);
foreach $name ('田中', '鈴木', '佐藤') {
$color{$name} = $i++;
}
田中角栄でも真紀子でも0を、鈴木一郎でも宗男でも1を、という具合に
定義したいんです。よろしくお願いします。
0542nobodyさん
02/03/14 07:59ID:???意図を理解するまでちょっとかかったぞ・・・
(ここに>>539のソース)
$in = <>;
undef $result;
while( ($name,$col) = each %color) {
$result = $col,last if $in =~ /^$name/;
}
て感じでどうかね。
0543nobodyさん
02/03/14 08:56ID:???すみません、私の説明不足でした。
1,foo,田中角栄,bar
2,foo,鈴木一郎,bar
3,foo,田中真紀子,bar
4,foo,佐藤三郎,bar
5,foo,佐藤栄作,bar
6,foo,鈴木宗男,bar
・
・
以下続く
というようなファイルがありまして、必ず田中、'鈴木、佐藤の順に
並べ替えるにはどうしたいいかと試行錯誤しておりまして、以下の
ようになっているんです。
$i = 0;
undef(%color);
foreach $name ('田中', '鈴木', '佐藤') {
$color{$name} = $i++;
}
@LINES = map {$_->[0]}
sort {$color{$a->[3]} <=> $color{$b->[3]}}
map {[$_, split /,/]} @LINES;
>>542でいただいたソースを貼ってみましたがうまくいかないようです。
アドバイスいただければ幸いです。よろしくお願いします。
0544nobodyさん
02/03/14 09:55ID:???初心者なもんで粗野ですが、こんな感じでやってみました。
%name = ();
@lines = ();
$i = 0;
while ($line = <DATA>) {
push(@lines, $line);
$tmp = (split(/,/, $line))[2];
$name{$tmp} = $i;
++$i;
}
@permutation = qw(田中 鈴木 佐藤);
foreach $fam (@permutation){
foreach $full (keys %name) {
if (index($full, $fam) == 0) {
push(@result, $full);
}
}
}
foreach(0 .. $#result) {
print $lines[$name{$result[$_]}];
}
__END__
1,foo,田中角栄,bar
2,foo,鈴木一郎,bar
3,foo,田中真紀子,bar
4,foo,佐藤三郎,bar
5,foo,佐藤栄作,bar
6,foo,鈴木宗男,bar
0545543
02/03/14 10:16ID:???早速ありがとうございます。申し訳ありませんが、どうやって>>543に
移せばいいのでしょうか?私、perl二日目でしてよくわからないんです。
お手数をおかけして申し訳ありませんが、どうかよろしくお願いします。
0546nobodyさん
02/03/14 10:25ID:???結果を@LINESに入れるなら、
print $lines[$name{$result[$_]}];
を、
push(@LINES, $lines[$name{$result[$_]}]);
で大丈夫だと思いますが。
0547オ
02/03/14 10:36ID:???期待した結果が得られません。ご指導のほど宜しくお願い致します。
WEBサーバー:AN HTTP Daemon ver1.38
1、DOSプロンプトから実行。
2、”localhostに接続できません。”
3、(ToT) アウゥー
以下からソースです・・・
use Socket;
$hostname = 'localhost';
$port = getservbyname('http', 'tcp');
$proto = getprotobyname('tcp');
$iaddr = inet_aton($hostname) or die "$hostnameが見つかりません。\n";
$paddr = pack_sockaddr_in($port, $iaddr);
$socket_addr = pack_sockaddr_in($port, $iaddr);
socket(SOCKET, PF_INET, SOCK_STREAM, $proto) or die "ソケットを生成できません。\n";
connect(SOCKET, $paddr) or die "$hostnameに接続できません。\n";
select(SOCKET); $|=1; select(STDOUT);
print SOCKET "GET /index.html HTTP/1.0\r\n";
print SOCKET "\r\n";
while (<SOCKET>){
m/^\r\n$/ and last;
}
while (<SOCKET>){
print $_;
}
ここまでです・・・
0548nobodyさん
02/03/14 11:05ID:???素直にLWPにしとけ。
どうしてもSocketを使いたいなら、せめてIO::Socketにしとけ。
0550547
02/03/14 12:14ID:???>>548
すんません、LWPってなんですかね?調べてみます。
IO::Socketのりてんってなんですかね?
>>549
もちろんサーバーのポートはデフォルトの80です!
ちなみにどんな内容がかえってくるのですか?
たびたび申し訳ないですがよろしくおねがいします。
0551549
02/03/14 12:42ID:???index.htmlが無いので404が帰ってくるだけですが、次のような出力でした。
ちなみにperlはv5.6.1 built for cygwin-multiと
ActivePerl 5.005_03で実行しました。
<HTML><HEAD><TITLE>Error </TITLE></HEAD>
<BODY>
<H1>Error 404</H1>
Not found - file doesn't exist or is read protected
<HR><ADDRESS><a href="http://www.st.rim.or.jp/~nakata/">AnWeb/1.36b</a></ADDRESS>
</BODY></HTML>
0552nobodyさん
02/03/14 12:45ID:???何となくわかりました・・・
一応本は、オライリーのネズミの絵の奴とラクダの絵の奴を読みました。
一つのことを理解しようとするとき、いろんな要素で、ほかの知識が
必要になったりして、積み残したり理解できなかったりする知識があったりします。
本当にありがとでした
0553547
02/03/14 13:09ID:???ActivePerlってことは環境はWinですよね?
うーん、私が接続できないってことはサーバー設定に問題があるんですかね?
ちなみにサーバーは何を使用されてますか?
Apacheがいいのかな?
0555553
02/03/14 13:37ID:Ibnv+vbs>>551を見ればわかるけどAn HTTPDですよ
ほんとだ「AnWeb/1.36b」はずかしー。
>>そもそもWEBブラウザではlocalhostに接続できますか?
できますよー^^
手軽にローカルでテストするから使用するんですよ。
けど同じ環境でできないのならやっぱり設定ですかね?
551さんと同じ設定にして試したいので設定公開していただけないでしょうか?
0556nobodyさん
02/03/14 14:07ID:???HTTPサーバ機能 HTTPバージョン1.1 ポート80
ちなみに$paddrを↓こうしてもconnect失敗しますか?
$paddr = pack_sockaddr_in(80, inet_aton('127.0.0.1'));
0557555
02/03/14 15:15ID:Ibnv+vbsおおー!できましたー!ありがとうございます!
>>$paddr = pack_sockaddr_in($port, $iaddr);
↓
>>$paddr = pack_sockaddr_in(80, inet_aton('127.0.0.1'));
すなおにgetservbynameを使わずに’80’を指定すればいいのですね?
興味本位ですが、みなさんはSOKETを使ってどのよな処理をされるのですか?
0559nobodyさん
02/03/14 20:30ID:???死んじまえ
きいろいぶためを やっつけろ
金で心を 汚してしまえ
死ね死ね死ね死ね
日本人は じゃまっけだ
きいろい日本 ぶっつぶせ
死ね死ね死ね 死ね死ね死ね
世界の地図から 消しちまえ 死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね 死ね死ね死ね死ね
死んじまえ
きいろいさるめを やっつけろ
夢も希望も うばってしまえ
死ね死ね死ね死ね
地球の外へ 放りだせ
きいろい日本 ぶっつぶせ
死ね死ね死ね 死ね死ね死ね
世界の地図から 消しちまえ 死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね……
この歌を歌っている人を教えて下さい。
気になってPerlのスクリプトが書けません。
0560nobodyさん
02/03/14 20:35ID:???0561nobodyさん
02/03/14 20:36ID:83vwJ138キャッツアイズとヤングフレッシュだよ。
しっかりコーディングしてね。
0562nobodyさん
02/03/14 20:38ID:???どっかにフラッシュムービーあったね。
0564nobodyさん
02/03/14 20:43ID:???ttp://music.2ch.net/test/read.cgi/asong/1011726043/
とりあえずこっち行け。
0565nobodyさん
02/03/14 21:39ID:???死んじまえ
きいろいぶためを やっつけろ
金で心を 汚してしまえ
死ね死ね死ね死ね
日本人は じゃまっけだ
きいろい日本 ぶっつぶせ
死ね死ね死ね 死ね死ね死ね
世界の地図から 消しちまえ 死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね 死ね死ね死ね死ね
死んじまえ
きいろいさるめを やっつけろ
夢も希望も うばってしまえ
死ね死ね死ね死ね
地球の外へ 放りだせ
きいろい日本 ぶっつぶせ
死ね死ね死ね 死ね死ね死ね
世界の地図から 消しちまえ 死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね……
おれも歌って見ました…てへ
0566nobodyさん
02/03/15 01:12ID:???sub func
{
}
などと書いてる奴は氏ね。
プロトタイプ使えプロトタイプ。
0567nobodyさん
02/03/15 01:13ID:BRbcgxefぼくは秀丸で打ち込んだら、いちいちコマンドプロンプトでperl ファイル名
と入力してやっているんですけど。
環境はwin xpです。
0568nobodyさん
02/03/15 01:17ID:???0569nobodyさん
02/03/15 01:28ID:???M-x perldb
0570nobodyさん
02/03/15 01:31ID:???せっかく秀丸つかってるのに・・・
最低でも次のマクロを用意しろ。
[実行]run "perl < con";
[構文チェック]run "perl -c < con";
↑共に1行だ。これでファイルに保存せずに、構文チェック、実行が出来るぞ。
0571nobodyさん
02/03/15 07:25ID:???closehidemaru findhidemaru(windir + "\\temp\\perlres.txt");
save;
run "\"c:\\program files\\perl\\bin\\perl.exe\" \"" + filename + "\" > " + windir + "\\temp\\perlres.txt";
openfile "/(0," + str(cyscreen - 300) + "," + str(cxscreen) + ",300) " + windir + "\\temp\\perlres.txt";
俺専用統合開発環境w
実行ファイル変更でjavaにも対応(と、言うか元々java用に開発)。
0572nobodyさん
02/03/15 10:46ID:???ちなみに俺のはこれ
// ExecPerl.mac
run "perl -w \"" + filename + "\" >con";
// EOM
0573nobodyさん
02/03/15 11:42ID:pkh37ffW---
@data=<IN>;
foreach(@data){
print $_,"<BR>";
}
---
と
---
while(<IN>){
print $_,"<BR>";
}
---
は、どっちが速いの? また、それぞれの利点・欠点は?
0574nobodyさん
02/03/15 12:18ID:???上:メモリを食う。(やめとけ)
下:行数が多いと時間がかかるかも。(1,000,000行とかならんかぎり大丈夫)
ファイルの表示だけなら下を使いなさい。
0575nobodyさん
02/03/15 12:41ID:???行数が多いと時間がかかるのは上も同じ。
実際に計ってみればわかるが、下の方が高速だしメモリも少なくてすむぞ。
上のほうがいい状況って何だ…?
エディタとか?
0576nobodyさん
02/03/15 12:59ID:???0577nobodyさん
02/03/15 14:03ID:NtzdYptjだね。なんかのルーチンで表示したあと配列保持して、spliceなんかで
編集する必要がある場合くらいしか思いつかない。
それにしても、@配列を逐次表示するのだって、
foreach使うよりwhile使うべきだと思うんだけどな。
0579read
02/03/15 14:17ID:???read FILEHANDLE,SCALAR,LENGTH
Attempts to read LENGTH bytes of data into variable SCALAR
from the specified FILEHANDLE. Returns the number of bytes
actually read, 0 at end of file, or undef if there was an error.
SCALAR will be grown or shrunk to the length actually read.
If SCALAR needs growing, the new bytes will be zero bytes.
An OFFSET may be specified to place the read data into some
other place in SCALAR than the beginning. The call is actually
implemented in terms of stdio's fread(3) call. To get a true
read(2) system call, see sysread.
0580わざわざ英文かよ
02/03/15 14:19ID:???`read(FILEHANDLE,SCALAR,LENGTH)'
指定した FILEHANDLE から、 LENGTH バイトのデータを読んで SCALAR に格納する。
実際に読み込んだバイト数、またはエラーがあれば undef を返す。
SCALAR は実際に読んだバイト数に合わせてサイズが変わる。
OFFSET を指定すると、読んだデータを文字列の先頭ではなく他の場所に格納する。
これは実際には、 stdio の fread コールを用いてインプリメントしている。
本当の read システムコールを使いたければ、sysread を参照せよ。
0581nobodyさん
02/03/15 14:21ID:???ていうか、こういうドキュメントって、なんの役にもたたんです・・・・
実際の使用例があればすんなり理解できるのに・・・・・
0583アホか
02/03/15 14:24ID:???open(AHO, $file) or die;
read(AHO, $aho, -s $file);
close(AHO);
0584582
02/03/15 14:25ID:???-----------------------
open(A, "a.dat");
read(A, $Dat);
close(A);
print "$Dat\n";
とかでいいのか?
0585nobodyさん
02/03/15 14:29ID:???重要なのは最初の2行なのよ。↓これでほとんど理解できるはず。
read FILEHANDLE,SCALAR,LENGTH,OFFSET
read FILEHANDLE,SCALAR,LENGTH
0586nobodyさん
02/03/15 14:30ID:???そんなこたないよ。
はじめたばっかしの人間、言語というもの自体になれていない人間で
それで理解できる人間なんてほとんどいない。
0587nobodyさん
02/03/15 14:31ID:???使い方わかったサンクス。
でもそれを見て思うんだけど、ファイルの内容を一度変数に入れる形になってるみたいだけど、
while(<AHO>)よりもメモリ喰ったりしないの?
0588だから
02/03/15 14:33ID:???仕組みを説明するより、実際に使われているソースをながめたりいじったりした方が、
どれだけ理解を深めるか。
名著と呼ばれるリファレンスブックには、必ず実例が付いている。
>>585だけで理解出来るのであれば、そのような冗長な実例が付く本は
名著どころか、悪書とされているはず。
0589nobodyさん
02/03/15 14:34ID:???readだと,どこからどこまでを読むかが指定できる。
だから $dat = <AHO> で全部読んで $dat から抽出するよりはマシ。
0590nobodyさん
02/03/15 14:35ID:???ありがと〜〜
俺も一つ質問です。
whileで読み込むと、\nごとにわかれた配列に入れることもできるワケなんですけど、
そういう用途だったら素直にwhileつかっとけよ、っていういみなんですよね?
で、一気に読み込んで表示するんだったらreadが便利だわって意味ですね?
0591nobodyさん
02/03/15 14:37ID:???昔、数十MBのファイルを@lines = <FILE>;で読もうと思ったら、
すごく時間がかかった。readで読んだらすぐ読めた。
0592nobodyさん
02/03/15 14:38ID:???なるほど。
それじゃあ何も考えずにファイルの内容全表示するだけなら
while(<AHO>){
print;
}
でいいって事かな?
readは確かに使いどころを見極めれば便利そうだ。
ありがとう。
0593582
02/03/15 14:40ID:???なるほど。readは ファイルデータをスカラに入れるときの性能がいいのか。
>592
うむ。それ推奨。
おれもPOST以外ではread使ったことんなかったんでいい勉強になった。
>579-580には素直に感謝。
0594585
02/03/15 14:46ID:???>習うより慣れろって言葉がある。
>仕組みを説明するより、実際に使われているソースをながめたりいじったりした方が、
>どれだけ理解を深めるか。
そのつもりで、構文が大事だよって言いたかったんだが、余計にわかりにくかったな、俺。
ごめんよ。
0596nobodyさん
02/03/15 14:53ID:???そうだったのか、誤解だったかも知れない。
俺が言いたかったのは、
read FILEHANDLE,SCALAR,LENGTH,OFFSET
read FILEHANDLE,SCALAR,LENGTH
これだけ見て、たとえば、ファイルハンドルとは何か?スカラーとは?
オフセットとは実際どんな風に用いられているのか?
とか、そういうのがイメージできるような人は、その言語の上級者だって事なんだよな。
スカラーに$が付くってことすら、このステートメント見てイメージできない人って、
かなりいると思うんだよな。
俺自身、ほかの言語に行くとそういう混乱があったりする。
そういうことが言いたかっただけだったんだよな。
0597ファイル丸ごと読み込み
02/03/15 15:24ID:j7EJ72ekmkmnz での実装例。
http://www.namazu.org/ml/namazu-dev/msg00102.html
# readfile:
#
# Reads a specified file and returns its content.
# Takes one argument which can be a file name or IO::File object.
#
sub readfile ($) {
my ($arg) = @_;
my $fh;
if (ref $arg) {
if ($arg =~ /^IO::File/) {
$fh = $arg;
} else {
warn "$arg: not an IO::File object!\n";
return "";
}
} else {
$fh = fopen_or_die($arg);
}
my $cont = "";
my $size = -s $fh;
if ($size > $MAX_SIZE) {
warn "$arg: too large!\n";
return "";
}
read $fh, $cont, $size;
return $cont;
}
0599nobodyさん
02/03/15 22:55ID:Wm5JdTg+やるなら、
push(@data,$_) while <IN>;
だな
0601nobodyさん
02/03/15 23:06ID:???そ、それじゃKENTの意味無し処理と変わらんぞオイ・・・
0602nobodyさん
02/03/15 23:14ID:Wm5JdTg+@data=<IN>;
作業領域に<IN>が展開され、それを@dataにコピー
push(@data,$_) while <IN>;
$_に一行ずつコピーし、一行ずつ@dataに積んでく
意味が分からん奴は、KENT以下のDQN
0603ネタ
02/03/15 23:16ID:???print <IN>;
ちなみに、でかいファイル食わすとOut of Memoryでした(藁
0605nobodyさん
02/03/15 23:26ID:???まわりくどいことするんだな。(藁
0606nobodyさん
02/03/15 23:28ID:Wm5JdTg+ベンチマークとればわかるよ
0608nobodyさん
02/03/15 23:29ID:Wm5JdTg+0609601
02/03/15 23:29ID:???ん?上だと一瞬メモリ容量が二倍になるのか?
0610nobodyさん
02/03/15 23:31ID:???そうだよ。おまえみたいに上級者でも見下すヤツは正直場違い。
0611nobodyさん
02/03/15 23:34ID:???a[0] = IN[0];
a[1] = IN[1];
・
・
・
してから
result[0] = a[0];
・
・
・
と、
result[0] = IN[0]
・
・
・
の効率を話し合っているんだよ、今。
0612600
02/03/15 23:36ID:???ファイルがでかくなると圧倒的とも言える差だよ。
その点は認識不足だった。コレは認めよう。
だが、普通は
while(<IN>){
# ...
}
または
read IN, $buffer, $size;
を使った方がより良いのでそのテクは何らかの事情がない限り使わないがな。
0613607
02/03/15 23:36ID:???ネタだ。勘弁しろ。
0614nobodyさん
02/03/15 23:49ID:???認めてくれてありがとよ。
別にテクでもなんでもないんだが・・・(while倒置しただけだ)
どちらかというと、@data=<IN>;の方がトリッキーだしな。
0615nobodyさん
02/03/16 00:43ID:???例えば,eval{ flock(xxxx); } だと flockが実行できそうな時だけ実行するの??
エラーが返ったらやっぱりなかったことにするの??
こんなちゃらんぽらんなもんなの?
0616nobodyさん
02/03/16 00:49ID:???「この中のエラーは無かった事にしてくれ」と頼んでおきながら、何か不満ですか?
それとも$@の存在を知らないとか?
オブジェクトも受け取れるのでC++ちっくな例外処理も出来るよ。
eval{
throw MyException('Hoge!');
}
if($@){
die $@->errstr;
}
0617615
02/03/16 00:53ID:???エラーが返ると$@にエラーメッセージを入れて処理を続けるみたいだね。
ちゃらんぽらんだが便利なもんだな(笑
>616
その通り。$@知りませんでした。
あと「eval{};」みたいだね。
0618615
02/03/16 00:55ID:???2つeval{};を並べるときはそのつどundef $@;せなあかんの?
0619nobodyさん
02/03/16 04:32ID:???eval {flock STDIN,2};
print $@ . __LINE__;
eval {print $@ . __LINE__};
print $@ . __LINE__;
0620nobodyさん
02/03/16 06:23ID:???IDとパスワードでログイン
ってのはどうすれば良いですか?
ご説明は邪魔くさいと思うので
参考になるサイトがあればお教え下さい。
0622nobodyさん
02/03/16 06:35ID:???Perlに関係無い,Basic認証のだけど。
http://www.google.co.jp/search?q=Basic%94F%8F%D8+htaccess+%83p%83X%83%8F%81%5B%83h
0625615
02/03/16 08:20ID:???さんくす!参考になります!
>621
"認証サイト"なら .httaccess 使うとヨシ。
0626nobodyさん
02/03/16 10:38ID:???0627nobodyさん
02/03/16 11:26ID:???0629627
02/03/16 13:32ID:???0630nobodyさん
02/03/16 21:34ID:???どんなコマンドをつかったらよいですか?
自鯖を調べるのにつかいます
てか、自鯖立てるんだったらこれぐらいできるようにならんと・・・
0631nobodyさん
02/03/16 21:40ID:???0633nobodyさん
02/03/16 22:17ID:???Perl初心者コーナーで聞くからには、
もちろんPerlを使っての調べ方と仮定しますが。
Net::Pingを使いましょう。
perl-5.7.3では標準添付のようです。
ただし、MSWin32だと、Errnoの関係から使えないようです。
0635nobodyさん
02/03/16 22:31ID:???つまり、こういうことだろ。
$result = `ping hoge.org`;
0639nobodyさん
02/03/16 23:21ID:???取りあえずサーバの定義をはっきりしようや。
1台のマシンを指すのかサーバマシン上で走ってるネットワークデーモンを指すのか。
偉そうなことを言うのはそれからにしてくれ。
0643nobodyさん
02/03/17 00:53ID:???なんでこうなるかねぇ…
0644615
02/03/17 01:39ID:???eval{ flock(); };
die "errer!" if $@;
でも出力はないのですが,ロックしてないクセにそのまま真返してそうで・・・
0645615
02/03/17 01:51ID:???遅くなったけどありがとう。つまり偽だと空が入るんだね。納得。
0648636
02/03/17 03:35ID:???そういうときは、さくっとsynスキャンする。(嘘)
use IO::Socket;
print "ok\n" if (new IO::Socket::INET("www.kantei.go.jp:22"));
とかする。
0651nobodyさん
02/03/17 14:28ID:???0653615
02/03/17 23:21ID:???(((((||| ゚Д゚;;;)))))ガタガタガタガタ
0656648
02/03/17 23:44ID:???あ〜〜〜〜、デッドロックがなにか悪いことだと思ってるのね。
意図しないでデッドロックに陥るのはもちろん問題だけど、
テストとして意図的にデッドロックさせるのは、問題ないよ。
プロセス止めれば、解除されるので安心したまい。
0657nobodyさん
02/03/18 02:42ID:3JM+vmYu調べられますか?
もちろん対象ディレクトリ以下にディレクトリが複数あっても
底の底まで調べる・・・ど?
0658nobodyさん
02/03/18 03:29ID:???できるよ。
ファイルサイズ取得とディレクトリ内ファイル一覧取得を組み合わせるとか,
適当なモジュール使うとか,他のプログラム使うとかで。
0659nobodyさん
02/03/18 03:30ID:???データを全部配列に入れてからforeachで回して、
4桁の数字を見つけたらその部分をsubstrで取り出す・・と考えているのですが
4桁の数字を見つける処理に手間取っています。
正規表現を上手く使って^(\d{4})$とやろうかなと思っているものの、どう使ったものか・・。
スマートな方法は何か無いものでしょうか。
0660nobodyさん
02/03/18 04:00ID:???m//や//は,リストコンテキストで評価すると()内のリストを返すので,
それを利用するとこんな感じ。
while (<DATA>) {
my @tmp = /(\d{4})/g;
push @ary,@tmp;
}
print "@ary";
__DATA__
asdf1234as
d45ad6f54a32451234
af9842s
0661nobodyさん
02/03/18 11:37ID:34CtYnSpPerl4ですけど、
@DATA[ $FORM{'ressno'} ]の値を$oldDATAに代入したいんですが
つぎのコードは文法上間違ってますか?
$oldDATA = @DATA[ $FORM{'ressno'} ];
printしてみると@DATA[ $FORM{'ressno'} ]には文字列が入ってるんですが
$oldDATAは空っぽなんです。
本を見るとよさそうに見えるんですが・・・
ココで作業が止まっちゃってるんです。
おしえていただければありがたいのですが。
0662nobodyさん
02/03/18 11:43ID:???()なんて必要ないケド...
ループ内でのmy宣言はしないほうがよいのでは?
あと、その正規表現では5桁以上にもマッチしてしまうのでは?
my @array= map{ (/(\D|\b)(\d{4})(\D|\b)/g)[$[+1] } <DATA>;
print "@array\n";
__DATA__
asdf1234as
d45ad6f54a32451234
af9842s
0665nobodyさん
02/03/18 12:09ID:???0666615
02/03/18 12:35ID:???変数名が間違ってないかもう一度確かめて。
>662
なるほど。
ループ内でmy()はしないほうがいいのか。
ループの前に宣言するか,ループの後でundefするほうがいいのね。
0667たろう
02/03/18 12:37ID:eHMudoVKクッキーをセットして取得することってできます・・・?
無理かなあ。
それかクッキーがオンかオフが判定できる方法ってありますかねえ。
0668nobodyさん
02/03/18 12:46ID:???代入のタイミングが間違ってないか確認するべきかと。
printで文字列が出るという事は、@DATA[ $FORM{'ressno'} ]には文字列が入っているんだろう。
変数名の間違いという事もないと思われる。
しかし、
$oldDATA = @DATA[ $FORM{'ressno'} ];
この書き方では、@DATA[ $FORM{'ressno'} ]を変数でなく配列として認識してしまう為、その要素でなく要素数が返される。
だから>663の書き方のほうが正しい。
しかし、間違いの書き方でも、要素数の1が$oldDATAに入らないのはおかしい。
だとしたら考えられるのは変数の代入タイミングが間違っているか、変数のスコープの範囲外で判定しようとしてるかどっちかじゃないかと思われる。
0669nobodyさん
02/03/18 13:00ID:???その価値のないソースを見せてみRO!
0670663
02/03/18 13:18ID:???なら、@と$の間違いじゃない(配列に何か入ってる)ということで、
$oldDATA = join(undef,@DATA[ $FORM{'ressno'} ]);
とか。
0671nobodyさん
02/03/18 13:23ID:???663をやってダメなのにオマエはアフォか?
0672661
02/03/18 13:37ID:???ありがとうございます。その通りでした。
変数のスコープの範囲外です。
勉強不足で申し訳有りません。
他の皆さんも、ありがとうございました。
0673nobodyさん
02/03/18 14:36ID:HCOk+r4Yどうぞよろしくお願いします。
use関数についてなのですが、よく
use lib '/mylib';
というのを目にしますが、これの第二引数'/mylib/';の意味がわかりません。
ご教授いただけないでしょうか?
それともう一つ
use I18N::Japanese;
の”::”の意味は一体なんなのでしょうか?さっぱり意味不明です。
それでは失礼します。
0674nobodyさん
02/03/18 14:38ID:HCOk+r4Y補足させていただきます。
"::"がパッケージ変数へのアクセスに使われるというのは知っているのですが
use関数で使われる事の意味がわからないのです。
0675nobodyさん
02/03/18 14:48ID:???モジュールを読み込むディレクトリに'/mylib'を追加しまっせ!
'::'はディレクトリ構造を表します
I18N/Japanese.pm
0677673
02/03/18 15:27ID:HCOk+r4Yお答えありがとうございます!
"::"の意味がよくわかりました。一ヶ月くらい悩んでただけに感動ですw
'/mylib'は、つまりlibモジュールだけの特別な引数であるという
解釈でよろしいのでしょうか?
0679675
02/03/18 16:06ID:???useの後ろに付くlibはプラグマってやつね。
プラグマはperlの動作を変えるわけ。strictとかutf8とかあるから
自分で調べてみなさい。(プラグマは慣用的に小文字を使う。)
use lib LIST;は
BEGIN { unshift(@INC, LIST) }と同じね。
@INCにはモジュールなどを探すディレクトリが入ってるわけです。
0680673
02/03/18 16:41ID:BUM18lm5はい。わかりました。ただ「駱駝本」が読めないのが難点ですがw
今度書泉で探してみますね。
>>679
よーーーーーーーーーーくわかりました!プラグマですか。正直そんな
単語は聞いた事も無かったですね。どうもありがとうございました。
0681nobodyさん
02/03/18 16:45ID:???0683nobodyさん
02/03/18 17:31ID:kNBmdvNL煮詰まってしまったので教えて下さい。
受け取るデータ(文字列:長さ制限なし)が1000文字以上だった場合、
文頭、文末それぞれ1文字を削除した状態に加工後、
REMOTE_ADDR,domain,加工後の文字列,文字列を受け取った時間
というようにCSV形式に成形して↑これをファイルに書込んでいます。
文字コードはEUC-JPで、文字列の加工にはsubstrを使っています。
文字列の加工まではうまくいくのですが、ファイルに書込まれたデータを
見ると、文字列の最後と時間の前のカンマが全角ひらがなとして1文字に
なってしまいます。
この文字化けを解消する方法ありませんでしょうか?
ファイルに書込んだ後比較用データとして、後でまた呼び出し
カンマでsplitをかけると、ちゃんと時間と文字列に分割されては
いるようなんですが・・・・
0684nobodyさん
02/03/18 17:46ID:???EUCなら簡単に出来ますが、1文字削除する行為が意味不明なので
教えてあげない。
ってゆうか、Perlメモ見れば分かるよね。
0685683
02/03/18 17:48ID:???もう一回逝ってきます。
1文字削除は私にも…上からの命令なのです。
0686683
02/03/18 17:52ID:???ありがとうございました。
見つかりました!
あ、即レスも感謝です。
perlメモ今見てきたらありました。
煮詰まってるとだめですね。。。
0687nobodyさん
02/03/18 19:23ID:???常に親クラスのを呼び出すことって出来ますか?
つまり、$obj->method とあった時に、
$objが子クラスのオブジェクトでmethodが子クラスにあった時でも
親クラスのmethodを呼び出すような物です。
それをSUPER::とかじゃなくて、クラス側(モジュール側?)で書きたいのです。
可能であれば、是非方法を御教授下さい。
宜しくお願い致します。
0689nobodyさん
02/03/18 20:43ID:???それともあれか、"virtualではない"メソッドを定義したいってか?
0690687
02/03/18 22:53ID:???まぁ無理ならいいです。すいませんでした。
0692nobodyさん
02/03/19 01:20ID:???CSVデータをうまく分割するコードがあれば是非教えてください。
Perlメモにあるやり方は知っていますが、ほかにもっとうまいやり方が
ありそうでなかなか思い浮かばないので途方に暮れています。
できればワンライナーかシュウォーツ変換のうまいコードがあればありがたいです。
0694nobodyさん
02/03/19 02:44ID:???>できればワンライナーかシュウォーツ変換のうまいコードがあれば
ってことですが...
0695nobodyさん
02/03/19 03:16ID:???1行で書いても何も得にならないよ。
そんなことで悩んでないでPerlメモにあるやつを、自分の使いやすいように
アレンジするか、適当なモジュールを導入した方がいいと思う。
但し、格納するデータが汎用でなくカンマやダブルクウォートを含まないのなら
特に加工が必要ないので簡単になるけどね。
バイナリを格納しないのなら、区切りを制御文字に・・・(CSVにならない)
で、結局君はどんな目的で「ワンライナーかシュウォーツ変換のうまいコード」
が必要なわけ?
0696nobodyさん
02/03/19 03:37ID:???すぐに使うわけではなかったのでべつにできないならできないでいいけど、
たったいまこちらである程度いいものができたのでテストを繰り返して
いるところです。
ただ、わたしのライブラリを増やしたかっただけ(自己満足)なのでこれで
5パターンになりつつあります。(テスト結果でバグがなければ)
ただ、Perlメモにあるのはなんか好きになれないというだけのことです。
いま書いたのは、ワンライナーで2次元配列にセットするものでなんとなく
気に入っています。
ということで、この質問は自己解決のためもう忘れてください。
0697nobodyさん
02/03/19 09:43ID:???0698nobodyさん
02/03/19 17:20ID:FUNiZ5qx皆してる?
流行のソースの記述きぼーん
メタキャラクタの場合、比較がうまくいかないのですが、こういうものなのでしょうか?
たとえば下記のような二つの文字列を代入した変数があります。
$ORIG="hello";
$TARGET="$$";
これを比較した場合、等しくなってほしくないのですが、eq で比較すると
等しいという結果になってしまいます。
↓こんな感じ。
if ($ORIG eq $TARGET) {
# この中に入ってしまう
} else {
#本当はこっちに来てほしい
}
変数にメタキャラクタが入っている場合、どのように比較すればいいのでしょうか?
あるいは、変数の最初の文字にメタキャラクタが入っている場合、
うまく比較できないのは perl の仕様なのでしょうか?
0703nobodyさん
02/03/19 23:07ID:???$TARGET = '$$'; # シングルクオートで囲ってあるの。
で大丈夫だよー。
0704nobodyさん
02/03/19 23:13ID:???0705nobodyさん
02/03/19 23:44ID:???Perlを勉強したいと思い、perlの本を買いました。
(すぐわかるPerl、CGI&Perlポケットリファレンス)
とりあえず、最初どうしたらよいのでしょうか?
プログラミングを参考書に習って書いていくにしても
どういう風に進めたらいいか分からなくて...
0708nobodyさん
02/03/19 23:50ID:???それでも等しくなるのはおかしい。
>>702
> うまく比較できないのは perl の仕様なのでしょうか?
なわけねぇだろ。
100%お前のミスだよ。
ifの前に print("$a $b\n") で変数の値を出力してみろ。
0710702
02/03/20 00:12ID:???レスありがとうございます。
すみません、ちょっと私の書き方がまずかったです。
perl においてシングルクォートでくくると、変数を展開しない、エスケープが使えないというのは承知しているのですが、
今回のケースは、正確には下記のようなケースなのです。
前提:
1.テキストファイルにデータが書かれている
2.テキストファイルには、1行に複数の項目が書かれており、デリミタでくくられている
処理:
1.テキストファイルから1行読み込む
2.splitで分割する(分割した文字列が $TARGET に入る)
3.その文字列を eq で比較する
という感じなので、$TARGET には、普通の ascii 文字列が入ってくるかもしれないし、
$ とか ? で始まる文字列が入ってくるかもしれないのです。
↓コード例==============
$ORIG="hello";
open(DATA, "ファイル名")
while(<DATA>){
@hoge = split(/,/, $_);
$TARGET= @hoge[0];
if ($ORIG eq $TARGET) {
# $TARGET の中身の先頭文字が $ などの場合は
# この中に入ってしまう
}
:
==============
さぁどうしようかという感じなのですが....
どこかに、「eq では、先頭にメタキャラクタが入っていると比較できない(perlの仕様)」
見たいなことが明文化されていると、ある意味幸せなんだけど...
みなさんこういうときどうされてますか?
0711nobodyさん
02/03/20 00:14ID:???そうすれば大体わかる。
っつーか全ソース晒せ。
0712nobodyさん
02/03/20 00:15ID:???709は読んだか?
大体メタキャラクタってなんだよ。"正規表現の"メタキャラクタならまだ解らんでもないが。
脳内定義は止めてくれ。
0714
02/03/20 00:22ID:fhi6exvTこういうことになるのかぁ
0715
02/03/20 00:23ID:fhi6exvThttp://DQN
http://DQN.jp
これではどうかな
0716
02/03/20 00:24ID:fhi6exvTではこれでは
>>DQN
0717
02/03/20 00:25ID:fhi6exvThttp://は半角文字じゃないとだめなのね
_φ( ̄ー ̄ )メモメモ
0718nobodyさん
02/03/20 00:26ID:???消えろ
0719
02/03/20 00:27ID:fhi6exvT>>5どきゅん
http://DQNんだ
0720
02/03/20 00:28ID:fhi6exvT>>718
0721nobodyさん
02/03/20 00:29ID:???たかが2ちゃんねるでもな、おもしれぇところで下らん事やると、
そこは面白くない場所になって寂れるんだよ。
下の方にいくらでも廃墟のスレッドがあるだろ?
そこで、sageでこっそりやるのがテストってモンなんだよ。
0722ネタ?ニマジレス
02/03/20 00:29ID:???> どこかに、「eq では、先頭にメタキャラクタが入っていると比較できない(perlの仕様)」
> 見たいなことが明文化されていると、ある意味幸せなんだけど...
僕は不幸だと思います。
0723
02/03/20 00:32ID:fhi6exvTあ、sageですればよかったすね
失礼しました。
ところでお聞きしたいんですが2ちゃんねるのレスの改行制限、文字数制限っていくつなんでしょうか?
いま2ちゃんねるのまねCGIつくってまして
0724nobodyさん
02/03/20 00:35ID:???↓とかで。
【スレッド】 2ch型掲示板その4 【フロート式】
http://pc.2ch.net/test/read.cgi/php/1010669197/l50
0725nobodyさん
02/03/20 00:52ID:???0726702
02/03/20 01:06ID:???レスどうもありがとうございます。(709は 710 を書いた後に気がつきました。)
すみません、結論から言えば私のミスでした。みなさん申し訳ありません。
perl の eq は間違っていませんでした(printしまくってみて、気がついた。)
別のところが問題だったのですが、そこがわかりません。
ソースを貼り付けます。
1 #!/usr/bin/perl
2
3 $ORIG="hello";
4 print "$ORIG\n";
5
6 open (DATA, "dat.txt");
7 while (<DATA>) {
8 chomp;
9
10 @hoge = split(/,/, $_);
11 $AA = @hoge[0];
12 $BB = @hoge[1];
13
14 print "\n";
15 print '$AA>>'."$AA"."<<";
16 print '$BB>>'."$BB"."<<\n";
17
18 if( $ORIG eq $BB) {
19 print "pattern 1\n";
20 } elsif($ORIG =~ /$BB/ ) {
21 print "pattern 2\n";
22 } else {
23 print "pattern 3\n";
24 }
25 }
0727702
02/03/20 01:06ID:???----------------
11,bb
22,$$
----------------
実行結果
----------------
$ ./hoge.pl
hello
$AA=11 $BB=bb
pattern 3
$AA=22 $BB=$$
pattern 2
----------------
気になるのは、2行目のデータを読み込んだときに
hello と $$ を比較していて、
部分一致になってしまっている点です。この二つを比較すると
不一致になる(だから pattern 3 が表示される)
はずなのですが、どうして pattern 2 にいってしまうのでしょうか?
0728nobodyさん
02/03/20 01:16ID:???0729702
02/03/20 01:42ID:???quotemeta(); をいれて print してみたところ、
$$ が \$\$ で表示されました。
この quotemeta(); で、今まで問題がなかったところに影響がないかどうか、
テストをしてみます。
(quotemeta されることにより、いままで正常に eq できていたところが
eq できなくなると、それはそれで困るので)
ついでに quotemeta() で、\ が挿入される文字についても調べて見ます。
(正規表現で特別な意味を持つ文字が対象? だからセミコロンとかは対象にならない?)
728 さん、どうもありがとうございました。
0730nobodyさん
02/03/20 09:35ID:???とりあえずquotemetaの「meta」が何を意味するのかを勉強しなさい。
どうもeqと正規表現の違いが分かっていないように見える。
0731nobodyさん
02/03/20 10:17ID:???$mesu{ 'manco' }{ 'size' } = '宇宙' ;
見たいな感じで、
合わせて、どっかいいポインター紹介してもらえないすか、
0733nobodyさん
02/03/20 10:28ID:???あとここの人間下ネタ嫌いみたいだから・・・(笑
0734
02/03/20 10:34ID:fhi6exvT0735nobodyさん
02/03/20 10:59ID:???7bitにエンコード(←合ってる?)したりかなりめんどくさいからオススメしません。
0737nobodyさん
02/03/20 11:35ID:???http://member.nifty.ne.jp/hippo2000/perltips/perlmail.htm
0738731
02/03/20 13:19ID:???>$mesu{ 'manco' }{ 'size' } = '宇宙' ;
>「どっかいいポインター」が何の事かは分かりませんが…。
URLって事で
0739
02/03/20 18:12ID:fhi6exvTmimew.plっての発見してできました。
0740735
02/03/20 19:29ID:???そらよかったやん。
語学のためにURLきぼんぬ。
0741nobodyさん
02/03/20 19:37ID:???コマンドプロンプトらしきものが立ち上がり
そこでperlが動いてるのが見えるんですが
これを見えないようにするやり方ありませんか?
バックグラウンド(?)で動かしたいのです
0743nobodyさん
02/03/20 19:41ID:???ひょっとしてApache か anhttpdのDOS画面のことか?
0745nobodyさん
02/03/20 19:55ID:???いや,おれのマシンではたまに出てくるのよ。4回に1回ぐらい。
0747nobodyさん
02/03/20 21:22ID:UA5ZBzLD全部一気に配列に読み込んで扱いますか??
データソートとかする場合、いちいち読みに行くと遅いかなあと思うけど
サーバに負担かかるだろうし、例えば5Mくらいのデータファイルだったら
普通みなさんどうしますか?
それから、データが後々増えることを考慮する場合どうしますか?
0749nobodyさん
02/03/20 21:28ID:???それは「表示するだけなら」じゃないのか?
0750出来の悪い子
02/03/20 21:32ID:K1AeGIQFメールをチェックする正規表現がうまく作動しないのですが
どうしたら良いですか?
} elsif ($email =~ /^[^@]+@[^.]+\..+/) {
&Header('Insert Editor');
print "<H5> Emailが正しく入っていません<br>";
これだと素通りしてしまいます
とりあえず下記のやり方でごまかしているのですが。
} elsif ($email eq "") {
&Header('Insert Editor');
print "<H5> Emailを入力してください<br>";
これじゃチェックにならない(´・ω・`)ショボーン
どう記述すれば良いでしょうか?
0751nobodyさん
02/03/20 21:48ID:???その時散々煽ったおれも全部上に書き換えたよ。(笑
「^」使うとまぎらわしいね。「 !~ メールアドレスの書式」 にしてみろよ。
てきとーで書くけど $email !~ /\w\.-_@\w-_\.\w/ とか。
0752nobodyさん
02/03/20 21:50ID:???てきとーに書きすぎた。
$Mail =~ /^[\w\-\.]+\@[\w\-]+\.[\w\-\.]+$/i でどう?
0754nobodyさん
02/03/20 22:00ID:???0755nobodyおっさん
02/03/20 22:32ID:???メールユーザID文字数は何文字でもいいの?
. (ピリオド)が2つ続いてもマッチするのでは?
最後に . (ピリオド)がきてもマッチするのでは?
i オプションの意味は?
0756nobodyさん
02/03/20 22:38ID:???ならアンタが早く説明してやれよ。
どうせ初心者の相手する気なんてまったく無くて解答者に茶々入れるだけにここいるんだろけど。
0757nobodyさん
02/03/20 22:40ID:???1MB超えた辺りから、自前のエンジンより
DB_FileのBTREEとかXS拡張DBDを使うDBIが検索やソートは高速になってくるよ。
0758nobodyさん
02/03/20 22:56ID:???0)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*"))*@(?:[^(\0
40)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])(?:\.(?:[^(\040)<>@,;:".\\\
[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\]))*){ &err("mailerrer"); }
0759nobodyおっさん
02/03/20 23:23ID:???生半可な知識だったら書かないほうがいいということを言いたかっただけ。
できもしないのに嘘をはずかしげもなく語るほうがよっぽど迷惑なのでは?
0762nobodyさん
02/03/20 23:30ID:???生半可な知識でも書いてみるのはいいことだよ。
そこからより効率のいい正しい方法の話し合いがされて、間違いを書いた方も正しいやり方を覚えられる。
初心者は自分の知りたかった事が議論によって導き出され、より理解力が深まる。
答えだけ出されるよりよっぽど勉強になるよ。
0763nobodyさん
02/03/20 23:36ID:???とても簡潔なコードにはならんよ。
それならモジュール使って送信テストまでするよ。
0764nobodyさん
02/03/20 23:41ID:UA5ZBzLD遅れましたが、ありがとう!
なんかDBの知識もなく、また頼まれ仕事で納期もないので
取りあえずタブ区切りテキスト+自前エンジンでやるしかないんですが、
やはり動作速度を犠牲にしたほうがいいのかな。
サーバに負担かけたら怒られますかね。ド素人ですまんです。
0765nobodyおっさん
02/03/20 23:53ID:???>ドットが2つ続くかどうかなんてチェックしてたら
>とても簡潔なコードにはならんよ。
なぜそういいきれる? その根拠はなんなの?
やらないうちから決め付けるのはやめたほうがいいと思う。
0768nobodyさん
02/03/21 00:30ID:???場に出てきたモノにカウンターかます以外のこともやってみれっての。
0769nobodyさん
02/03/21 00:33ID:???2-3年前のサーバと、今のサーバでは、CPUやメモリやHDDの回転数なんて言った
処理系のスペックは比較にならないくらいあがってるよ。
だから無茶な処理して良いと言うことではないけど、ね。
問題は、先方がコーディングする人間に支払っているコストと、与えている開発日数、
そして、要求している仕様ですべて決まると思うよ。
0770nobodyおっさん
02/03/21 00:49ID:???761に非難するのは筋違い とありますが、わたしがはじめに書いたいくつかの
疑問点は非難しようというのではなくて助言のつもりで書いただけです。
この助言を書いた途端にどなたかがいきなりつっかかってきた上に非難される
のはこちらも困ります。
760に絶対な解答をとありますが、メールアドレスには[]付きのIPアドレス
を含むなどの予想外の形態のもの等もありますので不可能といっていいでしょう。
「Perlメモ」にも非常に長い正規表現が書かれていますが、これも絶対ではない
と書かれています。特殊な形態はマッチさせない条件でなら簡単に書けると思う
のですが、絶対な解答ということなので遠慮しておきます。
0771nobodyさん
02/03/21 00:52ID:???初心者スレではそういう説明が重要だよ。
それがわからない人が多いんだから。
なにかを否定する場合はきちんと説明もつけましょうね。
そうすればみんながハッピーになれる。
0772nobodyさん
02/03/21 01:51ID:KirJ6q/Uやはりそうですよね。過去レス随時削除するような掲示板くらいしか
作ったことなかったもので、そんなでかいのは検討も付かなかったのです。
>>769
おっしゃる通りです。俺みたいな素人に安く頼むんだから我慢しろという
姿勢で行きます。ただ、コストはそうですが、開発日数の方はちゃんとした
DBシステム覚えた方が早くて楽チンのような予感もするので、次の仕事が入るまでに
覚えることにします。
ありがとうございました。
0773nobodyさん
02/03/21 02:15ID:???正規表現はそれで合ってるよ。(意図したいことは分かる。)
漏れも、簡単なチェックならそう書く。
んで、>>751の指摘の要点は
} elsif ($email =~ /^[^@]+@[^.]+\..+/) {
じゃなくて、
} elsif ($email =~ /^[^@]+@[^.]+\..+/) {
ってしろってことだけど、これでダメだったの?
print "<H5>[$email]は不正なメールアドレスです</H5><br>";
に書き換えてみて、うまく行かない時の表示キボン。
0774773
02/03/21 02:17ID:???ミスった。
「} elsif ($email =~ /^[^@]+@[^.]+\..+/) {
じゃなくて
} elsif ($email !~ /^[^@]+@[^.]+\..+/) {
ってしろってことだけど、これでダメだったの? 」
でした。
0775nobodyおっさん
02/03/21 02:40ID:???また責められそうですが、助言として書いておきます。
762さんも「議論によって導き出され、より理解力が深まる」という認識ですので。
ユーザIDにドットを含んでいてもマッチします。
アットマークの後にアットマークがきてもマッチします。
末尾は何にでもマッチします。
0776774
02/03/21 03:43ID:???もちろん承知。助言さんきゅ。
ということで、いい加減な文字をemail欄に書いて書き込もうとする奴を
排除する目的じゃなくて、正しいメールアドレスしか受けつけないように
したいという目的の場合は、正規表現を改良するのもいいかも>>750
0777nobodyおっさん
02/03/21 04:00ID:???を知ることからはじめたほうがいいと思う。(特殊形式は除く前提で)
ということで、まずはメールアドレスのかんたんな構成を書いておきます。
[メールユーザID]@[メールサーバドメイン名]
0779nobodyおっさん
02/03/21 04:23ID:???を考えると、だいたい文字数は4〜10が妥当な線ダロウ。
文字の種類としてはなんといっても[@.]の2種類は含まないということで
[^@.]が考えられる訳だが、普通は[a-zA-Z0-9_-]あたりが使われる場合がほとんど
ということからエスケープシーケンスを使って表すと[\w-]と考えられる。
0780nobodyおっさん
02/03/21 04:33ID:???を見たことあるから余裕をもって3〜15と考えるのもいいネー。
つまり前段から /^[\w-]{3,15}@ の部分までは正規表現は決まったことになる。
0781nobodyおっさん
02/03/21 05:12ID:???762さんが言うようにいきなり最後まで書いてしまうのはチョットですぎた
行為というものです。考える余地を与えることも勉強になるものです。
それはそうとして、「正規表現道場」っていつのまにかなくなったのかナ?
あればそっちにメアドの正規表現ぐらいのってるだろうに。閑古鳥が鳴いてた
ようだから無理もないかー。
0782nobodyさん
02/03/21 05:26ID:???まだいきてるみたい。
http://pc.2ch.net/test/read.cgi/php/996105815/l50
0783nobodyおっさん
02/03/21 05:38ID:???電球
0784nobodyさん
02/03/21 07:03ID:???わかりやすく記載しているサイトってありますか?
ActivePerl入れてもなんか上手くいかなくて...
0785親切紳
02/03/21 07:18ID:???インストールはできたんだね。
じゃあ、コマンドプロンプト開いて
perl test.pl
とか入力すればtest.plが実行されるよ。
0786nobodyさん
02/03/21 07:29ID:???大口叩いてもその解答じゃ結局>>754より役に立たんな。(藁
>>763の言うとおりそれならモジュール使ってついでに送信テストまでするほうが速い。
まともに解答する気ないんなら解答者につっかかるなや。迷惑。
>>784
http://www5a.biglobe.ne.jp/~n_rieko/
0787nobodyさん
02/03/21 07:46ID:p3ZJIC7Xhttp://www.din.or.jp/~ohzaki/perl.htm#Mail
0788nobodyさん
02/03/21 09:40ID:???>この助言を書いた途端にどなたかがいきなりつっかかってきた上に非難されるのはこちらも困ります。
>生半可な知識だったら書かないほうがいいということを言いたかっただけ。
>できもしないのに嘘をはずかしげもなく語るほうがよっぽど迷惑なのでは?
がホンネなんだろ?(藁
0789nobodyさん
02/03/21 09:42ID:???[\w-]は[\w\-]じゃなくていいの?
0790nobodyさん
02/03/21 10:14ID:???>生半可な知識だったら書かないほうがいいということを言いたかっただけ。
>できもしないのに嘘をはずかしげもなく語るほうがよっぽど迷惑なのでは?
んな事書くんだったら、http://www.puni.net/~mimori/rfc/rfc2822.txt
でも見てからスペック決めろよ。
0791nobodyさん
02/03/21 11:40ID:???local-part = dot-atom / quoted-string / obs-local-part
だから
$word = qq<(?:$atom|$quoted_str)>;
$local_part = qq<$word$X(?:$Period$X$word$X)*>;
では駄目。
0792nobodyさん
02/03/21 12:03ID:???PerlってCGI以外で何かに使います?
0793nobodyさん
02/03/21 12:07ID:???$_{manco}
と、するべきか、
$_{'manco'}
どっちだ?
0795nobodyさん
02/03/21 12:14ID:???元々レポート作成言語。
そのため文字列操作が異様に発展。
CGI使いからはマイナーだがレポートのテンプレートを指定する機能も。
と、言うか、
Perlってレポート作成以外で何に使います?
CGIとかです。
が正しい。
0797nobodyさん
02/03/21 12:15ID:???自分がよく作るのはなんちゃらコンバータとかかなぁ。
HTMLから,ある規則に従ってリンク抜き出したりとか。
>793
どっちも変わらないみたいなので,私は短い前者を使う。
0798nobodyさん
02/03/21 12:19ID:???レポート処理とか。
おれはチャットログの整理とかもしてる。
複数のログから特定のキーワードを探したりするときも手軽で便利。
0799nobodyさん
02/03/21 12:23ID:???2バイト文字列指定してる場合は囲んだほうがいいよ。多分ね。
0800nobodyさん
02/03/21 12:29ID:???自己レス。
推測だが変数名に使えない文字の場合は囲まないとエラーが出る。
ただし変数名に使える文字なら不要。
例。$ENV{HTTP_HOST} と$Rom{"坂田@アホ"}。
0802nobodyさん
02/03/21 14:09ID:???sub manco
{
print "sage\n" ;
}
$a = manco ;
$a() ;
なんか解決ないすかね?
0803nobodyさん
02/03/21 14:15ID:???意味ねー(w
おとなしく&manco;しろ。
0804nobodyさん
02/03/21 14:33ID:???$a[ i ]() ;
こんな感じで
0805nobodyさん
02/03/21 14:34ID:???リファレンス使ってこんな感じかな
$a = \&manco ;
&$a() ;
0806nobodyさん
02/03/21 14:36ID:???$a = "print";
&{$a};
sub print {
print qq(<hr>ok!<hr>);
}
とりあえずこれで動いた。
>803
if elsif文を並べてサブルーチンに飛ばすような時とかに便利かも。
0807nobodyさん
02/03/21 14:53ID:???if elsifを並べるのはあんまり良くないでしょ。
ハッシュに入れたサブルーチン名(もしくはリファレンス)
をコールするってことでどうかね>適用例
0808792
02/03/21 14:53ID:???回答ありがとうございました。
レポート処理のソース書いて、実行はMS-DOSからやるんですか?
CGIしか作ったことないんで、少し気になります。
0810nobodyさん
02/03/21 15:01ID:???$b = $a[ 0 ] ;
&$b() ;
これ、いいね、
でも、
$a[ 0 ] = \&manco ;
&$a[ 0 ]() ;
これだと駄目ね
0811nobodyさん
02/03/21 15:03ID:???&manco;
なんて、レスキューやKENTみたいなことやってんじゃねーよ。
それじゃ、プロトタイプのチェックしねーだろ。
>>806
man perlref
man perldub
組み込み関数とユーザサブルーチンの区別つけれ。
ユーザ定義ハンドラを許すようなオブジェクトなら必須。
0812nobodyさん
02/03/21 15:03ID:???そうだろね。LUTみたいな考え方だね。
>808
CGI以外の用途に使うなら「Perlを始めよう」というソフトがおすすめ。
ソースを書いて直接実行したりできる。
0813803
02/03/21 15:05ID:???詳しく解説きぼん。
0815nobodyさん
02/03/21 15:10ID:???皮肉にしか聞こえん・・・
0817nobodyさん
02/03/21 15:59ID:???どこでエラーになるか確かめれ。
固いコードを書きたいんだったらプロトタイプ使え。
sub manco($)
{
print "$_[0]\n";
}
&manco();
manco();
0818nobodyさん
02/03/21 16:35ID:7Dyo1H3nフレームで上と下に分割して下のフレーム内にdocファイルへのリンクを張ったのですが、
docファイルへのリンクをクリックするとフリーズして強制終了してしまうのですが
どうすれば正しく表示できるのでしょうか。
ちなみにOSはxp proです。
0819nobodyさん
02/03/21 16:37ID:???Web製作板かWin板で聞くべし。
Perlと関係ないじゃない。
0821818
02/03/21 16:43ID:7Dyo1H3n0822nobodyさん
02/03/21 16:50ID:???0823やっぱり
02/03/21 16:51ID:???0824間違えた
02/03/21 16:51ID:???0826nobodyさん
02/03/21 18:10ID:TYcdRNHScgiで、同じディレクトリにある他のファイルのパーミッションを変更したいんだけど、
chmodを使ってもなぜか変更できないです。
chmod 0777,"./abc.dat";
こんな風にしてるんですが、何かやり方がいけないの?
0830nobodyさん
02/03/21 21:58ID:???$manco->{'kuri'}=1;
$manco->{'torisu'}=1;
print Dumper($manco);
ってすると、
$VAR1 = {
'kuri' => 1,
'torisu' => 1
};
こんな感じで表示されんだけど、
$VAR1ってなるんだけど、
これに、名前付けられないの?
0831nobodyおっさん
02/03/21 22:06ID:???こう書いたほうが尚よいダロウ!
$_= '>>1-100';
print />>(\d+)(-\d+)?/ ? $2 ? "$1$2" : $1 : "unmatched";
0833nobodyさん
02/03/21 22:24ID:???use Data::Dumper;
%hash = ('A' => 'apple', 'B' => 'buffalo');
$d = Data::Dumper->new([\%hash], ['hash']);
print $d->Dump;
0834830
02/03/21 22:27ID:???あんな、
use XML::Simple;
$manco->{'kuri'}=1;
$manco->{'torisu'}=1;
print XMLout( $manco ) ;
これ動かすと
<opt kuri="1" torisu="1" />
って表示されんだけど、ノード名前が、optになっちゃうのね、
でな、無名のハッシュだっけ?に名前付けたら、変えられんじゃね
っと思ったンヨ
はずしとりすかね?
0836830
02/03/21 22:43ID:???こうだった。
my $xs = new XML::Simple( rootname => 'mesu' ) ;
$manco->{'kuri'}=1;
$manco->{'torisu'}=1;
print Dumper($manco);
print $xs->XMLout($manco);
$VAR1 = {
'kuri' => 1,
'torisu' => 1
};
<mesu kuri="1" torisu="1" />
0837830
02/03/21 22:48ID:???漏れさ、PerlのCGIって、
WEB FORUMっていう掲示板をいじる事から
始まったんだけどね、
なんか、記述スタイルが古いつ〜かさ、
もっといま風な、オブジェクト指向っぽくやりたいな、
なんて思ってるんだけど、
これは参考になるぞ!、っていうソースどっかに
転がってないすかね、よろすく
0838nobodyさん
02/03/21 23:01ID:???いっておくが,おれは >830とは別人だぞ・・・
0839nobodyさん
02/03/21 23:08ID:???(TOPページの)最新更新日を表示させたいと思っています。
リンク先のページの最新更新日を取得するような方法はあるのでしょうか。
ご指南の程、よろしくお願いします。
なにぶんPerlは始めたばかりなので、ムズかしい処理は理解できないかも
しれないので、なにをどこらへんを勉強すれば理解できるようになるのか
教えていただけるとありがたいです。
0840nobodyさん
02/03/21 23:10ID:???sub mancoとか、
$unco
もしくは、それに類似する単語で
書かないと、誰も答えてくれねぇ〜ぞ、ゴウラァ!!!
0845839
02/03/21 23:25ID:???「河馬屋二千年堂's Page」さんを見てみましたが、すみません。
まったく理解できませんでした(涙
「モジュールとはなにか、どうやって使うのか」から勉強し直します。
せっかく教えていただいたのに、すみませんでした。
0846nobodyさん
02/03/21 23:33ID:???アンテナ系のスクリプトを改造してみたら?
基本的な対象は日記だけど、別に普通のリンク集に使ってもいいだろ。
「アンテナ なつみかん」とかで検索してみ。
>「モジュールとはなにか、どうやって使うのか」から勉強し直します。
とか言うレベルだと改造は厳しいと思うが。
0848839
02/03/21 23:38ID:???やっぱりレベル低いのに、高望みしすぎなんですかね・・・。
とりあえずダウンロードしてソースをじっくり見てみます。
ありがとうございました。
0849nobodyさん?
02/03/21 23:44ID:???>べつにモジュール万能主義でもないだろうよ。
846さんはモジュールを勧めているわけではなく、モジュールというものを
知らないレベルの人には、改造は難しいかもしれない、
という懸念をの述べただけじゃないかな。煽りネタだったらスマソ。
0850nobodyさん
02/03/21 23:50ID:???perlは、本読まないと理解は難しいよ。
他の言語と違って、他人のperlのソース読むのは、
時間の無駄のような気がする。(解説がついてるソース
とかならいいけど)
08511234
02/03/21 23:52ID:di2RpoJqありがとうございます。
ところでこれではだめだということに気づきました。
>>1
>>1-
>>1-20
これ全部にヒットしないといけなかったんです。
書いてて気づきました。
すみませんもう一度おしえてもらえませんか?
08531234
02/03/21 23:54ID:di2RpoJq>>2-
でヒットしてないのかな?
08541234
02/03/21 23:56ID:di2RpoJqこうっすね
0857nobodyさん
02/03/21 23:58ID:CC60PDt40858nobodyおっさん
02/03/22 00:00ID:???ヒットするんじゃないの?
>>1- は >>1 と同じとみなすんじゃダメかい?
0860nobodyさん
02/03/22 00:27ID:???ファイルハンドルで索引を見たら書いてあった。
0862839
02/03/22 02:05ID:???テストではうまく動いてる気もするんですが、これでよろしいのでしょうか。
use LWP::Simple;
($content_type, $document_length, $modified_time, $expires, $server) = head "http://www.aaa.ne.jp/test.html";
($sec, $min, $hour, $day, $mon, $year) = localtime($modified_time);
$year += 1900;
$mon ++;
print "$year/$mon/$day/$hour";
0864839
02/03/22 03:18ID:???はい、その通りでした・・・・。
更新時刻が取得できないサイトがいくつかありました。
私のLWPの使い方が間違ってるのでしょうか。
それとももっと良い方法があるのでしょうか。今一度、探してみます。
またヒントを与えてもらえれば幸いです。
0865nobodyさん
02/03/22 03:32ID:???(貴方のマシンがWinなら)WWCとかWWDとかのメジャーな更新チェッカ落として
みると参考になると思うよ。ヘッダも表示されるし。
0866nobodyおっさん
02/03/22 08:23ID:???こんな感じかい?
$_= '>>1-100';
if ( />>(\d+)((-)(\d*))?/ ){
if ( $4 ){ print "$1$2"; } # >>n-n
elsif ( $3 ){ print "$1$3"; } # >>n-
else { print "$1" ; } # >>n
}
0867nobodyさん
02/03/22 08:35ID:???見られないようにする方法ってどうするんですか?
0868nobodyさん
02/03/22 08:38ID:???相手サーバの問題。
更新時刻がとれなかったら長さや内容を前回チェックのと比べるとか。
いくつかのサーバは更新時刻いいかげんに返すので
そのあたりは試行錯誤で。
>867
それらのファイルにアクセス制限をかける。
近ごろの apacheは標準でそういう設定になってる。
0870出来の悪い子
02/03/22 08:54ID:???申し訳ありません m(_ _)m
とりあえず実験してみて
>>774さんのやり方で大丈夫でした
= じゃなくて! ってことですね
もっと頭を解して考えるようにします。
ありがとうございました。
0871nobodyさん
02/03/22 09:49ID:???なぜprintするのかわからないのだけれど,それは効率悪いんじゃないか?
↓こうできるよ.
/>>(\d+(?:-\d*)?)/ and print $1;
0872nobodyおっさん
02/03/22 10:28ID:???print してるのは、だた結果が正しいかを確認するため。
確かに、後読みだとコンパクトにまとめて書けるのでよりいいと思います。
ただし、やりたいコーディングが
>>n
>>n-
>>n-n
の3パターンへのリンクを張るだけならいいのですが、もしかしたら
>n- の場合など、nが1なら100までとかに制御する余地を残す意味で敢えて
わけているだけです。
0873nobodyおっさん
02/03/22 10:48ID:???1つにまとめるなら以下のようによりコンパクトにも書けます。
/>>(\d+(-\d*)?)/
0874縞栗鼠(シマリス)の親方
02/03/22 10:54ID:pJ6rZ2itここは、完全に狂ってる。
授業料は一年分一括前払いなので、
金が入れば、生徒は要らない
金を振り込んだら、何とかその生徒を辞めさせようと
講師どもが、あの手、この手でイヤガラセをしてきますね。
セクハラはもちろん、脈絡の無い罵倒は日常茶飯だね。
酒臭い講師もいるし・・・ 人生の最果て中央高等学院
学歴詐称、経歴詐称、合格実績詐称、デタラメ授業、
http://www.chuo-school.ac/
http://chs-f.com/index.html 中央高等学院福岡校
司法浪人の田中校長は ↑ また司法試験に落ちましたが
HP上では下らない見栄を張っています
0875839
02/03/22 12:08ID:???長さっていうのはファイルサイズのことでしょうか。
そんなこともできるんですか・・・。
LWPモジュールについてもう少し勉強してみます。
0876nobodyさん
02/03/22 12:22ID:???おっさんおっさん、いくらコンパクトでも効率的には>871のほうが上だぞ。
つーか(?:regexp)はNon-capturing groupingsだろ。何でここで後読みなんだよ(w
学生はperldocでも読んで勉強しとけ。
0877nobodyさん
02/03/22 12:26ID:???長さってのは、
use LWP::Simple;
$content = get ("http://www.2ch.net/");
$length = length($content);
と言うことだと思う。868じゃないから知らんけど。
0878nobodyさん
02/03/22 17:23ID:2hKQObXwいま、仕事で掲示板の修正をやってるんですが、
特殊文字を削れってんで、メッセージに対して、
$value =~ s/&/&/g;
$value =~ s/\"/"/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\|/¦/g;
$value =~ s/\[/[/g;
$value =~ s/\]/]/g;
$value =~ s/\\/¥/g;
みたいなことをやってます。
そしたら、
「申し込み」が「・yen;し込み」みたいな感じで思いっきり化けちゃいます。
どうすれば文字化けしないで、特殊文字の変換ができますか?
0879nobodyさん
02/03/22 17:26ID:2hKQObXw$value =~ s/&/&amp;/g;
$value =~ s/\"/&quot;/g;
$value =~ s/</&lt;/g;
$value =~ s/>/&gt;/g;
$value =~ s/\|/&#166;/g;
$value =~ s/\[/&#91;/g;
$value =~ s/\]/&#93;/g;
$value =~ s/\\/&yen;/g;
こっちが正しいです。
ちなみに「&」は実際は半角文字です。
0880nobodyさん
02/03/22 17:31ID:???Shift-JISだったらモロ化けるね。
上の4つだけで十分。
どうしても変換したいならEUCにすれば?
0881nobodyさん
02/03/22 17:35ID:2hKQObXwえ?意味ないんですか?
某雑誌にこれらの特殊文字は削るか置換しろ!
って書いてあるんですよ。
で、その通りにしてほしいってことで、修正依頼が来たんですよ・・・。
0882868
02/03/22 17:36ID:???ごめんレス番間違えてたね。
>>862で $document_lengthに長さが入ってるみたいなので
それも見たらどうかってこと。
0883nobodyさん
02/03/22 17:37ID:???変換結果に「yen」って出てるので分かるかと思うけど、
「申」のSJIS2バイト目が「\」なのです。
なので、2バイト文字をうまく扱ってくれる jperl を使うってのが、
とりあえずよいのではないかと。
0884nobodyさん
02/03/22 17:38ID:???(もしShift-JISだったら)漢字の一部が変換されてることになる。
わかりますか?
0885nobodyさん
02/03/22 17:39ID:???0886nobodyさん
02/03/22 17:42ID:2hKQObXw環境を変えるのはきびしいです。
>>884
意味はわかります。
それでは、文字コードがSJISならばどうしようもないってことですかね?
880さんが言ってるみたいに、とりあえずEUCに変換しとけってことですか?
0887nobodyさん
02/03/22 17:45ID:???制御文字?
0x0〜0x19 ぐらいのやつ?
特殊文字の変換とかって、どのくらいのことやるのが普通なんですか?
ここ見ろ! ってとことかあります?
0888nobodyさん
02/03/22 17:46ID:???0889878
02/03/22 17:53ID:???0891878
02/03/22 18:03ID:???0893nobodyさん
02/03/22 19:10ID:???決めて貰い後で参照しますが、その際「定義されていない or
空か無効」と「正常」を区別するスマートなやり方ありませんか?
# ユーザの設定
package user;
$file = 'bbs.cgi';
# プログラム
package main;
my $file = (defined($user::file) && $user::file)
? $user::file : 'bbs.cgi';
これだと何度も $user::file をタイプしないといけないので
なんか無駄に文が長くなってしまうような気がします。
なんとなく perl -w で文句を言われるのも嫌なので
my $file = $user::file || 'bbs.cgi';
のような記述も避けたいのですが・・・・。
0894nobodyさん
02/03/22 19:18ID:???話し終わってしまったみたいですが、エスケープする文字は
キチンと用途別に考えた方が良い場合もあると思いますよ。
そのまま or HTML として出力する場合や、コマンドの引数 or
ファイル名として使用する場合などです。
釈迦に説法ならすんまそん。
0895nobodyさん
02/03/22 22:18ID:???何度もタイプするのが嫌なのと perl -w で文句言われるのが嫌なのは相反する
ことなのでどちらかにせざるを得ないのでは?
それとも以下のようにしてみる?恐らくよけい嫌だとは思うが・・・・
my $user_file='user::file';
my $file = $$user_file || 'bbs.cgi';
0896895
02/03/22 22:45ID:???変数 $file をいっそのこと使わないで
my $user_file= 'user::file';
$$user_file ||= 'bbs.cgi';
0897nobodyさん
02/03/22 23:14ID:???ユーザ定義の変数をインポートする部分を
no warnings;
my $file = (defined($user::file) && $user::file)
? $user::file : 'bbs.cgi';
....
use warnings;
面倒は嫌いだ。(w
0898839
02/03/22 23:15ID:???>use LWP::Simple;
>$content = get ("http://www.2ch.net/");
>$length = length($content);
では全く応答なしです。
>>882
$document_lengthは空でした。ナニも入っていませんでした。
私がやろうとしていることは不可能なことなんですかね・・・。
0902nobodyさん
02/03/22 23:37ID:???画像置き場とかに使ってくれるな機能があったんじゃない?>ジオ
その関係とかはどうなの?
0903839
02/03/22 23:40ID:???agent・・・REQUEST-HEADER・・・・すみません、どちらもわかりません。
ただ、901さんの言い方からすると、なにか解決法があるということですね。
探してみます! ヒントありがとうございます!
0904ヤクザ
02/03/22 23:51ID:???ひぃぃぃ・・・・すいませんでした。面倒でも普通に書きます (笑い
いや、自分は本を買わず web で勉強していますので、
入門サイトには中々紹介されない $file |= 'hoge'; みたいな
独特の方法なんかあるのかなぁ・・・とか思ったのですよ。
記述&凡ミスを避ける為の出力に振り回されるのも情けないですね。
飽く迄デバッグ用のメッセージと割り切って -w と付き合う事にします。
有難う御座いますた。
0905839
02/03/23 01:02ID:???とりあえずなんとか上辺だけでもそれっぽくなるように
いろいろ探してます。
もし間違ってたら、申し訳ありませんが、教えてください。
別のソレっぽいのを探しに行きますから。
0906IKeJI
02/03/23 05:56ID:5i8LX5eBPerlで、$aに'ー'という文字を含むSJIS文字列が入っているときに、
$a =~ /$b/
という文を実行すると落ちるのですがなぜでしょう?
0907nobodyさん
02/03/23 06:14ID:???エラーメッセージとかは無いの?
あと環境も書いて。
0908nobodyさん
02/03/23 06:43ID:???$bに'ー'が入っている場合だよね?
SJISの2byte文字の2バイト目は'@'から'~'まで使われてしまうので、
'['などが問題を起こしがち。
応急処置としては\Qと\Eで囲むことかな。(詳しくはPerlメモを参照)
[\Q]これ以降に続くすべての非英数文字の前に逆スラッシュを挿入
[\E]\Q,\U,\Lの効果を終了する
0909nobodyさん
02/03/23 06:53ID:???geocitiesは User-Agent見てないみたい。
use LWP::Simple;
getprint 'http://www.geocities.co.jp/';
だけでできたのでなにか別の所に問題があるんじゃないかな?
プロクシ通さないとインターネットにアクセスできない環境からやってるとか。
0910IKeJI
02/03/23 08:19ID:iMj9R1avCGIで使っています、FreeBSDなど色々なサーバーで同じような症状が出ています。
>>908
ありがとうございました。
解決しました。
0911nobodyさん
02/03/23 08:57ID:???すまん、中身間違えた。
no warnings;
my $file = $user::file || 'bbs.cgi';
....
use warnings;
これで逝けるだろ。
0912nobodyさん
02/03/23 10:18ID:???0914nobodyさん
02/03/23 10:23ID:???http://zurubon.strange-x.com/uploader/
自作するならモジュールとか公開ライブラリ使え。
0915nobodyさん
02/03/23 11:43ID:???埋め込みしてあるshtmlの所に戻したいんだけど、どうやるの?
0916nobodyさん
02/03/23 12:17ID:???ひらがな、カタカナ、半角英字、全角英字は
[ぁ-ん]みたいな感じで、使用できると参考書に書いてあったんですが、
半角数字や全角数字も
[0-9]みたいな感じで使用できるのでしょうか?
0917nobodyさん
02/03/23 13:17ID:???print "Location: http://ほげほげ.shtml\n\n";
>>916
質問の答え
まず自分で試せ。
いちいち人に聞かなきゃ判らない内容か?
俺の質問
ところでどんな参考書を読んだのですか?
0918839
02/03/23 15:35ID:???特にプロキシが必要な環境ではありません。
use LWP::Simple;
getprint 'http://www.geocities.co.jp/';
で内容は表示されます。
でも私の欲しいのは最終更新日でして、0が返されてしまうのです・・・。
0919nobodyさん
02/03/23 17:47ID:???telnet www.geocities.co.jp 80
GET / HTTP/1.0
すると、
HTTP/1.1 200 OK
Date: Sat, 23 Mar 2002 08:41:52 GMT
Server: Y.G.Apache-SSLv3/1.3.9
Set-Cookie: Geoche=DX8gxX6cO000tucZycfSdO00ScRoAB; domain=.geocities.co.jp; path=/; expires=Mon, 22-Mar-04 08:41:52 GMT
Connection: close
Content-Type: text/html
<html>(以下略)
と返ってくるので、最終更新日は返さないみたいだね>geocities
0920nobodyさん
02/03/23 19:12ID:aOzStk5lperlを通して綺麗に整形したHTMLとして出力しようとしています。
入力用のhtmlを整形用スクリプトはできたのですが、その間のデータの受け渡しがうまくいきません。
サーバに自作cgiをアップロードして使用した経験はあるので、同じように
<form method="post" action="c:/zisaku.cgi">
<input type="submit" value="出力">
でデータを渡して、
print <<END
....
END
で表示できるだろうと思っていたのですが、submitボタンを押すとcgiのソースが表示されてしまいます。
無い頭をひねって cgi の一行目に「#!/perl」を付け加えたり、拡張子をcgiではなくplにしてみましたが
うまくいきません。
ActivePerlはインストール済みです。
どなたか解決方法が判る方、ご教授願います。
0921839
02/03/23 19:14ID:???どうも、ありがとうございます。
てことは、最終更新日を得るのは不可能ということですか?
方法としては、前回内容を保存しておいて、今回内容と比較して
更新されているかどうかを得る、という方法が現実なんですかね???
0922839
02/03/23 19:18ID:???自作CGIはローカルにあるんですよね?
私は、httpdを入れてつかってます。
ActivePerlだけでは、920さんと同じくCGIソースが表示されました。
素人なので原因も解決法もわかりませんが、
ムリなことなんだろうな、とおもいます。
0923nobodyさん
02/03/23 19:21ID:???サーバーソフトウェア入れないとCGIは機能しませんよ。
http://www.st.rim.or.jp/~nakata/
http://www.apache.org/
それと
print <<END;
にしましょう。
0924nobodyさん
02/03/23 20:39ID:???Anhttpedを導入した所うまくいきました。
ありがとうございました。
父親兼社長に、
「某システム社に頼んだら30万で見積もられたって?そんなの簡単だから一万円でやってやるyo!」
って大口叩いていたので、うまくいってほっとしております。
0925nobodyさん
02/03/23 21:29ID:bh9fdkhx0927nobodyさん
02/03/23 21:45ID:???LAN内では、問題無く動くのだけど、
外から、だと繋がらない、
思い当たる事無いですか
動いてる環境は、Linuxっす。
0930nobodyさん
02/03/23 21:55ID:???0933nobodyさん
02/03/23 22:40ID:???オマエのその価値のないソースを見ないとなんとも言えないZE!
オマエの説明不足からして接続できないのは納得できるZE!
0934nobodyさん
02/03/23 23:03ID:???CGIでHTMLを出力するとして
容量80KBのCGIファイル1つで出力するのと
requireで10KBのファイルを呼び出して20KBのCGIファイル(合計すると30KB)で
出力するのとではサーバーの負荷はどちらが軽いのでしょうか??
perlの勉強をはじめたばかりなんですがどうしてもわからなくて・・。
申し訳ないですがどなたか教えて頂けないでしょうか?
0935839
02/03/23 23:34ID:???取れない場合は、改行およびタグを外した本文を保存しておき、
次回アクセス時に今回のものと前回のものを比べて更新日を推測する、という
方式を取ることにしました。
>>862でLWPで更新日を取得できなかった場合は、
$doc = get URL;
$doc =~ s/\r\n//g;
$doc =~ s/\n//g;
$doc =~ s/<[^>]+>//g;
としています。
ところが、ジオではないあるページにて、前回と今回の$docが同じにも関わらず、
if(前回$doc ne 今回$doc)
に引っかかってしまうのです。他のサイト(ジオ)では問題ありませんでした。
if(前回$doc ne 今回$doc)という表現に問題があるのでしょうか???
0936nobodyさん
02/03/23 23:51ID:???なぜ改行とタグ削って保存するのか疑問。
0937839
02/03/23 23:56ID:???カウンタ画像を読みこまないためにタグを削除しました。
ローカルに落として目で確認しましたが、前回$docと今回$docの
内容は同じでした。
ログファイルの中身ですが、サイトごとに<>で区切り、サイトのURLや
最終更新日等を,で区切って保存しています。
open(IN,ログファイル); $log = <IN>; close(IN);
@log = split(/<>/,$log);
foreach $x (@log){・・・・
という感じですが、改行を外すさないとうまく動かないからです。
すみません、たぶん技術がない所為です。
0938nobodyさん
02/03/23 23:59ID:???便器マークとったら?
0939839
02/03/24 00:02ID:???すみません、2回のアクセスに1度の割合で、
順番に前回と今回の$docが同じでも
if(前回$doc ne 今回$doc)
に反応しているようです。
1アクセス目:反応なし
2アクセス目:LWPで取得できなかったAサイトが反応
3アクセス目:反応なし
4アクセス目:LWPで取得できなかったBサイトが反応(ジオ)
・
・
・
という感じでした。
もしif(前回$doc ne 今回$doc)が悪いのだとしたら、他に良い方法の
ヒントをなんとかよろしくお願いします。
0940nobodyさん
02/03/24 00:10ID:???#!/usr/local/bin/perl -Tw
use strict;
exit &func(STDOUT);
sub func {
my $fh = shift;
print $fh 'hello world.'."\n";
return 0;
}
% ./sample.pl
Bareword "STDOUT" not allowed while "strict subs" in use at ./sample.pl line 3.
Execution of ./sample.pl aborted due to compilation errors.
なんとなく FAQ っぽいのですが、"use strict;" STDOUT で
ググってもそれらしいのが見つけられませんでした。
しかしこれ系のファイルハンドルは実行時に自動的に発生する筈ですし、
性質上初期化なんてできませんよね?
0941nobodyさん
02/03/24 00:17ID:???0942nobodyさん
02/03/24 00:18ID:+OOAM91Zこれはどういう意味なのでしょうか?
本を数冊読んだのですが説明がありませんでした…。
sort_file(...);
というふうに関数を使用しているのですが。
0943nobodyさん
02/03/24 00:37ID:???0944940
02/03/24 00:39ID:???速攻レス有難う御座います。*STDOUT で上手く行きました。
しかし、それって型グロブってやつですよね?
そうなると、なんか意味として回りくどくなってしまうような
気がしますが、こういう使い方はごく普通なのでしょうか・・・???
0945942
02/03/24 01:40ID:+OOAM91Zレスありがとうございます^^
そうすることでメモリ消費を抑えたりするのでしょうか…。
0946nobodyさん
02/03/24 01:42ID:???それは、トータルのスクリプト量が小さいほうがDISKアクセス負荷、
CPU負荷、共に軽いんじゃない?つまり、requireしたほうが軽そう。
どうしても知りたいなら、>>938の言うように、なんらかのベンチマーク
を取って、結果報告キボン。
でも、perl自体が起動する負荷に比べれば、
その程度の違いは無いのと同じだと思う。
0947nobodyさん
02/03/24 01:45ID:???1.そのスクリプトを動かしたマシンにグローバルアドレスがついてない
2.ついてるんだけど、ファイヤーウォールの設定で遮断されてる
3.上記の問題はないんだけど、127.0.0.1 のみをlistenしている。
0949839
02/03/24 02:00ID:???そうですか・・・・
それにしても if(前回$doc ne 今回$doc) に問題がないと
いうことがわかり、前進です! ありがとうございます。
とりあえずEUC(?)にして試してみます!
0950nobodyさん
02/03/24 02:20ID:???実際に検証したわけではないので伝聞ですが読み込みが早いそうです。
今思いつくものでは
use Symbol 'gensym';
use Fcntl qw(:flock);
のようなケース。
0951nobodyさん
02/03/24 22:03ID:???0952nana.cgi
02/03/26 11:46ID:???no strict;
use Asian::Pussy qw/:sexy :healthy/;
0953nobodyさん
02/03/26 12:00ID:pm1MjUopナゼなのでしょうか。
1.NNの場合、Perlが出力したソースが表示されます。
2.Operaの場合はファイルダウンロードのダイアログが起動します。
IEでは問題ないんですけど
私がアフォだからっていう以外の理由を知りたいです。
お願いします。
0954nobodyさん
02/03/26 12:01ID:???ってやってるあたりがおかしいから。
0957953
02/03/26 12:48ID:???その「あたり」でいいですか?
print<<END;
Content-type: text/html\n\n
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
0958nobodyさん
02/03/26 12:52ID:???それ以前にprintをしている可能性は?
0959953
02/03/26 13:02ID:???なさそうです。敢えて言えばサブルーチン名にPrintPageっていうのを使ってます。これは問題ないですよね。
0960nobodyさん
02/03/26 13:09ID:???とりあえずCGIファイルの先頭あたりで
print "Content-type: text/html\n\n";
して様子を見てみるとよいかと。
0961nobodyさん
02/03/26 13:13ID:???ヒアドキュメントでも
print <<'END';
ってやったら解釈されないから注意。
シングルクォーテーションだと解釈されないのは同じだから。
でも、覚えておくと逆に便利な事もある。
メアドをプリントする時とか\入れなくて済むし。
0962953
02/03/26 13:20ID:???>とりあえずCGIファイルの先頭あたりでprint "Content-type: text/html\n\n";
これで正常になりました。
やはり以前のステップに問題があるんだろうと思いますが
現象が解消したので、じっくりゆっくり調べます。
本当にありがとうございました。
0964超・超初心者
02/03/26 14:40ID:6InRaAYk全然わかりません。
任意の10億までの数を入力して、
その素因数分解して、その結果を出力
するプログラムをPERLを使って作成
してください。
ファイル名と文字列を入力すると、
その文字列がそのファイルに含まれるか
どうかを検査し、含まれていた場合は、
ファイルの何行目に含まれているかを
出力するプログラムをPERLを使って
作成してください。
どうか、宜しくお願いいたします。
0965nobodyさん
02/03/26 14:50ID:???宿題は自分でやりましょうね。
はい次の方。
0966nobodyさん
02/03/26 14:51ID:???ぉぃぉぃ
宿題?
素因数分解は遅くていいなら簡単だけど。
速くするのは数論の知識も必要になってくる。
grepみたいなのはものすごく簡単だけど。
教えない。
0967のび太
02/03/26 16:00ID:Kul7lxpG元ファイルの作成と転送そのものは問題なく動作してるのですが、
コピーしたファイルが元のファイルと比べて内容が変わってしまいます。
※内容が変わるというのは、ファイルが最後までコピーされない感じです(100行あったら90行までしか)
テーブルを使用してるのでレイアウトがグチャグチャに。。。
これはどのような原因が考えられるでしょうか?
ちなみに出力したファイルが全て書き込まれる前に転送しちゃってるのかな?と思い
転送の前にスリープとかやってみても結果は変わりませんでした。
0969ほげ
02/03/26 16:09ID:gjNyJjgtモールス信号で伝送してください
0972nobodyさん
02/03/26 18:27ID:???$x = ファイル名
$y = 文字列
$cnt = 1;
open(IN,$x);
while(<IN>){
if($_ =~ /$y/){ print "$cnt行目\n"; }
$cnt++;
}
close(IN);
0973nobodyさん
02/03/26 20:07ID:???$i = $in = $ARGV[0];
for($prime=2;$prime <= $in && $prime<1000000000;$prime++) {
if ( ($i % $prime) == 0 ) {
$power{$prime}++;
$i = $i / $prime;
$prime = 2;
}
}
foreach(sort {$a<=>$b} keys %power) {
$n = $power{$_};
if ($n == 1) {
$term = $_;
} else {
$term = "$_^".$n;
}
push(@result,$term);
}
print "$in = ",join(" * ",@result),"\n";
0977nobodyさん
02/03/26 22:34ID:7ingtp1lprint "a-1=$b";
というのを$bを使わないで
print join("", "a-1=", $a-1);
って書くのは普通ですか?もっと良い方法ありますか?
join使うとhtml出力するときとか、めちゃめちゃ分かりづらくなるんですが。
0978nobodyさん
02/03/26 22:53ID:???printf "a-1=%f", $a - 1;
# or
print "a-1=${ \do{ $a - 1} }";
print "a-1=@{[ $a - 1]}"
好きな方法を試されよ。
0980nobodyさん
02/03/26 22:57ID:???なんで join でくっつけるの? つっくける意味がわからん。
print '$a-1= ',($a-1),"\n";
または
print "\$a-1= ${\( $a - 1 )}\n";
0982977
02/03/26 23:03ID:7ingtp1l979さんと980さんのはピリオドじゃなくてカンマでいいんですか?
なんかdoってのが一番しっくりきそうなので使ってみます。
てか、今までずっとjoinでやってた..。人に見せなくてよかった。
ありがとうございます!
0983nobodyさん
02/03/27 04:56ID:???Error installing package 'Net-SMTP': Could not locate a PPD file for package Net-SMTP
ってエラーが出るんだけど、なにこれ?
プロキシ使ってないのに・・・
http://www.activestate.com/packages/
に Net-SMTP が見当たらないのと関係ある?
0984983
02/03/27 05:02ID:LXoBMXboppm install Net-Ping
は成功しました。回線不調ともちがうようです。う〜ん・・・
0986983
02/03/27 05:34ID:???ppm install libnetでインストールできました。
その後、
ttp://member.nifty.ne.jp/hippo2000/perltips/net/smtp.htm
>なおこのドキュメントではlibnetモジュールをインストールしたときに
>作成されるC:\Perl\html\lib\site\Net\SMTP.htmlを、
なんてのも見つけました。注意不足でしたか
0987帝国 ◆9qoWuqvA
02/03/27 11:30ID:BFIdDUdC$folderで指定したフォルダ内に
フォームで受け取ったファイル名($filename)とパーミッション($permission)で、
空ファイルを生成する方法を教えてほしいんですが・・
もしかしてcgi-lib.plとか使いますか??
0988nobodyさん
02/03/27 11:35ID:???フォルダのパーミッションがきちんと設定されてればopen(MAKE,">$filename");でできる。
パーミッションはchmodで変えれ。
0989帝国 ◆9qoWuqvA
02/03/27 11:58ID:BFIdDUdCファイルの生成はうまく行きました。
でもパーミッションが設定されないんです。。
chmod($permission,"$folder/$filename");
でダメなんでしょうか?
0990nobodyさん
02/03/27 12:09ID:???パーミッションの数字はなににしてる?
0991製作板で誘導した人
02/03/27 12:14ID:???てかパーミッション設定するのに変数使う必要あるんだろうか・・・・
$file="\.\/$folder\/$filename";
chmod 666,$file;
とかじゃダメ?
0992nobodyさん
02/03/27 12:26ID:???0993帝国 ◆9qoWuqvA
02/03/27 12:39ID:BFIdDUdCだから変数に格納する必要が。。
0994nobodyさん
02/03/27 12:44ID:???立たぬなら 立つまでまとう Perlスレ
0995nobodyさん
02/03/27 12:56ID:???次スレ作りましたー
【Perl】初心者コーナーPart11
http://pc.2ch.net/test/read.cgi/php/1017201229/l50
0996nobodyさん
02/03/27 16:20ID:Uw889VO50997nobodyさん
02/03/27 16:21ID:???0998nobodyさん
02/03/27 16:21ID:???0999nobodyさん
02/03/27 16:21ID:???1000nobodyさん
02/03/27 16:21ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。