Perlコーディング初心者質問スレ Part 42
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2005/05/25(水) 06:36:28ID:PVpWgcdf【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0002nobodyさん
2005/05/25(水) 06:42:32ID:PVpWgcdf△▲ WebProg 初心者の質問 Part11 ▼▽
http://pc8.2ch.net/test/read.cgi/php/1101635909/
CGIだけど、なんか質問ある? Part 12
http://pc8.2ch.net/test/read.cgi/php/1097334246/
【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/
【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/
★負荷軽減対策委員会(Perl、PHP)★
http://pc8.2ch.net/test/read.cgi/php/1034645635/
Perlモジュールについて
http://pc8.2ch.net/test/read.cgi/php/997829243/
CGIに依存しないPerlの話題一般/Part2
http://pc8.2ch.net/test/read.cgi/php/1030548610/
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1077525387/
【 スクリプト改造依頼スレ 】(丸投げ) part3
http://pc8.2ch.net/test/read.cgi/php/1105046286/
0003nobodyさん
2005/05/25(水) 06:44:34ID:PVpWgcdfPart1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
0004nobodyさん
2005/05/25(水) 06:45:16ID:PVpWgcdfPart11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html
part20 http://pc2.2ch.net/php/kako/1044/10447/1044717887.html (タイトルに19と誤記)
0005nobodyさん
2005/05/25(水) 06:45:59ID:PVpWgcdfpart21 http://pc2.2ch.net/php/kako/1047/10479/1047980851.html
part22 http://pc2.2ch.net/php/kako/1050/10503/1050369328.html
part23 http://pc2.2ch.net/php/kako/1053/10530/1053051519.html
part24 http://pc2.2ch.net/php/kako/1054/10549/1054992610.html
part25 http://pc2.2ch.net/php/kako/1056/10567/1056730690.html
part26 http://pc5.2ch.net/php/kako/1059/10590/1059043704.html
part27 http://pc5.2ch.net/php/kako/1060/10608/1060808783.html
part28 http://pc5.2ch.net/php/kako/1063/10635/1063562491.html
part29 http://pc5.2ch.net/php/kako/1066/10662/1066286828.html
part30 http://pc5.2ch.net/test/read.cgi/php/1069846177/
0006nobodyさん
2005/05/25(水) 06:46:54ID:PVpWgcdfpart31 http://pc5.2ch.net/test/read.cgi/php/1072896288/
part32 http://pc5.2ch.net/test/read.cgi/php/1075545279/ (タイトルに31と誤記)
part33 http://pc5.2ch.net/test/read.cgi/php/1078076768/
part34 http://pc5.2ch.net/test/read.cgi/php/1081148490/
part35 http://pc5.2ch.net/test/read.cgi/php/1085557731/
part36 http://pc5.2ch.net/test/read.cgi/php/1089779036/
part37 http://pc5.2ch.net/test/read.cgi/php/1093106507/
part38 http://pc5.2ch.net/test/read.cgi/php/1097158988/
part39 http://pc5.2ch.net/test/read.cgi/php/1101522903/
part40 http://pc5.2ch.net/test/read.cgi/php/1106816922/
part41 http://pc8.2ch.net/test/read.cgi/php/1110383236/(前スレ)
0007nobodyさん
2005/05/25(水) 06:50:07ID:???[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/
[本]
リャマ: http://www.oreilly.co.jp/BOOK/lperl3/
駱駝: http://www.oreilly.co.jp/BOOK/pperl3v1/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/BOOK/pcook/
[オンラインマニュアル]
Perldoc.com: http://perldoc.com
perldoc.jp: http://perldoc.jp
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/%7ekbk/perl5.005/
[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://member.nifty.ne.jp/hippo2000/
[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
0008nobodyさん
2005/05/25(水) 06:53:48ID:???正規表現道場@2ch Part4
http://pc8.2ch.net/test/read.cgi/php/1105930285/
0009nobodyさん
2005/05/25(水) 09:00:35ID:???前スレで教えてもらったperl講座
ttp://www.rfs.jp/sitebuilder/perl/
0010nobodyさん
2005/05/25(水) 13:52:45ID:5tMlS9wkございますでしょうか。
例えば「12345あいうえお」の場合、「15バイト」として数えるのではなく、
「10文字」として数えるようにしたく思っております。
ご教示いただけますと幸いです。
0011nobodyさん
2005/05/25(水) 13:57:51ID:???use encoding 'Shift_JIS'; # ソースのエンコーディングを指定する
print length('12345あいうえお');
0012nobodyさん
2005/05/25(水) 17:26:48ID:???ご教示有難うございます。
しかしながら先方のサーバはバージョンが5.6みたいで、
使用できませんでした。
とにかく即レス有難うございました。
0013nobodyさん
2005/05/25(水) 18:39:06ID:kwD9lRlX長文ですが、よろしくお願いします。
1つのページに560個程度の項目があります。これをCGIで管理したいと考えています。
項目はチェックボックスx2、テキストx1、テキストエリアx2が90行と日付等に利用している
チェックボックスとテキストが数個です。
現在、自分で何とか改造できる更新記録系CGIを改造してどうにかしようとしています。
ただ、1つ問題があります。が…
560個もの項目(変数)を、表示ルーチンのsplit時の変数羅列や書き込み時のline(pushの時に利用してるもの)
に並べても大丈夫なのでしょうか?
さっき、変数を手打ちするのが大変だと思いエクセルののオートフィルを利用し変数をCSV出力し1行にしたら
PerlEdtiorが途中でフリーズとなってしまいました。
ソフトの限界があるのかもしれませんが、これで限界があるようだと、CGI上でも動作しないのでは?
と考えてしまします。あまり1行が長いとまずいということでしょうか?
1行でどうにかしたいのには訳があります。
>項目はチェックボックスx2、テキストx1、テキストエリアx2が90行
と先ほど書きましたが、この更新は1行ごとではなく、ランダムで何十行かまとめてする必要があるので、
1行ごとに「更新ボタン」とするのではなく、全部まとめて「更新」としたいからです。
もちろん、この考えに誤りがある場合、指摘してください。
そこで、1つ考えたのが、ログファイル・split時の変数羅列や書き込み時のlineを改行できないのか?と思いました。
これがOKなら問題解決しそうなのですが、ダメでしょうか?
splitで読み込み時に改行があるとまずいとかあるのでしょうか?
ログやsplit時の変数羅列が長すぎてはダメ、でも改行は出来ると言う場合は↑の問題まで教えていただけるとありがたいです。
001413
2005/05/25(水) 18:40:25ID:kwD9lRlXもし、1行でダメで改行もダメな場合、質問の続きを書き込みます。
よろしくお願いします。
0015nobodyさん
2005/05/25(水) 18:48:13ID:???一行ごとに複数回更新処理したらいいんでは?そういうことじゃない?
> PerlEdtiorが途中でフリーズとなってしまいました。
それはそのエディタがしょぼいだけ、とか。
そもそも、なんで560個もの変数が必要となるのかがさっぱりわからん。
0016nobodyさん
2005/05/25(水) 19:25:13ID:VuzyXB/A[email protected]
までメール下さい
0017nobodyさん
2005/05/25(水) 19:34:15ID:10kxLICF全部で11個のCGIから1つのデータファイル(テキスト)を参照させている
のですが、最近そのデータが消えることがあります。そのデータファイルは現在、
1500くらいのレコードがあり、追加書き込みができます。データが消えると
いうのは、1〜20レコードがすっぽり消えていたり、レイアウトがずれたりも
します。
以前の質問時には、ファイルロックを書き込みできるCGIのみ記述していた
ので、読み込みのみのCGIにも記述すべきとのアドバイスを頂き、修正したの
ですが、再発してしまいました。
ファイルロックの記述は以下のような感じですが間違っているでしょうか?
if ( !open (ABC_OUT, ">$abc_file") ){
print "ファイル読み込みオープンエラー<BR>\n";
}
else{
eval{ flock(ABC_OUT, 2); };
(省略)
ファイルロックが機能しているか確かめる方法とかあるのでしょうか?
また、ファイルを掴んでいる人のPCがフリーズしたりしてファイルが壊れる
なんてこともあるのでしょうか?
0018nobodyさん
2005/05/25(水) 20:21:45ID:???ロック処理
↓
書き込み/読み込み処理
↓
ロック解除処理
>>17のファイルロック
読み込み処理
↓
ロック処理
↓
0019nobodyさん
2005/05/25(水) 20:36:39ID:FbKjEBl3my $st = $hogehoge->db->wakame('wake wakame');
↑
上のような文章が出てきたんですけど、これは何をしてるんでしょうか?
解説できるかたがおりましたら、教えてください。
また詳しい説明が載ってるHPがあったら教えてください。
002010
2005/05/25(水) 20:37:07ID:???my $jp = $args =~ tr/\x8e\xa1-\xfe/\x8e\xa1-\xfe/;
my $asc = $args =~ tr/\x20-\x7f/\x20-\x7f/;
$jp / 2 + $asc;
これでとりあえず文字数を数えられるところまではできたのですが、
この場合、記号だけがちゃんと数えられません。
例えば「"」ですと、4文字と数えられてしまいます。
頭悪いのでこれ以上解決まで至りませんでした。
ご教示いただけますと幸いです。
0021nobodyさん
2005/05/25(水) 20:37:27ID:???【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/
http://www.tohoho-web.com/wwwperl2.htm#flock
0022nobodyさん
2005/05/25(水) 20:40:47ID:???Jcode.pmでもできるぞ。それも入ってないのけ?
$length = $jcode->jlength();
returns character length properly, rather than byte length.
0024nobodyさん
2005/05/25(水) 21:34:35ID:???とりあえずシフトJIS限定で、
$jstr = '"12345あいうえお"';
print "$jstr = " . length($jstr) . "\n";
# SHIFT_JIS 2バイト文字を1バイト文字(j)に置換
$jstr =~ s/[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]/j/g;
print "$jstr = " . length($jstr) . "\n";
実行結果>"12345あいうえお" = 17
実行結果>"12345jjjjj" = 12
こんなん出ましたけど
0025nobodyさん
2005/05/25(水) 22:09:41ID:10kxLICFファイルオープンの前にファイルロックしろということですか?
002710
2005/05/25(水) 22:44:16ID:???苦心の末、文字列計算ルーチンがなんとかできました。
sub char_count{
my $args = $_[0];
$args =~ s/\x0D\x0A|\x0D|\x0A//g;
my $ascii = '[\x00-\x7F]';
my $twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
my $threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
my @chars = $args =~ /$ascii|$twoBytes|$threeBytes/og;
return ($#chars + 1);
}
これでちゃんとカウントされます。
Perlの小技さんのサイトに救われました。
丸半日かかりましたが、明日の納期に何とか間に合いました。
皆様に感謝いたします。
0028nobodyさん
2005/05/25(水) 22:44:56ID:???無理やり一言で言うなら、
ABCD::Saitamaのひとつである $hogehoge の要素 db への wakame('wake wakame')という関数の呼び出し。
チョー難しい。スレタイの通り「初心者」なら忘れるか丸暗記しろ。
いわゆる、オブジェクト指向的な書き方。
古いバージョンのPerlには存在しなかったものなので、載ってる書籍も少ない。
Perlが開発された当時にはオブジェクト指向という概念すら登場してなかったから無理も無いけど。
検索するときは「perl オブジェクト指向」あたりで検索するといい。
もし、Perlの他の部分はほとんど分かるがそれだけが分からないんだとしたら、巣立ちの時期。
そろそろ第二のプログラミング言語を学んでみる事をお勧めする。
文法上、それ以上難しい事はPerlには登場しないというのがひとつ。
加えて、Perl上でのオブジェクト指向の実装はかなり変なので、ただでさえ難しいオブジェクト指向の概念を初めて学ぶには結構キツい。
002910
2005/05/25(水) 22:50:18ID:???やはり神サイトです。
0030nobodyさん
2005/05/25(水) 23:35:52ID:???何か方法はありますでしょうか。
検索してみても、文字コードを変換する方法ばかりHITするもので。
お願いします。
0031nobodyさん
2005/05/26(木) 02:16:27ID:???具体例を示したほうがよろしいかと。
0032アップロードの質問
2005/05/26(木) 02:16:50ID:???送信内容の確認ページを挟みたくて、下記の様な流れで
作成してみました。
(2)確認ページから、最後の(3)登録処理ページへデータを渡す為に
(2)確認ページ側のformをenctype="multipart/form-data"
としてやり、
<input type="file" name="temp" value="$FORM{'temp'} ">
として、最初の(1)ファイル選択フォームからのファイルデータを
受け取れないかと思ったのですが、
セキュリティー上、type="file" にvalueは与えられないとの事。。。
確認ページを入れたい場合、どの様にしたら良いのでしょうか。
どうかご教授下さいませ。
0033アップロードの質問2
2005/05/26(木) 02:18:00ID:???<form method="post" action="./regist_form.cgi">
<input type="text" name="name" size="20">
<input type="file" name="temp" size="40">
<input type=submit name="regist" value="登録">
</form>
↓
#(2)確認ページ(regist_form.cgi)
$FORM{$name} = $value;
・
・
・
<form method="post" action="./regist.cgi" enctype="multipart/form-data">
<p>$FORM{'name'} </p>
<input type="hidden" name="name" value="$FORM{'name'} ">
<input type="file" name="temp" value="$FORM{'temp'} ">
<input type=submit name="regist" value="登録">
</form>
0034アップロードの質問3
2005/05/26(木) 02:18:42ID:???#(3)登録処理ページ(regist.cgi)
use lib './lib';
use CGI::Lite;
require 'jcode.pl';
$cgi = new CGI::Lite;
my $directory = './file';
mkdir $directory, 0777 or die $! unless (-d $directory);
$cgi->set_directory ($p_dir) or die &error('ディレクトリが存在しません');
$cgi->add_timestamp(0);
%data = $cgi->parse_form_data;
0035nobodyさん
2005/05/26(木) 03:45:31ID:???$index= rand @array;
print $array[$index], "\n";
print "<BR>\n";print "<BR>\n";
配列の要素をランダムに取り出した時、
その要素を固定して留めるにはどうしたらいいでしょうか。
当たり前なんですが、更新ボタンを押すと要素が変化してしまいます。
こんな風に無理矢理別の変数に突っ込んでみようとしましたが
$array[$index]=$mem;
$memには何も記録されませんでした。
0036nobodyさん
2005/05/26(木) 04:58:14ID:???my $hogehoge = new ABCD::Saitama;
my $st = $hogehoge->db->wakame('wake wakame');
を書き直すと
my $hogehoge = ABCD::Saitama->new();
my $tmp = $hogehoge->db();
my $st = $tmp->wakame('wake wakame');
と同等、意味は
1行目の左辺: ABCD::Saitamaパッケージで定義されているnew関数を呼出す。
1行目のnew関数: ABCD::Saitamaパッケージと関連付けされたリファレンスを返す。
1行目の右辺: new関数の戻り値であるリファレンスを$hogehogeに代入。
2行目の左辺: ABCD::Saitamaパッケージで定義されているdb関数を呼出す。
2行目のdb関数: 何かのパッケージと関連付けされたリファレンスを返す。
2行目の右辺: db関数の戻り値であるリファレンスを$tmpに代入。
3行目の左辺: 何かのパッケージで定義されているwakame関数に引数を渡して呼出す。
3行目のwakame関数: 引き数を受け取って何かの値を返す。
3行目の引き数: この場合の引き数とは'wake wakame'という文字列定数のこと。
3行目の右辺: wakame関数の戻り値である何かの値を$stに代入。
0038nobodyさん
2005/05/26(木) 07:47:44ID:???fileを指定できると他人のパソコンのファイルが勝手に引き出せるので無理
アップファイルをサーバにテンポラリとして保存しておき確認OKならそのファイルを使うようにする。
ただ確認画面で処理をやめられた場合にテンポラリファイルがゴミとして残るのでガベージコレクションみたいな処理が必要。
0039nobodyさん
2005/05/26(木) 11:23:28ID:7fGLJWg9自分で作った掲示板で、書込み内容を修正しようとおもったのですが、
削除機能がついてないので、ftpでログをダウンロードして
書込み内容を修正してからアップロードしたら
きちんと表示されなくなりました。
ログの保存方法は
title<>name<>kakikominaiyou
title<>name<>kakikominaiyou
見たいな感じ記録して
読み込みは
open(LOG,"$logname");
@log = <LOG>;
for($i=0;$i<@log;$i++){
}
なのですが、
@log = <LOG>のところで一行づつ読み込めてないようなのですが
どこに原因があるのでしょうか?お願いします。
0040nobodyさん
2005/05/26(木) 11:49:50ID:???まず open(ABC, ">") じゃなくて open(ABC, "+<") に変えるべき。
>>35
>>37
>>39
ヒント : $log = <LOG>; print $log; ってやったらどんな文字列が出る?
0041nobodyさん
2005/05/26(木) 16:07:48ID:???がらくたBOOKさんの「SiteHistory」を改造中です。
ttp://tinkle.cside.com/book/cgi/cgi.htm
項目をがらりと変えたのですが、どうもうまくいきません。修正しようとすると、一番上の行のカウンターだけ残して全ログが消えてしまいます。
とりあえず、修正サブルーチンは以下の通りです。
---------------------
sub edit3 {
if ($in{'pass'} ne "$pass") { &error("パスワードが違います"); }
# ログファイル読み込み
open (FILE, "$data") || &error("ファイルが開けません");
@data = <FILE>;
close(FILE);
# カウント退避
$count = shift (@data);
foreach $line (@data) {
($no,$coview,$name,$tel,$genre,$floor,$all,$fday_i,$sday_i) = split(/<>/,$line);
chomp;
if ($no eq $in{'edit_no'}){
$line = "$no<>$in{'coview'}<>$in{'name'}<>$in{'tel'}<>$in{'genre'}<>$in{'floor'}<>$in{'all'}<>$in{'fday_i'}<>$in{'sday_i'}<>\n";
}else {$line = "$no<>$coview<>$name<>$tel<>$genre<>$floor<>$all<>$fday_i<>$sday_i<>\n"; }
push(@new,$line);
}
# ログを更新
unshift(@renew,"$count");
open(OUT,">$data") || &error("削除処理を失敗しました");
print OUT @renew;
close(OUT);
&admin;}
-----------
どこが間違っているのでしょう?
0042nobodyさん
2005/05/26(木) 17:09:45ID:???0043nobodyさん
2005/05/26(木) 17:27:51ID:???004439
2005/05/26(木) 18:44:15ID:7fGLJWg9レスありがとうございます。
試してみたところ
書込み内容の改行のところで一行と扱われてしまっているようです。
なにかいい方法はないのでしょうか?
わかりやすく言うと
title<>name<>書込み内容の改行
書込み内容の途中
title<>name<>書込み内容
上記のように出力されてしまいます。
0045nobodyさん
2005/05/26(木) 19:16:41ID:???ログの改行コードの扱いを整理した方が良いと思う。
その掲示板の CGI やエディタや ftp クライアントなどが、
それぞれどんな改行コードを想定しているかとか改行コードを変換したりしてないかとか、
そういうあたりを。
0046nobodyさん
2005/05/26(木) 20:31:30ID:???つまり、ログに保存するとき、例えば、
my $str = "その書き込み内容の改行";
$str =~ s/\r?\n/<br>/g;
とかで改行タグを無くしなさい。
1行ごとにログ保存してる掲示板とかならみんなやってることだぞ。
0047nobodyさん
2005/05/26(木) 20:33:06ID:3LXc6fmj検索システムのルーチンについて質問です。
1.検索結果と同じ数の変数を作り、
検索結果をその変数に格納する
↓
2.1〜50件、または51〜100件までと表示する際、
1の変数から取り出して表示する
という考え方で合ってますでしょうか。
004835
2005/05/26(木) 21:40:41ID:4tEZgW2Vすみません、どうして>37と書かれているのかわかりません
>37に書いてある事の意味は何となく理解できますが
難しすぎて応用の域に達しませんでした…。
0049nobodyさん
2005/05/26(木) 22:25:58ID:???>>40
> こんな風に無理矢理別の変数に突っ込んでみようとしましたが
> $array[$index]=$mem;
> $memには何も記録されませんでした。
>>37
> 左辺と右辺を書きまちごうたけど
0051nobodyさん
2005/05/26(木) 22:45:13ID:???∩ ・∀・)∩∩ ´∀`)∩ このレスを見た人はコピペでもいいので
〉 _ノ 〉 _ノ10分以内に3つのスレへ貼り付けてください。
ノ ノ ノ ノ ノ ノそうすれば14日後好きな人から告白されるわ宝くじは当たるわ
し´(_) し´(_) 出世しまくるわ体の悪い所全部治るわでえらい事です
005235
2005/05/26(木) 23:12:36ID:Q34ppmGc>36を一生懸命よんでまっすたごめんなさい…できました
ところで、>35に付け加える感じなんですが
$tmp01 = "シュウマイ";
$tmp02 = "餃子";
$tmp03 = "食いてぇ〜";
@array = (01,02,03);
$index = rand @array;
my $mem = $array[$index];
これで、$tmp.$memのようにして
print "$tmp.$mem"\n";
$tmp01〜$tmp03の中身(シュウマイとか)を表示させたいんですが
やっぱりうまく行きません……どうしたらいいでしょうか?
0053nobodyさん
2005/05/27(金) 00:32:30ID:???$tmp01 = "シュウマイ";
$tmp02 = "餃子";
$tmp03 = "食いてぇ〜";
@array = ('01','02','03');
$index = rand @array;
my $mem = $array[$index];
print "${tmp.$mem}\n";
0054nobodyさん
2005/05/27(金) 00:39:41ID:???@array = qw"シュウマイ 餃子 食いてぇ〜";
print "$array[rand@array]\n";
005553
2005/05/27(金) 04:39:59ID:OuNiDnY3表示ができました。
それと、どうしても詰まってしまったんですが
スクリプト上で、${tmp.$mem}を$tmp01〜$tmp03と認識させて、
以降の処理に使いたい場合はどうすれば良いのでしょうか?
$tmp01 = "0";
$tmp02 = "0";
$tmp03 = "0";
@array = ('01','02','03');
$index = rand @array;
my $mem = $array[$index];
${tmp.$mem} = 1;
#$tmp01〜$tmp03に1を代入したい
printで表示させた時はうまくいったのですが、スクリプト上だと
${tmp.$mem}を$tmp01〜$tmp03そのものとは認識してくれなくて、ここで止まってます
${tmp.$mem}の結果を該当する$tmp01〜$tmp03にすり替えるには…?
005653
2005/05/27(金) 05:03:41ID:???ぎゃぼー
0057nobodyさん
2005/05/27(金) 06:32:17ID:???何事も考え方一つだ! ・・・対位法でも学んでおくかい?
0058nobodyさん
2005/05/27(金) 07:19:03ID:???my $tmp01 = "シュウマイ";
my $tmp02 = "餃子";
my $tmp03 = "食いてぇ〜";
my @array = \($tmp01, $tmp02, $tmp03);
my $index = rand @array;
my $mem = ${$array[$index]};
print "$mem\n";
いつも思うのけど、なぜ配列を使うのを嫌うのだろう。
0059アップロードの質問
2005/05/27(金) 07:28:24ID:???レスありがとうございます。
>fileを指定できると他人のパソコンのファイルが勝手に引き出せるので無理
なるほど、そういう事なのですか。。。そう言われればそうですよね。
>アップファイルをサーバにテンポラリとして保存しておき確認OKならそのファイルを使うようにする。
>ただ確認画面で処理をやめられた場合にテンポラリファイルがゴミとして残るのでガベージコレクションみたいな処理が必要。
やはり最初のsubmitで送信してしまわないといけないのですね。。。
ご指摘の通り、確認画面でやめられた時の「ゴミ」が気になっていたので
なんとか確認ページからのアップロード処理を出来ないものかと思っていました。
とりあえず、疑問はなくなりスッキリしました。
ありがとうございます!
0060nobodyさん
2005/05/27(金) 14:45:20ID:???↑このvarsてのは何なのですか?
後qwとかqqとかもありますが、それについての詳細もお伺いしたいのですが
0061nobodyさん
2005/05/27(金) 14:46:50ID:???0065nobodyさん
2005/05/27(金) 15:18:50ID:???最低限、>>1くらい読みなさい。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません
006653
2005/05/27(金) 15:55:26ID:???$tmp01〜$tmp03を@tmp('$tmp01','$tmp02','$tmp03')とまとめるという事でしょうか?
実は$tmpの01〜03以外にも、別の変数$soc01〜03があって
$tmp01の内容が$soc01に、$tmp02が$soc02に(以下略)…
対応している、という仕組みになってます
なので、数字だけ出して割り振ろうと考えてました。
配列を使うのを嫌うというか、有効な使い方がまだよくわからんとです…。
見てると多分効率悪いんでしょうね、ネットで調べながらやってるんですが応用は難しいです、
あ、>60は自分じゃないです
0068nobodyさん
2005/05/27(金) 16:24:21ID:???こう使うって意味だと思う
@tmp = ("シュウマイ", "餃子", "ラーメン");
#$tmp[0] = "シュウマイ";
#$tmp[1] = "餃子";
#$tmp[2]= "食いてぇ〜";
@soc = (100, 200, 300);
$count = @tmp;
$index = int(rand $count);
print "$tmp[$index] $soc[$index]円";
0069nobodyさん
2005/05/27(金) 17:20:12ID:???> 数字だけ出して割り振ろうと〜
余計配列とかのが適してない?
ハッシュ(連想配列)でもいいかもしれない。
my $tmp01 = 'シュウマイ';
my $tmp02 = '餃子';
my $soc01 = 100:
my $soc02 = 200:
ってやるより、
my %menu = (
'シュウマイ', => 100,
'餃子' => 200,
);
とかやった芳がわかりやすいと思わないかい?。
0070nobodyさん
2005/05/27(金) 17:22:02ID:???0071nobodyさん
2005/05/27(金) 17:56:56ID:???my @db = (
{name=>'シュウマイ',price=>100},
{name=>'餃子',price=>200}
);
ってやるのが好き
Template Toolkit にもそのまま貼りつけられて楽だし
007253
2005/05/27(金) 18:10:05ID:???この例でようやく直感的に理解できました、そうですよね変数をしまっておけるんですよね
正直な所、配列の本当の便利さがよくわかってませんでした、すごい便利なんですね、恥ずかしい
配列もちゃんと理解してなかったのにアレですが、>69のハッシュは使えそうだなと思ってました
ただ、要素をランダムに選び取るというのがどうやったらいいのか全くわからなくて
今までここでお世話なった分で何とか$tmpを取り出す所まではできたんですが、
@array = ('01', '02','03',);
$index= rand @array;
my $sed=$array[$index];
%hash = ($tmp01=>$soc01, $tmp02=>$soc02, $tmp03=>$soc03,);
%hash_value = reverse %hash;
print $hash_value{${soc.$tmp}};
$socの中身を一緒に取り出すというのができませんでした。
(eachだと1つではなく、全部取り出してしまいますよね?)
下2行のvalueの所をkeyに、socをtmpに変えても何も出てこない…
reverse関数で何故こういう結果が出るのかも実はよくわかりません……
007353
2005/05/27(金) 18:11:34ID:???よくわかりませんがすげえー そんなやり方もあるのか!
0074nobodyさん
2005/05/27(金) 19:45:37ID:???それだとすごく >>68 と >>69 意味ないなw
どうしてもその 01, 02, 03, ってのは必要なの?
0, 1, 2, じゃだめなの?
どうしても 01, 02, 03 にしたいなら、こう書くのは?
my %hash = (
'01' => { tmp => $tmp1, soc => $soc1 },
'02' => { tmp => $tmp2, soc => $soc2 },
'03' => { tmp => $tmp3, soc => $soc3 },
);
my @key = keys %hash; # ex) 01, 02, 03
my $index = rand @key # ex) 1
my $sed = $key[$index]; # ex) 02
my $r = $hash{$sed}; # ex) { tmp => $tmp2, soc => $soc2 }
print $r->{tmp}; # $tmp2
print $r->{soc}; # $soc2
1行1行やるのはまわりくどいけどとりあえず。
007553
2005/05/27(金) 20:10:30ID:???ですよね…生かせてないなと思いつつ、どうしたらいいもんか思いつきませんでした…。
>0, 1, 2, じゃだめなの?
全然だめじゃないです。ファイルの名前つける時のクセで0つけてました
'01' => { tmp => $tmp1, soc => $soc1 },
あの、無知で恥ずかしいんですがこれってどうなってるんでしょうか?
01〜03がキーで{}の中身が値、{}の中で値が二種類ある、という状態でしょうか。
>71のも見て「?」ってなったんですが、ハッシュってキー1つに対して
値1つを格納しておく物だと思ってたんですが…1:1じゃない場合もあるという事 ??
まずは>73で教えてもらったので勉強してもちょっと頑張ってみます。
0076nobodyさん
2005/05/27(金) 20:49:21ID:C4o5Scf8>>17ですが、遅レスですいません。
データ項目に点数という項目があり、データが追加される度に点数の降順に並べ替えて書き込みを
行っています。こういった場合でもopen(ABC, ">") を使わない方法はありますでしょうか?
0077nobodyさん
2005/05/27(金) 20:53:42ID:???0078nobodyさん
2005/05/27(金) 20:56:48ID:C4o5Scf8a.cgiからb.cgiを呼び出すときに、引数を渡したいのですが、
以下のような渡し方では根本的に間違っているのでしょうか?
【a.cgi側】
print "<FORM METHOD=\"POST\" ACTION=\"b.cgi?x=1>\n";
【b.cgi側】
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
}
としているのですが、$value にはなにも入っていませんでした。
0079nobodyさん
2005/05/27(金) 21:53:12ID:???@array = (
{tmp=>'シュウマイ',soc=>100},
{tmp=>'餃子',soc=>200},
{tmp=>'ラーメン',soc=>500},
{tmp=>'チャーハン',soc=>400},
{tmp=>'半熟卵',soc=>50},
);
%hash = %{$array[rand@array]};
print "$hash{tmp}\t$hash{soc}\n";
0080nobodyさん
2005/05/27(金) 22:45:10ID:???こんなプログラム作ってみた。
%menu = (
'シュウマイ' => {soc=>100},
'餃子' => {soc=>200},
'ラーメン', => {soc=>500},
'チャーハン' => {soc=>400},
'半熟卵' => {soc=>50},
'チャーシュー' => {soc=>100},
'ライス' => {soc=>150},
'チャーシューメン' => ['ラーメン','チャーシュー','半熟卵'],
'ラーメンセット'=> ['ラーメン','ライス','半熟卵'],
'チャーシューメンセット' => ['チャーシューメン','ライス'],
'チャーハンセット' => ['ラーメン','チャーハン','半熟卵'],
'シュウマイセット' => ['ラーメンセット','シュウマイ'],
'餃子セット' => ['ラーメンセット','餃子'],
);
0081nobodyさん
2005/05/27(金) 22:45:25ID:???%hash = sub{menu=>$_[1],$_[0]->(@_)}->(sub{
my $code = shift;
my $key = shift;
if(ref $menu{$key} eq 'HASH'){
return(tmp=>$key,soc=>$menu{$key}{soc});
}elsif(ref $menu{$key} eq 'ARRAY'){
my @tmp;
my $soc;
foreach my $key(@{$menu{$key}}){
my %hash = $code->($code,$key);
push @tmp, $hash{tmp};
$soc += $hash{soc};
}
return(tmp=>join(":",@tmp),soc=>$soc);
}else{
return(tmp=>'',soc=>0);
}
},$menu[rand@menu]);
print "$hash{menu}\t[$hash{tmp}]\t$hash{soc}\n";
0083nobodyさん
2005/05/27(金) 23:31:46ID:???ヒント : action="b.cgi?x=1" の x=1 は $ENV{'QUERY_STRING'} に記録される。
>>75
0, 1, 2 、どっちでもいいなら >>71 および >>79 の方法にしとくのが一番いいかと。
まあ、>>79 はわざわざ %hash にしなくても、別に無名ハッシュのままでいいじゃん、とは思うけどな。
%hash = %{$array[rand@array]};
print "$hash{tmp}\t$hash{soc}\n";
↓
$hash = $array[ rand @array ];
print "$hash->{tmp} \t $hash->{soc} \n";
矢印演算子、覚えればいろいろベンリだぞ。
>>80-81 は・・・まあ好みで
0084nobodyさん
2005/05/27(金) 23:41:49ID:???何か違くね?
0085nobodyさん
2005/05/27(金) 23:51:07ID:???0086nobodyさん
2005/05/28(土) 06:51:40ID:???>>83の一文だと、矢印演算子が万能みたいだって言いたいんじゃね?
そもそも>>75はリファレンスを知らなさそうだし
リファレンスをデリファレンスするのに
矢印演算子が使えるよってのが適切ではないかと
0087nobodyさん
2005/05/28(土) 11:01:56ID:???矢印演算子を全く使わなくてもデリファレンスやメソッドコールはできるからな。
0088nobodyさん
2005/05/28(土) 11:19:45ID:???ああ、そうだね。 リファレンス。
それはわかるけど、でも >>83 のは >>79 に対して言ったんだけどなw
> %hash = %{$array[rand@array]};。
せっかくリファレンス使ってるのに、わざわざそんなくどい書きかたしなくても、って。
矢印知ってたら楽に書けるのになーと。
まあ誤解生ましたようで正直スマンかった。
0089nobodyさん
2005/05/28(土) 11:49:47ID:???009075
2005/05/28(土) 12:47:52ID:???>75の疑問がすんなり解決しました… 多次元配列って訳がわからなくて今まで無視してました
何か色々とお世話になってしまって、すごく助かりました
いただいたレスのスクリプトや内容を把握しきれてない部分が多いので、
名無しに戻ってまた勉強してきます。目が回りそうです。
もしまた詰まったら助けたって下さい〜このスレの人皆やさしい!幸あれ!ほんとありがとう!
0092nobodyさん
2005/05/28(土) 19:21:59ID:/z95VPw7>> test.cgi
#!/usr/bin/perl
#cgiはEUCで記述
require './jcode.pl';
print <<'END_OF_HEADER';
Content-type: text/html; charset=EUC-JP
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=euc-jp"></HEAD><BODY>
END_OF_HEADER
$query = $ENV{'QUERY_STRING'}; #クエリ文字列を得る
print &jcode'getcode(\$query); #入力されたクエリの文字コード
&jcode'convert(*query, 'euc'); #EUCに変換
print ' to ', &jcode'getcode(\$query), '<BR>'; #変換されたことを確認
print '<A HREF="test.cgi?', $query, '">', $query, '</A>'; # 文字化け発生部分
print <<'END_OF_FOOTER';
</BODY></HTML>
END_OF_FOOTER
<<
3: 半角文字及び、一部の全角文字(あいうえお、アイウエオ 等)では成功。しかし、一部の全角文字(まみむめも、マミムメモ 等)で、文字化けを起こします。
マルチバイト文字の2バイト目が悪さをすると思ってEUCにしたんですが、このコードでは処理が不完全なようです。問題部分の指摘をどうぞよろしくお願いいたします。
0093nobodyさん
2005/05/28(土) 20:47:58ID:???0094nobodyさん
2005/05/28(土) 20:58:22ID:???0095nobodyさん
2005/05/28(土) 21:01:04ID:???$query =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
とかしてないけど平気なのか?
0096nobodyさん
2005/05/28(土) 21:02:05ID:???0097926
2005/05/28(土) 21:08:01ID:???URLデコードは考えてません・・・。
009892
2005/05/28(土) 21:13:29ID:???test.cgi?%83%7d%83%7e%83%80%83%81%83%82
(マミムメモ)でやってみましたが、結果同様でした。
ちょっと舌足らずでした。最初に上記の様にアクセスした時はうまくいくのですが、
それで出てきたリンクを使って再帰的にアクセスした時に文字化けを起こします。
0100nobodyさん
2005/05/28(土) 22:59:52ID:z135H4rkif( scalar @BUF==5) { … }
この二つの条件式の書き方で、下の方が良いとか上の方が良いと言うことはありますか?
0101nobodyさん
2005/05/29(日) 00:02:47ID:???0103nobodyさん
2005/05/29(日) 14:34:29ID:I/a3Ab/R名前、点数、日付
A 80 20050529
B 100 20050523
C 70 20050525
D 80 20050524
というようなデータを点数の降順に並び替える場合はどうすれば良いのですか?
リストにセットしてsortを使っても、点数での並び替えは出来ないですよね?
一度ハッシュというものに点数をkeyとしてセットし、keyで並び替えたりする
のですか??でも同じ点数があった場合はまずいですよね?
なんかアホな質問ですいません。標準的な並べ替え方法を教えて下さい。
0104nobodyさん
2005/05/29(日) 14:38:05ID:I/a3Ab/R記述し忘れましたが、同点の場合は、できれば日付の降順にしたいです。
0105nobodyさん
2005/05/29(日) 15:17:33ID:???my @array = (
# 名前、点数、日付
['A',80, 20050529],
['B',100, 20050523],
['C',70, 20050525],
['D',80, 20050524],
);
my @sorted_array =
sort { $b->[2] <=> $a->[2] } # 日付で
sort { $b->[1] <=> $a->[1] } # 点数で
@array;
0106nobodyさん
2005/05/29(日) 16:30:09ID:???my @array = (
# 名前、点数、日付
['A',80, 20050529],
['B',100, 20050523],
['C',70, 20050525],
['D',80, 20050524],
['E',70, 20050526],
['F',80, 20050526],
['G',50, 20050526],
);
my @sorted_array = sort {
$b->[1] <=> $a->[1] || # 点数で
$b->[2] <=> $a->[2] # 日付で
}@array;
0107nobodyさん
2005/05/29(日) 16:37:41ID:???my @array = (
# 名前、点数、日付
{name=>'A',point=>80,date=>'2005/05/29'},
{name=>'B',point=>100,date=>'2005/05/23'},
{name=>'C',point=>70,date=>'2005/05/25'},
{name=>'D',point=>80,date=>'2005/05/24'},
{name=>'E',point=>70,date=>'2005/05/26'},
{name=>'F',point=>80,date=>'2005/05/26'},
{name=>'G',point=>50,date=>'2005/05/26'},
);
my @sorted_array = sort {
$b->{point} <=> $a->{point} || # 点数で
$b->{date} cmp $a->{date} # 日付で
} @array;
print map{"$_->{name}\t$_->{point}\t$_->{date}\n"}@sorted_array;
0108nobodyさん
2005/05/29(日) 16:44:36ID:???my %hash = (
# 名前、点数、日付
'A' => {point=>80,date=>'2005/05/29'},
'B' => {point=>100,date=>'2005/05/23'},
'C' => {point=>70,date=>'2005/05/25'},
'D' => {point=>80,date=>'2005/05/24'},
'E' => {point=>70,date=>'2005/05/26'},
'F' => {point=>80,date=>'2005/05/26'},
'G' => {point=>50,date=>'2005/05/26'},
);
my @sorted_keys = sort {
$hash{$b}{point} <=> $hash{$a}{point} || # 点数で
$hash{$b}{date} cmp $hash{$a}{date} # 日付で
} keys %hash;
print map{"$_\t$hash{$_}{point}\t$hash{$_}{date}\n"}@sorted_keys;
0109nobodyさん
2005/05/29(日) 17:04:57ID:???my @array = (
# 名前、点数、日付
[qw( A 80 20050529 )],
[qw( B 100 20050523 )],
[qw( C 70 20050525 )],
[qw( D 80 20050524 )],
);
my %hash = map{
$_->[0] => {
point => $_->[1],
date => $_->[2],
}
} @array;
my @sorted_keys = sort {
$hash{$b}{point} <=> $hash{$a}{point} || # 点数で
$hash{$b}{date} <=> $hash{$a}{date} # 日付で
} keys %hash;
print map{"$_\t$hash{$_}{point}\t$hash{$_}{date}\n"}@sorted_keys;
0110nobodyさん
2005/05/29(日) 17:26:07ID:???print map{
"$_->[0]\t$_->[1]\t$_->[2]\n"
} sort {
$b->[1] <=> $a->[1] ||
$b->[2] <=> $a->[2]
} map {
[
grep {
!/^\s*$/
} split /\s+/
]
}grep{
!/^\s*$/
} split /\n/, q(
A 80 20050529
B 100 20050523
C 70 20050525
D 80 20050524
);
0111nobodyさん
2005/05/29(日) 17:28:44ID:w/eeChjMopen(FH,"subject.txt");
@list=<FH>;
close(FH);
と同等のことを、http://news19.2ch.net/newsplus/subject.txtからとってきて
やりたいんですが、どげんすればいいんでしょうか?
XP上でhttpdとActivePerlでテストしてる段階で行き詰ってます。
0112nobodyさん
2005/05/29(日) 17:30:16ID:w/eeChjMそっくりそのまま落としてきて、subject.txtとして保存するんでもいいす。
むしろそれがしたいっす。
おながいします。
0113nobodyさん
2005/05/29(日) 17:32:22ID:???0114nobodyさん
2005/05/29(日) 17:44:34ID:???use LWP::Simple;
open(FH,">subject.txt");
print FH get 'http://news19.2ch.net/newsplus/subject.txt';
close(FH);
0115nobodyさん
2005/05/29(日) 17:51:07ID:???use LWP;
open(FH,">subject.txt");
binmode FH;
print FH LWP::UserAgent->new()->request(
HTTP::Request->new(
GET => 'http://news19.2ch.net/newsplus/subject.txt'
)
)->content();
close(FH);
0116nobodyさん
2005/05/29(日) 18:08:16ID:???use LWP;
open(FH,">subject.txt");
binmode FH;
print LWP::UserAgent->new(
agent => 'HogeHoge-Agent'
)->request(
HTTP::Request->new(
GET => 'http://news19.2ch.net/newsplus/subject.txt',
HTTP::Headers->new(
Referer => 'http://hogehoge/'
)
)
)->content();
close(FH);
0117nobodyさん
2005/05/29(日) 18:35:04ID:EsZHM8T2ほれ、俺の力作
GET http://news19.2ch.net/newsplus/subject.txt > subject.txt
0118nobodyさん
2005/05/29(日) 18:43:53ID:???>>116はファイルに保存できないねすまん。>>115の真似はせず一つづつ展開してみた。
use LWP;
my $url = 'http://news19.2ch.net/newsplus/subject.txt'; #取得したいコンテンツのURLを指定
my $user_agent = 'HogeHoge-Agent'; #ユーザーエージェント名を指定
my $referer_url = 'http://hogehoge/'; #参照元を指定
my $save_file = 'subject.txt'; #保存先のファイル名
my $ua = LWP::UserAgent->new(agent => $user_agent); #エージェントオブジェクトを作成
my $header = HTTP::Headers->new(Referer => $referer_url); #HTTPヘッダーオブジェクトを作成
my $request = HTTP::Request->new(GET => $url, $header); #HTTPリクエストオブジェクトを作成
my $respons = $ua->request($request); #サーバに接続してデータを取得
my $content = $respons->content(); #取得したコンテンツ内容を変数にコピー
open(FH,">$save_file"); #保存先ファイルを書込みモードでオープン
binmode FH; #保存形式をバイナリ形式に指定
print FH $content; #コンテンツ内容をファイルに保存
close(FH); #保存先ファイルを閉じる
0119nobodyさん
2005/05/29(日) 19:05:27ID:???use LWP;
open(FH,">subject.txt");
binmode FH;
LWP::UserAgent->new(
agent => 'areyakoreya'
)->request(
HTTP::Request->new(
GET => 'http://news19.2ch.net/newsplus/subject.txt',
HTTP::Headers->new(
Referer => 'http://untara.kantara.com/tekitou.html'
Cookie => 'are=nani',
)
),
sub{ print FH $_[0] },
1024*1024
);
close(FH);
0120nobodyさん
2005/05/29(日) 20:41:42ID:QH9/XuV40121nobodyさん
2005/05/29(日) 22:00:45ID:I/a3Ab/R@wk_list[0] と$value の共に数値、文字が混在している場合、
if( @wk_list[0] eq $value || @wk_list[0] == $value ){
と記述すると、数値同士の場合はうまくいきますが、文字の場合違う
データと一致してしまいます。数値、文字が混在の場合の比較演算は
どうすれば良いですか?
0122nobodyさん
2005/05/29(日) 22:23:47ID:QH9/XuV4とりあえず、localhostからhttp://localhost/subject.txtを呼び出して、コピーをローカルに作ることに成功しました♪
ありがとうございました。
0123nobodyさん
2005/05/29(日) 22:28:02ID:???Scalar::Utilのlooks_like_numberで数値かどうかは調べられるから、
両方が数値なら==、どっちかが数値でなけりゃeqでいいんでねーの?
0124nobodyさん
2005/05/30(月) 02:00:43ID:sacYxvRrできましたー
んが!
鯖がそのcgiに広告つけやがる。javascriptはきだすcgiなんで、んなことされたら
台無しなんですが…というわけで、鯖探し中。とにかく、
解決したっぽいです、ありがとー
0125nobodyさん
2005/05/30(月) 04:08:17ID:???0126nobodyさん
2005/05/30(月) 04:30:03ID:???>>124 print する Content-type を JS用に変えたら広告着かないサバも結構あるよ
0128nobodyさん
2005/05/30(月) 16:13:42ID:efT5hV/s0129nobodyさん
2005/05/30(月) 16:17:17ID:???0130nobodyさん
2005/05/30(月) 16:38:57ID:???乙。とだけ言っておこう
ってか
んなわけないやろw
普通そういう考えに至らない。自演常習者ならではの発想。
0132nobodyさん
2005/05/30(月) 19:01:53ID:2nqscNNylooks_like_number ってライブラリか何かですか?普通に使える関数でしょうか?
できれば使い方を教えてもらえないでしょうか?
0133nobodyさん
2005/05/30(月) 19:04:21ID:???「Scalar::Utilの」って言ってくれてるんだから、まずは自分で調べてみましょう。
perldoc Scalar::Util
0134106,107,108
2005/05/30(月) 19:34:37ID:???0135nobodyさん
2005/05/30(月) 19:37:51ID:2nqscNNy私の素人用の本には載っていなくて、検索でなんとか
【@bool = DBI::looks_like_number(@array);リストの各要素について、数値に見え
ばTRUE、そうでなければFALSEを返します。未定義、あるいは空文字であれば、undef
もしくは空文字を返します。】
ってのは見つけたのですが、そもそもScalar::Utilってのがさっぱり分かりません。
素人考えで昨日から if( DBI::looks_like_number($value) && @wk_list[0] eq $value ){
とか色々やってるんですが、もう疲れました。先生、そろそろ答えを。。
0136nobodyさん
2005/05/30(月) 19:44:32ID:???0137nobodyさん
2005/05/30(月) 19:45:46ID:Xh5clFyG0138nobodyさん
2005/05/30(月) 20:29:17ID:???0139nobodyさん
2005/05/30(月) 20:42:20ID:2nqscNNy比較対象データが、数値・文字混在で1000件ほどあって、比較元が
数値の場合は良いのですが、文字の場合、先に違うデータ(数値?)と
一致してしまうんです。
0140nobodyさん
2005/05/30(月) 21:11:58ID:???@bool = DBI::looks_like_number(@array);
なら
if (DBI::looks_like_number($value))
は必ず真にならないか?
wantarray でちゃんと 0 か 1 で返してくれてるのかな。
あと
if( DBI::looks_like_number($value) && @wk_list[0] eq $value ){
の @wk_list[0] eq $value の部分
は、「数字の場合」、なんだから
$wk_list[0] == $value になるのでわ。
同じかも知らんが一応。
つーか数字に見えるかどうかくらい、そのモジュール使わなくても自作でできると思うがw
0141nobodyさん
2005/05/30(月) 21:19:22ID:???君はまずモジュールというものを知るべきだ。
その後、CPAN を知ることにより、より幸せになれるであろう。
ttp://search.cpan.org/search?query=Scalar%3A%3AUtils&mode=all
ttp://search.cpan.org/~gbarr/Scalar-List-Util-1.15/lib/Scalar/Util.pm
で、Perl が使える環境で perldoc Scalar::Util って実行したら下と同じドキュメントが見られるはず。
ちなみに、@wk_list[0] だとスライスなので、$wk_list[0] の間違いだと思う。
>123 に従って書いてみるとこんな感じ。
use Scalar::Util qw(looks_like_number);
if(looks_like_number($wk_list[0]) && looks_like_number($value) ? $wk_list[0] == $value ; $wk_list[0] eq $value) {}
「数字のように見える」だから君の求めている結果と違う可能性はあるけどね。
0142nobodyさん
2005/05/30(月) 21:27:57ID:???0143nobodyさん
2005/05/30(月) 22:04:45ID:???looks like number = 数値のように見える
'123'と123を見分けるにはPerlレベルでは無理だし、見分けても意味ない。
0144nobodyさん
2005/05/30(月) 22:05:43ID:???0145nobodyさん
2005/05/30(月) 22:08:01ID:???ttp://search.cpan.org/~gaas/Perl-API-0.01/
これでperlapiの殆どの関数を利用できるようになる。
0146nobodyさん
2005/05/31(火) 06:36:25ID:???JST とか GMT とか EST とかそういうの。
0147nobodyさん
2005/05/31(火) 08:23:28ID:???0148nobodyさん
2005/05/31(火) 08:43:42ID:???windows perl じゃ取れなかったけどw
0149nobodyさん
2005/05/31(火) 08:45:01ID:???タイムゾーン関係の設定ファイルがあるがlibcのバージョンや
OSの作法によっていろいろ違いがあり、ポータブルなのを自前
で書くのはたいへんなのでDateTime::TimeZoneモジュールを使
うのが楽だろう。
use DateTime::TimeZone;
use DateTime;
my $tz = DateTime::TimeZone->new(name => 'local');
print $tz->name, "\n";
my $dt = DateTime->now;
print $tz->short_name_for_datetime($dt), "\n";
0150nobodyさん
2005/05/31(火) 08:48:39ID:???use POSIX;
print strftime "%Z", localtime;
0151nobodyさん
2005/05/31(火) 10:01:32ID:???>>149 も ありー。
でも必要なモジュール多いし揃えても何故か動かなかったw スマン。
0152nobodyさん
2005/05/31(火) 11:03:00ID:TIA+apXZ習作でperlでライブラリ及びdbを使わずに(なるべく多くの環境で動くことを目標に)
2ch風の掲示板を作ろうとしています。
んで、排他処理について質問…というか意見を伺いたいです。
板(blist.dat)、スレ(tlist.dat)、書き込み(スレid.dat)があります。
権限を持っていれば、板とスレも作成/論理削除が可能で、
同時に更新される可能性があります。
数は板・スレッド共に、00〜ffまで持てる物とします。
排他処理はロックファイルのリネーム方式で行おうと考えています。
なるべく軽快に動かしたい為、必要な時に必要な所だけロックをかけようと思っており、
そういう意図で必要になるロックファイルは
・lock_blist(板一覧用)
・lock_tlist(スレッド一覧用)
・lock_スレッドid(個別スレッド用)
となります。
これで組むと、ロックファイルが板の数*256個となり、最大で65536個になってしまうのですが、
これは設計としてアリ…というか必然なのでしょうか。それとも、ダメダメ(工夫の余地あり)なのでしょうか。
もちろんここに書き込む時点で多いなーという疑問を持っているのですが、
任意の一スレッドに書き込むたびに掲示板全体をロックするというのは、
それはそれで違うかなという気がしています。。
ご意見などありましたら、ご教授お願いします。
0153nobodyさん
2005/05/31(火) 11:12:03ID:???レス数とか
0154nobodyさん
2005/05/31(火) 11:17:57ID:???そうか。。。
その通りでした…orz
何ではまってたんだろう…ありがとうございますorz
0155nobodyさん
2005/05/31(火) 16:14:18ID:???簡単なデータベースを動作させたいと思っています。
1つのページに2×4個データを表示させたいんです。
もちろんそれ以上の情報があれば次のページへと移動です。
この「2つ目で改行・8個目でページ終了、さらに次のページ移動やページ数を計算」
というものを勉強したいのですが、どこかに良いサイトや参考となるCGIはありませんか?
0156nobodyさん
2005/05/31(火) 17:58:58ID:???どう表示するかはわけて考えた方がいいだろうな。
前者は自分で作ってもいいが、Data::Pageとかそれっぽいのが
CPANにあるから適当に探して気に入ったものがあれば使うのも
いいだろう。次のページあるかないかとか、このページにある
データはいくつかなんてのはもちろんよく考えれば簡単に計算
で求まるとはいえめんどうだからね。もし自分で書くとしても
だらだらとスクリプトのあちこちでその場で計算しないで、
うまく手続きをまとめておくことをお勧めする。
後者はあんまり知らないのだがどうせ作るんならn×mで一般的
に作っておくと気がかわったときにいいかもしれん。
あとhtmlベタでスクリプトに埋め込むよりはTemplate Toolkit
とか使った方がすっきりするよ。
0157nobodyさん
2005/05/31(火) 18:51:34ID:md7jEE3a0159nobodyさん
2005/05/31(火) 19:19:00ID:???statでは調べられないみたいですが、もしもございましたら
ご教授いただきたい次第です。
0160nobodyさん
2005/05/31(火) 19:20:33ID:???0163nobodyさん
2005/06/01(水) 05:35:45ID:???require Exporter;
require DynaLoader;
@ISA = qw(Exporter DynaLoader);
bootstrap なんか別のモジュール?;
みたいな流れがよくあるんですが、
これって何をやっているんでしょう?
0164nobodyさん
2005/06/01(水) 10:36:57ID:???0165nobodyさん
2005/06/01(水) 12:03:09ID:???んー、Exporterのほうはぐぐってみても日本語化されたマニュアルが見つからないのです。
動的にモジュールをロード?しているっぽいんですかね。
これを使えば、引数からモジュール名を得て、インポートするモジュールを選べたりするのでしょうか。
0166nobodyさん
2005/06/01(水) 12:26:27ID:???ぐぐり方が悪すぎるんじゃ...
Exporterとperlをキーワードにして日本語のページを検索すると
普通に出てきますが...
0167nobodyさん
2005/06/01(水) 21:46:59ID:???Exporterはモジュールのシンボル(通常はサブルーチン)を呼び出し元に輸出するためのモジュール。
DynaLoaderはCなどで書かれた外部サブルーチン(XS)をロードするモジュール。
詳しいことはぐぐるなりマニュアル読むなりせよ。
オブジェクト指向でPurePerlなモジュールを書く分にはどちらも無関係。
0168nobodyさん
2005/06/01(水) 23:13:36ID:4wa3Dv1bファイルを添付することは出来ませんか?
0169nobodyさん
2005/06/01(水) 23:38:04ID:???できる。でもsendmailそのまま使ってあとは自分で作るのはお勧めしない。
search.cpan.orgでmailとかMIMEとかキーワードに検索するといろいろでて
くるのでなるべく利用するのが吉かと。
0170nobodyさん
2005/06/02(木) 07:19:19ID:???その言い方から予想するとプラグマ以外の他のモジュール使わないで単独で動くモジュールってことかな。
0171nobodyさん
2005/06/02(木) 07:21:43ID:???0172nobodyさん
2005/06/02(木) 12:06:12ID:???PurePerlってのは他の言語で書いたライブラリに依存せず、Perlのみで書かれたコードのこと。
どんなモジュールを使っているかは関係ない。
標準ライブラリだと、CGI.pmはPurePerlで、POSIX.pmはPurePerlじゃない。
といってもそんな厳密なものではなく、例えばData::Dumperなんかはコンパイル済みライブラリがあれば
その(速い)ルーチン、無ければPurePerlルーチンを自動的に選択して使用する。
非PurePerlモジュールに依存したPurePerlモジュールをPurePerlというか否かも意見の分かれ目だな。
>>171
まあXSインターフェイスを使わなくてもDynaLoaderを使うことはあるわな。
ここでは単に「外部サブルーチン」という意味でXSとした。
0174nobodyさん
2005/06/02(木) 18:02:31ID:???foreach (1 .. 10) { $i++; } continue { $j++; }
print " ($i , $j) \n";
こういうコードを実行すると、結果が (10 , 10) ってなるんだけど、これはいいの?w
(10 , 9) ってなってほしかったんだけど・・・ orz
0175nobodyさん
2005/06/02(木) 19:32:12ID:???どこからどう考えても (10,10) なのだが・・・。
foreach節の最後に last until $i < 10; とでも付け加えれば
最後の continue は実行されないが。
0176nobodyさん
2005/06/02(木) 19:41:55ID:???ラクダ3版の「4.4.3 foreachループ」の最後のあたりに
はっきりこのように書いてある。
while文と同様に、foreach文もcontinueブロックを持つことが
できる。continueブロックは、ループが普通に実行された場合
でも、nextが実行された場合でも、ループの各繰り返しの最後
に必ず実行される。
0177nobodyさん
2005/06/02(木) 20:09:01ID:QYKowdcjprint $saitama;
}
すいません↑これって何をしてるんですか?
-eで$saitamaが存在しているのかどうかを調べているんでしょうか
0178nobodyさん
2005/06/02(木) 20:12:30ID:???正解。
0179nobodyさん
2005/06/02(木) 20:15:16ID:QYKowdcj0180nobodyさん
2005/06/02(木) 20:40:27ID:???$text =~ s/\A([^\n]*)\n//s;
$d{title} = $1;
こんなのが出てきたんですけど、$1は、「上の正規表現『s/\A([^\n]*)\n//s』で一番最初にマッチングしたもの」であってますか?
0182nobodyさん
2005/06/02(木) 21:38:25ID:U6HelXRG名前 住所 電話
A氏 東京 1111111111
B氏 大阪 2222222222
C氏 愛知 3333333333
D氏 広島 4444444444
上記のようなデータファイルがあって、B氏だけの内容を変更したい時、
ファイルを出力用 ">" で開いて再度1レコードずつ書き込めばできる
のですが、出力用で開くと一旦データが全て消えて危険性が高いので、
入出力両用 "+<" 等で開き、他のレコードは保持したまま、B氏のレ
コードだけを書き換えるようなことは出来るのでしょうか?
0183nobodyさん
2005/06/02(木) 21:45:15ID:???0184nobodyさん
2005/06/02(木) 21:55:58ID:???0185nobodyさん
2005/06/02(木) 22:00:22ID:U6HelXRG他にも項目があって固定長には出来ないのですが、固定長にすると
対象レコードのみ書き換えられるのでしょうか?
>>184
成功したかどうかはどう判断すれば良いでしょうか?
0187nobodyさん
2005/06/02(木) 22:22:01ID:???他にも方法はいくらもあるけど、上のもそうだがいちいち聞くな、自分で考えろと。
0188nobodyさん
2005/06/03(金) 06:02:35ID:???http://www.hoge.com/aaa/bbb/ccc.html へのアクセスが
http://www.hoge.com/index.cgi?aaa/bbb/ccc.html となるように書き換えをさせています。
RewriteRuleは→ ^(.*)$ index.cgi?$1 [L,QSA] こんな感じで。
で、http://www.hoge.com/aaa/bbb/ccc.html?ddd にHTMLフォームからPOSTで適当なクエリを送って、
そいつを取得したいのですが、
QUERY_STRING には aaa/bbb/ccc.html&ddd が入っているものの、
フォームからポストしたクエリが標準入力に来ていないっぽいのです。
フォームからポストするクエリの量を変えてやると CONTENT_LENGTH の値が変わるので、
全く送られていないわけではないみたいなのですが…
いったいどこに行ってしまったのか心当たりはありませんでしょうか?
0189188
2005/06/03(金) 07:13:27ID:???なんか全然別のつまらないところでミスっていただけでした……
板汚しすみません……
0190nobodyさん
2005/06/03(金) 09:54:19ID:lSpNwut+0191nobodyさん
2005/06/03(金) 10:01:33ID:???0192nobodyさん
2005/06/03(金) 10:02:31ID:???0193nobodyさん
2005/06/03(金) 16:31:13ID:p0YkzVQclocal $_ = shift;
-(tr/\x00-\x7f//)+2*length
}
↑これはどんなことをしてるんでしょうか
lengthwは
if((lengthw $x) < 50){} のような使い方をしているみたいですが
どなたか分かる方がおりましたら解説希望です。
0194nobodyさん
2005/06/03(金) 17:23:46ID:???なにがしたいのかはよくわからん。
0195nobodyさん
2005/06/03(金) 17:24:10ID:???0196nobodyさん
2005/06/03(金) 18:09:23ID:???$_がunicode文字列でbytesプラグマの影響範囲内でなければ
lengthはバイト数じゃなくて文字数だな。
もしそうならアスキーの範囲は1,それ以外は2で文字幅を
数えてるような気がする。
条件が示されてないのでなんともいえんが。
0197193
2005/06/03(金) 18:27:26ID:p0YkzVQcお答えありがとうございました!
というか
local $_ = shift;#←これがよく分かってないんです。
-(tr/\x00-\x7f//)+2*length #←これは_$が略されてるのは想像つくんですが。。
0198nobodyさん
2005/06/03(金) 18:45:47ID:???結局見てみないとわからんねw
>>197
local $_ = shift;
↓=
local $_ = shift @_;
OK?
0199193
2005/06/03(金) 18:52:05ID:p0YkzVQcわけ分かりませんでした。ありがとうございました!
ちなみにbytesプラグマの影響範囲内ではありません。
0200nobodyさん
2005/06/03(金) 18:56:41ID:???use Time::Local
とか意味分かんないし
0201nobodyさん
2005/06/03(金) 18:58:28ID:???0202nobodyさん
2005/06/03(金) 19:12:25ID:???0203nobodyさん
2005/06/03(金) 19:23:19ID:???それは単に君が勉強が足りてないだけのような気が。
0204nobodyさん
2005/06/03(金) 19:47:19ID:???↓=
BEGIN {
require 'Time::Local.pm';
import Time::Local;
}
アンダースタンンドゥッ!?
0205nobodyさん
2005/06/03(金) 19:59:28ID:???0206nobodyさん
2005/06/03(金) 20:25:00ID:???http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_require_VERSION
>>205
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlmod.html#Package_Constructors_and_Destruc
0207nobodyさん
2005/06/03(金) 21:08:38ID:???0208nobodyさん
2005/06/03(金) 21:17:01ID:???0209nobodyさん
2005/06/03(金) 21:21:50ID:???http://search.cpan.org/~drolsky/Time-Local-1.11/lib/Time/Local.pm
>>208
Perl に関してはググるより前に perldoc れ or CPAN れが必要な気がする。
0210nobodyさん
2005/06/03(金) 21:26:58ID:???0212nobodyさん
2005/06/03(金) 21:38:29ID:p0YkzVQcこんなのが出てきましたけど、私にはチンプンカンプンです。
これだけで申し訳ないのですが、↑が分かる人がいましたら、解説願います。
0213nobodyさん
2005/06/03(金) 21:44:52ID:???0217nobodyさん
2005/06/04(土) 22:52:44ID:???0218nobodyさん
2005/06/04(土) 23:48:24ID:???たとえば12345678を11.77にしたいです。
0219nobodyさん
2005/06/04(土) 23:55:29ID:???my $manko = 100;
print int($chinko / (1024 * 1024) * $manko) / $manko;
0220nobodyさん
2005/06/05(日) 00:02:38ID:???0221nobodyさん
2005/06/05(日) 00:43:39ID:???0222nobodyさん
2005/06/05(日) 04:55:26ID:???0223nobodyさん
2005/06/05(日) 13:21:23ID:???0224nobodyさん
2005/06/05(日) 15:28:16ID:???↓のような場合で、
for($i=0;$i<=10;$i++){
$po[$i] .= int(rand(6));
}
これはあくまで例なのですが、似たような場合などでも、
randで選ばれる数字が同じものが続けて入ってしまう事が良くあるのですが、
これをもっとばらけさせたいのですが、何か方法があるのでしょうか?
上手く説明できずにすみませんが何卒よろしくお願いします。
0225nobodyさん
2005/06/05(日) 16:27:58ID:???0〜5までの数字から完全にランダムに選んだ場合、
直前と同じ数字になる確率は1/6もあるわけで、
10回も続けてやれば一度でも同じになる確率は
8割以上だからまあ当たり前だろうな...
同じ数字が続くのがいやならひとつ前の数字を
保存して同じ数字にならないように細工すりゃ
いいんじゃねーの。
お手軽コース:
同じ数字の間はやり直す
少し考えたコース:
0〜4までの乱数を求めて、前の数字と等しいか
大きければ1を加える。
0226nobodyさん
2005/06/05(日) 16:42:19ID:???コード書いてみたがね。
同じ数字が並びそうなら振りなおすなも。
my @numbers;
my $last = $num = -1;
for(my $i = 0; $i <= 10; $i++){
$num = int(rand(6)) while($last == $num);
$numbers[$i] = $last = $num;
}
print @numbers;
# 11回振ってるようだが、いいんきゃーも?
0227nobodyさん
2005/06/05(日) 18:10:57ID:???下のテーブルをセレクトしたいだけなんですが、mysqlのコマンド上ではちゃんと表示される日本語がPerlで出力させるとクエスチョンマークで表示されてしまいます。
↓こういう風に表示させたい。
>2005-06-05 17:27:47<>0<>ニュースタイトル!<
>2005-06-05 17:27:48<>0<>news title!<
↓こういう風になってしまう。
>2005-06-05 17:27:47<>0<>?????????<
>2005-06-05 17:27:48<>0<>news title!<
どうやったら日本語を出力できるんでしょうか。どなたかご教授お願いします。m(__)m
◆ソース(perl v5.8.6)
$dbh = DBI->connect("DBI:mysql:$dbname", $dbuser, $dbpass, {PrintError => 0, RaiseError => 0, AutoCommit => 0});
$datasp = $dbh->selectall_arrayref(q{
SELECT * FROM NEWS
});
for($n = 0; $n < scalar(@$datasp); $n++){
printf(">%s<>%s<>%s<\n",$datasp->[$n][0], $datasp->[$n][1], $datasp->[$n][2]);
}
0228nobodyさん
2005/06/05(日) 18:11:25ID:???◆テーブル
| NEWS_DATE | NEWS_IMPORTANCE | NEWS_TITLE |
| 2005-06-05 17:27:47 | 0 | ニュースタイトル! |
| 2005-06-05 17:27:48 | 0 | news title! |
◆DBステータス
mysql Ver 14.7 Distrib 4.1.12a, for Win32 (ia32)
Connection id: 1
Current database: testdb
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 4.1.12a-nt
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: sjis
Db characterset: sjis
Client characterset: sjis
Conn. characterset: sjis
0229nobodyさん
NGNGmy @dice_seed = (1..6);
my @dice_rand;
for(reverse (0..$#dice)){
push @dice_rand, splice @dice_seed, rand $_, 1;
}
みたいな。。。
0230nobodyさん
2005/06/05(日) 19:24:15ID:???たぶんこれ。オレも以前はまった。
ttp://www.mysql.gr.jp/frame/modules/bwiki/?FAQ
の「mysql コマンドでは大丈夫なのに、PHP,perl,accessなどで文字が ? に化けるのは? 」
0231227
2005/06/05(日) 20:35:05ID:???ログイン直後に SET NAMES sjis を追加したらできました!
ありがとう!!!
もう、perlあきらめてphpで開発しようかと思ってたら
phpでも同じだったんですね・・・
◆ソース(変更後)
$dbh = DBI->connect("DBI:mysql:$dbname", $dbuser, $dbpass, {PrintError => 0, RaiseError => 0, AutoCommit => 0});
$dbh->do('SET NAMES sjis'); # ←追加
$datasp = $dbh->selectall_arrayref(q{
SELECT * FROM NEWS
});
for($n = 0; $n < scalar(@$datasp); $n++){
printf(">%s<>%s<>%s<\n",$datasp->[$n][0], $datasp->[$n][1], $datasp->[$n][2]);
}
1: HTMLを取得して例えば
<A href="http://www.**.co.jp/~sample/image/a.jpg">
<A href="image/a.jpg">
<A href=http://www.**.co.jp/~sample/image/a.jpg>
<A href=image/a.jpg>
とあるものをすべて
<A href="http://www.**.co.jp/~sample/image/a.jpg">
に統一したい。
2:
$url = $ENV{'QUERY_STRING'};
$url =~ s/$0//gi;
$surl = $url;
if($surl !~ /\/$/){$surl =~s/(.*)\/.*/$1\//i;}
use LWP::Simple;
$html = get $url;
&jcode'convert(*html,'sjis');
#携帯で見れるようにしたいのでテーブル等不要と思われるものを削除
#出来ればここも1行に統一できればうれしいです
$html =~ s/<(?:TABLE|TD|TR|TH|script|TBODY|font|B|U|I|center|form|dl|dt).*?>//gi;
$html =~ s/<\/(?:TABLE|TD|TR|TH|script|TBODY|font|B|U|I|center|form|dl|dt).*?>//gi;
3: 相対パスと絶対パスの相互の方法がまったく思い浮かばずにいます
これぐらいでよろしいのでしょうか。よろしくお願いいたします。
0233nobodyさん
2005/06/06(月) 01:24:14ID:???>これぐらいでよろしいのでしょうか。
もう少しやりたいことと何が問題なのかを整理して書いてくれ。
1と3って同じことだと思っていいのか?
とりあえず hoge/./ を取り除いたりまではしてない。
my $server = 'http://www.example.com'; # サーバのところまで
my $base = 'http://www.example.com/~sample/'; # 相対パス起点
sub absolute($)
{
my $str = shift;
$str =~ s/^"//;
$str =~ s/"$//;
if($str =~ m,^/,) {
return qq("$server$str");
} elsif($str =~ m,^http://,) {
return qq("$str");
} else {
return qq("$base$str");
}
}
$target =~ s,(<A[^>]*\s+href=)("[^"]*"|\S*)([^>]*>),$1.absolute($2).$3,eigm;
2: まとめればいいんだな?
$html =~ s/<\/?(?:TABLE|TD|TR|TH|script|TBODY|font|B|U|I|center|form|dl|dt).*?>//gi;
個人的には
$html =~ s,</?(?:TABLE|TD|TR|TH|script|TBODY|font|B|U|I|center|form|dl|dt)[^>]*>,,gi;
の方が好きだな。
0234nobodyさん
2005/06/06(月) 01:26:42ID:???$target =~ は $html =~ だと思ってくれ。
0235nobodyさん
2005/06/06(月) 01:31:08ID:???度々申し訳ない。>>1 のテンプレ?に合わせようとしてたんだな。
でもやっぱり何が問題なのか、どこがポイントなのかを整理して欲しいとは思う。
0236nobodyさん
2005/06/06(月) 14:15:56ID:nLjgLi0Tflockを使わずにflockと同じ動作する方法って、ありますか?
0237nobodyさん
2005/06/06(月) 14:29:00ID:???0238nobodyさん
2005/06/06(月) 15:25:52ID:???0239nobodyさん
2005/06/06(月) 15:44:24ID:???【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/
0240nobodyさん
2005/06/06(月) 23:17:43ID:???0241nobodyさん
2005/06/06(月) 23:52:50ID:7fi2eBpp多分超簡単なものを作ってます。
ファイルをオープン後
$buff=<DAT>;
@buff=<DAT>;
としました。
これは、データの1行目と全てのデータを表示させたかったからなのですが
どうやら上記のように書くと@buffには、$buffを除いたものしか入ってこないようです。
簡単に、データの1行目、1行目を含む全データを格納したいのですが
どうしたらいいでしょうか。
0242nobodyさん
2005/06/06(月) 23:58:16ID:???$buff=$buff[0];
できました、ありがとうございます
整理できていなくてすいませんでした
いまさらですが整理というか用途を書きますと
携帯からこのcgiにアクセスし、
****.cgi?http://www.abc.*.jp/
と言う形でみたいページのアドレスを指定します
指定されたアドレスをcgiで取得し、テーブルなどの携帯では不要なタグを切り捨てます
次に、アンカー?<A〜タグにあるhrefにこのcgiをかえすように、
href=****.cgi?リンク先
と言うようにかえたいので、hrefのぶぶは絶対パスに統一する必要があるのですがこの方法が分からずにいました
あともう一つ間違えてたら分かればでいいので教えていただきたいのですが、
>>232のソース+>>233パスを統一するソースのみのソースで何故かbodyタグまで消されるのですが、理由分かりますでしょうか
0245nobodyさん
2005/06/07(火) 09:57:36ID:???Blockquote とか UL とかも消されてるはず。
もうちょっと正規表現考えた方が良かったね。 プ
たしかに…
気づきませんでした
ありがとうございます
0247nobodyさん
2005/06/07(火) 12:03:54ID:???↓これだけの文章だと、"newdir"というフォルダがなければ、作るまで永遠に繰り返すってことになりますかね?
while (!mkdir("newdir", 0755)) {
}
0248nobodyさん
2005/06/07(火) 12:32:22ID:???0249nobodyさん
2005/06/07(火) 14:54:20ID:???while (!mkdir("newdir", 0755)) {
rmdir("newdir");
}
0252nobodyさん
2005/06/07(火) 17:02:56ID:???なので、もし既にnewdirフォルダが存在していた場合、無限ループになるわけで。
0254nobodyさん
2005/06/07(火) 17:46:05ID:???0255 ◆wSkAcTBWJw
2005/06/07(火) 17:50:20ID:Jzx4SwvB\%hogehoge と記述した場合、どのような意味を成すのでしょうか?
具体的には↓のような文章なのですが、
return \%hogehoge if (rename($hogehoge{path}, $hogehoge{cureer}));
ifの中が真(renameに成功)の場合は\%hogehogeの中に何かを入れているのでしょうけども、
よく分かりません。どなたか教えてください。
0256nobodyさん
2005/06/07(火) 18:06:11ID:???0257nobodyさん
2005/06/07(火) 18:22:21ID:???「perl リファレンス」でぐぐれって事な
0258nobodyさん
2005/06/07(火) 18:39:51ID:???hogehoge{path}を戻り値がリファレンスとして返される。
0259nobodyさん
2005/06/07(火) 18:46:16ID:???renameに成功した場合は
$hogehoge{cureer}を戻り値とし、リファレンスとして返される。
0260nobodyさん
2005/06/07(火) 18:56:32ID:???> \%hogehogeの中に何かを入れているのでしょうけども、
何も入れてないでしょ。
renameに成功したら、return \%hogehoge を実行してるだけ
0261nobodyさん
2005/06/07(火) 19:59:03ID:???つーかそれからの話などそれで消えてなくなる。
0264nobodyさん
2005/06/07(火) 20:33:44ID:B1nXEBrs$xx = <FILE>;
$xx++;
print FILE $offCount;
close(FILE);
ファイルから値とって、1増やして上書きしたいんですけど、上の通りにしてもできないんです。
$fileの初期値を1にして、上の通り実行すると、$fileが空っぽになる
open(FILE, "+<$file");
$xx = <FILE>;
$xx++;
print FILE $offCount;
close(FILE);
こんな感じで追加書き込みモードにすると、うまく行くので、変数にはちゃんと値が入ってるみたいです。
ご指摘お願いします。
0265nobodyさん
2005/06/07(火) 20:44:04ID:???$offCount ってなんだよ。
+> はまず最初にファイルを真っ白にするんだが。
0266nobodyさん
2005/06/07(火) 21:48:12ID:???@hoge という配列に適当な文字列を複数pushして、
<textarea>@hoge</textarea>とすると、テキストエリア内で各要素の間に半角スペースが入ってしまいます。
簡単にこの半角スペースを消す方法や、別の楽な書き方はないでしょうか?
foreachで書いていくのが妥当でしょうか?
0267nobodyさん
2005/06/07(火) 22:01:43ID:B1nXEBrsすいません、$offCount は $xx と脳内変換しといてください・・・
追加書き込みモードじゃなくて、上書きしたいんですができます?
0271nobodyさん
2005/06/07(火) 22:48:25ID:???>>267
seek truncate tell とかで検索しとけ。
0273nobodyさん
2005/06/08(水) 02:11:43ID:3Bw2MIjpごめんわからへん
0274nobodyさん
2005/06/08(水) 07:35:48ID:???俺も若い頃 print FILE "@log"; とか書いてスペース入るのが困って foreach (@log) { print FILE $_; } とか書いてた甘酸っぱい記憶を思い出したよ・・・ orz
0275nobodyさん
2005/06/08(水) 09:55:34ID:???↑を見てsysopenを使おうとしたんですが、Fcntlを使わなければmodeの指定は出来ないんでしょうか?
固定の数値なら直値で打っちゃうんだけど、環境依存するものですか?
0276nobodyさん
2005/06/08(水) 10:04:49ID:???建前上は環境依存するものなのでFcntl使っとけ。
いちいちいくつになってるか調べたりこの環境では
OKか気にするのは無駄。
0278nobodyさん
2005/06/08(水) 18:09:13ID:iGltiuvK配列の要素をすべてではなく一部飛び飛びで
取り出したいのです。
$count = @DATA_N;
foreach (5..$count) { 処理 }
とすれば5番めの項目から最後までと言うことらしいのですが
では1番目と5番目以降というように
いくつか項目を飛ばして取り出すには
どのようにすればいいのでしょうか?
よろしくお願いいたします。
0279nobodyさん
2005/06/08(水) 18:33:55ID:???つーか配列の "5番目の項目" の添え字は [4] なのは理解してるよね? 一応釘
0280nobodyさん
2005/06/08(水) 18:47:04ID:iGltiuvK>添え字は [4] なのは理解してるよね? 一応釘
はい[0]から始まると言うことは理解しております:汗
そうですね「,」で区切ればいいのですね。
「..」は「から〜まで」と言う風に理解すればいいのですね!
勉強になりました。
ありがとうございました。
0281nobodyさん
2005/06/09(木) 01:19:34ID:???CGI.pm だと使ってるようだから?、後始末さえしっかりやればいいのかのう。
0282nobodyさん
2005/06/09(木) 11:30:41ID:???@log = <LFILE>;
($sec,$min,$hour) = localtime(time);
$aftertime = "$hour:$min:$sec unixtime:" . time ;
$data = "$aftertime \n";
unshift(@log,($data));
while($log){
print LFILE $_;
}
close(LFILE);
質問です
$logfileに時間を一番上に追加してゆく処理を行いたいと思い、
↑のようにコーディングしたのですが、全く更新されません。
なぜですか?
0283nobodyさん
2005/06/09(木) 11:51:59ID:???問題点1:
while($log) → foreach (@log)
問題点2:
LFILEの中身を呼んだ後seekしてないのでこのままでは続きから書かれるだろう
問題点3:
そもそもファイルの頭に追加するという設計を見直した方がいい。
末尾への追加は簡単だが、頭へ追加しようとすると全部書き直しになるので
普通はそういうことははじめからしなくていいようにしとくものだ。
0284nobodyさん
2005/06/09(木) 12:12:41ID:???0285nobodyさん
2005/06/09(木) 12:27:48ID:???頭に追加したほうが、見やすいので、そういう設計にしました。
ありがとうございました!
0286nobodyさん
2005/06/09(木) 13:53:02ID:r/eHxoG7送信できなくてこまってます・・
www.hoge.co.jp サーバで
メール送信CGI mail.cgi があって
ここからメールを送信させているんですが
送信先メールアドレスが
[email protected] とか [email protected] のような
hoge.co.jp サーバ以外への送信ならうまくいくんですが
[email protected] とか [email protected] への
送信だとうまく送信されない(届かない)ようなんです。
mail.cgi自体は同じものを使用していて
@hoge.co.jp 以外のメールアドレスへの送信はうまくいっているので
sendmail の問題?なのかもしれませんが
何か調べる必要がある点などありましたらご教授お願いします。
0287286
2005/06/09(木) 13:55:21ID:r/eHxoG7メールが届かないメールアドレス([email protected] とか [email protected] )自体は
他のメーラやWEBメールから送信されたメールを
正常に受信できてます。
あくまで www.hoge.co.jp 上の mail.cgi から
[email protected] へメール送信しても届かない・・・という感じです。
0288nobodyさん
2005/06/09(木) 13:55:42ID:???0289286
2005/06/09(木) 14:19:27ID:r/eHxoG7www.hoge.co.jp 上に mail.cgi を設置しています。
mail.cgi の内容は次のような感じです。
mail.cgi
----------------------------------
$head = "From: [email protected]\n";
$head .= "To: [email protected]\n";
$head .= "Subject: TEST MAIL\n";
$head .= "Date: $Date\n";
$head .= "Content-type: text/plain\n";
$head .= "Mime-Version: 1.0\n\n";
$body = "テスト";
open(MAILER, "| /usr/sbin/sendmail -t") || exit(0);
print MAILER $head;
print MAILER $body;
close(MAILER);
----------------------------------
0290286
2005/06/09(木) 14:20:03ID:r/eHxoG7$head .= "To: [email protected]\n";
の送信先部分が [email protected] だと
メールを送信してもメーラ側で受信できず(届いていない)
$head .= "To: [email protected]\n";
のように [email protected] 以外へメールを送信した場合は
正常にメーラ側でメールを受信できる状況です。
なので、コードがおかしい分けでなく
www.hoge.co.jp 上の sendmail か何かの設定がおかしいのかも
しれませんが・・・。なんなんでしょう・・。
ちなみに [email protected] のメールアドレス自体は
他のメーラやWEBメールから送信したメールを
正常に受信できています。
0291nobodyさん
2005/06/09(木) 14:54:19ID:???シングルクオートで囲むか "\@hoge" とエスケープしてみ。
ていうか、 abc.co.jp とか test.co.jp とか実在するドメインを例に使うな。
予約ドメインの example.co.jp とか example.ne.jp とか example.jp とかを使え。
0292nobodyさん
2005/06/09(木) 17:33:54ID:???モジュールを使わないという前提で、参考になるサイトはありませんでしょうか。
ぐぐり疲れました・・・orz
0293nobodyさん
2005/06/09(木) 18:27:43ID:???http://www.studyinghttp.net/body#Form-data
理解できなきゃ素直に CGI.pm 使うなり、
CGI.pm バラして必要なトコだけパクりなされ。
0294nobodyさん
2005/06/10(金) 00:38:57ID:gI851X9W0295nobodyさん
2005/06/10(金) 00:52:30ID:gI851X9W質問なんですけど、shiftやpopは先頭か末尾ですよね。
そういうのじゃなくて配列の任意のデータを削除したいんですが、どうやるんでしょう?
0296nobodyさん
2005/06/10(金) 01:22:16ID:???0299nobodyさん
2005/06/10(金) 11:01:32ID:n3jB9OmG# 処理
my %in;
&decode;
&html if (!$in{send});
$inや%inは何か特別なのでしょうか?
0300nobodyさん
2005/06/10(金) 11:07:59ID:???0302nobodyさん
2005/06/10(金) 12:00:39ID:???<input type="radio" name="yes" value="1">はい
<input type="radio" name="yes" value="2">いいえ
を
<input type="radio" name="yes" value="1" id="yes1"><label for="yes1">はい</label>
<input type="radio" name="yes" value="2" id="yes2"><label for="yes2">はい</label>
にしたい。
メソッド改造は汎用性が無いので
正規表現とかでなんとかならないでしょうか?
0303nobodyさん
2005/06/10(金) 12:01:26ID:???cgi-lib.pl使った時のデフォじゃね?
ttp://amateras.sourceforge.jp/cgi-bin/fswiki/wiki.cgi/free?page=cgi-lib.pl
0304nobodyさん
2005/06/10(金) 12:04:13ID:???0305299
2005/06/10(金) 12:06:16ID:n3jB9OmGページを読みましたが$inはなかったです。
0306299
2005/06/10(金) 12:12:11ID:n3jB9OmGありがとうございます。
早速cgi-lib.plをみてみます。
0307nobodyさん
2005/06/10(金) 12:26:18ID:???0308302
2005/06/10(金) 12:29:51ID:???私もそう思うけど
<input type="radio" name="yes" value="1" id="yes1"><label for="yes1">はい</label>
なら、とりあえず
%labels =('1','<label for="yes1">はい</label>');
$co->radio_group(
-name=>'yes',
-values=>['1','2'],
-labels=>\%labels);
で、いけるんで・・・。
これもむちゃくちゃ使いにくいけど。(・・`)
0309nobodyさん
2005/06/11(土) 01:51:46ID:KxmWI2vs配列の中から文字列を検索して、
その文字列が含まれている配列の添え字を取得することはできますか?
例えば、
$data[0]="おじいちゃん<>76歳";
$data[1]="おばあちゃん<>72歳";
$data[2]="おとうさん<>56歳";
$data[3]="おかあさん<>52歳";
みたいな配列@dataがあって、そのなかから"72歳"という文字が
含まれている配列の添え字(この場合だと1)を取得したいのですがどうすればよいでしょうか?
0310nobodyさん
2005/06/11(土) 02:23:38ID:???my @data;
$data[0]="おじいちゃん<>76歳";
$data[1]="おばあちゃん<>72歳";
$data[2]="おとうさん<>56歳";
$data[3]="おかあさん<>52歳";
my $str = "72歳";
for ( 0..$#data ) {
if ( $data[$_] =~ /$str/ ) { print; }
}
__END__
0311nobodyさん
2005/06/11(土) 02:46:40ID:???$data[1]="おばあちゃん<>72歳";
$data[2]="おとうさん<>56歳";
$data[3]="おかあさん<>52歳";
my$str = "72歳";
for(0..$#data){
print $_ if [split(/<>/,$data[$_])]->[1] =~ /$str/;
}
0312nobodyさん
2005/06/11(土) 03:03:41ID:???0313nobodyさん
2005/06/11(土) 03:03:43ID:???0314313
2005/06/11(土) 03:05:12ID:???0315312
2005/06/11(土) 03:06:40ID:???オマイので気付いた('A`)
print grep { (split /<>/, $data[$_])[1] =~ m/$str/ } 0 ..$#data;
0316nobodyさん
2005/06/11(土) 09:07:57ID:???変数名を変数で扱うことができますでしょうか?
分かりにくいので例を示しますと、
$TEST = "test";
$OUTPUT = "[[[TEST]]]";
$OUTPUT =~ s/\[\[\[(.*)\]\]\]/$$1/g;
print "$OUTPUT";
↑これで、”test”という出力がほしいのですが…
3行目のコーディングはWindows版のActiveperlでは動くのですがLinux版ではエラーになってしまいます。(もともと、あんなコードで動くことが予想外なんですが。)
よろしくお願いします。
0318nobodyさん
2005/06/11(土) 10:58:39ID:???それであってるはずだがsymbolic referenceを使うことに
なるのでstrict refsな時は問題がでるかもしれん。
というかエラーになるというのならエラーメッセージぐらい
示せよ...
0319nobodyさん
2005/06/11(土) 12:06:49ID:???そのファイルをほしいと言う人がいるので、その人にファイルを与えようと思っています。
しかし、そのファイルを再びダウンロードしてアップロードするとすれば 1 日ぐらいかかってしまいますので、
CGI からそのファイルにリンクしようと思っています。
しかし、 perl 初心者なので、自分が作ったプログラムをサーバ上で実行していいかわかりません。
どうか、以下のプログラムは大丈夫か確認していただけないでしょうか。
#!/usr/bin/perl
&output;
sub output {
open(IN,"(ここにファイルパス)");
print "Content-type: application/x-zip-compressed\n\n";
binmode(IN);
binmode(STDOUT);
print <IN>;
close(IN);
exit;
}
0320nobodyさん
2005/06/11(土) 12:11:42ID:???迷惑だからやめれ。
そのファイルへのリンク貼るか教えるだけでいいじゃん。
0321nobodyさん
2005/06/11(土) 12:16:11ID:???0324質問
2005/06/11(土) 22:30:32ID:95WOJCIX具体的には、Aのなかで、
open(HANDORU,">B.cgi");
print HANDORU << "END";
#!c:\perl\bin\perl
print $data;
END
close(HANDORU);
とした場合、B.cgiはつくられるのですが、
その内容で、\(円マーク)が消えており、、また$dataがなくなってしまいます。
¥を¥にしたらそのまま「¥」にされて書き込まれたりします。
どうしたら、うまく¥や変数が記述されるのでしょうか?
0325質問
2005/06/11(土) 22:36:20ID:95WOJCIX¥を&yen;にしたらそのまま「&yen;」にされて書き込まれたりします。
0326nobodyさん
2005/06/11(土) 23:01:48ID:???ttp://www.rfs.jp/sitebuilder/perl/02/02.html#5.エスケープシーケンス
0328nobodyさん
2005/06/12(日) 00:07:30ID:???if -d $_ && -w _;
って式があるんだけど、これは
if -d $_ && -w $_;
の略、ってことでよいの? つーか 略せるんだったの・・? 見たことなかったんだけど
0329nobodyさん
2005/06/12(日) 01:09:06ID:???perlfunc - Perl builtin functions
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item__i__X__i__FILEHANDLE
>どのファイルテスト (あるいは、stat や lstat) 演算子にも、下線だけから成る特別なファイルハンドルを与えると、
>前回のファイルテスト (や stat) の stat 構造体が使われ、システムコールを省きます
0330nobodyさん
2005/06/12(日) 01:21:50ID:Eqf0BMjVプライベートメソッド内で俗に言うthisを使い処理をする場合、
thisはプライベートメソッドを使用しているメソッドからそのメソッドに引数として渡して処理しなければならないのでしょうか?
どなたかご教授して頂けると嬉しいです。
0332nobodyさん
2005/06/12(日) 03:55:40ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlobj.html
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlbot.html
http://perl.infoware.ne.jp/documents/perlboot.ja.html
0333330
2005/06/12(日) 20:39:01ID:Eqf0BMjVすみません、一通り見てみたのですが何処に答えがあるか分かりませんでしたorz
見落としていたらごめんなさい。
プライベートメソッドがオブジェクトのリファレンスを取得するには、
やはり実際に呼び出されたメソッドから引数でリファレンスを渡してやらないと行けないのでしょうか?
0334nobodyさん
2005/06/12(日) 20:51:17ID:???なにをさしているかわからない以上はマニュアル嫁的な
一般論以上の回答のしようもないんじゃないかと。
perlの場合オブジェクト指向といっても$foo->f(...)の
形で呼べばfが$fooをblessしたときのパッケージから
探されるのと、自動的に$fooがサブルーチンfの最初の
引数になるぐらいの単純な仕掛けだから難しく考えても
しょうがないと思われる。
0335330
2005/06/12(日) 21:18:28ID:Eqf0BMjV説明下手ですみません。。たぶん、用語等ちゃんと理解できてないんだと思いますorz
プログラムからあるクラスのメソッドを呼び出すとき第一引数にオブジェクトのリファレンスが渡されますよね、
#sub new { $this = shift; ←これ
そのリファレンスをそのクラス内でしか使えない(使わない)メソッド
#sub _cool { ←慣例的に_で始まるサブルーチン名を付けられ、そのクラス内のメソッドから呼び出すので、
#第一引数にはオブジェクトのリファレンスが渡されないメソッド
で使いたいのですが、
#$this->{hoge} ←こんな風に
引数としてリファレンスを渡すしか方法はないのでしょうか(もっと綺麗な方法はないのでしょうか)?
0336330
2005/06/12(日) 21:19:41ID:???0337nobodyさん
2005/06/12(日) 21:25:29ID:???頭に_をつけたなんてのは人間が勝手に目印にしてるだけで
perlは何の特別扱いもしてくれない。頭が_じゃないのと
全く同じ。
0338nobodyさん
2005/06/12(日) 21:33:38ID:???0339nobodyさん
2005/06/12(日) 21:59:12ID:???0342nobodyさん
2005/06/12(日) 23:59:58ID:???0343nobodyさん
2005/06/13(月) 03:11:14ID:???0344nobodyさん
2005/06/13(月) 17:16:05ID:???Jcode.pmのような使い方をするときは、Encodeだけで間に合うと思うのですが。。
0345nobodyさん
2005/06/13(月) 19:18:16ID:???$str =~ s/>/>/g;
$str =~ s/</</g;
とやったら、「小」とか「松」って文字が文字化け
するようになったのだけど、どうやったら対処できそう?
0346nobodyさん
2005/06/13(月) 19:20:38ID:???$str =~ s/>/&gt;/g;
$str =~ s/</&lt;/g;
な感じ。
0347nobodyさん
2005/06/13(月) 19:44:01ID:???Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
0348nobodyさん
2005/06/13(月) 20:04:41ID:???突っ込んで EUC に変換して、
タグを変換して JIS に変換し直すって
ことかな?だりぃな。
0349nobodyさん
2005/06/13(月) 20:17:48ID:???それにブラウザによっては違う文字コード送ってくる場合もあるから、
どちらにしろ文字コードのチェックは必要だ。
0350nobodyさん
2005/06/13(月) 20:24:45ID:???ファイルと出力がJISなんだよ。
頭の柔らかい奴は、JISのタグ変換ぐらい、
もっとスマートな方法でやると思ったんだがな。
0351nobodyさん
2005/06/13(月) 20:27:26ID:???http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
http://search.cpan.org/~dankogai/Encode-2.10/lib/Encode/Supported.pod
0354nobodyさん
2005/06/13(月) 23:29:19ID:???意外と JIS 指定のところが多い
依存性の関係もあるのだろうが
SJIS とか EUC に拘っている奴は
場数が少ない人だと思う
といっても、 JIS に未来はないけどな
0355nobodyさん
2005/06/13(月) 23:37:35ID:???知ってる企業をいくつか検索してもJISで構築されているサイトが見つからない。。。
0356nobodyさん
2005/06/13(月) 23:57:27ID:???おまいが一番拘ってるように見えるがw
つーか、マンドクセだからeuc使ってるだけで。
普通に使う分には一番コスト低いと思うが。eucにデメリットある?
0357nobodyさん
2005/06/14(火) 00:26:50ID:???0358nobodyさん
2005/06/14(火) 00:31:27ID:???EUC-JP と Shift_JIS は誤判定されることが多いけど、
ISO-2022-JP だと割と誤判定されにくい、ってのはあるかも。
0359nobodyさん
2005/06/14(火) 00:38:52ID:???結構ある。 > http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
その点ユニコならこういう問題は起きない。 でもサイズが増えるのがデメリット。
0362nobodyさん
2005/06/14(火) 01:24:46ID:???Apache なら AddCharset しておくのが正しい姿だろうな
0363nobodyさん
2005/06/14(火) 01:34:09ID:???たぶんこれでできるから
foreach my $str($in =~ /(\x1B.*\x1B..)|([^\x1B]+)/g){
if($str=~/^[^\x1B]/){
$str =~ s/&/&/g;
$str =~ s/</</g;
$str =~ s/>/>/g;
$str =~ s/"/"/g;
}
$out .= $str;
}
0365nobodyさん
2005/06/14(火) 01:36:56ID:???すまん、間違い。
foreach my $str($in =~ /(\x1B.*\x1B..)|([^\x1B]+)/g){
は
foreach my $str($in =~ /(\x1B.*?\x1B..)|([^\x1B]+)/g){
ね。
0366nobodyさん
2005/06/14(火) 12:33:58ID:TLKadJIJ$text[$ii] = "<tr><td>上の段</td></tr>\n";
$text[$ii] =. "<tr><td>下の段</td></tr>\n";
と書き
$text[$ii]に"<tr><td>上の段</td></tr>\n<tr><td>下の段</td></tr>\n"が格納されるように、
コーディングしたつもりなのですが、エラーが発生してしまいます。
$text[$ii]に"<tr><td>上の段</td></tr>\n"に後から追加で"<tr><td>下の段</td></tr>\n"が、
格納されるようにするにはどのように変えたらよいですか?
0367nobodyさん
2005/06/14(火) 12:38:42ID:???○.=
0368nobodyさん
2005/06/14(火) 12:48:08ID:TLKadJIJ成田 船橋 , 八王子 町田 立川 国分寺 , 所沢 川越 秩父
これを最終的に下のような二次元配列にするために
kanto[0][0] = "成田"
kanto[0][1] = "船橋"
kanto[1][0] = "八王子"
・・・
kanto[1][3] = "秩父"
下のようなプログラム文を書いたのですが、
for $ii (0..$#text) {
@kanto1 = split /,/,$text[$ii];# ←ここはうまくいく
foreach $kk (@kanto1) {
@kanto[$kk][] = split / /,$kanto1[$kk];# ←ここでエラー
}
}
@kanto[$kk][]のところでエラーになってしまいます。
どのようにしたら、うまく@kantoに二次元配列を作成することが出来るでしょうか
0370nobodyさん
2005/06/14(火) 18:03:21ID:???foreach $kk (@kanto1) じゃなくて foreach $kk (0 . $#kanto1) だろ。
0372nobodyさん
2005/06/14(火) 18:28:00ID:???@{$kanto[$kk]} = split / /,$kanto1[$kk];
ありがとうございました!
0374nobodyさん
2005/06/14(火) 19:17:35ID:yq1owU75「Clientから何らかのパケットが届く"たび"に何らかの処理」
を行いたいのですが、recvイベントのようなものはキャッチできないでしょうか。
0375nobodyさん
2005/06/14(火) 19:50:50ID:???@hogehoge[][];
$len = scalar(@hogehoge);
print "要素数= $len ";
この時の$lenに格納されているものは何でしょうか?
$len = scalar(@hogehoge[1]);
最初の[]の要素数を調べるにはどのようにしたら良いのでしょうか?
0376nobodyさん
2005/06/14(火) 20:00:55ID:???単純な質問で申し訳ないのですが
@hogehoge[][];
$len = scalar(@hogehoge);
print "要素数= $len ";
この時の$lenに格納されているものは何でしょうか?
@hogehogeの最初の[]の要素数を調べるには、どのような関数を使ったら良いのでしょうか?
0377nobodyさん
2005/06/14(火) 20:33:05ID:???意味不明
0378nobodyさん
2005/06/14(火) 21:20:23ID:???高次元配列っていうのも、単にリファレンスのネスト、と解釈すれば結構容易に理解できる。
0379nobodyさん
2005/06/15(水) 01:53:31ID:???my $fg = \*TEST;
こんなことをしたとき、
close ($fg); でも
my $fh = *{$fg}{IO};
close ($fh); でも
どっちでもできるんだけど、どっちがいい、とか、どっちかが支障がでる、とかあるのかな?
とりあえず stat (〜) は上で言えば $fg でしかできなかったんだけども。
0380nobodyさん
2005/06/15(水) 03:40:50ID:???引数にグロブ(グロブのリファレンス)を受け取るPerlのネイティブ関数には
ファイルハンドルのリファレンスを渡しても無理だから上の方がいいかと。
ただ、下のは、ブロック内でグロブをローカル化すればシンボルに依存しない
ファイルハンドルのリファレンスが得られる。
でも、シンボルに依存しないファイルハンドルが欲しければ
open ($fh, 'hoge.txt');
てやれば 、無名のグロブリファレンスが得られるから、こっちがいいかもよ。
0381nobodyさん
2005/06/15(水) 09:23:19ID:???それ@niftyだとできないんだよね。。
なので全部eval使ってる。
my $id = "FILE";
eval 'open(' . $id . ', "+>>$path$file")'
〜
eval "seek($id, 0, 2)";
eval "truncate($id, 0);seek($id, 0, 0)";
〜
eval 'print ' . $id . ' $tmp';
〜
eval '@tmp = <' . $id . '>';
〜
eval "close($id)";
0382nobodyさん
2005/06/15(水) 10:05:30ID:???単にstrict refsなだけなんじゃ?
Can't use string ("FILE") as a symbol ref while "strict refs" in use at 〜
ってなエラーじゃない?
わざわざ$idに"FILE"なんて入れないで380の言うように空のまま(=undef)に
しとけば、openするときに無名のリファレンスを入れてもらえるので問題ない
と思うが。
0383nobodyさん
2005/06/15(水) 10:24:44ID:???pfile::open(FILE, writemode)
read(FILE)
write(FILE)
close(FILE)
見たいな感じで、同時に複数開けるように作りました。
あと、@niftyはエラーlogは見れないようになってるらしくて、
内容は分からないんです。。
どっかで配布してた、エラー内容返すcgiも走らないので…
use strict(綴り適当)も、宣言しただけでエラーが出ます。
@niftyは特殊らしい。。でも鯖を選ばず動くscript書きたいので。。
@niftyでエラーメッセージを見る方法ってあるんでしょうか?
誰か使ってる方いましたらご教授お願いします。
0384nobodyさん
2005/06/15(水) 10:41:24ID:???特定環境の話をここで続けていいものかわからんが、@nifty は
プラグマも含めて全てのモジュールが故意に削除されている。
use strict; すると strict.pm が見つからないのでコケる。
別にモジュール「が」使えないわけではないので、必要な
モジュール一式を任意のディレクトリに入れて、スクリプトの
頭で BEGIN { push @INC, '/your/lib/dir' } すれば動く。
0385nobodyさん
2005/06/15(水) 11:03:08ID:???全部消すとは…CGI利用可能にしてるくせに、珍しいですよね。。
@niftyは負荷に対するチェック基準?も厳しいらしく、
自分で作ったfilelockのテストも(n回読み込み→書き込みを繰り返すスクリプトを2つ同時に走らせる)、
nを100回で指定して走らせたら鯖でタイムアウトになりました。
isWebだと300でも軽快に動いたんですが。(それ以上は迷惑になるっぽいので試してません)
確かにちとスレ違いっぽいので以後控えますね。
色々情報ありがとうございました!
0386nobodyさん
2005/06/15(水) 11:21:53ID:pMiUaalZ$file_name = "./text.txt"
open(HANDLE, "$file_name");
ファイルオープンの行の第二引数にダブルクォーテーションがついてるんですが、これは何故なんでしょうか?
これがなくても大丈夫みたいですが。。
0387nobodyさん
2005/06/15(水) 11:31:50ID:???「'」 = 全て文字列として解釈する。
my $a = 10;
print "ねむいよー$a";
→ねむいよー10
print 'かたがいたい$a';
→かたがいたい$a
0388nobodyさん
2005/06/15(水) 11:38:55ID:???引用符の違いではなく、変数だけのときにわざわざ二重引用符をつける意味を聞いているのだが
my $a = 10;
print "$a";
print $a;
0389nobodyさん
2005/06/15(水) 11:44:11ID:EGr0DnSI$pass = '○○○○';
# パスワード確認
if ($in{'pass'} eq "$pass") {
print"パスワードが合ってます";
}
else {
print"パスワードが違います";
}
パスワード認証なら上記でも良いのではないでしょうか?
複雑にする必要性ありそうなのだけど教えてください。
0390nobodyさん
2005/06/15(水) 12:13:11ID:???KENTとかそうやってるね
ソース見られたときにパスワードがモロばれだけどね
普通はDESとかMD5で暗号化する
0391386
2005/06/15(水) 12:38:11ID:???そうなんです。
そっちがわからないんですが・・・。
まあどっちでも動くみたいなんで今のところ気にしないことにしますね^^
失礼しました。
0394389
2005/06/15(水) 13:32:19ID:EGr0DnSI早々有難うございます。
暗号化するというのは、こんな事をするのでしょうか?
my @SALT = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');
$in{pwd} = crypt($in{pass}, $SALT[int(rand(64))] . $SALT[int(rand(64))]);
0395nobodyさん
2005/06/15(水) 13:56:02ID:???そのままじゃ暗号化されたパスの先頭にキーがついたままだから、substrとかしないと意味ないし、
取ったら取ったで、キーがわからないとどうやってパスワードチェックしたらいいのかわかんねくね?
0396nobodyさん
2005/06/15(水) 14:18:53ID:???>>379だけど、サンクス!参考になった。
今回はシンボルの文字列自体に意味があるので、グロブにさせてもらうよ。
そういや nifty も知らんけど、まだ perl-5.005 以前を使ってる鯖ってあるのかな?
AAA! が 5.005 だったが。 ってスレ違いか。
とにかくなるべく新しいのにして欲しいな。 いろいろ動かなくて困るw
0397nobodyさん
2005/06/15(水) 14:29:05ID:???パスワードの暗号化ってのはパスワードをプレーンテキストで
保管せず、暗号化したデータを保管するってこと。
登録時には下記$pwdをサーバに保存。
$pwd = crypt($input_pwd, $salt);
認証時には保存された$pwdでチェック。
if (crypt($input_pwd, $pwd) eq $pwd) { # 認証OK
0398nobodyさん
2005/06/15(水) 15:20:04ID:???それはわかるけど、 >>395 でさ、>>397で言う $salt を rand させる意味はなくね? って話。
暗号化した $pwd の先頭2文字に $salt の値が含まれるわけだから、
rand させようがさせまいが、 $pwd を見られたら $salt わかるわけじゃん?
だったら $salt は rand させても、最初から"xy"とかに固定してても、そんなに変わらない気がするのだよ。
0399nobodyさん
2005/06/15(水) 15:24:17ID:???横レスだけど、それってチェック時はなにやってるの?
登録時には下記@indb_pwd($pwd及び$salt)をサーバに保存。
@indb_pwd = (crypt($input_pwd, $salt), $salt);
認証時には保存された$saltを使用して、$pwdでチェック。
if ($indb_pwd[0] eq crypt($in{pwd}, $indbpwd[1])) { # 認証OK
これだったら意味分かるけど…。
0400nobodyさん
2005/06/15(水) 15:25:45ID:???>>397-398
>暗号化した $pwd の先頭2文字に $salt の値が含まれるわけだから、
知らなかった…
失礼しましたorz
0401nobodyさん
2005/06/15(水) 15:57:46ID:???0402nobodyさん
2005/06/15(水) 16:01:20ID:???0403nobodyさん
2005/06/15(水) 16:08:10ID:???遅レスですが、なんか勘違いしてたかも。
@niftyだと>>379のような、「ファイルハンドルを変数に入れる」ということ自体が出来ないんです。
多分perlのバージョンのせいだと思うんですが。
んでしょうがないので、ハンドルをあらわす文字列自体を動的に扱う為にevalを使ってるという感じです。
$id = "FILE"というのはファイルハンドルを変数に入れようとしているわけではなく、展開してevalに渡すためです。
0409389
2005/06/15(水) 17:31:01ID:EGr0DnSI有難うございます。
意味わかりました。
>>401
randがついてるので、rand関数により暗号化してるのかと思ったのです。
0410nobodyさん
2005/06/15(水) 17:43:51ID:???crypt() のやってることは厳密には「暗号化」ではないからね。
などと言って混乱させてみるテスト。
0411nobodyさん
2005/06/15(水) 17:44:40ID:???文字列がかぶらないようにするため
0412411
2005/06/15(水) 17:49:12ID:???0413nobodyさん
2005/06/15(水) 17:59:40ID:???それはちょっと無理があるようなw
aaaaaaってパスワードがたくさん登録されれば 1/4096でかぶるわけだし、
そもそもパスワードがかぶっても普通は問題ないし。
0414nobodyさん
2005/06/15(水) 18:05:59ID:???それは 4096個 salt があった場合の話だがな。
違う salt の pwd が2個なら2倍かかる、ってだけ。
0416nobodyさん
2005/06/15(水) 18:24:04ID:???$p = 'password';
($s) = ('∀');
$c = crypt $p, $s;
とかやればコード中に顔文字が出てきて和めるぞ。
0417nobodyさん
2005/06/15(水) 18:25:58ID:???0418nobodyさん
2005/06/15(水) 18:28:26ID:???0419nobodyさん
2005/06/15(水) 18:41:12ID:???v 5.00503 の AAA!cafe だと
× my $fh = undef; open ($fh, '>test.txt');
○ my $fh = \*FILE; open ($fh, '>test.txt');
試しに↓のコードで動かしてみ
#!/usr/bin/perl -w
use strict;
local *FILE;
my $fh = \*FILE;
if ($fh) {
open ($fh, '>test.txt'); print {$fh} 'hogehoge'; close ($fh);
}
print "Content-type: text/html\n\nOK? // $$fh // $fh";exit;
0421nobodyさん
2005/06/15(水) 18:59:46ID:???ちなみに、最近のモダンな crypt() は、 salt の文字種によって、
暗号化の方式 (ていうかハッシュ関数) を切り替えてくれちゃったりするので、
あんまりへんてこりんな文字列を salt に許すと portable じゃなくなったりする罠。
0422考えて半年
2005/06/15(水) 19:50:20ID:biXgIpFaていうか、Perlでチャットとか掲示板とか、画像をうpするとか機能を追加した
ゼロからプログラミング作れるようになるには、どうすればよいのでしょう?
10日で覚える、とほほ、独習、リャマ本、らくだ本、リファレンスなど
よんでも、いまだに初心者です。漏れがbakaなの?
0423nobodyさん
2005/06/15(水) 20:04:08ID:???つーか、このスレのタイトルを変える相談かと思ったw
半年もかじれば、シンプルなカウンターや掲示板くらいならできない?
本を閉じて、試しに作ってみればいい。 分からないときに本を見る。
参考書が一冊もなくても、ネットのあちこちで転がってるし、
生半可な本より充分な内容の perl.doc もある。
とにかく、芸術分野みたいなもんで 「自分で造る」 「自分で調べる」 のが大切。
・・・なんてな。
0424nobodyさん
2005/06/15(水) 20:12:28ID:???凡人プログラマなら、とにかくいっぱい作りまくって練習するしかないかと。
0425nobodyさん
2005/06/15(水) 20:25:54ID:???0426考えて半年
2005/06/15(水) 20:26:41ID:biXgIpFaforeach $lines (@lines) {
($tm,$cnt,$scnt,$ip) = split(/<>/, $lines);
if($ipc==2){&get_;if($cook){ $flag=2; last;}}
if($date eq "$tm") {
if($ipc==1){if ($addr eq "$ip") { $flag=2; last; }}
$flag=1;
$cnt++;
$scnt++;
$lines = "$tm<>$cnt<>$scnt<>$addr<>\n";
}
foreach { から } までを繰り返すコードであることは理解できる。
しかし、{ } の中身が理解できない。
だから、どうしてよいのかわからない。
0428考えて半年
2005/06/15(水) 20:32:45ID:biXgIpFa0429nobodyさん
2005/06/15(水) 20:33:03ID:???0430nobodyさん
2005/06/15(水) 20:37:40ID:???混乱しちゃって、今は何を言われてもポカーンじゃないかな。こんな感じ。
@ @
△
0431nobodyさん
2005/06/15(水) 20:38:07ID:qXBtGg7k空のデータがある時のやり方がどうしても出来ません。
埼玉,東京,群馬
大阪,,奈良
空のデータがある場合はcolspanを使い↓のように連結させる
<table>
<tr><td>埼玉</td><td>東京</td><td>群馬</td></tr>
<tr><td colspan=2>大阪</td><td>奈良</td></tr>
</table>
このようにするにはどうしたらよろしいすか?
サンプル等をご存知でしたら教えていただければ助かります。
0432nobodyさん
2005/06/15(水) 20:40:19ID:???先に普通にテーブル作ってから
<td>([^<]+)</td><td></td>を
<td colspan=2>$1</td>に置き換えるとか
0433nobodyさん
2005/06/15(水) 21:43:22ID:???最初がカンマの場合は全部一番後ろに押し付けてみた。
while (<DATA>) {
chomp;
my $data = $_;
$data =~ s/^(,+)//;
$data .= ',' x (1+length $1);
my @pref = split /,+/, $data;
my @count;
while ($data =~ s/(,+)//) {
push @count, length $1;
}
print qq{<tr>};
my $n = 0;
foreach my $span (@count) {
print $span > 1 ?
qq{<td colspan="$span">$pref[$n]</td>}:
qq{<td>$pref[$n]</td>};
$n++;
}
print qq{</tr>\n};
}
0434nobodyさん
2005/06/15(水) 23:46:03ID:???以下で問題なく動きました…orz
ありがとうございます。
>>9のページではハンドルのリファレンスじゃなくてグロブそのものを入れようとしてるんですが、
そちらだと出来ませんでした。。
#!/usr/local/bin/perl -w
local *FILE;
my $fh = \*FILE;
if ($fh) {
#? エラー
#? エラー
open ($fh, '>./data/test.txt');
print {$fh} 'hogehoge';
close ($fh);
}
print "Content-type: text/html\n\nOK? // $$fh // $fh";exit;
0436nobodyさん
2005/06/16(木) 00:15:51ID:???全体として何をやってるか理解するのは難しいのもあると
思うよ。
このコード結局なにがやりたいんだよみたいな(笑)
0437nobodyさん
2005/06/16(木) 00:43:45ID:???いろいろと難しいかもしれんですな
0438nobodyさん
2005/06/16(木) 01:07:20ID:???SMART はわかりやすいんだけど、ちょっとね。
まあ 5.005のファイルハンドルなら、↓読めば結構理解いいかも。
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_can_I_make_a_filehandle_loca
0440nobodyさん
2005/06/17(金) 00:42:38ID:FGf+BXABアルゴリズムって何ですか?perlの文法わかるのに、掲示板とかチャット
とかプログラム作成しようと思うとイマイチ、わかりません。
どうすればよいの?アルゴリズムがわからないから、プログラム作成でき
ないのでしょうか?
0441nobodyさん
2005/06/17(金) 00:48:21ID:???既にあるものを参考にしない事(詰まったときにヒントとしてみるのはあり)ってルール作って。
hallo world表示
↓
フォームの入力内容表示
↓
ファイルの内容を読み込んで表示
↓
フォームの内容をファイルに書き込み
↓
カウンタの作成
↓
一行掲示板の作成
↓
eコマースサイトの作成
0442nobodyさん
2005/06/17(金) 00:55:30ID:FGf+BXAB#! c:\perl\bin\perl
print "Hello Perl\n";
0443nobodyさん
2005/06/17(金) 00:56:02ID:???0444nobodyさん
2005/06/17(金) 01:00:22ID:FGf+BXAB#! c:\perl\bin\perl
print "Enter Word : ";
$word = <STDIN>;
chomp($word);
print "$word\n";
0445nobodyさん
2005/06/17(金) 01:00:53ID:???0447nobodyさん
2005/06/17(金) 01:15:33ID:???#!perl
でも動くことを知った(ActivePerl)
0448nobodyさん
2005/06/17(金) 01:21:15ID:???0449nobodyさん
2005/06/17(金) 01:25:54ID:FGf+BXAB0450nobodyさん
2005/06/17(金) 01:31:45ID:???0451nobodyさん
2005/06/17(金) 01:37:28ID:???わからないポイントが明確になって良かったじゃないか。
html周りって事なら
ttp://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_kj01.htm
とか見てみれば?
0452nobodyさん
2005/06/17(金) 01:41:58ID:???0453nobodyさん
2005/06/17(金) 01:44:09ID:???0454nobodyさん
2005/06/17(金) 02:08:23ID:???%in=map{s/\+/ /g;s/%([\da-fA-F]{2})/chr hex$1/eg;$_}map{split/=/,$_,2}split/&/,$ENV{QUERY_STRING};
print<<HTML;
Content-Type: text/html
<form action=$ENV{SCRIPT_NAME}><textarea name=text rows=20 cols=40>$in{text}</textarea>
<input type=submit></form><hr>
HTML
eval$in{text},$@&&print"<pre>$@</pre>";
0455nobodyさん
2005/06/17(金) 02:48:58ID:???0456nobodyさん
2005/06/17(金) 02:53:14ID:???0457nobodyさん
2005/06/17(金) 07:32:45ID:???もし自分でコードを書くとしたら、テンポラリなハッシュにforeachでキーと値をいちいちぶち込むことになるんでしょうか。
0458nobodyさん
2005/06/17(金) 07:56:09ID:???%y = (%x , %y);
↑の書き方じゃ不満?
my %x = qw(a 1 b 2 c 3 d 4 e 5 f 6 g 7);
my %y = qw(e 01 f 02 g 03 h 04 i 05 j 06 k 07);
print join (', ', map { $_ .'=>'. $x{$_} } sort keys %x), "\n";
print join (', ', map { $_ .'=>'. $y{$_} } sort keys %y), "\n";
%y = (%x , %y);
print join (', ', map { $_ .'=>'. $y{$_} } sort keys %y), "\n";
0459nobodyさん
2005/06/17(金) 08:30:05ID:???0460nobodyさん
2005/06/17(金) 08:46:08ID:???0461nobodyさん
2005/06/17(金) 11:14:38ID:???keys, values, eachはハッシュを変更しない間は同じ順番になることが
保証されている。keysのマニュアルなど参照。
あと、ハッシュをリストコンテキストで評価したときに返るリストも
同じ順番になりそうなもんだが、そういう記述は見つけられなかった。
これはどうなんすかね?
0462nobodyさん
2005/06/17(金) 11:57:39ID:???0463nobodyさん
2005/06/17(金) 12:14:45ID:???0464nobodyさん
2005/06/17(金) 12:17:27ID:???重複するキーの値をどうするか?という問題の希ガス。
%xに%y入れるか、%yに%x入れるか。
0465nobodyさん
2005/06/17(金) 14:45:47ID:???それとも重複したら Array にしたい、とかかねえ。
0466質問
2005/06/18(土) 16:37:14ID:DZNl0XpA自分が作ろうと思っているのは、
ラジオボタンを使ったクイズ、チェックボックスを使ったクイズ、テキストボックスを使ったクイズ
なんですが、
気をつけることなどんなことでしょうか?
自分の考え(素人レベルですが・・)では、ラジオボタンとチェックボックスのほうは問題ないと思うのですが、
テキスト形式は不正な文字や引数を使われるとやばいとおもうので、正規表現でチェックするぐらいしか思いつきません.
0469nobodyさん
2005/06/19(日) 10:05:28ID:a/QQeV38$/ = "a";
chomp($data);
とすると$dataの行末のaを取り除くことができるみたいですが
aとbというような他の文字であっても取り除くようにすることはできませんかね?
PHPでいう$data = rtrim($data, "ab");みたいなことをやりたいんですが。
$/ = "ab";
chomp($data);
ではできませんでした。
0470nobodyさん
2005/06/19(日) 10:16:41ID:???$data =~ s/[ab]\z//;
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html
0471nobodyさん
2005/06/19(日) 14:29:18ID:???0472nobodyさん
2005/06/19(日) 23:01:48ID:???pingの結果はどうやって得るのですか?
0473nobodyさん
2005/06/20(月) 00:43:18ID:9D61R1Akしたいのですが、うまくいきません。
if ($str =~ /[\xA1-\xFE][\xA1-\xFE]/) {
}
これですと全角全てを許容してしまいますので、何か良い方法が
ございましたらご教示いただきたい次第です。
何卒、宜しくお願いいたします。
0474nobodyさん
2005/06/20(月) 01:08:33ID:???文字コード表は検索すれば出てくるよん。
0475nobodyさん
2005/06/20(月) 01:27:43ID:???0476nobodyさん
2005/06/20(月) 01:30:53ID:???0477nobodyさん
2005/06/20(月) 01:45:43ID:???で何とかなるかと思いましたが。うまく動いてくれませんでした。
皆様、色々とご教示有難うございました。
0478nobodyさん
2005/06/20(月) 01:52:50ID:???http://search.cpan.org/~bbb/Net-Ping-2.31/
0480nobodyさん
2005/06/20(月) 04:43:55ID:???アドバイス有難うございます。
EUCで全て書いて最後にSJISにしてページを出力しているため、
化けてしまうようです。この方法は諦めました。。
文字コードの範囲と言うものが少しわかってきたのですが、まだ
まだ勉強不足なので調べまくっているところです。
貴重なアドバイス有難うございました。
0481nobodyさん
2005/06/20(月) 13:21:42ID:???アバウトだけど叩き台くらいにはなるかしら。
/\A([\xA4\xA5][\xA0-\xFF]|\xA1\xBC)+\z/
0482nobodyさん
2005/06/20(月) 16:36:58ID:???+漢字も含む文字以外を許容しないというものなん
ですね。
この場合は
if ($str !~ /^([\xA1-\xFE][\xA1-\xFE])+$/) {
}
これで問題ないのでしょうか?
0483nobodyさん
2005/06/20(月) 17:47:52ID:/wReIU3Iperlでcgiを作成しているのですが
URLでhoge.cgi?day=20050620
と指定しているのに
--------------------------------
use CGI;
my $cgi = new CGI;
my $gDay = $cgi->param('day');
--------------------------------
というように取得できません、、、
Ctrl+F5で更新すると取れるのですが
なんでなのでしょう?
何か情報をお持ちな方はお教え頂けますとありがたいです。
0484nobodyさん
2005/06/20(月) 18:47:08ID:???0485nobodyさん
2005/06/20(月) 19:04:03ID:???ありがとうございますっ
url_paramというのがあったのですね、、
不勉強でした。
どうもですっ
0487482
2005/06/20(月) 21:33:18ID:???ぐぐりまくってなんとかここまでたどりつきました。
先生方、見てくださると大変助かります。
$eucpre = qr{(?<!\x8F)};
$eucpost = qr{
(?=
(?:[\xA1-\xFE][\xA1-\xFE])* # JIS X 0208 が 0文字以上続いて
(?:[\x00-\x7F\x8E\x8F]|\z) # ASCII, SS2, SS3 または終端
)
}x;
$hiragana = '\xA4[\xA1-\xF3]'; # ぁ〜ん
$katakana = '\xA5[\xA1-\xF6]'; # ァ〜ヶ
$kanji = '[\xB0-\xFE][\xA1-\xFE]'; # 漢字(実際に割り当てのない領域も有るが問題はない)
$nobashi = '\xA1[\xBC\xBD\xC1]'; # ー−〜
if($name !~ m/^$eucpre(?:$hiragana|$katakana|$kanji|$nobashi)+$eucpost$/){}
0488nobodyさん
2005/06/20(月) 22:07:25ID:???・・・にしては最後のアスキーは何なのかわからんか・・・。
全角記号とかはどうなるのかな。
まあ、やりたいことをもちょっと詳しく。 例とかだしてくれるとわかりやすいかも。
0489nobodyさん
2005/06/20(月) 22:58:52ID:???すいません。ファイルオープンについて教えてください。
ファイルを読み書きオープンで開いて、
前の書き込みのデータを参照して処理をしたあとに追加でデータを書き込みたいのですが、
なかなかうまくいってくれません。
どなたかご教授願えませんでしょうか。
【ファイルについての仕様】
・データの追加書き込みがある
・ある程度データがたまったら削除される。
open(DOUT, "+<$log_file");
これだと、ファイルが削除されている場合エラーが出てしまいます。
open(DOUT, "+>$log_file");
open(DOUT, "+>>$log_file");
上2つだとデータが読み込めないんですけど、これは自分の書き方は悪いんでしょうか。
乱文ですけどよろしくお願いします。
0490nobodyさん
2005/06/20(月) 23:01:55ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_come_when_I_open_the_file_re
0491nobodyさん
2005/06/20(月) 23:59:48ID:???読み書きopen
} else {
新規でopen
0492nobodyさん
2005/06/21(火) 00:03:52ID:???seek (DOUT, 0,0);
が安定じゃね?
0493489
2005/06/21(火) 00:23:19ID:???>>490
私の目的だと
sysopen(FH, $path, O_RDWR|O_CREAT) || die $!;
sysopen(FH, $path, O_RDWR|O_CREAT, 0666) || die $!;
を選択するのが妥当・・・ですよね。
>>491
なるほど、そういう書き方がありますね。
>>492
open(DOUT, "+>>$log_file");
で
@log = <DOUT>
とすると、@logで値が入ってこないんですけど、
@log = <DOUT>をする前に
seek (DOUT, 0,0);
が必要でしょうか??
また、明朝来ます。
0495482
2005/06/21(火) 02:15:58ID:???説明不足ですみません。
ひらがな + カタカナ + 漢字 + [ー〜] だけを許容したい
ずばり、そのとおりでございます。
「最後のアスキー」とは、何か漏れがあったりしますでしょうか?
0496nobodyさん
2005/06/21(火) 02:28:41ID:???最後の $eucpost の後方参照が必要なのかどうかわからないのだった。
まあいるんならいいんじゃない? それで動けば。
0497nobodyさん
2005/06/21(火) 08:45:48ID:???0498493
2005/06/21(火) 09:46:03ID:???ありがとうございます!なりました。
今までseekを使うことがなく、(<と>>だけ)
いまいち感覚がつかめませんでした。
たすかりました。
ところで、+>>でオープンした場合の書き込みは追記になるので
書き込む前に
seek(OUT, 0, 2);
をする必要はないと考えてよいでしょうか。
今のところ問題ないんですけど、やっておかないとマズイことはありますか?
0499nobodyさん
2005/06/21(火) 10:51:42ID:???use utf8;
$str='日本語';
print length $str, "\n"; # 3
foreach (split //, $str) {
print sprintf("%04X\x20", ord); # 65E5 672C 8A9E
}
utf8で書いたファイルを読み込んで同じことをやろうとするとだめです。
use utf8;
while(<>){
print length $_, "\n";
foreach (split //, $_) {
print sprintf("%04X\x20", ord);
}
}
ちなみにファイルは、以下のもので、
これはutfであります。
結果は、
~$ perl utf_test.pl utf_test.txt
32
0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 0075 0074 0066 0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 000D 000A
cygwinのperl5.8.5でやってます。どうしたら、日本語マルチバイト認識して
くれるんでしょう。
0500nobodyさん
2005/06/21(火) 10:57:18ID:???~$ perl utf_test1.pl utf_test.txt
32
00E3 0081 0093 00E3 0082 008C 00E3 0081 00AF 0075 0074 0066 00E3 0081 00A7 00E3 0081 0082 00E3 0082 008A 00E3 0081 00BE 00E3 0081 0099 00E3 0080 0082 000D 000A
です。よろしくお願いします。
0501nobodyさん
2005/06/21(火) 11:02:53ID:???ttp://sakaguch.com/utf2.html#noteで見つけますた。
use open ":utf8";にすれば、問題なくなりますた。
0502nobodyさん
2005/06/21(火) 11:18:14ID:???use open ":utf8";
use utf8;
while(<>){
# while(/\p{Hiragana}/g){
while(/[ぁ-ヶ]/g){
print "$&\n";
}
}
みたいにすると、結果はOKなんですが、
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
これは抑止できないんですかね。
0503nobodyさん
2005/06/21(火) 11:44:02ID:???binmode STDOUT, ":utf8";
perldiag(1)のそのメッセージの説明に書いてあったわけだが。
0504nobodyさん
2005/06/21(火) 13:44:01ID:???0507nobodyさん
2005/06/21(火) 16:19:13ID:???POSTしてるからだろ。
ttp://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod の
「POSTとURLパラメータの混合」より:
問い合わせ文字列(引数が後ろについた"?"マーク)が入ったURLへ
POSTするフォームを作成することにより、スクリプトはフォームと
同じように CGIパラメータをURLで受け取ることは可能です。param()
メソッドは、 URLの問い合わせ文字列を無視し、常にPOSTされた
フォームの内容を返します。 URLパラメータを取り出すためには
url_param()メソッドを呼び出してください。
0508nobodyさん
2005/06/21(火) 16:51:26ID:???0509505
2005/06/21(火) 17:02:14ID:???クエリ付きURLにPOSTすると
paramはPOSTされた値だけ持ってくるってこと?
勉強になった超エロイ人ありがとう!
0511nobodyさん
2005/06/21(火) 23:12:56ID:???RSSをHTMLとして出力するCGIを作成中なのですが、
my $rssfile = $cgi->url_param('rssfile');
open(my $fhin, $rssfile) or die $!;
と書くとDOCUMENT_ROOTにあるrss.xmlを出力しようとして
rssfileに/rss.xmlと指定しても出力できません。
仮想パスを物理パスに変換する必要があるのは分かるのですが、
IISのMapPathメソッドのようなものはないのでしょうか?
よろしくお願いします。
0513nobodyさん
2005/06/21(火) 23:31:31ID:???質問の仕方がまずかったですね。
それも考えましたがrssfileが//etc/passwdとかだった場合は
セキュリティ的に問題があると思ったもので。
DOCUMENT_ROOTの中か外かの判断ができればよいのですが。
0514nobodyさん
2005/06/22(水) 01:31:35ID:???だからこういう事だろ?
my $rssfile = $cgi->url_param('rssfile');
$rssfile =~ s|^[./]*|$ENV{'DOCUMENT_ROOT'}/|;
-f $rssfile || die 'No such file';
open my $fhin, '<' . $rssfile or die $!;
外から渡される文字列は全部危ないんだから、危なくないよう加工・確認
してから使うのがセオリー。問答無用で DOCUMENT_ROOT を基点にして
しまえば中か外か判断する必要はないし、DOCUMENT_ROOT の外の
階層構造をわざわざ外部に教えてあげる必要もない。DOCUMENT_ROOT の
外のファイルを読ませたいのなら、ハッシュを一個用意してそのキーを指定
させる等、パスを直接的に指定させない方法を採ればいい。
%rssfile = (index => '...', news => '...', ... );
if (defined $rssfile{$rssfile}) { ... }
0515nobodyさん
2005/06/22(水) 01:34:47ID:???chdir ($ENV{'DOCUMENT_ROOT'});
とかにして、最初の スラッシュ を削除するとか。
つーかそーゆーモジュールすでにありそうだし、それくらいのメソッドくらい自分で造れそうだがw
0517511
2005/06/22(水) 02:15:15ID:???ありがとうございました。
0518nobodyさん
2005/06/22(水) 11:32:07ID:???ttp://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_can_I_make_a_filehandle_loca
以下抜粋
>上の例では、ファイルハンドルを使う前にそれをスカラー変数に代入していました。
>これは式でもなく、ハッシュや配列の添え字でもなく単純なスカラー変数だけがprintやC<printf>、
>ダイヤモンド 演算子と一緒に使えるのです。コンパイル時にエラーになってしまうような間違いの例を挙げてみましょう:
> @fd = (*STDIN, *STDOUT, *STDERR);
> $got = <$fd[0]> # 間違い
これって、ハンドルのリファレンスをハッシュに入れることは出来ないってことなんでしょうか。
以下のソースでエラーは出ないのですが、書き込みも読み込みも動きません。
package p_file;
my %ref_handle; #クラスで使うファイルハンドルのハッシュ(複数のファイルを同時に開けるようにしたい)
sub open {
my ($id, $path, $file) = @_;
local *FILE;
$ref_handle{$id} = \*FILE; #←ここが問題?
open($ref_handle{$id} , "+>>$path$file");
}
sub read {
my ($id, $row, $begin) = @_;
my @tmp = <{$ref_handle{$id}}>;
〜以下略
sub close {
my ($id) = @_;
close($ref_handle{$id});
}
0519nobodyさん
2005/06/22(水) 11:51:25ID:???君が引用しているのは一つ下の問答のようだが、当の URL の問答に
> 複数のハンドルや無名ハンドルを作りたいのであれば、
> Symbol, FileHandle, IO::Handle といったモジュールを参照してください。
とあり、その例も書いてある。また君が引用している問答の中に、
> このアプローチは print や printf をオブジェクトメソッドの呼び出しの
> ように扱うものですが、これはダイヤモンド演算子には使えません。
> なぜなら、ダイヤモンド演算子はカンマなしの引数を取る関数ではなくて
> 本当の演算子だからです。
と書いてある。
0521nobodyさん
2005/06/22(水) 13:06:21ID:???my($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime($_[0]);
return sprintf("%04d%02d%02d", $year+1900, $mon+1, $day);
なら "%04d%02d%02d" → 20050622 のようになることは理解できるのですが、
($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime($new);
$day = sprintf("%.4d/%.2d/%.2d", $year+1900, $mon+1,$day);
で "%.4d/%.2d/%.2d" → 20050622 となるのはどうしてなんでしょうか。
この『.』の意味が、調べてみても手元の本には載っていなくてわからず、すっきりしません。
桁数の指定(例えば『5.2』とかの)の . ではないようですし・・・
そして、"%.4d/%.2d/%.2d" は "%04d%02d%02d" に書き換えちゃってもかまわないでしょうか?
0522nobodyさん
2005/06/22(水) 13:33:30ID:???手元の本に載ってなければマニュアルを読めばいいじゃない。
http://search.cpan.org/~nwclark/perl-5.8.7/pod/perlfunc.pod#sprintf
英語が苦手なら駱駝本を買えばいいじゃない。
>>7
> "%.4d/%.2d/%.2d" → 20050622 となるのはどうしてなんでしょうか
$year + 1900 を 4 桁の精度に丸めると 2005 、$mon + 1 を 2 桁の精度に
丸めて ( d は整数型指定子なので) 0 パディングすると 06 、$day を 2 桁
の精度に丸めると 22 、それぞれ当てはめて 2005/06/22
> "%.4d/%.2d/%.2d" は "%04d%02d%02d" に書き換えちゃってもかまわない
> でしょうか?
スラッシュが無くなっても構わないならご自由に。
0523nobodyさん
2005/06/22(水) 15:55:25ID:pDQou/2TPermission denied on server. (chmod)とでます。
その上のフォルダは変えられたのですが・・・
上記のエラーはどういう意味なんでしょうか?
0524521
2005/06/22(水) 16:18:22ID:???ありがとうございます。
URL先読んでだいぶ分かりました。
そして手元の本を見直したら、
「.」の後の数値の意味に「文字列の最大幅」というのがちゃんと載ってました。orz
「5.2」のように「.」には必ず前後に数値がないといけないと思い込んでしまってました。
>スラッシュが無くなっても構わないならご自由に。
そうですね、下はスラッシュを入れてますね。気がつかなかった・・・
これは
$day = sprintf("%04d%02d%02d", $year+1900, $mon+1,$day);
$day =~ s/(\d{4})(\d{2})(\d{2})/$1\/$2\/$3/;
とやっておこうと思います。
どうもありがとうございました。
0525nobodyさん
2005/06/22(水) 16:51:26ID:???初心者質問スレが無くなって不便だな…。代わりはここでいいんだろうか。
CGIとかPerlとか超初心者なんだけど、
http://pc8.2ch.net/test/read.cgi/php/995618200/
Perl に関係無い話は上記スレへ。
>>524
"%04d/%02d/%02d"
0527nobodyさん
2005/06/22(水) 17:53:22ID:???hint:
sprintf("%04d%02d%02d", $year, $mon, $day); #20050622
sprintf("%04d/%02d/%02d", $year, $mon, $day); #2005/06/22
sprintf("%04d年%02d月%02d日", $year, $mon, $day); #2005年06月22日
0528nobodyさん
2005/06/22(水) 18:12:51ID:???hint:
$hoge = "ほげ〜ほげ〜ほげ〜<br>お〜れ〜は%s\<br>ガ〜キだいしょ〜うっとくらあ";
$hoge = sprintf($hoge, 'ジャイアン');
0529nobodyさん
2005/06/22(水) 18:46:41ID:VvFC8JSFmy $delete_url = sprintf ("%s?choice=delete;id=%d", url (), $row->{id});
print br (), br (),
"$row->{t} $row->{status}",
" [", a ({-href => $edit_url}, "Edit"), "]",
" [", a ({-href => $delete_url}, "Delete"), "]",
br (), "\n",
"$row->{content}\n";
1行目のsprintfで文字列を指定して、出力しているのはわかります。
しかし、括弧内の意味がわかりません。変数"id"について、URLを指定しているらしい
ですが、よくわかりません。
どっかに詳しく解説している、サイトとかありませんかね?
0530nobodyさん
2005/06/22(水) 18:51:23ID:???0531524,521
2005/06/22(水) 19:10:41ID:???ええと、わざわざ後からスラッシュを入れる方式(>524)にした理由は、
配布されてるあるCGIをカスタマイズしていたら、
そのCGIには日付を取得するサブルーチン(>521の上)があって
ほとんどの部分でそのサブルーチンを利用しているのに、
一カ所だけ利用していない(>521の下)部分があって、
どうしてこの部分では利用して無いのか?他と違うデータなのか?
というのが始まりだったんです。
ちなみにそのCGIの他の箇所で「2005/06/22」形式のデータが必要な時は、
サブルーチンで「20050622」形式のデータを取得した後
s/(\d{4})(\d{2})(\d{2})/$1\/$2\/$3/;
をやってましたので、それに揃えようかと。
0532nobodyさん
2005/06/22(水) 21:23:12ID:SO7tDhegOSはRedhatなんですけど
0533nobodyさん
2005/06/22(水) 21:57:46ID:???0534nobodyさん
2005/06/23(木) 00:40:06ID:???・ID(10バイト程)を入力してもらう
・IDを受け取ったプログラムはIDを一行ごとに入力してある
ファイルを順次読み込み(読みオンリーでオープン)
該当するIDがあるかどうかチェックする。
(対象のIDは5千件程度)
というWebを作りたいんですが、読み込みオンリーで
オープンしておけば一度に10人とか同じチェック側の
プログラムを動かしてもロックかかったりしてパフォーマンス
が落ちることはない?それともプログラム中で条件式(if?)
の中で固定でチェックした方がいいのでしょうか?
0535nobodyさん
2005/06/23(木) 00:54:13ID:???0536nobodyさん
2005/06/23(木) 00:57:09ID:???0538nobodyさん
2005/06/23(木) 01:40:39ID:???0539nobodyさん
2005/06/23(木) 01:58:38ID:dskomwuHスレを教えてくれてありがとうございました
0540nobodyさん
2005/06/23(木) 02:32:10ID:???処理を速攻で終わらせてメモリを開放してあげるほうが重要かと。sleepとか使っちゃダメ。
・・・10人同時って、ほんとにそんな状況発生するのかな?
0541nobodyさん
2005/06/23(木) 15:11:47ID:???CGIを改造中なのですが、知恵を貸してください。
ログの情報を「○番目の要素でソートして表示する」と言うのをしたいのですが、うまくできません。
他のCGIからソート部分だろうと思われるものをコピッて手を加えたのですが、ダメです。
open(IN,"$logfile") || &error("Open Error : $logfile");
@data = <IN>;
close(IN);
@tmp = map {(split /<>/)[3]} @data;
@slist = @data[sort {$tmp[$b] cmp $tmp[$a]} 0 .. $#tmp];
$i=0;
$flag=0;
while (@slist) {
($no,$date,$name,$genre,$com,$kousi,$day,$w1,$w2,$w3,$w4,$w5,$w6,$w7,$time,$mony,$tail,$w,$h) = split(/<>/);
---------
$genreにソートしたいもの(g_1,g_2,g_3〜)が入っていて、それを元に並べ替えしたいんです。
この状態で動作させると、変数が入っていない表が無限に続いてしまいます。
どこが間違っているのでしょうか? お願いします。
0542nobodyさん
2005/06/23(木) 16:03:51ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_do_I_sort_an_array_by_anyth
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1077525387/
【 スクリプト改造依頼スレ 】(丸投げ) part3
http://pc8.2ch.net/test/read.cgi/php/1105046286/
0543nobodyさん
2005/06/23(木) 16:06:01ID:AbvQdhd4use CGI;
$cookie = $cgi->cookie(-name => 'hoge',
-value => 'fuga',
-expires => '+1h',
);
print $cgi->header(-cookie=>$cookie);
この結果は
Set-Cookie: hoge=fuga; path=/; expires=Thu, 23-Jun-2005 07:21:10 GMT Date: Thu, 23 Jun 2005 06:21:10 GMT Content-Type: text/html; charset=ISO-8859-1
のようになりうまくクッキーを取得したようです。
しかし、上のクッキーを取得するために
print $cookie = $cgi->cookie(-name=>'hoge');
と記述しましたが、何も値が入ってませんでした。
cgi.pmを使用してクッキーを取得するにはどのようにしたらよいのでしょうか
0544nobodyさん
2005/06/23(木) 17:34:51ID:???<q cite="http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod">
クッキーを取り出すには、cookie()メソッドを-valueパラメータなしで
呼び出すことによって名前で要求します:
use CGI;
$query = new CGI;
$riddle = $query->cookie('riddle_name');
%answers = $query->cookie('answers');
</q>
0546nobodyさん
2005/06/23(木) 20:57:35ID:???原文が段落あるんだろうから、blockquote のがいいけど。
blockquote だと p とか pre とかも入れないといけないけど。
0547nobodyさん
2005/06/23(木) 22:19:04ID:???まぁ5000件くらいじゃ大丈夫だと思う。
もっと多い場合の対処法としては
データファイルをソートしておく→IDが存在しない時早く終れる。
IDの頭文字別にデータファイルを用意する→個々のデータファイルが小さくなるから早く処理が終わる。
0548nobodyさん
2005/06/24(金) 05:19:50ID:kge0P1YB他の方が製作したCGIに次のような記述がありました。
$\ = "\n";
print "<html>";
print "<body>";
print "<p>test</p>";
print "</body>";
print "</html>";
$\ = "";
これの最初の $\ = "\n"; についての質問です。
これは、恐らくHTMLソースの改行が目的であることは分かりますが、
$\ とはどういった変数なのでしょうか?
また、同じように使える特殊な変数はあるのでしょうか?
検索エンジンで必死に調べたのですが、「$\」で絞り込むのは厳しいようで…。
ご教示お願いします。
0552nobodyさん
2005/06/24(金) 12:27:48ID:QTITokL2掲示板などのようにcgiやphpなどで動的に表示が変わるページを
ページが表示されてからソースの表示をした時に見られるような
htmlソースでダウンロードしたいのですが、やり方がわかりません。
また、niftyのサーバで動かしたいので特殊なモジュールも使用できないので
それでも可能な方法があれば教えて下さい。
本当にやりたい事はその先で、そのソースをまたperlで解析して
テキストを表示するというものです。
ダウンロードしたファイルからそのテキストをただ表示する部分は出来ているので
ダウンロードの部分を教えて下さい。
宜しくお願いします。
0553nobodyさん
2005/06/24(金) 12:41:15ID:???>WEBページを読み込みたいのですが可能でしょうか?
http://pc.2ch.net/php/kako/1037/10377/1037797479.html>>5
>前すれ>>991
>Socketを使わないとむりぽ。
>がむばってネ。
がむばってネ。
おとなしくLWPとか使うのがいいんだけど。niftyなんぞ無視して。
http://pc.2ch.net/php/kako/1037/10377/1037797479.html>>9
>LWP::Simpleモジュールが入っているなら
>perldoc lwpcookして出てくる文書読んでみるとやり方出てるよ。
>
>use LWP::Simple;
>getstore "http//:www.yahoo.co.jp", "yahoo.html";
>みたいな感じ。
がむばってネ。
0554nobodyさん
2005/06/24(金) 13:17:47ID:???まじめな話、もう少し日本語を勉強せよ
0555nobodyさん
2005/06/24(金) 15:58:04ID:/NGYg1v6LWP::Simpleモジュールも入っていないようです。
自PCでActiveperlを実行した時は
HTTP::Lite;モジュールを使ったのですが、
これもNiftyでは使えないようです。
0556nobodyさん
2005/06/24(金) 16:01:15ID:???ということで使いたきゃ自分で必要なもの全部揃えてアップして使いなさい。
0557548
2005/06/24(金) 17:18:12ID:???ご回答ありがとうございました。
Perlの特殊変数のページ非常に参考になりました。
難しくて全てを理解するまでは時間がかかりそうですが、
とりあえず気になったことが分かって嬉しいです。
0558あ
2005/06/24(金) 17:24:31ID:L251Ppfjパッケージ内でグローバルな宣言をされた変数って、それぞれ別にNewで生成されたオブジェクト変数ごとで固有に持たせる方法はありますか?
$a = new foo;
$b = new foo;
fooは内部のmyグローバル変数 s をもってて、set メソッドで代入しgetメソッドで取り出せるとします。
$a->set(100);
$b->set(200);
とすると、
print $a->get;
で 200 と返ってきてしまいます…
javaそのほかのようにインスタンスごとの固有値は持たせられないのでしょうか?基本的で申し訳ありませんがよろしくご教授ください。
0559nobodyさん
2005/06/24(金) 17:25:44ID:???初歩的な質問宜しいでしょうか?
perlで文字列の長さを取得する関数って
ないのでしょうか?
my $len = strlen('auaua');
^^^^^こんなの、、、
0560nobodyさん
2005/06/24(金) 17:31:04ID:???0562559
2005/06/24(金) 17:46:00ID:???わーい
本当にありがとーございますっ
0563あ
2005/06/24(金) 18:01:45ID:L251Ppfj言い方が変でした。すいません。
ようは、パッケージのインスタンスごとに、変数値を持たせられる方法が知りたいのです。同一のパッケージから生成したインスタンスごとでも
$a->get ⇒ 100
$b->get ⇒ 200
のようにできるコーディングがどうすればいいかわかりません…
Perlではこのような動作の要求は無理なんでしょうか?
0566nobodyさん
2005/06/24(金) 18:20:36ID:???my $class = shift;
my $self = {};
bless ($self, $class);
}
sub set {
my $self = shift;
$self->{s} = shift;
}
sub get {
my $self = shift;
return $self->{s};
}
0567563
2005/06/24(金) 18:26:07ID:???ケータイからのカキコで必死だったためろくにsageませんでした;;
なるほどです。感謝!
0569nobodyさん
2005/06/24(金) 18:32:24ID:???0570nobodyさん
2005/06/24(金) 18:32:49ID:???始めの一文字が同じならtrueとしたいのですが
そのような関数もしくはやり方等ないのでしょうか?
昔
if( ($abc cmp $def) >1 ){:
このようなコード書いたような記憶はあるのですが、、、
0571nobodyさん
2005/06/24(金) 18:39:48ID:???if (substr ($abc, 0 , 1) eq substr ($def, 0 , 1)) { 〜 }
0572nobodyさん
2005/06/24(金) 21:10:46ID:???0573nobodyさん
2005/06/25(土) 00:44:36ID:???0574nobodyさん
2005/06/25(土) 01:22:00ID:???でもそれでファイルには書けないんだけどさ。
0575nobodyさん
2005/06/25(土) 01:29:56ID:???0576nobodyさん
2005/06/25(土) 02:58:57ID:???cgi-lib.plのReadParseで読み込んだデータ
$in{'hoge'} (中身はチェックボックスで選択された複数のデータが入っています)があります。
print $in{'hoge'};とすると
あああ いいい ううう えええ おおお かかか ききき くくく・・・のように半角スペース区切りのデータが出ますが、
これを
あああ・いいい・ううう(改行)
えええ・おおお・かかか(改行)
ききき・くくく
のように、3の倍数個目のデータには改行を、それ以外には中黒「・」で区切るようにして表示したいのです。
単純に区切り文字を他の文字に全て置き換えすることなら出来るのですが、ちょっと複雑になるとお手上げです。
ご教示よろしくお願いします。
0577nobodyさん
2005/06/25(土) 03:06:46ID:VyiiD8SR半角スペース区切りだっけ?
普通に split して for文使うとかはどうよ
0578nobodyさん
2005/06/25(土) 03:57:59ID:???例えば、区切りとしてじゃなく、各データのケツに改行とか中黒が着いてると考える。
つまり「3の倍数個目か」「最後のデータか」「それ以外」かで後ろに何をprintするか分岐したらいい。
ループの中にif文2個書いてもいいし、最後だけが例外的なのを利用してループが最後のデータ直前で終わるようにしてもいい。
0579nobodyさん
2005/06/25(土) 04:46:44ID:???$_ = "あああ\0いいい\0ううう\0えええ\0おおお\0かかか\0ききき\0くくく";
while (/([^\0]*)\0([^\0]*)\0?([^\0]*)\0?/g) {
print $1, ($2 ne '' && '・'. $2), ($3 ne '' && '・'. $3), "\n";
}
とかな。
0580nobodyさん
2005/06/25(土) 05:24:23ID:???0581nobodyさん
2005/06/25(土) 14:43:44ID:???0582nobodyさん
2005/06/25(土) 15:04:05ID:???連続で申し訳ありませんが、これを実行すると
Can't use string ("") as a subroutine ref while "strict refs" at 〜
となってしまいます。find()をするとこうなるのですが、どこがおかしいのですか?
use Net::CIDR::Lite;
my $net = Net::CIDR::Lite->new;
my @airedgecidr = (
'221.119.8.0/24', '221.119.9.0/24'
);
foreach (@airedgcidr) {
$net->add($_);
}
$result = $net->find('221.119.8.1');
0584nobodyさん
2005/06/25(土) 15:20:19ID:???!
use strictしたところ、配列の変数名が間違っていることに気づきましたorz
ありがとうございました。
# rootさんのソースなのに…
0585nobodyさん
2005/06/25(土) 15:29:33ID:???0587nobodyさん
2005/06/26(日) 03:21:28ID:???レンタルの日記を借りて、スキンを使ったのですが画像を投稿出来ないので
自分でスキンのタグを変更可能してもおkと書いてあったので
画像を無理やり出すイレギュラーってのをやりたいのですが
何を挿入していいか分かりません・・。
画像投稿可版・不可版(同スキン)を両方DLしてソースを見比べたのですが
どうしても分らず、ぐぐっても分りませんでした・・。
どんなタグ?をどの辺りに挿入すればいいのか教えてもらえませんか・・?
よろしくお願いします。
(どこで聞いていいか分からなかったのでスレ違いだったらすみません・・)
0588587
2005/06/26(日) 03:24:35ID:???他で聞いて来ます。
申し訳ありませんでした・・。
0589nobodyさん
2005/06/26(日) 23:02:23ID:3dNr93yGprint SOCKET "User-Agent: " . $browser . "\n";
で止まってしまうものがあるようです。
モジュールが入っていることは確認できているのですが、もしも
なにかお気付きの点等ございましたらご教示いただきたく思って
おります。どうか宜しくお願いいたします。
use Socket;
use FileHandle;
my $ip = inet_aton($host) || die "host($host) not found.\n";
my $sockaddr = pack_sockaddr_in($port, $ip);
socket(SOCKET, PF_INET, SOCK_STREAM, 0) || die "socket error.\n";
connect(SOCKET, $sockaddr) || die "connect $host error.\n";
autoflush SOCKET (1);
binmode(STDOUT);
print SOCKET "GET $directory$filename HTTP/1.1\n";
print SOCKET "User-Agent: " . $browser . "\n";
print SOCKET "Host: " . $host . "\n";
print SOCKET "Connection: close\n\n";
while(<SOCKET>){
m/^Content-Type: ([^\r\n]+)/i && print "Content-Type: $1\r\n";
m/^Content-Length: ([^\r\n]+)/i && print "Content-Length: $1\r\n";
m/^\r\n$/ && last;
}
print "\r\n";
while(<SOCKET>){
print $_;
}
close(SOCKET);
0590nobodyさん
2005/06/26(日) 23:41:10ID:???なんで
> print SOCKET "User-Agent: " . $browser . "\n";
で止まってるって思ったの?
0591nobodyさん
2005/06/27(月) 01:10:18ID:???0592nobodyさん
2005/06/27(月) 01:29:08ID:???HTMLの記述をprint "〜"に変換する作業を一括で行うソフトウェアを探しているのですが、そのようなソフトはありますか?
例えば、
<a href="abc.html">ABC</a>
を
print "<a href=\"abc.html\">ABC</a>"
と変換できるものです。
0593nobodyさん
2005/06/27(月) 01:37:26ID:???0594nobodyさん
2005/06/27(月) 01:44:19ID:???そんな方法があったんですか・・・・。今日はじめた初心者だったのでごめんなさい。
>>593さんありがとう('A`)
0596nobodyさん
2005/06/27(月) 02:14:33ID:???0597nobodyさん
2005/06/27(月) 02:18:26ID:???0598nobodyさん
2005/06/27(月) 02:28:57ID:???ご返答有難うございます。
止まっていると思ったのは、
print SOCKET "User-Agent: " . $browser . "\n";
print SOCKET "Host: " . $host . "\n";
を外したら進んだためです。
具体的には、KeitaiPicutureという画像変換サービスで変換された
画像をSOCKETでとってくる仕組みを作っているのですが、
GET $directory$filename?User-Agent=UA
だと成功するんですよね。
とにかくご教示有難うございました。
0599nobodyさん
2005/06/27(月) 03:10:20ID:???そのサービスが$ENV{HTTP_USER_AGENT}じゃなくてクエリーのUser-Agentを見てるからだろ。
0601nobodyさん
2005/06/27(月) 08:08:58ID:7ZY2M4BI0602nobodyさん
2005/06/28(火) 16:25:00ID:l0OJ7VtDuse HTTP::Request;
use LWP::UserAgent;
my $url = 'http://www.yahoo.co.jp';
my $request = HTTP::Request->new(GET => $url);
my $ua = LWP::UserAgent->new;
my $response = $ua->request($request);
if($response->is_success) {
print $response->content;
} else {
print $response->status_line;
}
という LWP::UserAgent をテストするためのCGIを、サンプルを元に組んだのですが、
[Tue Jun 28 15:42:43 2005] [error] Premature end of script headers:
ということで 500 Internal Server Error になってしまいます。
Premeture〜ってぐぐってみたけどよくわかりません。
原因として何が考えられますか?
0603nobodyさん
2005/06/28(火) 16:52:11ID:???0606nobodyさん
2005/06/28(火) 17:58:49ID:???--------------------------------
my %dir_name=();
readDir(\@dir_name);
sub readDir{
my $dirname_ref = shift;
$dirname_ref->{'aaa'}="BBB";
}
--------------------------------
を実行しても
Can't coerce array into hash at cron_day_table.cgi line 50.
とエラーになってしまいます。
何がいけないのでしょうか?
ご助力を頂けますと助かります。
0608606
2005/06/28(火) 18:17:44ID:???本当だー
ありがとーございますっ
スレ汚し失礼いたしました。
0609606
2005/06/28(火) 19:37:41ID:???my %dir_name=();
my $dirname_ref = \%dir_name;
$dirname_ref->{'bbb'}='hoge';
$dirname_ref->{'ccc'}='hoge';
$dirname_ref->{'aaa'}='hoge';
my $key;
foreach $key(keys %dir_name){
print "$key -> $dir_name{$key}\n";
}
--------------------------------
として出力すると↓
--------------------------------
bbb -> hoge
aaa -> hoge
ccc -> hoge
--------------------------------
のようになってしまいます。
下記のように入れた順番通りに出力したいのですが
bbb -> hoge
ccc -> hoge
aaa -> hoge
そういった場合はどうすればよろしいのでしょうか?
ご助力を頂けますと助かります。
0610nobodyさん
2005/06/28(火) 19:44:18ID:???http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_keys_HASH
0611nobodyさん
2005/06/28(火) 19:46:11ID:???もしかして、無かったことになった?
0612nobodyさん
2005/06/28(火) 19:52:27ID:???http://search.cpan.org/~nwclark/perl-5.8.7/pod/perl58delta.pod#Deprecations
0614nobodyさん
2005/06/28(火) 21:58:10ID:???0615nobodyさん
2005/06/29(水) 20:47:26ID:???スマートじゃないけど。
my %dir_name=();
my $dirname_ref = \%dir_name;
$dirname_ref->{'bbb'} = ['hoge', 1];
$dirname_ref->{'ccc'} = ['hoge', 2];
$dirname_ref->{'aaa'} = ['hoge', 3];
foreach my $dir (sort{$a->[1]->[1] <=> $b->[1]->[1]} map{ [$_, $dir_name{$_}] } keys %dir_name){
print "$dir->[0] -> $dir->[1]->[0]\n";
}
0617nobodyさん
2005/06/29(水) 23:40:40ID:4HgpqCXdどうしてこれで "0_" と表示できないのか教えて下さい。
$i = 0;
print "$i_\n";
0619617
2005/06/30(木) 00:06:48ID:nq4lXHpHここでのアンダースコアはどのように効いているのでしょうか?
否定の演算子でもなさそうなのですが・・・
0622nobodyさん
2005/06/30(木) 01:13:28ID:8FYD6O0q簡単なの持っててもえーかな思ったんだけど、チェックボックスとかの複数選択がどーにもできんのです。。
複数のバリュあるときは配列にするのなら、
if (defined $form{$key}){
if(ref $form{$key}){ push @$key,$value; }
else{ @$key=($form{$key},$value); $form{$key}=\@$key; }
}
うろ覚えで書いたんで変かも・・・っていうか、@$keyがおかしいケド。こんな感じで良いのでしょうか?
プログラムそのものもperlが初めてなんで要領得なくて
サブルーチン内外で変数共有しない方がいいのかと思ったんだけど、リファレンスする配列が局所化できません。
0623nobodyさん
2005/06/30(木) 01:17:33ID:???参考にしたスクリプトで使われてたcgi-liteだかではそうなってたような気が。
そして、sageってシステムがよくわからない・・・申し訳ないです。
0624nobodyさん
2005/06/30(木) 02:47:40ID:???push @{$form{$key}},$value;
リファレンスするならこんな感じかの。
push @{$$form{$key}},$value;
でも、別に配列にこだわらなくてもいい気がする。
0625606
2005/06/30(木) 11:45:29ID:???本当にみなさんRESありがとうございます。
順番を保持する配列とその配列の要素をキーとするハッシュで
やる方法で自作し強引に解決(?)いたしました。
本当にRESどうもですっ
そのうちこちらで解決案を書ける人になれますようがんばりますですっ
0627nobodyさん
2005/06/30(木) 13:17:05ID:wTRNDiAZ&decrypt(入力されたパスワード、登録されてるパスワード)
sub decrypt {
local($in, $dec) = @_;
local $salt = $dec =~ /^\$1\$(.*)\$/ && $1 || substr($dec, 0, 2);
if (crypt($in, $salt) eq $dec || crypt($in, '$1$' . $salt) eq $dec) {
return (1);
} else {
return (0);
}
}
パスワード認証のサンプルなんですけど、
入力されたパスワードが認証されれば1を間違っていれば0を返すサブルーチンなんですが、
local $salt = $dec =~ /^\$1\$(.*)\$/ && $1 || substr($dec, 0, 2);
if (crypt($in, $salt) eq $dec || crypt($in, '$1$' . $salt) eq $dec) {
↑の部分がどうしてもわからないのですが御教授お願いします。
0628nobodyさん
2005/06/30(木) 13:22:47ID:???crypt() の仕組みが理解できてないとキツいと思うので、
「crypt パスワード」あたりでぐぐって調べてみるのが良いと思う。
0629nobodyさん
2005/06/30(木) 14:05:04ID:wTRNDiAZありがとうございます。crypt()は勘違いして覚えてました。
変換キーに2文字じゃなきゃいけないんですね。
それで
substr($dec, 0, 2);
の意味はわかったんですが
$dec =~ /^\$1\$(.*)\$/ && $1
と
crypt($in, '$1$' . $salt) eq $dec
の部分がまだわからないのですが
お願いします。
0630nobodyさん
2005/06/30(木) 15:18:51ID:???# - - - - - - - - - - - -
$salt = $dec =~ /^\$1\$(.*)\$/ && $1
||
if (
length $dec >= 3 &&
substr($dec, 0, 2) eq '$1$' &&
substr($dec, -1, 1) eq '$'
) {
$salt =
substr($dec, 2);
chop $salt
;
}
# - - - - - - - - - - - -
if (crypt($in, '$1$' . $salt) eq $dec)
||
my $tmp = '$1$' . $salt;
if (crypt($in, $tmp) eq $dec)
# - - - - - - - - - - - -
とりあえず正規表現学んで来い、といいたい。
作者が $1$ *** $ とつけてるのはよくわからない。
0631nobodyさん
2005/06/30(木) 15:19:50ID:???0632nobodyさん
2005/06/30(木) 16:24:04ID:???0633nobodyさん
2005/06/30(木) 16:30:42ID:wTRNDiAZありがとうございます。
一行づつなら理解できるのですが、
$dec =~ /^\$1\$(.*)\$/
↑この表現は変数$decの頭が $1$ で任意の文字がいくつか入って
その後 $ の文字列にマッチするか否かと理解していいんでしょうか?
$1$ これって特別な意味あるんですか?
local $salt = $dec =~ /^\$1\$(.*)\$/ && $1 || substr($dec, 0, 2);
あと上の処理の順番がよくわらないんですが
A && B Aが真ならBを実行
A || B Aが偽ならBを実行
と言うのならわかるのですが
その辺もご教授願えないでしょうか
一応本を見ながらやっているのですがイマイチ理解できません。
0634nobodyさん
2005/06/30(木) 16:41:02ID:???sub decrypt {
crypt($_[0], $_[1]) eq $_[1];
}
0635nobodyさん
2005/06/30(木) 16:59:34ID:???$in{race}="aa";
$raceindex="bb";
if($in{race} == $raceindex){print "ok";}
exit;
これを実行すると$in{race}の内容と$raceindexの内容は同じではないはずなのに
if分は真となってokと表示されます
これはif分の書き方がおかしいのでしょうか
0636nobodyさん
2005/06/30(木) 17:07:01ID:???== は数値で評価する演算子。
この場合はどっちも 0 と評価されるので真になってしまう。
文字列を比較したい場合は eq 演算子を使う。
perlop - Perl operators and precedence (Perl の演算子と優先順位)
ttp://perldoc.jp/docs/perl/5.6.1/perlop.pod
0637nobodyさん
2005/06/30(木) 17:13:09ID:???有難う御座います
perlのスクリプト書くの1年ぶりですっかり忘れてました
無事解決しました
有難う御座いました
0638nobodyさん
2005/06/30(木) 17:39:09ID:???サーバからsendmailの使用は許可されているのですが、どうやったらメールが来たことが検出できるのかまるでわからないのです。
申し訳ありませんが一手ご教授下さいくださいですよ
0639nobodyさん
2005/06/30(木) 17:42:21ID:???$1$で始まるのはMD5でハッシュ化された文字列です
$1$から次の$までの文字列がハッシュ化のsaltになります
そのサブルーチンはDESとMD5の両方使えるようにしているようだけど意味無いと思われます
DES,MD5どっちを使うかはcrypt関数が知っておりsaltも自動的に判断されるので>>634で十分です。
0640わから〜ん
2005/06/30(木) 19:18:36ID:UYjObKP/2行目 my $delete_url = sprintf ("%s?choice=delete;id=%d", url (), $row->{id});
3行目 print br (), br (),
4行目 "$row->{t} $row->{status}",
5行目 " [", a ({-href => $edit_url}, "Edit"), "]",
6行目 " [", a ({-href => $delete_url}, "Delete"), "]",
7行目 br (), "\n",
8行目 "$row->{content}\n";
1行目の sprinfで整形された文字列 my $edit_url変数に代入される。
2行目も同じ要領で、my $delet_url変数に代入される。
3行目は HTML表示
4行目 意味不明
5行目 1行目の変数が"edit"としてURL表示される。
6行目 2行目の変数が"delete"としてURL表示される。
7行目 HTML表示
8行目 意味不明
ご質問いたします。
(1)4行目の意味がわからない
(2)5行目と6行目がなぜ、editとdeleteのURL表示となるのか?
(3)8行目の意味がわからない
特に、(2)の質問を詳しく解説してください。(2)の用法について
ラクダ本に記述がありますか?
よろしくお願いいたします。
0641nobodyさん
2005/06/30(木) 19:24:59ID:???0643nobodyさん
2005/06/30(木) 19:59:14ID:???0644わから〜ん
2005/06/30(木) 20:11:02ID:UYjObKP/必死にいろんな本読んでも、記述が無いわけですね。
URLのところを読んで、勉強します。
大変ありがとうございました。
0645>>627
2005/07/01(金) 18:26:12ID:???$1$が謎だったので助かりました。
MD5とDESというのはレベルが高くてよくわかりませんが、
とりあえずそういうものだと思って頭の片隅においておきます。
今の段階では>>634のやり方で問題ないとわかっただけ十分です。
0646nobodyさん
2005/07/01(金) 20:20:31ID:???普通に$ENV{'QUERY_STRING'}などと変わらないような気がするのですが…
0647nobodyさん
2005/07/01(金) 20:31:30ID:???今時つかうやつも少ないだろうしな
0648nobodyさん
2005/07/01(金) 20:55:17ID:???0649nobodyさん
2005/07/02(土) 00:14:53ID:???0650nobodyさん
2005/07/02(土) 01:12:37ID:???CGI::Liteだってあるし
0651nobodyさん
2005/07/02(土) 07:05:02ID:???分からないかも知れないけど。
0652nobodyさん
2005/07/02(土) 13:53:31ID:???0653622
2005/07/02(土) 14:20:11ID:???ありがとうございます。どうも、リファレンスで混乱してたようです^^;
「.=」して分割を考えるとかでも十分なのかな。。
モジュールは勉強したいとは思うけれど、種類の多さ機能の多さに・・・
そもそも、なんかもっと根本的な部分で知識と理解が足りてなさすぎる。。
0654nobodyさん
2005/07/02(土) 23:30:34ID:???そうそう、そんな感じ。
複数データはタブとか改行で区切るだけでも十分。
どうせ汚染チェックは必要なんだから、タブや改行はそこで取り除けばいいだけだし。
モジュールはセキュリティに気を配って書かれているのは良いけど無駄が多いからなぁ。
0655nobodyさん
2005/07/03(日) 01:29:15ID:???区切りはタブでデータを記録してた時、フィールド内をさらに区切りたくて、
そのときタブも改行も使えないから何を使えばよいか迷って、結局^fだか^gを
使ったんだけど、こういうときにどういう制御文字を使う(または使う順序)の
約束事みたいなのあるかなと思って調べてわからなかったんだけど、
なにかあります?
0656nobodyさん
2005/07/03(日) 01:33:17ID:???0657nobodyさん
2005/07/03(日) 01:59:23ID:???0658nobodyさん
2005/07/03(日) 02:49:19ID:???ファイルオープンのとき、読み取りモードで開こうとしてファイルがなかった場合に、新しく生成させるために
&file_open(*FILEHANDLE,path)を定義してやってるんですが、
&file_open(FILE,$filepath);
flock(FILE,1);
とすると500Internal(以下略 が出てプロセスのタイムアウトとか言われます。
ファイルロックしているファイルにアクセスしようとしてるのかと思って調べてみましたがそうでもないみたいです。
なにか心当たりがあれば教えていただけませんか?
0659nobodyさん
2005/07/03(日) 02:50:33ID:???5行目 ×&file_open(FILE,$filepath);
○&file_open(*FILE,$filepath);
0660nobodyさん
2005/07/03(日) 03:51:27ID:???ここ参考
CGI設置について質問 【Part2】
http://pc8.2ch.net/test/read.cgi/php/1104624784/2
0661658
2005/07/03(日) 04:39:10ID:???大変失礼しました。
もちろんローカルサーバでテストを行っていますが、「プロセス中にタイムアウトしました」としか
メッセージが出なかったもので、そのまま書いてしまいました。
3行ほどのテストプログラムを組んでコマンドプロンプトで実行させてみたところ、
いつまで待っても処理が終わらず、さらに問題と思われる行の前後で文字列を出力させてみたところ、
前ではうまく出力しますが後では出力しないため、問題がこの行にあるのは明白だと思われます。
&file_openのソースは以下のとおりです。
sub file_open{
local *FILE = shift;
my $filename = shift;
if(! -e $filename){
my $fntemp = $filename;
$fntemp =~ s/^(\>|\<|\+)*//;
open(NEW,">$fntemp");
close(NEW);
}
if(!open(FILE,"$filename")){&sub_error(2);}
return;
}
0662nobodyさん
2005/07/03(日) 07:52:34ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_can_I_make_a_filehandle_loca
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_can_I_use_a_filehandle_indir
0663658
2005/07/03(日) 14:25:42ID:???読ませて頂きましたが、使い方は私ので合っていると思います。
ただ、ファイルオープン後にflock関数が使えないという点について何か教えていただけませんでしょうか。
0665nobodyさん
2005/07/03(日) 15:55:28ID:???sysopenでO_CREAT使えば一発なわけだが。
0666658
2005/07/03(日) 16:00:37ID:???ファイルハンドルを局所化して使うと、サブルーチンの外ではflockは使えないのですか?
0667nobodyさん
2005/07/03(日) 16:26:41ID:???試してみたがお前のプログラムは限定された状況でなら動くので、
問題は別のところにあると思われる。
% cat foo.pl
my $filepath = "foo";
&file_open(FILE,$filepath);
flock(FILE,1) or die "flock: $!";
sub file_open{
local *FILE = shift;
my $filename = shift;
if(! -e $filename){
my $fntemp = $filename;
$fntemp =~ s/^(\>|\<|\+)*//;
open(NEW,">$fntemp") or die "open NEW: $!";
close(NEW);
}
if(!open(FILE,"$filename")){&sub_error(2);}
return;
}
(続く)
0668nobodyさん
2005/07/03(日) 16:26:56ID:???% strace perl foo.pl
(中略)
stat64("foo", 0x814d0c8) = -1 ENOENT (No such file or directory)
open("foo", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbffff5a8) = -1 ENOTTY (Inappropriate ioctl for device)
_llseek(3, 0, [0], SEEK_CUR) = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
fcntl64(3, F_SETFD, FD_CLOEXEC) = 0
close(3) = 0
open("foo", O_RDONLY|O_LARGEFILE) = 3
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbffff5a8) = -1 ENOTTY (Inappropriate ioctl for device)
_llseek(3, 0, [0], SEEK_CUR) = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
fcntl64(3, F_SETFD, FD_CLOEXEC) = 0
flock(3, LOCK_SH) = 0
close(3) = 0
exit_group(0) = ?
ファイルは開かれているしflockも正常終了している。
0669nobodyさん
2005/07/03(日) 16:39:25ID:???file_openに渡している'FILE'はただの文字列なので、呼び元と
file_openが別パッケージのときにおかしくなるだろう。
open(NEW,..)の戻り値を見ていない。せめてdieぐらいしとけ。
-eで調べてなければファイルを作っているが、ここがアトミック
に実行されていないのでそのうちメチャクチャになるだろう。
最後の問題のおかしくなるシナリオの例はこんな感じだ。
(プロセスA) -eでファイル調べたらなかった
(プロセスB) -eでファイル調べたらなかった
(プロセスA) ファイル作ってflockしていろいろ書き込む
(プロセスB) open(NEW ">$fntemp")いきなりやるのでAが書き込んだファイルが空っぽに
0671658
2005/07/03(日) 17:01:45ID:???ありがとうございます!
視点を変えてもうすこしバグフィックスしてみますね。
最後の問題は、もう少し煮詰める必要がありそうですね。
open(NEW,"+>$fntemp");truncate・・・のほうがいいんでしょうか。
ともあれ、本件は本当にありでした。
まだ問題の解決になっていませんが、とりあえず問題がこのルーチン以外にあるということが分かったのでもう少し考えて見ます。
0672nobodyさん
2005/07/04(月) 01:53:07ID:???データファイルとして保存する際、特殊な制御文字を使うのはあまりおすすめしない。
テキストエディタでメンテナンスする時のことを考えるとね。
スペースとかカンマとかで区切っちゃっていいんじゃないの?
checkboxやselectでスペースやカンマを使用しなければ済む話なんだから。
0673nobodyさん
2005/07/04(月) 10:25:04ID:???Storableが楽だと思う。
0675nobodyさん
2005/07/04(月) 22:46:13ID:???# Hoge->new() があるかどうか、ってことは ↓ みたいにすればできるみたいなんだけど
use strict;
print defined Hoge; # これは error
print defined &Hoge::new ? 1 : 0; # 1
print defined Moge; # これも error
print defined &Moge::new ? 1 : 0; # 0
package Hoge;
sub new {}
0677nobodyさん
2005/07/05(火) 00:25:37ID:???>>676 ありがとうー。
でも何で? どういう理屈?
リソースとかあったら教えてほしいわ。
0678nobodyさん
2005/07/05(火) 01:00:15ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlmod.html
0679nobodyさん
2005/07/05(火) 01:31:57ID:???ありーー
0680nobodyさん
2005/07/05(火) 04:53:09ID:???@{ $arr[0] } とすると
$arr[0]にある無名配列の参照をデリファレンスしてリストとして見ている
という意味でしょうか?
0681nobodyさん
2005/07/05(火) 05:01:50ID:???0682680
2005/07/05(火) 05:46:53ID:???0683nobodyさん
2005/07/06(水) 02:17:46ID:???0684nobodyさん
2005/07/06(水) 10:39:36ID:???0685nobodyさん
2005/07/06(水) 11:33:27ID:FWp4IWEUaaaaのデータベースのレコードの情報6行分をハッシュbbbbに入れて、
その後ハッシュの配列?ccccに入れるプログラムを作りたいのですが、
期待する結果が出てくれず困っています。
test01の結果は、普通に6行分表示されるのでOKなのですが、
test02の結果は、6行目のレコードの情報が6回表示されてしまいます。
なぜ最後の6行目の情報だけが6回入ってしまうのでしょうか?よろしくお願いします。
0686プログラム
2005/07/06(水) 11:34:05ID:FWp4IWEUmy @cccc;
my %bbbb;
foreach(@$aaaa){
$bbbb{'1111'} = $_->{'1111'};
$bbbb{'2222'} = $_->{'2222'};
$bbbb{'3333'} = $_->{'3333'};
#%bbbbのテスト表示(test01)
my $key;
foreach $key(keys(%bbbb)){
print "キー:".$key."\n<BR>";
print "値:".$bbbb{$key}."<BR><BR>\n";
}
push(@cccc,\%bbbb);
}
#$@ccccのテスト表示(test02)
my $key;
my $value;
my $j;
for($j=0;$j<@cccc;$j++){
while(($key,$value) = each(%{$cccc[$j]})){
print "キー = ".$key."<BR>\n";
print "値 = ".$value."<BR><BR>\n";
}
}
0687nobodyさん
2005/07/06(水) 12:05:28ID:???pushしたリファレンスは全部同じ一つの%bbbbを参照してる。
中身は最後に上書きされた六行目。
0688nobodyさん
2005/07/06(水) 17:26:34ID:???どうすればいいのか見当もつきません。
例えば '.jpg' から 'image/jpeg' を得たいということです。
インターネットサービスマネージャのコンピュータのプロパティの
コンピュータ MIME マップをクリックして出てくるリストです。
サーバーは Windows 2000 Server SP4 上の IIS 5.0 (.NET なし) で
Active Perl 5.8.4 Build 810 のようです。
何かいい方法があればご教授ください。どうぞよろしくお願いします。
0689nobodyさん
2005/07/06(水) 20:03:07ID:???A. Win32::Registry で
HKEY_LOCAL_MACHINE\Software\CLASSES
に設定されている俺様 MIME type を読む。
B. Apache のソースを拾ってきて、
http://sunsite.tus.ac.jp/pub/apache/httpd/httpd-2.0.54-win32-src.zip
docs/conf/mime.types を使う。
C. http://www.iana.org/assignments/media-types/ から
適当にリストを自作する。
お好きな方法を。
0690nobodyさん
2005/07/07(木) 16:59:03ID:???ありがとうございます。
しかしながら、いずれも私が欲しいリストとは異なるようです。
A は非常に近いものが得られますが、OS の MIME タイプと
IIS のマスタプロパティに設定された MIME タイプは違います。
IIS ではルート (仮想サーバー) 以下のフォルダにも追加できますが、
それはないようでした。
IIS の MIME タイプは %SystemRoot%\system32\inetsrv\MetaBase.bin
に保存されることはわかったんですが、中身の形式がわからないので
直接設定を読むことはあきらめ、ListBox から抜いたものを手作業で
ファイルにして使うことにします。
滅多に変更する人はいないので、実用上の問題はないと思います。
0691nobodyさん
2005/07/07(木) 17:24:02ID:???ttp://opensource.activestate.com/authors/tobyeverett/index.html
あたり参考にしてアクセスできないだろうか。
0692nobodyさん
2005/07/07(木) 18:54:34ID:???興味深いですが、私のスキルではすぐに理解できません。
実はかなり初心者で、COM とか ActiveX 関係はさっぱりです。
とりあえず専用プログラムで ListBox のウィンドウから取り出してもらうと
いうことで落ち着きましたので、もう少し勉強してから考えてみます。
0693nobodyさん
2005/07/08(金) 15:51:55ID:8f5N4Odz$namae = "100";
$test = "test3.txt";
open(TEST,"<$test");
print "Content-type: text/html\n\n";
while(<TEST>) {
print;
}
test3.txtの中身
$namae
プログラムを動かしてみると、ブラウザに表示されるのは $namae っていう文字になってしまいます。
これを、 100 と表示させたいのですが、どうすればいいのでしょうか・・・
0694nobodyさん
2005/07/08(金) 17:51:10ID:???eval
と言いたいところだが、 test3.txt の中身をいたずらされると怖いので、こんな感じで。
$namae = "100";
%data = ('namae' => $namae);
$test = "test3.txt";
open(TEST,"<$test");
print "Content-type: text/html\n\n";
while(<TEST>) {
s/\$(\w+)/$data{$1}/g;
print;
}
0695693
2005/07/08(金) 21:16:45ID:nSk2Gtk0ありがとうございます。さっそく帰ったら試して見ます。
text3.txt内の変数の数が増えても、同じ考え方で問題ないんですよね?
0696693
2005/07/08(金) 21:16:59ID:nSk2Gtk0ありがとうございます。さっそく帰ったら試して見ます。
test3.txt内の変数の数が増えても、同じ考え方で問題ないんですよね?
0697nobodyさん
2005/07/09(土) 00:00:25ID:???そうそう、こんな感じで。
$omae = "200";
%data = ('namae' => $namae, 'omae' => $omae);
# あとは同じ
0698693
2005/07/09(土) 02:20:01ID:Kb/ss4Wfありがとうございます!
無事に動きました。
あとは、これを理解して、自分の物にします。
どうもありがとうございました。
0699nobodyさん
2005/07/09(土) 02:24:20ID:???0700nobodyさん
2005/07/09(土) 08:01:17ID:???<どうでもいこと>クォートがいらないのは"=>演算子の"左辺値が"英数字のみで構成されているとき"のみ</どうでもいいこと>
0701nobodyさん
2005/07/09(土) 09:26:13ID:???0702nobodyさん
2005/07/09(土) 09:28:58ID:???0703nobodyさん
2005/07/09(土) 12:41:54ID:???/^-?[a-zA-Z_]+\w*$/
数字で始まったり、先頭のマイナスの直後が数字だったりすると数値として解釈される。
さらにその後がアルファベットだったりすると構文エラーになる。
ハッシュの要素参照の{}も同じだね。
構文エラーになる分には気が付くからいいけど、01=>'a'とか、0_2=>'b'とか、-03=>'c'とかするとはまるよ。
0705502
2005/07/10(日) 09:22:13ID:???囲まないでもできますけど、自動でクオートしてくれてるってこと?
while(<>){
$hash{(split[0])} = (split)[1];
...
なんて。
0708nobodyさん
2005/07/10(日) 20:48:08ID:???0710nobodyさん
2005/07/12(火) 06:26:14ID:???0711nobodyさん
2005/07/12(火) 06:56:22ID:???0712nobodyさん
2005/07/12(火) 07:31:37ID:???0713nobodyさん
2005/07/12(火) 10:05:30ID:???0714nobodyさん
2005/07/12(火) 12:04:24ID:???0715nobodyさん
2005/07/12(火) 12:59:07ID:???0716nobodyさん
2005/07/12(火) 13:30:25ID:???スルーが吉。
一人二役以上で自演して荒れてるように見せるかもしれないけど、
全部スルーするのが吉。
0717nobodyさん
2005/07/14(木) 11:35:37ID:0L4aMOkE↑のMobileMiniBlog Ver1.0というのを使いたいんですが、
必要最低限の設定をしてからローカルでテストしてみても、表示結果が
</TR>
</TR>
</TR>
</TR>
</TR>
というものになってしまいます。
初期設定のままでも同じです。
サンプルでは
ttp://moritomo.k2.xrea.com/cgi/diary.cgi
のようなものになるらしいんですが…。
どこをいじればいいのか教えていただけないでしょうか?
よろしくお願いいたします。
※分からないことがあったら問い合わせるようにとスクリプトの中にメールアドレスが
書いてありますが、この作者はなんかエロいので怖くて問い合わせできません…。
0718nobodyさん
2005/07/14(木) 12:24:32ID:???CGI設置について質問 【Part2】
http://pc8.2ch.net/test/read.cgi/php/1104624784/
0720nobodyさん
2005/07/15(金) 08:49:12ID:cv7TvBaQ0721nobodyさん
2005/07/15(金) 10:38:50ID:???簡単なシュミレータを作ってCGIとして公開したいと思っているのですが
一時間に一回程度のペースでクライアントのアクセスのあるなしにかかわらず
perlで更新させるにはどう書けばよいでしょうか
どなたか詳しい方ご教授お願いします。
0723nobodyさん
2005/07/15(金) 13:24:06ID:???どーすりゃいいですか。
0725723
2005/07/15(金) 14:25:42ID:???みたいなのが詰まっている配列mogeがありまして、
urlの値でいくつか重複がある(のを区別できる)ようなので、
それ含む$moge[m]を削除したいのです。
(つまり $moge[n]{url} と $moge[m]{url} が同じときに $moge[m]を削除したい)
grepを使うんでしょうが、右辺をどうやればいいのかわからないのです。
0726nobodyさん
2005/07/15(金) 14:50:58ID:???@in_array = (
{url=>'http://hoge.hoge1/',title=>'うんたら1',time=>1111111}, #<--重複
{url=>'http://hoge.hoge2/',title=>'うんたら2',time=>1111122},
{url=>'http://hoge.hoge1/',title=>'うんたら4',time=>1112222}, #<--重複
{url=>'http://hoge.hoge3/',title=>'うんたら3',time=>1112332},
);
#順番が入れ代わってもいい場合かつ後入優先
$tmp_hash{$_->{url}} = $_ for @in_array;
@out_array = values %tmp_hash;
#順番が入れ代わってもいい場合かつ先入優先
$tmp_hash{$_->{url}} = $_ for reverse @in_array;
@out_array = values %tmp_hash;
#順番を入れかえない場合後入優先
$tmp_hash{$_->{url}} = [$_,$i++] for @in_array;
@out_array = map{$_->[0]} sort {$a->[1] cmp $b->[1]} values %tmp_hash;
#順番を入れかえない場合先入優先
$tmp_hash{$_->{url}} = [$_,$i++] for reverse @in_array;
@out_array = map{$_->[0]} sort {$b->[1] cmp $a->[1]} values %tmp_hash;
0727nobodyさん
2005/07/15(金) 14:52:11ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_can_I_extract_just_the_uniqu
my %saw;
@moge = grep !$saw{$_->{'url'}}++, @moge;
0729723
2005/07/15(金) 15:24:57ID:???おおお、ありがとう!
つまりurlの値をキー名にしたハッシュを作って、値のリストを得るのか!
726のほうは725のをコンパクトにしたものと見ていいのかな。
++のところで何が起きているのかよくわかりませんが。
0732nobodyさん
2005/07/17(日) 09:29:37ID:???testサブルーチンでmyを付け忘れているのですがエラーも警告もでません。
これを回避するためにはどうのような記述をしたらいいのでしょう?
use warnings;
use strict;
my $x = 100;
test();
print "Content-Type: text/html\n\n";
print $x;
sub test{
$x = 10;
}
0733nobodyさん
2005/07/17(日) 11:00:09ID:???レキシカルスコープの有効範囲についてよく勉強することを
薦めるが、この場合最初のmy $xの有効範囲はファイルの終わり
までになるので、testサブルーチンの中からも見えてしまう。
回避するための記述の仕方はいろいろあるんじゃないかと思う
が、オレはmainサブルーチンを作ることにしてるな。これなら
testサブルーチンでエラーになるはず。
use warnings;
use strict;
main();
exit;
sub main {
my $x = 100;
test();
print "Content-Type: text/html\n\n";
print $x;
}
sub test{
$x = 10;
}
0734nobodyさん
2005/07/17(日) 11:05:17ID:???>>733
わざわざサブルーチン作らんでも。
use warnings;
use strict;
{
my $x = 100;
test();
print "Content-Type: text/html\n\n";
print $x;
}
sub test{
$x = 10;
}
で逝ける。
0735nobodyさん
2005/07/17(日) 12:07:38ID:???なるほど、サブルーチンにしろブロックにしろ
メインルーチンをブロックに押し込めて
メインルーチンとサブルーチンのスコープを外すわけですね。
一瞬、ブロックを外れたmyは、use strictの場合
警告だしてもいいんじゃないのかなとか思ったんですが
>>733-734のような書き方をすれば
1つのソースファイル内のみで定義されているサブルーチン間で
共通の変数を使いたいときにブロックの外でmyを使えば
ourみたいに他のソースファイルに影響を与えないわけですね。
てかPerl、奥深すぎ。
わかりました、ありがとうございました。
0736nobodyさん
2005/07/17(日) 13:33:31ID:???生産地、商品、価格のカテゴリーがあるとして
○生産地フォルダ→商品ファイル→価格
という方式と
○生産地ファイル→商品リスト→価格
という方式と
○生産地リスト→商品+タグ+価格でデータ取得時にタグを取るプログラムを書く方式
の3つの方法があるとしてどれくらい負荷が違うものなのですか?
私がやりたいのはもう少しだけ複雑なデータなので大差が無いならわかりやすい一番上の方式をとりたいです。
ご教授よろしくお願いします。
0739nobodyさん
2005/07/17(日) 22:31:36ID:???varsと違って、チェック機構そのものはレキシカルスコープをもつから。
0740nobodyさん
2005/07/18(月) 14:44:31ID:???アンダースコアから始まるのはプライベート、とかあるけど、
ハイフンから始まるのは何か意味ってあるの?
0741nobodyさん
2005/07/18(月) 21:50:58ID:???名前付きパラメータの場合によく見かけるな。↓なんかそうだ。
ttp://search.cpan.org/~snowhare/Class-NamedParms-1.04/lib/Class/NamedParms.pm
慣習としてどっかに書いてあるのかは知らない。
0742nobodyさん
2005/07/20(水) 09:58:16ID:???<a href="$script?mode=help&no=$no>ほげ</a>
$scriptはスクリプトURLが入ります。→OK
mode=helpはhelpモードへ入ります。→OK
しかし&以下、no=$noがうまく動作しません。
$noは任意の数字が入ります。そして、それを・・・
print "<form method='$method' action='$script' name=help_form>";
print "<input type=hidden name=no value='$in{'no'}'>";
この$in{'no'}'へ入れたいのですが、動かしてみるとvalue=''になってしまい
数値が入力されません。
どうすれば動作するようになるでしょうか・
#リンクの書き方??
0743nobodyさん
2005/07/20(水) 10:13:24ID:???ダブルクォート
0744nobodyさん
2005/07/20(水) 11:00:01ID:???2行目をコピペして以下のように$in{'no'}に
値を入れて実行すると
$in{'no'} = 100;
print "<input type=hidden name=no value='$in{'no'}'>";
結果は
<input type=hidden name=no value='100'>
となって正常に見えるので、間違ってるのはここではないな。
$in{'no'}に値はちゃんと入ってるか?
0745nobodyさん
2005/07/20(水) 11:05:58ID:???なぜ空なのかはエスパーじゃないからわからない
0746nobodyさん
2005/07/20(水) 21:03:22ID:???<a href="$script?mode=help\&no=$no">ほげ</a>
にしてみては?
下の文は no=$no が機能してないから空なんじゃないの?
0747746
2005/07/20(水) 21:04:09ID:???<a href="$script?mode=help\&no=$no">ほげ</a>
0748742
2005/07/20(水) 22:26:23ID:???シングルクオートをダブルクオートにしても、クオートなしにしても、
リンクのno=$noが入ってこない。valueが空なのです。
>>746
試してみます。
0749nobodyさん
2005/07/20(水) 22:30:25ID:8r7NrGN/print で <img> を書くと Internal Server Errorになる気がします。
何か対処方法はありますか?
0750nobodyさん
2005/07/20(水) 22:31:43ID:???0751742
2005/07/20(水) 22:31:58ID:???アンカータグの中の$noは、スクリプトの中から取得した数字で
そこはちゃんと数字が入っています。
だから本当は、このスクリプトを動かすと、
<a href="〜cgi?mode=help&1">クリックすべし</a>
という形になります。で、&以下の1の部分が、リンクタグをクリックした
先のフォームの中の
print "<input type=hidden name=no value='$in{'no'}'>";
ここに入る・・・予定だったのに入らない。
フォームボタンなんかだったら$FORM{'no'}とするところですが
0754nobodyさん
2005/07/20(水) 22:52:11ID:???0755742
2005/07/20(水) 22:54:20ID:???正直、よくわかりません(^^;
<form〜>を使ってれば$FORM〜になるという理解。
#それでも$inになってることもあるので自信は0%。
0756742
2005/07/20(水) 22:58:28ID:???・・・なんでだろう。
ぐぐりの旅へイッテキマス。
さんきゅーでした>ALL
0757749
2005/07/20(水) 23:07:02ID:???0758nobodyさん
2005/07/20(水) 23:07:39ID:???0761nobodyさん
2005/07/21(木) 06:13:37ID:???0762nobodyさん
2005/07/21(木) 10:15:20ID:???0763nobodyさん
2005/07/21(木) 19:16:23ID:00deyUp9初心者向けのperlの本を買って、カウンタや掲示板が作れる事は分かったのですが、そういう類のものは別に作りたくありません。
というか、perlを覚えるとどんな便利な事があるのか
本を読んでもいまいちピンときません。でも覚えたいです。
皆さんは「あぁ、perlを覚えてよかったな〜」と思ったのはどんな時ですか?
また、最も簡単にその気分を味わう方法があったら教えてください。
0764nobodyさん
2005/07/21(木) 20:05:00ID:???0765nobodyさん
2005/07/21(木) 20:10:56ID:???0768nobodyさん
2005/07/22(金) 12:55:10ID:Nv8MLct4どのように作れば良いかご存知でしょうか
『1時間に一度データを集計し、その結果によってデータベースを作成。
その結果をあらかじめ登録してあったメールアドレスに転送する』
というものを作成したいのです。
メールアドレスへの転送や、集計などは出来ているので
『1時間に1度CGIを起動する方法』を教えてください。
よろしくお願いします
0769nobodyさん
2005/07/22(金) 13:29:40ID:???タスクスケジューラなりcronなりに登録する。以上。
0770nobodyさん
2005/07/22(金) 15:09:15ID:???#パールのパス
無限ループ{
&ここで集計してメール;
寝る(参千六百秒);
}
テストするには
ぱーる 寝ろ!どっとしーじーあい & で起動。
0771nobodyさん
2005/07/22(金) 15:40:28ID:???0772nobodyさん
2005/07/22(金) 21:21:31ID:zirnRNb/BBSを晒しまくるアホがいるので、ダミーのCGIを置きたいのです。
で、その内容なのですが、
#!/usr/bin/perl
print <<"_HTML_";
HTMLの案内文章
_HTML_
と、たったこれだけです。
サーバーにアップするとエラーになります。
パーミッションは755にしました。
ちゃんとアスキーモードで転送しています。
コードがおかしいのでしょうか?すみませんが助力お願いします。
0773nobodyさん
2005/07/22(金) 21:28:52ID:???>>1
> 3: こんなエラーが出て上手く行かなかった。
http://www.harukaze.net/~mishima/perl/cgi-debug-env/deb-tech.html
0774nobodyさん
2005/07/22(金) 21:32:38ID:???怪しいかもしれませんが)、これに「全角、半角スペース」を追加する場合、「|$nobashi」
のあとに「|$space」といったものを追加すれば問題ございませんでしょうか。
また、スペースのコードを教えていただけますと幸いです。
$eucpre = qr{(?<!\x8F)};
$eucpost = qr{
(?=
(?:[\xA1-\xFE][\xA1-\xFE])* # JIS X 0208 が 0文字以上続いて
(?:[\x00-\x7F\x8E\x8F]|\z) # ASCII, SS2, SS3 または終端
)
}x;
$hiragana = '\xA4[\xA1-\xF3]'; # ぁ〜ん
$katakana = '\xA5[\xA1-\xF6]'; # ァ〜ヶ
$kanji = '[\xB0-\xFE][\xA1-\xFE]'; # 漢字(実際に割り当てのない領域も有るが問題はない)
$nobashi = '\xA1[\xBC\xBD\xC1]'; # ー−〜
if($name !~ m/^$eucpre(?:$hiragana|$katakana|$kanji|$nobashi)+$eucpost$/){}
0775nobodyさん
2005/07/22(金) 21:33:22ID:???ヒント。
えーとね、ブラウザに表示する内容はそれだけなんだけど、
その前にまずその内容が「どういったものか」をブラウザに伝える必要があるのだよ。
0776nobodyさん
2005/07/22(金) 21:41:20ID:zirnRNb/指摘ありがとうございます。
URL、よく読んでみます。
>>775さん
ヒントありがとうございます。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
とかじゃ……ないですよね?
他のスクリプトがどうやっているかよく見てみます。
0777nobodyさん
2005/07/22(金) 21:42:19ID:???pHPがずっといいぞ。
二日で理解できた。
0778775
2005/07/22(金) 21:53:12ID:???><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
>とかじゃ……ないですよね?
じゃないっす。
> 他のスクリプトがどうやっているかよく見てみます。
うむ、これは非常にいい心がけだ。
いくつかのスクリプトでhtml出力(とくに最初のヘッダあたり)をしてる部分を
眺めてみれば、すぐ見当がつくと思うぞ。ガンバレ。
0780772
2005/07/22(金) 22:02:16ID:???print "Content-type: text/html\n";
これですね!
>>778
さらなるアドバイスありがとうございました。
本当に助かりました。
0782nobodyさん
2005/07/23(土) 00:06:44ID:???0783nobodyさん
2005/07/23(土) 00:08:31ID:???0784nobodyさん
2005/07/23(土) 11:31:34ID:???0785nobodyさん
2005/07/23(土) 12:54:43ID:???#!/usr/local/bin/perl -w
# usage: perl script file line_num
use strict;
my($file, $target) = @ARGV;
-f $file || die "No such file: $file";
open FILE, '<' . $file or die $!;
my $line;
do { $line = <FILE> } until $. == $target;
close FILE;
print $line;
__END__
0786nobodyさん
2005/07/23(土) 18:26:12ID:???$table = '<table>'を読み込んでくれず、空白になっています。
$table = '< table>'なら読み込んでくれるしまた別の箇所なら$table='<table>'を読み込んでくれます。
print "Content-type: text/html\n\n";も最初に記述しています。
タグを消すようなサブルーチンも入れておらず頭を抱えています。
原因が分かず、変な質問文ですが考えられる原因はどういったものがあるでしょうか?
0787nobodyさん
2005/07/23(土) 18:27:32ID:???$table = ''<tr><td>めいーん</td></tr></table>';
↑上書きしている
0788nobodyさん
2005/07/23(土) 18:36:08ID:???sub table {
$table = '<table>';
$nottable = '< table>';
print $table;
print $nottable;
}
の結果が< table>のみなんです。
0789nobodyさん
2005/07/23(土) 18:42:54ID:???そうか?うちでは、
$ perl
sub table {
$table = '<table>';
$nottable = '< table>';
print $table;
print $nottable;
}
&table();
<table>< table>
だけどな。
0790nobodyさん
2005/07/23(土) 18:48:31ID:???上のサブルーチンだけを別のファイルに移して書くと結果はそうなるのですが
そのファイルを今書いてるやつで書くとそうなるので訳が分からないのです・・・
タグを消すプログラムなんて入れてないし別のファイルを参照もしてないのですが・・・
0791nobodyさん
2005/07/23(土) 18:57:01ID:???説明足らなくてすみません。
0794nobodyさん
2005/07/23(土) 20:12:58ID:???0795nobodyさん
2005/07/23(土) 20:21:46ID:???とりあえず use strict; と perl -w しておけ、って感じ。
0797nobodyさん
2005/07/23(土) 23:17:28ID:???0798nobodyさん
2005/07/24(日) 00:37:08ID:???0799nobodyさん
2005/07/24(日) 06:19:52ID:???ttp://allabout.co.jp/career/cgiperl/closeup/CU20050131A/index4.htm
500エラーがでますた。
鯖はxrea パ−ミッションは755
どのへんが問題でしょうか?
0800nobodyさん
2005/07/24(日) 07:27:11ID:???0802801
2005/07/24(日) 08:48:27ID:???モジュールも入ってるし。
恐らくdataディレクトリとか作ってないんだろ。
0803nobodyさん
2005/07/24(日) 08:51:23ID:???0804nobodyさん
2005/07/24(日) 12:28:38ID:???0805nobodyさん
2005/07/24(日) 18:07:55ID:???AddType cgi-script-debug .cgi
これでデバッグモード
スペルは違う鴨
0806799
2005/07/24(日) 19:04:15ID:???Can't locate XML/RSS.pm in @INC (@INC contains: ./mylib /usr/lib/perl5/5.00503/i686-linux /usr/lib/perl5/5.00503 /usr/lib/perl5/site_perl/5.005/i686-linux /usr/lib/perl5/site_perl/5.005 .) at tmp.pl line 6.
BEGIN failed--compilation aborted at tmp.pl line 6.
dataディレクトリは作ってあります
モジュールがないってことなんでしょうか?
でもxreaではインストールしてあるみたいですが。
0807nobodyさん
2005/07/24(日) 20:16:20ID:???0808nobodyさん
2005/07/24(日) 21:14:47ID:???この根拠は?
0809nobodyさん
2005/07/24(日) 21:24:43ID:???ttp://sb.xrea.com/showthread.php?t=9748
0810nobodyさん
2005/07/24(日) 21:42:23ID:???799 の使っているサーバは s151 なのか? s151 には Perl 5.8.7 が
入っている筈だが、何故 @INC には 5.005 のディレクトリしか無いんだ?
http://www.s151.xrea.com/server_info.cgi
XML::RSS は Pure Perl な一ファイルのモジュールなんだから、
無ければ自分のスペースに置いて use lib すればよかろうに。
http://search.cpan.org/~kellan/XML-RSS-1.05/
スレ違いな話題なんでこれ以上続けたいなら下のスレへでも行ってくれ。
CGI設置について質問 【Part2】
http://pc8.2ch.net/test/read.cgi/php/1104624784/
0811nobodyさん
2005/07/24(日) 21:56:39ID:???0812nobodyさん
2005/07/24(日) 22:08:41ID:???0814nobodyさん
2005/07/25(月) 03:28:32ID:???ここの 318 書いた俺の方が勝ち組
0815nobodyさん
2005/07/25(月) 15:03:30ID:???local ($hogehoge , %hoge2);
というふうに、local宣言をしても、有効範囲の宣言がされていないぞ
(゚Д゚)ゴルァと言われてしまうのですが、localを使うにはstrictをあきらめ
なければいけないのでしょうか?
尚、my ($hogehoge ,%hoge2);だとうまくいきます。
0816nobodyさん
2005/07/25(月) 15:22:26ID:???0817nobodyさん
2005/07/25(月) 15:28:18ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq7.html#What_s_the_difference_between_dy
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsub.html
0818nobodyさん
2005/07/26(火) 01:51:12ID:???持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
0819nobodyさん
2005/07/26(火) 01:54:16ID:???0820nobodyさん
2005/07/26(火) 03:48:28ID:???なんとか通過させたく、用意したフォームからフォームから
Basic認証情報を入力させて、環境変数のAUTH_USER、
AUTH_PASSWORDを強制的にセットさせるようなスクリプトを
考えております。
環境変数をCGI側で設定してBasic認証領域内にアクセスさせる
ような仕組みは可能でしょうか。
もしも可能であれば、ご教示いただきたく思っております。
まとまりのない文章ですみません。
0821nobodyさん
2005/07/26(火) 16:42:49ID:EJMHsz5R$hara =1;
while ( 1 ){
for ( $i = 1; $i <= 3; $i++ ) {
$index0= rand @array;
$index1= rand @array;
$index2= rand @array;
my $tmp0=$array[$index0];
my $tmp1=$array[$index1];
my $tmp2=$array[$index2];
$shibi0 = $tmp0;
$shibi1 = $tmp1;
$shibi2 = $tmp2;
}
if( $shibi0 != $shibi1 && $shibi0 != $shibi2 && $shibi1 != $shibi2 &&
$hara != $shibi0 && $hara != $shibi1 && $hara != $shibi2
){last;}
}
0〜9の中から3つの数字をランダムで選びだし、
重複せず、かつ$haraに代入されている数字とは異なる物が3つ揃った時に
ループを抜けるというスクリプトです。
これで動作はするのですが、あまりにも原始的というか
もう少しスマートなやり方だと、どういう風に組めるでしょうか?
自分の頭だとこれでいっぱいいっぱいでした。
0822nobodyさん
2005/07/26(火) 17:06:05ID:???過去ログで似たのでてきた気がする。 どこだかは知らないけど。
まあ、取得した値の要素を、一度配列から抜くとか、ハッシュでフラグたてたりしたら、絶対重複しないと思うけど?
>>821 の $shibi0-2 を出したいだけじゃなかったら意味ないけど、例えば
my @array = (0 .. 9);
my @shibi = ();
my %flag = ( 1 => 1 ); # >>821 の $hara の "1"
for (my $i = 0; $i < 3; $i++) {
my $tmp = $array[ rand @array ];
redo if (exists $flag{$tmp});
$flag{$tmp} = 1;
push (@shibi, $tmp);
}
print @shibi;
0823nobodyさん
2005/07/26(火) 17:17:17ID:???標準モジュールのList::Util使ってこういうのも。
use List::Util 'shuffle';
@array = (0..9);
$hara = 1;
($shibi1, $shibi2, $shibi3) = splice @{[shuffle grep { $_ != $hara } @array]}, 0, 3;
0824821
2005/07/26(火) 17:18:07ID:???@array( 0..50 )とあるとしたら
0〜10、11〜20、21〜40、41〜45、46〜50それぞれ5セットで上のスクリプトを繰り返して
セット1からは$shibi0〜$shibi2、セット2は$shibi3〜$shibi5のそれぞれ3コ
セット3から$shibi6〜$shibi9の4コ、セット4と5は$shibi10、$shibi11の1つずつ
セットごとに、合計12コの変数を・・・これもforで繰り返させる方法があるんでしょうか?
0825nobodyさん
2005/07/26(火) 18:20:53ID:???つーか何が"補足"だよ。"付け足し"じゃねーか。
>>822 や >>823 使って、考えればできるだろ。
付け足すなら考えて試してから書けよな。
まあ、答えるなら、そのセットと繰り返しを関連付ければいいだけ。
>>822 で言えば、
@hoge = (
{ array=>[0..10], times=>3 },
・・・
[ array=>[46..50], times=>1 ],
);
とかやって、
for (my $h = 0; $h < @hoge; $h++) {
my $set = $hoge[$h];
# ここから >>822 のソースを参考
my @array = @{ $set->{array} };
# 中略
for (my $i = 0; $i < $set->{times}; $i++) {
# 以下略
って置き換えたりするだけだべ。
細かいところはもう知らん。
0826nobodyさん
2005/07/26(火) 19:07:57ID:???0827nobodyさん
2005/07/26(火) 20:37:18ID:W0GVg4kD$value とした本文中のURL表記を正規表現で拾って自動リンクさせているのですが
1.この中に自分のサーバ(プロバイダ)内のURLはそのままHTMLタグでリンク、
2.外部のURLは一旦別のcgiに「別のcgi?x=URL」として送るHTMLタグにしたい
3.さらに、「=」がある場合は別変換してから「別のcgi?x=URL」とする必要があると気づきました
これまで、1.2.まではifで分けてやっていたのですが、複数のURLがあると
当然ですが一緒の条件内に組み込まれてしまいます
$value~s//g ; を複数並べることで正規表現でできるでしょうか?
本文$valueを分割して一度配列に入れ、1行ずつ処理させる方法しかないとすれば、
URLがあるごとにsplitするにはどうしたらよいでしょうか?
0829nobodyさん
2005/07/27(水) 01:21:21ID:???投稿記事中にURLがあった場合にhtmlのリンクタグを書きます
$value =~ s/(http\:[\w\.\~\-\/\?\+\=\:\@\%\;\#;\&\d]+)/<a href=$1 target=_blank>$1<\/a\>/g;
$value =~ s/(http\:[\w\.\~\-\/\?\+\=\:\@\%\;\#;\&\d]+)/<a href=..\/tx.cgi\?tx=$1 target=_blank>$1<\/a>/g;
2行目の転送でURL中に「=」があると、tx.cgiで誤動作がでるので
さらに「=」→「hidarimigi」などに変換して転送しなければならなかったのです
今回は改行の<br>で区切り、配列に入れ、
@NewValue = split(/<br>/,$value);
一行ずつ取り出して、If分岐して3つ以上の分類作業しました
しかし、一行に2つ違うURLがあると同じタグ表記をしてしまいます
なんとか自己解決はしましたが、
今後のため、もしか、もう少しクールな方法があったらお知らせください
0830nobodyさん
2005/07/27(水) 01:24:03ID:???0831nobodyさん
2005/07/27(水) 01:38:24ID:???それをどういう形で出力したいのか
がイマイチわからない
0832nobodyさん
2005/07/27(水) 01:52:15ID:???0833nobodyさん
2005/07/27(水) 02:29:27ID:???0834821
2005/07/27(水) 08:41:51ID:???鯖重くて昨日は見れなかったので、これから試してみます
レスありがとうございました。
>826
違いますよ
0835nobodyさん
2005/07/27(水) 13:04:59ID:???だとしたらアホすぎる…。
0836nobodyさん
2005/07/27(水) 13:16:24ID:???エスケープしすぎマロスwww
> 一行に2つ違うURLがあると同じタグ表記をしてしまいます
これの意味がよくわからんが、最短一致が抜けてるとかそういう問題かな?
0837nobodyさん
2005/07/27(水) 16:31:30ID:???$value = "http://yahoo.com/ http://mydomain/ http://pc8.2ch.net/test/read.cgi?bbs=php&key=1116970588&st=829&to=829&nofirst=true";
$value =~ s!(s?https?://[-_.\!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)!'<a href="'.($1=~m|^http://mydomain.+$|?'':'../tx.cgi?').$&.'" target="_blank">'!eg;
print $value;
・要するに eg オプションつけて s/(略)/make_anchor_tag($1)/eg; のようにサブルーチン呼び出してその中でif文使えばURL1個ごとの振り分けができる。
・tx.cgi?http://... のようにすれば $ENV{'QUERY_STRING'} から読み出すだけなので楽。
0838837
2005/07/27(水) 16:39:37ID:???[-_.\!~*'()a-zA-Z0-9;/?:@&=+$,%#]
↓
[-.\!~*'()\w;/?:\@&=+\$,%#]
0839nobodyさん
2005/07/27(水) 17:55:59ID:???http://hoge.com/hoge.cgi?
key=123&url=http://foo.com/foo.cgi?key=456&value=789
とかあった場合に、スクリプト内で
url=http://foo.com/foo.cgi?key=456&value=789
が & と = のせいで、正しくとれないのでどうすれば、って話だったんじゃねーの?
だから、>>832 の言ったように、
http://foo.com/foo.cgi?key=456&value=789
の部分を URLエンコード (英数字以外を %** 形式に) すればいい、ってゆー。
0840nobodyさん
2005/07/27(水) 18:08:50ID:5H9/gz8d一行ごとに作業させたので、自ドメインと違うのが同じ行にあると
同じ分類として処理されてしまうということです
>>837 >>838
有り難うございます
正規表現からサブルーチンを呼び出すことができるとは
ちょっと頑張って理解してみます
0841nobodyさん
2005/07/27(水) 18:11:03ID:5H9/gz8dそれも参考にします、有り難うございました
0842nobodyさん
2005/07/28(木) 12:09:05ID:nWZS31utそれぞれ特定の文字列「mae」「ato」付けて「mae1ato mae2ato mae3ato ...」
としたいんですが、
$A = '',1,2,3,4,5,6,7,8,;
$A =~s/,/ato,mae/g;
@HAIRETSU = split(/,/,$A);
pop(@HAIRETSU);
shift(@HAIRETSU);
こんな感じでやるのがベスト・・・なわけないと思いつつもどうすべきか分かりません。
何か助言あればお願いします。
0843nobodyさん
2005/07/28(木) 12:12:25ID:???foreach (@HAIRETU) { $_ = 'mae' . $_ . 'ato'; }
0844nobodyさん
2005/07/28(木) 12:29:08ID:???おぉ・・・ずばりそういうことです。
稚拙な落書きを読んでもらった上にスマートな回答
本当にありがとうございました。もっとベンキョしてきます。
0845nobodyさん
2005/07/28(木) 14:18:32ID:???ってのもある。
0847842
2005/07/28(木) 16:08:55ID:???>>846
なるほどなるほど、勉強になります。
言われてみたり、本読んだりしたら「あぁ、そっか」と分かるんですけど
白紙の状態から組むとなると、なかなかひらめかず妙な文字列が…という感じです。
それだけまだ理解が足りていないということだと思うので精進精進です。
ありがとうございました。
0848nobodyさん
2005/07/29(金) 17:12:28ID:DFTdnFF9どのようにしたら良いでしょうか?
連想配列 UserParam{hoge}と通常の配列@Paraparaを同時に渡そうと
しております。
以下のように1つだけのときはうまくいきました。
&xxx(%Param);
sub xxx
local (%Param) = @_
で1とつめはうまくいきました。
が、2つ渡すと、1つ目の配列に入ってしまうようでうまくいきません。
&xxx(%Param,*Parapara);
sub xxx
local (%Param) = @_
local (*Parapara) = @_
宣言方法がいまいちわかりませんので、教えていただければ幸いです。
参考になるサイトもありましたらお教えください。
0849nobodyさん
2005/07/29(金) 17:15:16ID:???どちらかしか選択できないでしょうね。
0850nobodyさん
2005/07/29(金) 17:17:25ID:???0851848
2005/07/29(金) 17:24:38ID:???あなたたちだって最初からわかってたわけではないんでしょ?
0852nobodyさん
2005/07/29(金) 17:31:06ID:???sub xxx(\@\@) {
my ($array_ref_1, $array_ref_2) = @_;
}
これでわからないなら駱駝本でも読んどけ。つーかこんな基本的なことで質問するな
0853nobodyさん
2005/07/29(金) 17:43:50ID:DFTdnFF9わかりました。
もう少し勉強して出直します。
0854nobodyさん
2005/07/29(金) 18:18:51ID:???0855nobodyさん
2005/07/29(金) 20:10:25ID:???基本的なことって、ここ初心者スレだしw
まあ>>850で十分だとは思うが。
>>848
おまいは最低でもググッてから質問しろ。
「Perl サブルーチン 2つの配列」とかいくらでも調べようはあるだろ。
0856nobodyさん
2005/07/29(金) 20:33:41ID:???下記のようにサブルーチンに1個以上の配列のリファレンスを配列の形式で受け渡したいのですが
プロトタイプをどのように記述したらよいのですか。
hoge(); #引き数エラーにしたい。
hoge(@fuga1); #@fuga1のリファレンスを渡したい。
hoge(@fuga1,@fuga2); #@fuga1,@fuga2のリファレンスを渡したい。
hoge(@fuga1,@fuga2,...); #引き数として渡した配列のリファレンスを渡したい。
sub hoge(\@;\@\@); みたいなプロトタイプをサブルーチンを実行させる以前に宣言しておけば
いいのはわかるのですが、渡す配列変数の個数が決まっていない場合
どのように記述すればいいのかがわかりません。どうぞよろしくお願いします。
なお、プロトタイプ宣言せずに直接配列に参照演算子 "\" を使って代入すればいいのは分かっていますが
あえてプロトタイプでお願いいたします。
0858nobodyさん
2005/07/29(金) 21:08:26ID:???任意の個数をすっきり書く方法は用意されてないと思うが、
実用上は
sub hoge(\@;\@;\@;....)
の;\@を十分たくさん書いておけばいいんじゃないのかね。
美しくはないが。
0859nobodyさん
2005/07/29(金) 21:37:08ID:???できる方法があるのなら知っておきたいというだけです。
たとえば、各配列の要素の平均を求めてその総和を求める関数が欲しいとき
$sum = avr_sum @a1,@a2,@a3,@4;
とか書けたらいいなと思っただけです。
まあ、こう書けば代用できますけどね。
$sum = avr_sum \(@a1,@a2,@a3,@a4);
>>858
やっぱりそれしか方法がないですかねぇ。
0861nobodyさん
2005/07/29(金) 23:29:26ID:???>各配列の要素の平均を求めてその総和を求める
@a1 = (3,4,5);
@a2 = (5,6);
@a3 = (3,5,6,7);
@a4 = (3,2,3);
$sum = (3+4+5)/3+(5+6)/2+(3+5+6+7)/4+(3+2+3)/3
こういうことだから、十分じゃないよ。
0862860
2005/07/29(金) 23:44:40ID:???スマン。平均ってのを読み飛ばしてた。
まあでもプロトタイプにこだわらなくてもいくらでも方法があるからいいじゃないかと逃げ。
0863nobodyさん
2005/07/30(土) 00:24:25ID:???0864nobodyさん
2005/07/30(土) 00:30:00ID:???use LWP::Simple;
$content = get($url);
0865nobodyさん
2005/07/30(土) 00:58:41ID:???use LWP;
$content = LWP::UserAgent->new()->request(HTTP::Request->new(GET=>$url,HTTP::Headers->new()))->content();
0866nobodyさん
2005/07/30(土) 21:06:51ID:???http://pc8.2ch.net/test/read.cgi/php/1060009605/345-
にて 2ch 発の技術書企画が進行中です。
主に Web 開発・運営に付いてのノウハウが集められる予定です。
興味のある方・我こそはと思う方は一度覗いてみてください。
0867nobodyさん
2005/07/30(土) 21:20:13ID:???0868nobodyさん
2005/08/02(火) 12:03:21ID:???end_formはformの閉じタグを生成するはずですが、空のdivも同時に生成してしまいます。
これを生成しないようにするにはどう書いたらよいでしょうか?
0869nobodyさん
2005/08/02(火) 12:41:54ID:???ttp://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod
use CGI qw(-nosticky);
0870nobodyさん
2005/08/02(火) 19:16:16ID:+vXBtmaxCGIのデバッグをWinのローカルで行う方法というのはありますか?
0871nobodyさん
2005/08/02(火) 19:17:21ID:???0872nobodyさん
2005/08/02(火) 19:23:44ID:???0873nobodyさん
2005/08/02(火) 19:24:40ID:???ありがとうございます。
Apache for Win32というのを入れればいいんでしょうか?
これは入れると自宅のPCがWebサーバーになってしまったりするんでしょうか?
世界に公開されてしまうのですか?
0876nobodyさん
2005/08/02(火) 20:32:29ID:???0877nobodyさん
2005/08/03(水) 09:27:29ID:2+TF3q2O0879nobodyさん
2005/08/03(水) 11:20:50ID:???use warnings,use strictしてるときパラメータを受け取った変数を条件式に使うとき
わざわざdefinedしないといけないのが面倒です。。何か良い方法があったら教えて頂けないでしょうか?
0880nobodyさん
2005/08/03(水) 12:52:24ID:???0881nobodyさん
2005/08/03(水) 13:15:56ID:???手抜きしちゃいかんよ。
0882nobodyさん
2005/08/03(水) 14:13:16ID:???CGI.pmより軽いし、超快適。
0883nobodyさん
2005/08/03(水) 15:25:05ID:???0884nobodyさん
2005/08/03(水) 15:30:17ID:???0885nobodyさん
2005/08/03(水) 17:04:37ID:???0886nobodyさん
2005/08/03(水) 19:50:20ID:???use strict,warnings下でCGI.pmを使っているけど、問題が起きたことはない。
0888nobodyさん
2005/08/03(水) 20:17:15ID:???たとえばチェックボックスがチェックされなかった
ときのように、あるパラメタがそもそも送られてこないと
スカラーコンテキストのparamはundef返すので、
my $hoge = $query->param('hoge');
if ($hoge == 1) { ... }
とか書くと、use warnings下では Use of uninitialized value in 〜
が出るとかそういう話。もちろんundef返る可能性があるのに
手を抜いてるのがいけない。
0889886
2005/08/03(水) 20:24:57ID:???って書かないか?
0890nobodyさん
2005/08/03(水) 20:46:12ID:???0891nobodyさん
2005/08/03(水) 23:09:39ID:???0892nobodyさん
2005/08/04(木) 00:47:52ID:???CGI::Session を使用していて perl -w で実行すると
(in cleanup) Can't connect to data source , no database driver specified and DBI_DSN env var not set at /usr/lib/perl5/site_perl/5.8.3/CGI/Session/MySQL.pm line 131
というエラーが出てしまいます。
どのような原因なのでしょうか・・・
0893nobodyさん
2005/08/04(木) 01:44:38ID:???Can't connect to data source
no database driver specified
DBI_DSN env var not set
0895nobodyさん
2005/08/04(木) 15:30:09ID:???正規表現と文字列変換で鼻血でそうです。
PHP+mysqlでWEBフォームくらい作れるんですが、
今まで両方とも初見の情報です。
とりあえず基本だから、ということでガリガリ覚えようとしてるんですが、
これ、どんくらいの頻度で使う知識なんですか?
もしすげぇ複雑だけど、ぜんぜん使わないよそこ、みたいなあれだったら悲しい・・・
0896nobodyさん
2005/08/04(木) 15:32:53ID:???DBIがインストールされてないというエラーと思われ
windows環境という前提でいうと、
1.activeperlインスト
2.windowsのコマンドライン(cmd)からinstall DBI
3.windowsのコマンドライン(cmd)からinstall DBD-mysql
でDBIが入る。
0898nobodyさん
2005/08/04(木) 15:42:39ID:???俺はよく使うけど、使うときに調べればそれで十分だと思う。
けど、正規表現は面白くて好き。オライリーの詳細正規表現お薦め。
0899nobodyさん
2005/08/04(木) 15:54:47ID:Ako7Yv7qなるほど!
ちょっと安心しました。
オライリーってあの表紙が動物園みたいなやつですよね。
自分もネズミが表紙のperl本持ってます。
4000(これ、書式は%4dですかw)円は高かった・・
正規表現で一冊できちゃうとは・・・
今度探してゲットします。
ありがとうございます。
0900892
2005/08/04(木) 20:46:43ID:???レスサンクス。
DBI入ってるみたいです。SSHで確認しました。
phpMyAdminから見るとセッションのデータをちゃんとMySQLに入れてて
取得も出来ています。
-wオプションをつけなければなにも問題なくうごいてるので
どうしてこんなエラーになるのかまったくわからなくって・・・
↓こんな感じのモジュール組んでます
0901892
2005/08/04(木) 20:48:26ID:???use strict;
use CGI::Session qw/-ip-match/;
use DBI;
use CGI qw/:standard/;
use vars qw($dbh $session);
sub new {
my $pkg = shift;
bless{
userid => undef
},$pkg;
}
sub GetID {
my $self = shift;
my $sid = shift;
$dbh = DBI->connect('DBI:mysql:+++:localhost', '+++', '********') or die "DBI connect不可\n";
$session = new CGI::Session("driver:MySQL", $sid, {Handle=>$dbh});
if($session->param("userid")) {
$self->{userid} = $session->param("userid");
} else {
$session->delete();
$self->{userid} = "guest";
}
return $self->{userid};
}
0902nobodyさん
2005/08/05(金) 10:16:46ID:???%form = $query =~ /([^=&]+)=([^=&]+)/g;
この1行でも問題ありませんか?
0905nobodyさん
2005/08/06(土) 08:08:56ID:???use strictしているソースを見たことがないのですが
use strictするメリットって何なんでしょうか
0906nobodyさん
2005/08/06(土) 10:35:31ID:???0907nobodyさん
2005/08/06(土) 10:38:17ID:???全部perl信者の妄想だから
0908nobodyさん
2005/08/06(土) 11:50:04ID:???意図しない変数の使用をチェックしてくれる
意図しない裸のワードの使用をチェックしてくれる
意図しないシンボリックリファレンスの使用をチェックしてくれる
特に変数チェックは超重要。今やuse strictしないとコードがかけません。
0909nobodyさん
2005/08/06(土) 17:13:48ID:???頭の悪い人たちが書いたコードでつか?
0910nobodyさん
2005/08/06(土) 19:40:45ID:???0911nobodyさん
2005/08/06(土) 19:43:21ID:???たとえばここなんか有名ですが
ここのスクリプトはuse strictが無いので
勝手に記述して実行すると完全に就職されていないグローバル変数エラーが
山ほど出てきます
他にもアップローダで一番よく使われているなずるぼんアップローダや
あっぷっぷも勝手にusestrict記述して実行すると
山ほどエラーが出てきます
0912nobodyさん
2005/08/06(土) 19:55:08ID:???0913nobodyさん
2005/08/06(土) 20:22:06ID:???漏れもKヨNTでperlを習った口だ。
だが、そのせいで社会復帰がままならない。
KヨNTのスクリプトは今すぐ捨てろ!
全部捨てろ!
そして、奴の事はもう思い出すな。
0914nobodyさん
2005/08/06(土) 20:25:07ID:???0915nobodyさん
2005/08/06(土) 21:16:56ID:???一般人にはuse strictなんて関係ないし、
少しぐらいバグがあっても、文句言いつつ使い続けたりするだろうし。
世の中ってそんなもん。
0917nobodyさん
2005/08/06(土) 23:18:50ID:???0918nobodyさん
2005/08/07(日) 00:26:07ID:???0919nobodyさん
2005/08/07(日) 01:09:48ID:???localはダメですよね?
0920nobodyさん
2005/08/07(日) 02:34:49ID:???それはチェックコストを抑えるため?
CPANで配布されている多くのコードはuse strictしたままだよね。
私も仕事ではつけたままにしてます。
先頭に#が付加されてしまう事が多いですが。
0921906
2005/08/07(日) 14:54:03ID:???仕事なら付けたままのほうが良いかと。
0922nobodyさん
2005/08/07(日) 15:07:05ID:???0923nobodyさん
2005/08/07(日) 15:37:39ID:???0924nobodyさん
2005/08/07(日) 17:18:25ID:???0925nobodyさん
2005/08/07(日) 18:37:02ID:IqAoEAkrブログからRSSを取得してPerlで解析して、jsを出力し、
エントリー概要をhtmlに表示するスクリプトなのですが
open OUTPUT, ">./data/rss.js";
foreach my $item ( @{$rss->{'items'}} ) {
print OUTPUT<<TEXT;
document.write('<a href="$item->{'link'}" target="blank">$item->{'title'}</a>');
TEXT
}
そのブログのエントリー名にシングルクォートが使われると
document.write(' ');でかこんでる部分が、シングルクォートの中に
シングルクォートが入ってhtmlに出力されなくなります。
その問題を解決するにはどういったスクリプトを書けばよいでしょうか?
どうぞヨロシクお願いいたしますm(_ _)m
0926nobodyさん
2005/08/07(日) 19:12:33ID:???0928nobodyさん
2005/08/07(日) 20:47:44ID:???つーか、そういうウンコなの同居させるなら TT とか使えよ。
0929nobodyさん
2005/08/07(日) 21:48:36ID:???0930nobodyさん
2005/08/07(日) 21:54:39ID:???0931nobodyさん
2005/08/07(日) 22:40:40ID:lD997J78と、本題と全く関係ないレスを誇らしげにしてみる。
0932nobodyさん
2005/08/08(月) 01:19:14ID:t9fLm/wi初めてサブルーチンを使ったプログラムを作ったのですが、以下のエラーがでます。
syntax error at C:/Apache2/htdocs/login.cgi line 225, at EOF
225行目には_END_しかないのですが、何がいけないのでしょうか?
0933nobodyさん
2005/08/08(月) 01:24:36ID:???おそらく225行目より前で何か間違えてる。それより前の部分よくチェックしてみるといいかも知れない
0934nobodyさん
2005/08/08(月) 02:05:42ID:???_END_
__END__
0936nobodyさん
2005/08/08(月) 02:43:01ID:???0937nobodyさん
2005/08/08(月) 02:50:55ID:???0938nobodyさん
2005/08/08(月) 02:54:30ID:???0939nobodyさん
2005/08/08(月) 02:56:27ID:???0940nobodyさん
2005/08/08(月) 03:23:25ID:???0941nobodyさん
2005/08/08(月) 04:08:49ID:???AppConfigは@INCの中にないディレクトリ[/home/hoge/module]にインストールされているとします。
perl Makefile.PL --libs="/home/hoge/module"
のような感じで指定出来れば問題なくコンパイル出来るのですが
そのようなオプションはありますでしょうか?
0942nobodyさん
2005/08/08(月) 12:55:58ID:???require './cgi-lib.pl';
require './jcode.pl';
って動かないんですか?
モジュール使わないとダメ?
0943nobodyさん
2005/08/08(月) 12:58:28ID:???0944nobodyさん
2005/08/08(月) 15:11:51ID:???IEやFirefoxのポップアップ抑制機能にじゃまされないで出すようにするにはどのようにすればよいのでしょうか?
vectorなどのサイトではちゃんとダウンロードできるので、何かやり方がありそうなのですが・・・。
0945nobodyさん
2005/08/08(月) 16:00:00ID:???だまって @INC 増やせ。
>>942
動くよ。 スクリプトと同じフォルダに設置しれば?
>>944
zip とかならポップアップしなくても普通にページ移動 (location) すればページ切り替わらずにダウンロード画面になることを知らないのか?
そゆことで、Content-Type がしっかり (ダウンロードされるように) してれば、そのように動く。
0946nobodyさん
2005/08/08(月) 16:13:29ID:???まともな会話の仕方を知らないのか?
0947nobodyさん
2005/08/08(月) 17:02:15ID:???ダウンロードダイアログとポップアップ抑制は関係ないから。
ヘッダとしてContent-Dispositionを出力してみるよろし。
Content-TypeとContent-Lengthも合わせて出力することをおすすめする。
0948nobodyさん
2005/08/08(月) 22:07:27ID:???CGI でしこしこデータを吐いてもいいんだけど、サイズが大きいと色々問題が
出てくるので Location で飛ばす方がいいと思うぞ。
警告なしに飛ばすには色々条件がある。
・Location は必ず HTTP ヘッダで吐く。HTML の <meta> は駄目。
・Location よりも前に Status: 303 See Other を吐く。
メソッドが POST でなければ 302 Found も可。302 の方が対応ブラウザが多い。
これは現在のメソッドに関係なく Location を GET で回収しろという意味。
・Location には絶対 URI を指定する。
さらにこの URI のホスト部分と $ENV{'HTTP_HOST'} は一致させる。
IP アドレスでのリクエストとかもあり得るので必ずチェックすること。
・メソッドが HEAD ならボディは吐かない。
それ以外なら Location へのリンク (<a>) を含む HTML を吐く。
これらが満たせない場合は <form> でのリクエストはあきらめるしかない。
<a> で CGI にリンクすれば回避できるけど、検索エンジンに侵されるのでそのつもりで。
0950nobodyさん
2005/08/09(火) 00:23:13ID:pZHbukIk#! c:/perl/bin/perl
print "Content-type: text/plain\n\n";
print "Hello Perl !";
これって普通ならブラウザー画面に文字が表示されるはずなのに
何故か実行するとファイルダウンロードになるのですが
何故でしょうか
0951nobodyさん
2005/08/09(火) 00:28:33ID:???でアクセスしてる?
0952nobodyさん
2005/08/09(火) 00:30:11ID:pZHbukIkまあローカルホストに違いないが
http://127.0.0.1/です
0953nobodyさん
2005/08/09(火) 00:31:06ID:???conf
0954nobodyさん
2005/08/09(火) 00:33:03ID:pZHbukIkやはりファイルダウンロードになりました
レンタルサーバーのほうは何故か不安定で、ローカルだと表示できるものが、
表示できたり出来なかったりします
パーミッションやパス、その他設定はちゃんとしてるはずなのに
0955nobodyさん
2005/08/09(火) 00:39:46ID:pZHbukIkコンフファイルもソースも付属CDのを使ってるから
間違ってるとは考えにくい
0956nobodyさん
2005/08/09(火) 01:15:37ID:???IE は text/plain をダウンロードしたりしなかったりするよな。
text/html のが確実よ。
0957nobodyさん
2005/08/09(火) 01:32:37ID:???0958nobodyさん
2005/08/09(火) 02:02:31ID:???0959nobodyさん
2005/08/09(火) 18:08:04ID:???$i=1;
while($in{'a[$i]'}){
print OUT "$in{'a[$i]'}\n";
$i++;
}
print $in{'a[1]'};
という風にやってみたんですけど中に何もはいってませんでした
0961960
2005/08/09(火) 18:31:23ID:???$in{'a[1]'}ってハッシュの中の配列?リファレンス使う方がいいかもよ。
0962nobodyさん
2005/08/09(火) 19:40:12ID:???PHPとかで <input name="a[1]"> とされてる a[1]?
なんで流用してるのか知らないけど、クエリを%inに格納してないんじゃないの?
0963nobodyさん
2005/08/09(火) 19:49:58ID:???print "Content-type: text/html\n\n<pre>\n";
てやってるよ
サーバ云々よりもブラウザの問題
0964nobodyさん
2005/08/09(火) 20:49:47ID:???0965nobodyさん
2005/08/09(火) 21:06:24ID:???0966nobodyさん
2005/08/09(火) 21:36:56ID:???現在もほとんどのブラウザが対応してる。
0967nobodyさん
2005/08/10(水) 00:24:25ID:???0969nobodyさん
2005/08/10(水) 20:44:59ID:yT5SVbbLHello Perl !
こんな感じ
0970nobodyさん
2005/08/10(水) 21:45:46ID:oTWuci57ログイン画面(ID、パスワード入力フォーム)があって、一度ログインしたら
その後どのページに行ってもログイン済みという認識をさせたいのですが、各ペ
ージでフォームデータ(標準入力)を取得し、ID、パスワードがあるかという
判断をするやり方で良いのでしょうか?
また、フォームデータ(標準入力)はいつまで保存されているのでしょうか?ど
んどん次のページに行っても残っているものなのでしょうか?
0971nobodyさん
2005/08/10(水) 22:17:10ID:???保存するようにしてれば保存される。
それにコーディングに関係ないぞなもし。
cookieとかセッション管理とか調べてください。
0972nobodyさん
2005/08/10(水) 22:18:56ID:???CGIだとセッションIDを仕込んで、毎回チェックするだけなんだけどね。
仕込み先はCookie、URL、フォーム。なんだっていい。
セッション管理でぐぐるに一票。
0973nobodyさん
2005/08/10(水) 23:06:05ID:???必要とするモジュールの一部が使用中のレンタルサーバーに用意されていない場合、
CGI内に、
use lib = "/home/hogehoge/lib"
と記述してやると、 /home/hogehoge/lib 内に、サーバーにすでにある
モジュールもないモジュールもすべて用意しなければならなくなるのでしょうか?
0974nobodyさん
2005/08/10(水) 23:16:31ID:???0975nobodyさん
2005/08/11(木) 00:28:25ID:???ちゃんと実行されてんじゃん。
たまたま君の使ってるブラウザ(環境)がtext/plainなデータをダウンロードするようにしているだけ。
text/plainを表示するようなブラウザだったら表示される。
0976nobodyさん
2005/08/11(木) 07:59:40ID:emP9NQBRサーチパスに追加するだけ
0977nobodyさん
2005/08/11(木) 09:50:51ID:???配布スクリクトでPerl::Authを使うのでインストールしたら
Fatal error: Cannot redeclare class auth in /web/....../lib/pear/Auth/Auth.php on line ○○
というエラーが出ました。
過去ログとか読むと、authが二重宣言しているためにエラーが出ているところまで分かったのですが、
これの回避方法とかあるのでしょうか?
該当部分(auth)を別な名前に書き換えるのも、色々な場所で使われていて大変そうですし、
他の何と重複しているのか分からないのですが…。
0978nobodyさん
2005/08/11(木) 10:01:10ID:???0980nobodyさん
2005/08/11(木) 11:52:28ID:???ここはperlスレなんだが。
0981nobodyさん
2005/08/11(木) 11:58:15ID:???977の質問はPHPのPEAR::Authについて
のものだというところかと...
質問者の脳内でPEARがPerlに置き換わっ
てるようだが激しくスレ違い。
0982977
2005/08/11(木) 13:21:03ID:???勝手に脳内変換してました…。PEAR→Perl
スレ違いorz...
0983nobodyさん
2005/08/11(木) 19:28:28ID:OSKViUMD(ブラウザのウィンドを閉じるまでは残っているのでしょうか?)
各ページでhiddenの受け渡しによるログインのセッション管理を行おう
としていますが、途中にHTMLページがある場合、
a.cgi → b.html → c.cgi
a.cgiで渡したhiddenの情報を、c.cgiで受け取ることはできるのでしょう
か?それとももう消えてしまっているのでしょうか?
もしくは、HTMLでもhidden情報を渡すことはできるのでしょうか?
素人なのでアホな質問をしていたらすいません。
0984nobodyさん
2005/08/11(木) 19:39:00ID:???0985nobodyさん
2005/08/11(木) 20:29:04ID:???----------------------------
#!/usr/local/bin/perl
$view = "画像フルパス.jpg";
print "Content-type: image/jpeg\n\n";
open IMG,"$view";
binmode (IMG);
print <IMG>;
close (IMG);
exit;
---------------------
アクセスカウンタみたいに<img src="xx.cgi">
って感じで画像を呼びたいんだけど、
この後処理を付け足して条件分岐で表示される画像が変わるという感じのを作りたいんですが
最初のとりあえず決まった画像を表示させる段階でつまづいています
なにか分かれば教えて頂けますか?
0986nobodyさん
2005/08/11(木) 20:29:11ID:???a.cgiでb.htmlを出力する際にhidden情報も書き込ねば、c.cgiが受け取れる。
でも、セッションならcookieでやる方がいいよ。
GETメソッドで変遷すると、hidden情報がアドレス部分に含まれちゃうから。
0987nobodyさん
2005/08/11(木) 21:10:44ID:???Windowsなら
binmode(STDOUT);
が要るけど。
# print <IMG>は勘弁してほしい。
0988nobodyさん
2005/08/11(木) 21:12:57ID:???構文的にマズイのであれば
よくわかってないので是非教えてください
0989973
2005/08/11(木) 21:29:11ID:???そこのところを具体的にご教示ねがえないでしょうか?
ちなみに、telnetもshhも使えないサーバーをつかってます。
なにとぞよろしくお願いします。
0990nobodyさん
2005/08/11(木) 21:34:23ID:???山形括弧は行ごとに処理を行うので、
バイナリモードで使うのは気持ちが悪いということ。
# 巨大ファイルを使わない限り気分的な問題だけど、どこかに落とし穴があるかも知れず。
>>985のコード動いたよ。(FreeBSD+Perl5.8.7)
0991nobodyさん
2005/08/11(木) 21:38:14ID:X0+Sv8OM処理が重くなるとかメモリの節約とか全然考えてない
0993nobodyさん
2005/08/11(木) 23:29:59ID:???ってのが http:// からのアドレスで書いてることに 3000点。
ってか >>995 も大変だな。
↓↓
0994995
2005/08/12(金) 00:55:40ID:???まさにその通りでした^^;
しかも995…orz
993には3000点が加算されます。
なんでこんなミスすんだろ
思いこむとこんなミスにも気づかないものねぇ
0996nobodyさん
2005/08/12(金) 01:11:40ID:???次スレまだー?(・∀・ )っ/i_i⌒☆チンチン
0997nobodyさん
2005/08/12(金) 01:27:47ID:???http://pc8.2ch.net/test/read.cgi/php/1123777607/
0998nobodyさん
2005/08/12(金) 03:29:26ID:???0999nobodyさん
2005/08/12(金) 03:50:33ID:???1000nobodyさん
2005/08/12(金) 04:02:20ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。