Perl コーディング初心者質問コーナー Part35
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
04/05/26 16:48ID:kkhhiYmo【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0002nobodyさん
04/05/26 16:49ID:kkhhiYmo【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc2.2ch.net/test/read.cgi/php/1077525387/
【 スクリプト改造依頼スレ 】(丸投げ)
http://pc2.2ch.net/test/read.cgi/php/1076831972/
△▲ WebProg 初心者の質問 Part8 ▼▽
http://pc5.2ch.net/test/read.cgi/php/1078568723/
【Perl】ファイルロック(排他処理)について語ろう
http://pc2.2ch.net/test/read.cgi/php/1024795138/
★負荷軽減対策委員会(Perl、PHP)★
http://pc2.2ch.net/test/read.cgi/php/1034645635/
【Perl】掲示板を使ろう!
http://pc2.2ch.net/test/read.cgi/php/988890976/
Perlモジュールについて
http://pc2.2ch.net/test/read.cgi/php/997829243/
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/
0003nobodyさん
04/05/26 16:50ID:kkhhiYmoPart1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
0004nobodyさん
04/05/26 16:50ID:kkhhiYmoPart16 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と誤記)
part21 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/
part31 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/
0005nobodyさん
04/05/26 16:51ID:kkhhiYmoPart1 http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2 http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3 http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4 http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5 http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html
[総合]
・http://www.excite.co.jp/world/ # 英文のページ多いから一応
・Perl Com: http://www.perl.com/
・CPAN.com: http://search.cpan.org/
・ActivePerl: http://www.activestate.com/
・CGI-ML:http://forest.ne.jp/cgi-ml/
[お薦め]
・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm ★読んどけ
・Perl Recipes: http://www.effectiveperl.com/recipes/ # 死んでるか?
・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/
・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.html
・Perl初心者の部屋:http://www.harukaze.net/~mishima/perl/
・Perlリファレンス:http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htm
・Perlのページ:http://homepage1.nifty.com/nomenclator/perl/
0006nobodyさん
04/05/26 16:52ID:kkhhiYmo・Home - Japanized Perl Resources Project: http://perldocjp.sourceforge.jp/
・Perl Monks: http://www.perlmonks.org/
・use Perl; : http://use.perl.org/
・Learn Perl - Perl Education: http://www.devdaily.com/perl/edu/index.shtml
・Perldoc.com: http://www.perldoc.com/
・Using Perl5 in Web: http://docs.rinet.ru/Using_Perl5_in_Web/
・Rex Swain's Home Page: http://www.rexswain.com/
・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.html
・Perl Tuts: http://savage.net.au/Perl-tutorials.html
・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htm
・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
・Perlfect Solutions: http://perlfect.com/
・The Perl Archive : http://www.perlarchive.com/
・Perl6 & Parrot VM についての情報: http://dev.perl.org/perl6/
・use Object; : http://perl.infoware.ne.jp/
0007nobodyさん
04/05/26 17:13ID:???createuser hoge with password hogeでhogeというゲストユーザを追加し、
権限を持つユーザで、testdbというデータベースに入って、
grant select on testtable to hoge;
で読み取り権限のみを与えたのですが、
DBD::Pgで、このデータベースに接続しようとすると、
DBI connect('dbname=testdb','hoge',...) failed: (no error string)
と言われて繋がりません。
IDとパスを権限を持っているユーザのものに書き換えると繋がるのですが…。
原因がわからず困っています。どなたか知恵を貸してください。
Perl5.6.1、PostgreSQL1.4.2です。
0008nobodyさん
04/05/26 17:23ID:???0009nobodyさん
04/05/26 17:39ID:???フォームにテキストフィールドが3つあり、POST時にCookieに取り込み、再びフォームのページを表示させるとあらかじめ値が入るようにしています。
$vaild = ("Tue, 31-12-2030 23:59:59 GMT");
$cookie_data = "name\:$name<>mail\:$mail<>color\:$color";
print "Set-Cookie: $title=$cookie_data; expires=$vaild\n";
このようにしているのですが、この状態ですと3つの値が同一のCookieに取り込まれます。
有効期限(この場合は$vaild)も同一ですので、期限が切れれば全部の値が無効になりますが、
この中で特定の値(例えば$colorだけなど)の有効期限を変更するということはできるのでしょうか。
Cookie取得後は3つのフィールドに値が入っていた状態を、一定期間後にフォームのページを見ると2つのフィールドのみに値が入るようにしたいのです。
0011nobodyさん
04/05/26 23:44ID:???釣りか?
0012nobodyさん
04/05/27 11:19ID:???という警告が出てしまいます。
もちろん use strict しているのですが、はずしても出ます。
動作上は問題ないのですが、出来れば出ないようにしたいと思ってます。
警告内容は qw() で記述した配列内に # の文字があるのでこれが
コメント文字とバッティングするということだと思います。
どうしても配列要素が膨大で、いちいちクウォートするのを回避できれば
と思っています。
もちろん、no warnings すれば出ないのですが、もっといい方法がない
でしょうか?
001312
04/05/27 11:27ID:???001412
04/05/27 11:29ID:???じぶんがなにものかさえも・・・
001512
04/05/27 12:27ID:???何がいけないのでしょうか・・・
0016nobodyさん
04/05/27 12:27ID:???素直にno warnings使うのがいいと思うがな。そのためのもんだし。
不安ならブロックの中に閉じ込めてno warnings "qw"とかすれば
他の警告への影響も最低限になるだろう。
あるいは
@a = split(/\s+/, <<QW);
foo baa
foo#bar abc
xyz
QW
とかする手もなくはないがそこまでする?
0017nobodyさん
04/05/27 13:25ID:???5.005 辺りまではそういう風に実装されてたよ。
#--- test.p ---
my @array = qw(a b c d e);
__END__
> perl5.005 -MO:Deparse test.p
my(@array) = split(/\s+/, 'a b c d e', 0);
> perl5.8.3 -MO:Deparse test.p
my(@array) = ('a', 'b', 'c', 'd', 'e');
0019nobodyさん
04/05/27 20:42ID:1K93G7MZNet::Telnetを使ってroot権限で作業をしたいのですが
suでのログインがうまくいきません。
timed-outになるので恐らくパスワード待ちの状態でタイムアウトしてると
思うのですが正しいコマンドを知っている方いましたら教えてもらえないでしょうか?
my $host = 'host';
my $user = 'user';
my $pass = 'pass';
my $prompt = '/\[.+\]/';
my $supass = 'supass';
my $telnet = new Net::Telnet(
Timeout => 10,Prompt => $prompt,);
$telnet->open($host);
$telnet->login($user, $pass);
$telnet->cmd("su");
$telnet->waitfor(/Password: /);
$telnet->cmd("$supass");
0020nobodyさん
04/05/27 20:46ID:1K93G7MZNet::Telnetを使ってroot権限で作業をしたいのですが
suでのログインがうまくいきません。
timed-outになるので恐らくパスワード待ちの状態でタイムアウトしてると
思うのですが正しいコマンドを知っている方いましたら教えてもらえないでしょうか?
my $host = 'host';
my $user = 'user';
my $pass = 'pass';
my $prompt = '/\[.+\]/';
my $supass = 'supass';
my $telnet = new Net::Telnet(
Timeout => 10,Prompt => $prompt,);
$telnet->open($host);
$telnet->login($user, $pass);
$telnet->cmd("su");
$telnet->waitfor(/Password: /);
$telnet->cmd("$supass");
0021nobodyさん
04/05/27 20:46ID:1K93G7MZNet::Telnetを使ってroot権限で作業をしたいのですが
suでのログインがうまくいきません。
timed-outになるので恐らくパスワード待ちの状態でタイムアウトしてると
思うのですが正しいコマンドを知っている方いましたら教えてもらえないでしょうか?
my $host = 'host';
my $user = 'user';
my $pass = 'pass';
my $prompt = '/\[.+\]/';
my $supass = 'supass';
my $telnet = new Net::Telnet(
Timeout => 10,Prompt => $prompt,);
$telnet->open($host);
$telnet->login($user, $pass);
$telnet->cmd("su");
$telnet->waitfor(/Password: /);
$telnet->cmd("$supass");
002219-21
04/05/28 01:38ID:???書き込んだらサーバーエラーになってCtrl+F5押しても
書き込まれてなかったのでうっかり・・・
本当に申し訳ないです。
できれば解答をお願いしたいです
0023nobodyさん
04/05/28 01:48ID:???- $telnet->waitfor(/Password: /);
+ $telnet->waitfor('/Password: /');
0024nobodyさん
04/05/28 03:46ID:???cmdはプロンプトを待つ。
デバッグするならDump_Logぐらい取れよ。
0025nobodyさん
04/05/28 15:08ID:NnBdFpi6アッハンという2ちゃん型掲示板を使っているのですが
トリップ設定部分でパスワードを○○と入力→コテが表示
と言う機能を使う際、コテ名を漢字にするとスクリプトエラーに
なってしまいます。
\マークを入れても同様です、どうすればよいでしょうか?
0026nobodyさん
04/05/28 16:02ID:???配布元にサポートBBSがあるじゃないか。
002725
04/05/28 23:44ID:NnBdFpi60028nobodyさん
04/05/29 14:19ID:eHv0ssyS1.あるサイトを運営しているのですが、顧客管理のcgi(画面)で、顧客をある条件(性別や年齢)
等で抽出し、そのヒットした顧客を画面に表示し、さらに、チェックボックスでチェックされた
顧客に対してのみsendmail にてお知らせメールを送る機能を追加しようとしています。
2.それで、抽出した顧客の一覧(チェックボックス付き)の画面出力まではできたのですが、
sendmailプログラムにチェックボックスにチェックされたユーザの一覧データがうまく送信されません。
3.エラーはでないのですが、チェックされた顧客が10人あっても一人分しかメール送信されません。
具体的に言いますと
form method=post action=cgi
input type=checkbox name=mail_to value=a
input type=checkbox name=mail_to value=b
/form
で、タイプをチェックボックスとして、cgiに渡します。
この場合、cgiで受け取るデータはどの様な形式で入ってくるのでしょうか?
name が同一の名前なので、 配列 $mail_to[0] $mail_to[1]
かと思ったのですが、違うようですし、 データの内容がカンマで区切られて入ってくるでもないようですし・・
尾永井します
0030nobodyさん
04/05/29 14:30ID:???0031nobodyさん
04/05/29 14:33ID:???標準入力を変数に変換している部分による。
同一の名称のフォームオブジェクトのデータを受け取りたいならその部分を修正しなければならない。
その部分のコードが読めるならなぜ一つしか受け取れないかもわかるはず。
なお、Perlで受け取る時点では「mail_to=a&mail_to=b」などの形で入っている。
ちなみに、こういう場合は同一名称のチェックボックスにならないように工夫する方が一般的。
003228
04/05/29 14:35ID:eHv0ssySさすが、プロ詳しいですね。
今日は、眠れそうです。サンクスコ
0033nobodyさん
04/05/29 15:00ID:???標準(?)のCGI.pmならparamをリストコンテキストで呼べば
複数の値を受け取れたと思う。
@mail_to = $cgi->param('mail_to');
0034nobodyさん
04/05/29 16:40ID:???003528
04/05/29 17:17ID:eHv0ssyS検索したら、そおゆうのがありました。
サンクス
0037nobodyさん
04/05/29 19:01ID:UPbtVCfiwhile (<IN>) {
# 各行をカンマ区切りで分割
@body = split(/,/, $_);
@data = split(/:/, @body);
ファイルを開いて、カンマで区切った後、それをさらに:で区切ろうと思ったのですがうまくいきません。
どうしたらいいですか?
0038nobodyさん
04/05/29 19:18ID:???http://flex.ee.uec.ac.jp/texi/perl/perl_56.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlre.html
my @data = split /[,:]/;
0039nobodyさん
04/05/29 19:37ID:UPbtVCfiありがとうございます。
そんな技があったとですね
0042nobodyさん
04/05/29 20:23ID:???少なくとも俺は使わない。
今までは使っているソースを見たこともない。
0043nobodyさん
04/05/29 20:28ID:???0044nobodyさん
04/05/29 20:36ID:???0045nobodyさん
04/05/29 21:07ID:???if ($pass eq aa ) { $name = "ああ";}
if ($pass eq bb ) { $name = "いい";}
if ($pass eq cc ) { $name = "うう";}
if ($pass eq dd ) { $name = "ええ";}
・
・
みたいなのがずっと続くんですが。。
0046nobodyさん
04/05/29 21:23ID:???$name = $name_list->{$pass};
0047nobodyさん
04/05/29 22:12ID:???http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsyn.html#Basic_BLOCKs_and_Switch_Statemen
0050nobodyさん
04/05/29 23:04ID:???初心者はこうして一つ一つ知識を蓄えていくんだから生暖かく見守ろうぜ
0051nobodyさん
04/05/29 23:05ID:???普通の基準は俺。
少なくとも俺は使い方が分からないから使えない。
今まで他人のソースを見たこともない。
0052nobodyさん
04/05/29 23:07ID:???0053nobodyさん
04/05/29 23:13ID:7xFl3dBXそれしかなかった場合に変数$homeに「URL」を、
http://の後ろに入力されてた場合$homeにアンカー付きの「<a>URL</a>」を入れたいと思ってます。
【書いたソース】
if ($in{'url'} == "http://") { $home = "URL"; }
else { $home = "<a href=\"$in{'url'}\" target=\"_blank\">URL</a>";}
こうすると、http://の後に入力していてもアンカー無しの「URL」が表示されてしまいます。
間違いをご指摘ください おねがいします!
0055nobodyさん
04/05/29 23:21ID:???http://www5a.biglobe.ne.jp/~n_rieko/perl/5.htm#5-4
0056nobodyさん
04/05/29 23:34ID:???_| ̄|● お恥ずかしい
if ($in{'url'} eq "http://")
で解決しました。
ありがとうございました!
0059nobodyさん
04/05/30 00:19ID:???必要ないからっていうのは無しね。
使うことによって、楽になる場面はいっぱいあるんだし。
0060nobodyさん
04/05/30 00:22ID:???htmlもろくに出来ないのにプログラミングですか。
それはそれで凄いですね。
0061nobodyさん
04/05/30 00:34ID:???気づいて顔真っ赤にしてるんでしょ。
0062nobodyさん
04/05/30 00:54ID:gNGGvGZXカウンタのような役目をしている変数$winというのがあるんですが
この$winが100の倍数ごとにある処理をしています。
そこで$win_nextという変数で次の100までの回数を表示したいのです。
例えば$weが48だと$we_nextが52となったり、281だったら19になったり、といった風な感じです。
いろいろやってみましたが何回やってもできません。
↓例えばこういう風なのとか・・・
$win_next=($win+100-($win-($win/100*100)))-$win;
0065nobodyさん
04/05/30 01:15ID:???少なくともその一つだけ俺だから違う。
0066nobodyさん
04/05/30 01:24ID:???それはそれで兵共が集うスレですね。
0068nobodyさん
04/05/30 01:50ID:???そうか、どいつなのかはわからんが。
個人的趣味で異なる名前を付けるならそういうコーディングスタイルなのだろう。
でも避けるべきとか普通は使わないとか見たことないとかは明らかに
無知あるいは応用が利かないとしか言えないな。
もうちょっといろいろ勉強したほうがいいね。
0071nobodyさん
04/05/30 02:04ID:???それとも粘着の意味を取り違えてるの?
0072nobodyさん
04/05/30 02:08ID:???痛すぎる
自分が粘着してることに気づいてない粘着は一番嫌われるよ。
まぁ、リアルでそうなんだろうが
0075nobodyさん
04/05/30 02:12ID:???0076nobodyさん
04/05/30 02:13ID:???まぁ餅付け
いや、お前が一番痛いよ・・・
メル欄引っ掛けとかキモ杉
0077nobodyさん
04/05/30 02:14ID:???>>75は誰か引っかかると思って書いてるんだよ
メル欄晒しはもう少し待ってやるべきだった。
今>>75ないてるぞ・・・
俺知らない
0079nobodyさん
04/05/30 02:15ID:???perlを勉強中です。
CGI呼出し時にurlの引数に配列を直接入れる事は可能でしょうか?
PHPでは出来ると聞いて、perlでやってみてるのですが上手くいきません。
具体的には、以下の様にしました。
hoge.cgi?huga%5B%5D=1&huga%5B%5D=2&huga%5B%5D=3
また、この方法が無理な場合は、$huga=1,2,3で代入して送って
受け取ったCGIで@huga=(1,2,3)で代入したいのですが、urlの
; / ? : @ & = + $ ,
以上は特別な意味を持つようなのですが、
, を %2Cにエンコードして送信すれば問題有りませんでしょうか?
おまえらにタイムリーな話題ですよ
http://pc5.2ch.net/test/read.cgi/php/1078568723/l50
0080nobodyさん
04/05/30 02:16ID:???0084nobodyさん
04/05/30 02:23ID:???典型的な厨房だな。
宿題して寝ろよ
0085nobodyさん
04/05/30 02:25ID:???checkboxを学べ
それは板違いだ
お前ら板違いの話題で良くここまで盛り上がれるな。
0088nobodyさん
04/05/30 02:29ID:???0089nobodyさん
04/05/30 02:37ID:???w=必死
009362
04/05/30 03:14ID:???愚問スマソ
0094nobodyさん
04/05/30 04:31ID:???perlからサイズ取得スクリプト(PHP)を実行して帰って来た結果をperl側で取得することは不可能でしょうか?
教えて下さい。お願いします。
0095nobodyさん
04/05/30 04:36ID:???はい、終わり。
後はグーぐるでね
0096nobodyさん
04/05/30 11:27ID:???/ /⌒)ノ ペタン
∧_∧ \ (( ∧_∧
(; ´Д`))' ))(・∀・ ;) < 餅つけ
/ ⌒ノ ( ⌒ヽ⊂⌒ヽ
.(O ノ ) ̄ ̄ ̄()__ )
)_)_) (;;;;;;;;;;;;;;;;;;;)(_(
0097nobodyさん
04/05/30 17:22ID:???こんなモジュールを見つけたよ。
http://search.cpan.org/~ysas/SWF-File-0.33/lib/SWF/Parser.pm
&headersubコールバックを定義しておけば、perlだけで情報が取れそう。
0099nobodyさん
04/05/30 20:27ID:???どのように書き直せばいいのでしょう?
$i1,$i2 = split("_",$name);
$name = $i1$i2;
0102nobodyさん
04/05/30 20:49ID:???スレの趣旨には合っているがあまりに酷すぎる。>>100の言うとおりに教科書買え。
($i1,$i2) = split("_",$name);
0104nobodyさん
04/05/30 21:50ID:???エラーログをよく見ろ。
010599
04/05/30 22:07ID:???(Missing operator before $i2?)
syntax error at ../bbs/bbs.cgi line 651, near "$i1$i2"
../bbs/bbs.cgi had compilation errors.
なんですが。
0107nobodyさん
04/05/30 22:47ID:Mg+ccEmx0108nobodyさん
04/05/30 22:53ID:???0109nobodyさん
04/05/31 00:25ID:???0110nobodyさん
04/05/31 01:09ID:???0111nobodyさん
04/05/31 06:12ID:???0112nobodyさん
04/05/31 22:39ID:1T44mYBtlist.txtの、一番上の行にテキストを追加したいのですが
open(OUT, ">> list.txt");
@list = <OUT>;
unshift (@list,"追加の行<br>\n");
print(OUT "@list");
close(OUT);
このようにやると、一番下の行に追加されます。
どこが間違ってるのでしょうか?
0113nobodyさん
04/05/31 22:45ID:???0114nobodyさん
04/05/31 22:45ID:???0115nobodyさん
04/05/31 22:52ID:???0116112
04/05/31 23:05ID:???open(IN, "list.txt");
@list = <IN>;
unshift (@list,"追加の行<br>\n");
close(IN);
open(OUT, "> list.txt");
print(OUT "@list");
close(OUT);
できましたぁー!
読み込みと書き出しは同時にできないってことでしょうか?
0120nobodyさん
04/05/31 23:41ID:???特定の状況?(原因が不明)で下記のエラーが出てしまいます。
Illegal division by zero at C:\www\home\bbs.cgi line 2020.
エラーが出ない場合は普通に書き込めるのですが・・・。
自分なりに原因を探ってはみたのですがお手上げです。
何卒ご教授下さい。宜しくお願いします。
0122nobodyさん
04/05/31 23:58ID:???英 語 が 読 め な い ん で す
とかじゃねーの
どちらにせよ典型的な真性厨ですな
0123nobodyさん
04/05/31 23:58ID:???ケーキを0人で割ると誰にも分けなくていいから全部わたしのもの、とか考えてるツルペタ。
0125112
04/06/01 00:46ID:g7eZEVaT>>116のようにして書き足していったlist.txtを覗くと、データが
追加の行<br>
追加の行<br>
追加の行<br>
追加の行<br>
のようにヘンなインデントがついてるんです
なぜでしょうか?
0126nobodyさん
04/06/01 00:57ID:???配列変数は、ダブルクォート文字列中で、配列のすべての要素を変数 $"
(Englishでは $LIST_SEPARATOR) 中に示す区切り文字 (デフォルトは
スペース) でつなげて展開されます。以下は同値です:
$temp = join($", @ARGV);
system "echo $temp";
system "echo @ARGV";
</q>
0127nobodyさん
04/06/01 06:06ID:???たぶんスカラー変数を""で囲むのを普段から何の疑いも無くやっていて、その延長で
リストを囲んだらおかしくなったってパターンなんだと思うけど。
そうやれ!とか書いてある参考書でもあるの?
0128nobodyさん
04/06/01 07:54ID:???0129nobodyさん
04/06/01 10:22ID:???print @data
はPerlだと挙動が違うんだよねぇ
勉強しろよ
0131nobodyさん
04/06/03 20:11ID:???画像に埋め込まれているメタデータとキーワードが一致しているかどうかで、
検索をしているイメージ検索エンジンってありますか?
<img src="map.jpg" alt="地図" title="日本地図">
↑のaltやtitleの部分や画像周りのテキスト、ファイル名などを
検索するのがGoogleだと思うんですけど、
画像に組み込まれている日付だとか著者とかをキーワードと一致するか、
検索するシステムが無ければ作ろうと思うのですが、
どなたか上記のような検索システムがあれば、教えてください。
無ければトライしてみようと思います。
0133nobodyさん
04/06/04 07:10ID:???後の1文字を消せるんですが、スクリプトで<STDIN>で入力する時に、
backspaceを使うと、^Hが表示されて文字を消すことができません。
どうすれば文字を消せるようになるのでしょうか。
Perl 5.6.1、Debian 3.0を使っています。
0135nobodyさん
04/06/04 07:33ID:???^H返すのってわりと普通の動作じゃないんですか?よく聞くんですけど
俺のスクリプト使う奴は全員backspaceコードに^H使うな!
とは言えないので…。
0136nobodyさん
04/06/04 08:42ID:???それ、Debianのせいじゃない?
どのバージョンでどうなのかは知らんけど。
ttp://www.fastwave.gr.jp/diarysrv/mad-p/200205c.html#20020525-1
Linux板のほうがいいかも。
0138nobodyさん
04/06/05 07:36ID:HWhcKEoWそれだと処理の重さ軽さなどは変わりますか?
0139nobodyさん
04/06/05 07:47ID:???0140nobodyさん
04/06/05 09:45ID:HWhcKEoWどうやるの?
0141nobodyさん
04/06/05 09:49ID:???0142nobodyさん
04/06/05 13:37ID:tmR5KH99(UNIX, perl v5.8.0)
#!/usr/bin/perl
$str = "あい";
$str =~ tr/あいうえお/アイウエオ/;
print $str;
0143nobodyさん
04/06/05 14:05ID:???0144nobodyさん
04/06/05 14:41ID:6aQba7Dj解決策1: Jcodeモジュールのtrを使う
use Jcode;
$str = "あい";
print Jcode->new($str)->tr('あいうえお','アイウエオ');
解決策2: unicode機能を使う
use utf8;
use encoding 'euc-jp', Filter=>1;
$str = "あい";
$str =~ tr/あいうえお/アイウエオ/;
print $str;
use encodingのとこのeuc-jpは適当に自分が使っている
コードにあわせてくれ。
0145未承諾広告※ ◆TWARamEjuA
04/06/05 15:05ID:CuLBZ8wK5.8.0 環境とのことですので後者の方ですね。
0146nobodyさん
04/06/05 15:06ID:???0147プロ固定金土日こと星山成寿(李明煕/イ・ミョンヒ)
04/06/05 15:21ID:???の2ちゃんねるワンポイントアドバイスの時間です。
長年プロ固定してますので、削除とか他人のIP抜き取り個人情報調べ、
2ちゃんねるのアングラの仕事など西村博之の右腕として広範囲な仕事を
任されております。一般に2ちゃんねるは、収益を上げてない個人管理の掲示板
かのように思われていますが、各トピックごとに様々な人間がアクセスしてくる
ため、それらのIPで個人情報を調べた名簿を企業に売買しすることにより、
裏側では巨大な収益をあげております。DHCの裁判でいきなり5億円もの損害賠償
を請求されているのも、彼らの独自の調査によって2ちゃんが裏側で稼いでいる
情報がばれているからにほかなりません。2ちゃんねるでも、ほんの一部の幹部
しかしらない情報としましては、「薬・違法掲示板」の名簿を、覚醒剤の売買
組織に、売り捌いていることです。これに関しては、アングラマネーなので当然
税金もかからず、実は一番の巨大な利益は「薬・違法掲示板」で集まった
シャブ中連中の個人情報を組織に転売することにより得ています。
最近それらの情報に警察や公安が気づき始めたため、西村博之の実家には何度も
ガサ入れ(家宅捜査)に入られており、逮捕への証拠固めとして、国家権力が
動き始めて、かなり立場的には危険になったことは確かです。ですので、
以前ほど堂々と、そのような行為もできなくなってきているので、私も住居を
転々としている次第です。あっ、このことについては、本当に危ない話
なので、他言しないでくださいね。もしばれた場合は、ネタ情報として
逆にでたらめな似通った情報をたくさんネット上に流すことにより、煙に
まいてください。大抵の場合、ガセの情報をたくさん流せば、またネタが
始まったと、冗談で終わります。以前オウム真理教が毒ガスサリンを
自分たちが作っているのに、毒ガスで命を狙われたなどと自作自演した
作戦と同じ手口ですね。よろしくお願いします。
0150nobodyさん
04/06/05 15:52ID:???何をしたいか詳しく書け。
0151146
04/06/05 16:11ID:???というCGIなのですが、編集時にもう一回パスワード照合したいんです。
もう一回パスワード入力するのも面倒なのでログイン時に入力したパスワードを
編集用のCGIに渡したいんですが、どうすれば良いでしょうか。
分かりにくくてすみません。
0153nobodyさん
04/06/05 16:25ID:???フォームを使わずにっていうから何かと思ったらそんなことかよ・・・
そんな単にページ変移毎にパスワードを必要とするありふれた仕組みぐらい
工夫して書けよ。
ほとんどどんなスクリプトでもやってることだろ。
そんなことならスレ違いだし他のスクリプトでも見て勉強してちょうだい。
0154nobodyさん
04/06/05 20:33ID:jT/a/NFiPerlにてファイル内の特定文字を検索するにはどういうコードを書けばいいでしょうか?
ファイルの中身を全部配列に入れてjoinして強引に検索出来そうな気もしますが
もっとスマートな方法あったら教えてもらえますでしょうか?
0157nobodyさん
04/06/06 00:41ID:timkGFaS有り難うございます。
そういう方法しかないのですね。それでやってみます。
0158nobodyさん
04/06/06 17:31ID:RQ9IWgny0159nobodyさん
04/06/06 17:34ID:???$名前ってのがそうです。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
0160158
04/06/06 17:49ID:RQ9IWgny変数に代入されている値がスカラーかハッシュへのリファレンスかで
処理する内容を変えたいのですが,プログラム内部でそれを判断する
方法はないでしょうか?
0161nobodyさん
04/06/06 17:49ID:???$noって=$filenameですよね?
なぜ$filenameを$noで再度置き換える必要があるのでしょうか?
後、print "$no";で一度記述してるのに
後にif文で再度同じ事をしてるのはなぜですか?
#! /usr/local/bin/perl
# ログファイル名
$filename = "count.txt";
# ファイルを開く
if (!open(FP,"$filename")) { # 失敗
$no = 0;
} else { # 成功
$no = <FP>;
close(FP);
}
# 1つ増やす
$no++;
print "$no";
if (!open(FP,">$filename")) { # 失敗
print "ファイル $filename がオープンできませんでした ($!)\n";
}else{
print FP $no;
close(FP);
}
0163nobodyさん
04/06/06 18:42ID:???ref <変数> でリファレンスかそうでないかがわかるよ。
リファレンスじゃないなら偽。
リファレンスなら、種類によってARRAYとかHASHとかが返される。
0164nobodyさん
04/06/06 18:56ID:kS2UjgnM「\x{0082}ノ\x{0082}ル\x{0082}\x{00f1}\x{0082}イ」
と、表示されてしまいました。
「use encoding 'shift_jis';」を指定しており、
もし「use encoding 'shift_jis';」の一行を取り除くと、
ちゃんと「にほんご」と表示されます。
「use encoding 'shift_jis';」を指定した場合も、、
「にほんご」と表示されるようにするには、どうしたらよいでしょうか。
環境
ActivePerl 5.8.3 Build 809
Windows XP Pro SP2, IIS
0165164
04/06/06 18:57ID:kS2UjgnM--- ここから ---
use CGI;
use encoding 'shift_jis';
$cgi = CGI::new();
$text1 = $cgi->param('text1');
print <<EOM;
Content-type: text/html
<HTML>
<BODY>
$text1<br>
</BODY>
</HTML>
EOM
--- ここまで ---
0166160
04/06/06 19:09ID:???うまくいきました。ありがとう。
XML::Simpleで取り出したデータ構造が,同じ階層でスカラだったり,
ハッシュだったりしたので困ってました。
漏れが買った本には載ってなかったけど新しい関数だからかな?
<参考>
ttp://www.futomi.com/cgi-bin/lecture/perl5ref.cgi?MODE=CATEGORY&CATENO=21
ttp://www.futomi.com/cgi-bin/lecture/perl5ref.cgi?MODE=DISP&FUNC=ref
0167161
04/06/06 20:05ID:ZCQZgjkYのに後にイフで再度書き込もうとしてるのはなぜですか?
print "$no";
if (!open(FP,">$filename")) { # 失敗
print "ファイル $filename がオープンできませんでした ($!)\n";
}else{
print FP $no;
close(FP);
}
0168nobodyさん
04/06/06 20:18ID:???print "$no";
if (!open(FP,">$filename")) { # 失敗
print "ファイル $filename がオープンできませんでした ($!)\n";
}else{
print FP $no;
close(FP);
}
print "$no";
したらどうよ。
0169nobodyさん
04/06/06 20:20ID:???後ろの方には FP が入ってるわけですが、そこんとこどうよ?
0170nobodyさん
04/06/06 20:35ID:ZCQZgjkYprint FP $no; がcount.txtへの書き込みという事ですか?
0171nobodyさん
04/06/06 20:38ID:???0172nobodyさん
04/06/06 20:39ID:???とりあえずファイルハンドルを知れ。
0173nobodyさん
04/06/06 21:03ID:???固有名詞で通常大文字で記述する。
print FP $no;
のような形式はファイル自身に書き込むこと。
ですよね?
あれ?なんでファイルハンドルつける必要あるのですか?
0174nobodyさん
04/06/06 21:04ID:qBVB6Avxbenchmark.pmを使った際の出力結果
例えば
0 wallclock secs ( 0.02 usr 0.00 sys + 0.02 cusr 0.01 csys = 0.05 CPU)
というのは何を表すのでしょうか(処理時間であるということぐらいはわかりますが)
wallclock secs,usr,sys,cuser,csys,cpuってそれぞれなんなんですか?
usrはユーザ側の処理時間??
あと同じCPUでも
0 wallclock secs ( 0.02 usr 0.00 sys + 0.02 cusr 0.01 csys = 0.05 CPU)
2 wallclock secs ( 0.02 usr 0.00 sys + 0.03 cusr 0.00 csys = 0.05 CPU)
のようにwallclock secsに大きな違いが出るのは何故なんでしょうか?
0175nobodyさん
04/06/06 21:20ID:???usr: (そのプログラム自身が)ユーザモードで消費したCPU時間
sys: (そのプログラム自身が)カーネルモードで消費したCPU時間
cusrとcsysはそのプログラムから起動された子プロセスが消費した分
最後のx.xx CPUはそれらの合計。
実時間は他のプログラムが動いていたり、IOの待ちがあったりすると
かなり変動する。
0178nobodyさん
04/06/06 23:24ID:ZCQZgjkY0183nobodyさん
04/06/06 23:56ID:???あのスクリプト自身があまりうまく出来てないと言うことですかね、
と言うことは私の疑問もあってるんでしょうか。
一応参考書の例文なのですが。
0184nobodyさん
04/06/07 00:05ID:???疑問とは?
>$noって=$filenameですよね?
これか?違う
>print "$no"; がhtmlへの書き込みを示してて、
これか?違う
>print FP $no; がcount.txtへの書き込みという事ですか?
これか?そう
0185nobodyさん
04/06/07 00:49ID:T5+evT2p数十〜数百個ほど取りこぼしがあるのですが、これって既出ですか?
もしそうならすいません。確実に取得できる方法はありますか?
ファイル名でソートしてちゃんと時系列で処理をしたいのですが、この問題のために
作れなくて困っています。
0187nobodyさん
04/06/07 01:04ID:???1個目、2個目なのですがまず1個目は
$filenameから読み込んだ数値を$noとするということでしょうか?
2個目だけはどうしても必要とは思えないのですが。
その後、ifで再度書き込まれるわけですし。
0188nobodyさん
04/06/07 01:13ID:???これに引っかかってる?
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm#file
0189nobodyさん
04/06/07 01:36ID:???>$filenameから読み込んだ数値を$noとする
そう。ファイルハンドルをスカラ変数に代入は1行読み込み。
>2個目
print "$no"; は標準出力へ$noの値を出力。
print FP $no; はファイルへ$noの値を出力(書き込み)。
必要あるなしなんて書いたやつがそうしたかったのだろうよ。
0190nobodyさん
04/06/07 01:39ID:???名前に元質問のレス番を入れろ。
コーディングスレなんだから「私の疑問も・・・」とか「1個目、2個目」なんて
書かずにどのコードについてなんなのかもうちょっと文章を考えて書け。
0191nobodyさん
04/06/07 04:40ID:???どこがおかしい、もしくは基本的に間違いと言う所をご指摘願います。
#行数・項目数(, 区切り)とも不確定のCSVファイルを読み込み、
#@page2 に $page[n行目][n項目] と言った感じの2次元配列で格納したい
open (IN, "./link.csv");
my @page = (<IN>);
close (IN);
my (@line, $i, @page2);
$i = 0;
foreach (@page){
@{$line[$i]} = split(/,/);
push(@page2, @line);
}
print $page2[3];
#@page2 の中の3行目を表示したいけど、結果は ARRAY(0x155c7c8) と出る
#$page[3][3] とすると、最後の行の目標項目が表示される
0193nobodyさん
04/06/07 05:53ID:???http://www.kt.rim.or.jp/%7ekbk/perl5.005/perllol.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perldsc.html
0195nobodyさん
04/06/07 08:45ID:mlYstQXaありがとうございました。
>>176
有効桁は・・・昔BASICをやってたときに#をつけると倍精度とか・・・
(よくわかってないんで自分で調べてみます)
0196164
04/06/07 12:47ID:c3dnKsSQようやく解決できました。
>>165 のように書いてしまっていたので、指摘の通り、
「use encoding 'shift_jis';」をまずはじめに書くように直しました。
なおかつ、それでも化けていたのですが、
「use encoding 'shift_jis';」に「Filter=>1」を加えたところ、
ようやくきちんと「にほんご」と表示できました。
どうもです。
0197nobodyさん
04/06/07 13:27ID:???サブルーチンの呼び方に関してなのですが、例えばjcodeですと
jcode'convert (*value, "sjis"); ← Perl4
jcode::convert (\$value, "sjis"); ← Perl5
などの書き方ができますよね。
Perl5ならどちらの記述でも動きますが、
Perl4にも対応させるなどの汎用性という面では、
常にPerl4の記述で書いたほうがいいのでしょうか?
0199nobodyさん
04/06/07 13:49ID:???わざわざ古い書式を使うこともあるまい。
0200nobodyさん
04/06/07 13:50ID:???君が赤ラクダを持っているならともかく、今時 Perl4 で
問題なく動くスクリプトを書く方が難しいと思うがな。
jcode'convert(*value, "sjis"); # ×
&jcode'convert(*value, "sjis"); # ○
ま、自己満足以外のメリットは殆どないが、やりたきゃご自由に。
http://flex.ee.uec.ac.jp/texi/perl/perl_toc.html
0201nobodyさん
04/06/07 14:25ID:???あれを Perl5.8 対応にしてヨブが粘土板を UTF-8 で刻むようなチュートリアルが読みたい
0202nobodyさん
04/06/07 17:08ID:SF6UmQvxあるデレクトリのテキストファイルのみを取得したいのですが、
opendir DIR, '/home/foo/bar' or die;
@files = grep { -f }readdir DIR;
print join("\n", @files);
とすると空でなにも表示されません。2行目を
@files = grep { !-d }readdir DIR; # デレクトリではないもの
とするとデレクトリ以外のファイルが取得できます。
ファイルテスト演算子「-f」では取得できないのですか?
0204202
04/06/07 17:51ID:SF6UmQvx返事、ありがとうございます。
そうかとも思ったんですが、ならば !-d で判定できているのは…んん?
えーとあれですかね、この場合判定できているのではなくて、
存在しない->よって「!-d」も真値が返ってきてる、って事ですか?
つまり判定できているわけではないってこと?
0205202
04/06/07 17:54ID:SF6UmQvxすいません、フルパスで -f で大丈夫でした。
お騒がせしました。
0206nobodyさん
04/06/07 20:46ID:UI3v3779掲示板CGIにアクセス解析CGIを組み込みたいと思ってます。
Bodyの中にタグとして書き出すのでなく、CGIの中で完結させたい
(ソースを見てもわからないようにしたい)のですが、
具体的にどのようにすればいいのでしょうか。
サブルーチンで解析CGIを呼び出す、というヒントは読んだのですが
呼び出しの記述の仕方がわかりません。
なんとなくこんなふう書くのではないかと思うのですが↓
sub access {
??? = './acc/acc.cgi?a=b&&c=d';
}
どなたかアドヴァイスおねがいできませんか!
0208nobodyさん
04/06/07 20:59ID:???0209nobodyさん
04/06/07 21:02ID:SF6UmQvxsystem("/home/hoge/bin/command arg > file");
とするとcommand の出力はfileに書き出されます。
@array = system("/home/hoge/bin/command arg");
としても@arrayには何も格納されません。
シェルから
$ /home/hoge/bin/command arg
とすると出力が画面に表示されます。
command の仕様には「標準出力に表示します」とあるだけです。
訳あってこれ以上の情報が取得できない状況です。
command の出力を変数に取り込むにはどうすればいいんでしょうか。
0210nobodyさん
04/06/07 21:02ID:???ついでにプログラミングは100年は早い。
0213nobodyさん
04/06/07 21:16ID:???ついでにプログラミングは100年は早い。
おまけに日本語を喋れない。
0214nobodyさん
04/06/07 21:29ID:???http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq8.html#Why_can_t_I_get_the_output_of_a_
0216nobodyさん
04/06/08 01:10ID:???例えば
@data = 1 2 3 4 5 〜 100
があり その中のある数にもっとも近いモノからソートすると言う事は出来るでしょうか?
例えば↑の配列 5 に一番近い数字からソートすると 4 6 が先頭の並び順になる…というような感じなんですが…。
ちょっと無理っぽいような気もするのですが可能ならば何卒お教え下さいませ。
0217nobodyさん
04/06/08 01:36ID:???0218nobodyさん
04/06/08 01:47ID:???> 5 に一番近い数字からソートすると 4 6 が先頭
どっちなんだよ?
@new = sort(grep($_ >= 5, @data));
5を好きなように変えれば?
0220nobodyさん
04/06/08 14:30ID:???user(add|mod) -p 暗号化パスワード -s /bin/true -d /home/www/アカウント アカウント
でユーザの追加、変更を行っているのですが、例えば、「test」というパスワードを設定
すると、「test」でも「test999」でも「test48278467276484」でもFTPで認証できてしまい
ます。つまり、「test*」で認証できてしまいます。
「test」をusermodで「test876」にしても、上記同様関係なく「test*」で認証できて
しまいます。
デフォルトで用意されている「admin」というアカウントではこのような症状にはなら
ないので、どうもuseradd|mod側で使っている「-p」の暗号化したパスワードが怪しいの
ですが、解決に結びつかず、1日が経過してしまいました。
もしも何か解決策がありましたら、どうかご教授ください。
0223nobodyさん
04/06/08 16:04ID:???perlに関係ないことだ。
0225nobodyさん
04/06/08 17:50ID:???system ("|rm -r $dir");
で桶ですか?
0226nobodyさん
04/06/08 18:10ID:???0227220
04/06/08 18:48ID:???現在も模索中でございます。
>>221
Redhat9です。
>>222
「testtest」と設定しても、testtest*になって
しまうようです、、、
0228nobodyさん
04/06/08 19:02ID:???0229nobodyさん
04/06/08 20:17ID:???>しまうようです、、、
とりあえずそれは正常だ。
0230220
04/06/09 02:55ID:???「test123test」とやってみましたが、同じように「test123test*」
で認証できてしまいました。
>>229
正常なのですか?
はじめから用意されていた「admin」というアカウントでは、
このパスワード入力方法では通用しませんでした。
0232206
04/06/09 06:49ID:siBsh0Gf改造スレできいてみましたが、あちらでもスレ違いなのだそうです。
やはりここしかないのかと思います。
あちこち行ってますが、重複投稿でなく誘導ということでご容赦ください。
>>206のようにcgiでcgiを呼び出して使ってる方はいないでしょうか?
requireでもopen(<IN>, "**.cgi")でも駄目でした。
検索をしても、cgiのBody内に解析のタグを仕込む方法ばかり出てきてしまいます。
ヒントだけでもよいのでおねがいいたします。
0233206
04/06/09 06:59ID:???0234nobodyさん
04/06/09 07:00ID:???0236206
04/06/09 07:51ID:???配布先のFAQには
>アクセスログの取得がばれるとまずいと言う場合は、なんとかPerlを勉強して、
>CGIの中からサブルーチンとしてアクセス解析を呼ぶなどの方法で対処して
>いただければと思います(ここまでくると手法としてはけっこう厄介ですが)。
と書いてあったんです・・・。
勉強して対処しろ、と書いてる人に具体的方法は聞けないと思い
私なりに調べたり試したりしましたが答えが出ませんでした。
0238nobodyさん
04/06/09 08:54ID:???どの方法を取るにしても、スクリプトを書き換えないと無理。
一番簡単な方法は、クエリ部分を引数(ARGV)で取るようにして、
``かqx//かsystemあたりで呼び出す。
分からなければ、Perlの入門書をどうぞ。
0240nobodyさん
04/06/09 11:04ID:???0241nobodyさん
04/06/09 11:17ID:???>>236
http://pc5.2ch.net/test/read.cgi/php/1049514428/528-529
0242nobodyさん
04/06/09 13:31ID:???0243nobodyさん
04/06/09 14:24ID:???今回の対応が親切だろうか?
よーく考えてご覧。
むしろ自分の首をしめてるのが良く分かるだろう。
0245nobodyさん
04/06/09 16:06ID:jOx/oerj0246nobodyさん
04/06/09 16:12ID:???0248nobodyさん
04/06/09 23:17ID:???もらって、一つの連想配列にキーと値にわけて収納するというのを、リファレンスでやりたい
んですが
@test = qw/sda-1we pj-odfao of-134t/;
foreach $a(@test){
($x,$y)=split('-',$a);
$form={$x,$y};
}
print %$form;
>of134t
当たり前の結果ですが上書きされて行って最後の代入結果だけ残ります。上書きさせずに
一度に$formの中に標準入力からのデータのリファレンスを作るのはどうやればいいでしょうか。
少し言葉が変かもしれないですがごめんなさい。
0249248
04/06/09 23:23ID:???$form{$x}=$y;
$ref=\%form;
以外でやりたいんです。なんかリファレンスを普通の変数のように作成したいと思いまして。
0250248
04/06/09 23:32ID:???ところで、javascriptでは関数内でグローバル変数を使うなって言われますけど、
perlでもメソッド内であまりグローバル変数を使わないほうが良いんでしょうか?
リファレンスもローカル変数化するべきでしょうか?
0251nobodyさん
04/06/09 23:32ID:iD3wLltHhttp://yougo.ascii24.com/gh/search/
への用語検索をHP内に埋め込んでいるのですが、
ソースをEUCで記述すると、入力した言葉が文字化けして送られてしまいます。
何か良い解決策などは無いでしょうか?
ソースは、↓のように作っていて、JISで記述した場合は正常に動きました。
<FORM method="GET" action="http://yougo.ascii24.com/gh/search/"
<INPUT TYPE="text" name="pattern"><INPUT TYPE="submit" name="pattern">
</FORM>
0252nobodyさん
04/06/09 23:33ID:???0253nobodyさん
04/06/09 23:35ID:???グローバル変数は基本的に使わないほうがいいんじゃ?
当然リファレンスも
あと、>>252は>>249にね
>>251
で?
0254248
04/06/09 23:55ID:???ありがとうございます。あとから
@test2 = qw/q 1 w 2 e 3 r 4 t 5/;
をさっきの$formのりファレンスに追加したい場合もあるなと思って試してたら返事が遅くなりました。
まだできてませんけど;
メソッド内でのグローバル変数はやはり禁止にしたほうが何かといいですよね。
メソッド1での代入結果をメソッド2で使うんですが、リファレンスにしてそれだけ
呼び出し元にreturnで返そうと思います。(まだテストしてないので可能かはわかりませんんが・・・)
とにかくありがとうございました!
0255251
04/06/09 23:58ID:iD3wLltH入力した値が、文字化けせずに日本語のまま、正常に送られるようにしたいのです。
わかりにくい日本語ですいません・・・
0256nobodyさん
04/06/10 00:00ID:???うん?よく意図が読み取れないけど、メソッドっていうなら、普通にメンバ変数?(間違った言葉使ってるかも)に代入すればいいだけじゃ?
sub method1{
〜〜〜
$self->{hogehoge} = "unko-";
$self->method2();
}
sub method2{
〜〜
print $self->{hogehoge};
}
みたいに。
0257nobodyさん
04/06/10 00:02ID:???向こうがJISだったら、JISで送るしかないんじゃ?
<form>タグのencなんたらってのでこちらの送信するときの円コードは変えることができると思う。 ブラウザの挙動は知らないけど。
0259nobodyさん
04/06/10 00:10ID:Zv7Yb66M微妙にスレ違い。<form ... ACCEPTCHARSET="shift_jis">
0260248
04/06/10 00:10ID:???my @test1 = qw/q 1 w 2 e 3 r 4 t 5/;
my @test2 = qw/y 6 u 7 i 8 o 9 p 0/; #この行はまだ実験中なので無視してください。
my $form;
$form={map {split /-/}@test1};
return $form;
}
$form=&method;
print $form->{q};
一応動作はしますがなんか変な感じですね。
>>256
$selfは
my $self=shift;
とかをメソッドの初めにしてるということですよね?
今まで、うまくオブジェクト指向ちっくな部分が理解できてませんでしたけど、
なんかもの凄いヒントもらった気がします。ちょっと考えてみます。
0261nobodyさん
04/06/10 00:18ID:???うぬ? 微妙にわかってないかな。 my @test1 = qw/q 1 w 2 e 3 r 4 t 5/; なら、別に'-'でsplitする必要はないので、$form = { @test1 }でいいんじゃないかな。
あと、@array = qw/a A b B c C/; %hash = @array;と、
%hash = qw/a A b B c C/;で、%hashの中身は、同じね。
{}んで、囲んだたら中のリストの内容がぎじぇりgへおりgはえおじぇいrひあえhrがれがえrげhてぇt
ごめん、なにいってるわからなく。
>
0262248
04/06/10 00:27ID:???splitの部分は途中で@test1の中身を変えてしまったままを忘れてました。
>あと、@array = qw/a A b B c C/; %hash = @array;と、
>%hash = qw/a A b B c C/;で、%hashの中身は、同じね。
なんとなくで思ってましたが>>261さんのおかげで、確信がもてました。
$self->{hogehoge}="文字列";
はリファレンスのアドレス?メモリ番号といいますか、それが決まる前に値を入れる・・・
というか、値を入れるのと同時にアドレスも持つみたいな感じを以前に読んだ気がします。
かなり良い感じになってきたので、解説サイト行って勉強しなおしてきます。今なら前より
理解できそう。
0263251
04/06/10 00:37ID:outd/ELTありがとうございます。しかし、その内容では駄目なようでした・・・
板違いスイマセンでした。この内容だとHTMLなのかな・・・?
0264248
04/06/10 09:53ID:???my $self = shift;
my @test1 = qw/a-9 b-67 c-876 d-765/;
my @test2 = qw/e-rt f-asdd g-fgf/;
$self->{form}={map {split /-/}@test1,map {split /-/}@test2};
}
sub method2{
my $self=shift;
my @test=qw/a b c d e f g/;
print map{$self->{form}{$_}@test;
}
$self->{form}をデリファレンスするのに今はこんなやり方しか思いつかないんですが、
method2でわざわざ@testに$self->{form}の各キーを代入しないでもいい方法はないでしょうか。
$$self{form}でもアドレスが出てくるので、$$$self{form}でいけるかなと思いましたがやはり
駄目でした。
0267248
04/06/10 11:41ID:???(モジュールの場合)
コンストラクタ
sub new{
my $self = shift;
bless {
data1 => {qw/a 1 b 2 c 3/},
data2 => {qw/d 4 e 5 f 6/}
},$self;
}
で初期化しておいてmethodに$a={qw/a 2 b 4 c 6/}を投げたら
sub method{
my $self = shift;
my $a = shift;
$self->{data1}={%{$a}};
}
のように$self->の中身に処理結果を反映させて行く。みたいな感じでいいでしょうか?
これなら一応グローバル変数は排除できるっぽいです。
0268nobodyさん
04/06/10 12:02ID:Niohn4Xp以下の様にして予定表のリストから名前と年月が一致した予定を配列に入れて
foreach $yotei(@yotei) {
chomp $yotei;
($yo_name,$yo_year,$yo_mon,$yo_day,$yo_kaisi,$yo_end,$yo_naiyou) = split(/<>/,$yotei);
if ($name eq $yo_name) {
if ($yo_year eq $year) {
if ($yo_mon eq $month) {
$h_yotei[$yo_day] = $yo_naiyou;
}
}
}
}
後で、次の様にして表示しているのですが、これだと1日に1件の内容しか表示できません。
for(my $i=1;$i<=$lastday;$i++){
print "<td>$h_yotei[$i]</td>\n";
}
1日に複数の内容を表示させるにはどのように変更すればいいでしょうか?
0269nobodyさん
04/06/10 12:40ID:???push @{$h_yotei[$yo_day]}, $yo_naiyo;
に変えて、
for(my $i=1;$i<=$lastday;$i++){
print "<td>$_</td>\n" foreach @{$h_yotei[$i]};
}
とかか?
なんかしっくりせんけど。
0270nobodyさん
04/06/10 13:56ID:???月の日数文のファイルをつくって、ファイル名はもちろん年月日とかで。
そんでifにかけて真ならファイルオープンして中身を表示とかは?
これなら新しく予定を書きこむのも、新しい日付分のファイルを作るのもperlで可能。
素人も使えるようにUIもperlで整えればいいのでは?
0271270
04/06/10 13:58ID:???0273nobodyさん
04/06/10 17:01ID:???$self->{data1}={%{$a}};
これは、$aをデリファレンスして、んで、リファレンスを取ってるから、±0なことをしてると思うよ。
$aにハッシュのリファレンスが入ってるんだから、$self->{data1} = $a;でok
あと、この辺の話題になると、ム板のPerlスレにいったほうがいい。
0274nobodyさん
04/06/10 17:35ID:???ハッシュのコピーをしてるんじゃないの?
こうじゃなくて
$self->{data1} = \%{$a};
ならたしかにお前のいうとおりだが。
0275267
04/06/10 17:50ID:???$self->{data1}={%{$a}};
ありがとうございます。アドレスごと書きかえるだけでいいんですね。でも、アドレスごと
書き換えた場合は( {%{$a}} でも同じですけど )初めにコンストラクタで作られた
$self->{data1}のメモリ使用領域はどうなるんですか?
$self->{data1}はアドレスを格納しているだけなので、後でアドレスを書き換えたとしても
書き換え前のアドレス先には値が保存されているままなのでしょうか?
それとすみませんが、ム板っていうのはどこでしょうか。webpg板とweb制作板くらいしか使った事ないのですみません。
0276nobodyさん
04/06/10 17:56ID:???あ、あぁ、そういうことか
>>275
$self->{data1} = $a;とした場合は、$self->{data}->{hogehoge}を変更したら、$a->{hogehoge}も変更されると思う。
ム板->プログラム板
0277nobodyさん
04/06/11 12:04ID:???例ですが、data.txtに
1<TAB>2<TAB>3
と入っているとします。
$file="data.txt";
open(DATA,"<$file");
@line=<DATA>;
以下略
配列にデータを格納します。
QUERY_STRINGにxxx.cgi?num=3などとあって、この数値と配列の中身を評価する時ですが、
num=3の3は数値としてとらえてもいいと思うのですが、
$fileから読み出した文字列が数値である場合、それは文字列として評価するべきなのでしょうか、それとも数値として扱っていいのでしょうか。
ex.1 if ($num == $line[0]) {
ex.2 if ($num eq $line[0]) {
こういう扱いの違いについてです。
0278未承諾広告※ ◆TWARamEjuA
04/06/11 13:52ID:9CQ7zNJb都合の悪いときのことをいろいろと想像してみると楽しめるんじゃないかなぁ。
0279nobodyさん
04/06/11 14:05ID:???文字列比較の場合、num=03とやると3と一致しないね。
0280nobodyさん
04/06/11 20:43ID:???文字列を分割して配列に格納するまでは良かったのですが
配列の最後の文字列だけを取得する方法がわかりません。
$0で取得した/var/tmp/hoge.plのファイル名だけが欲しくて
$filename = (split(/\//,$0))[2];
としてみました。ディレクトリ変更する場合も考えて頭から数えないで
最後の文字列を取得できればと思います。
どなたか、ご教授よろしくお願いします。
0281nobodyさん
04/06/11 21:01ID:???0283nobodyさん
04/06/11 21:30ID:???use File::Basename;
my $filename = basename $0;
とかは?
0284280
04/06/11 21:32ID:???ありがとうございます。無事、ファイル名を取得する事ができました。
これで半日悩んでた自分がバカでした。修行を積んできます。
>>281
申し訳ありません。自分のレベルじゃまだまだ理解不能です。
今後の課題のひとつにしたいと思います。
ありがとうございました。
0285280
04/06/11 21:36ID:???数分違いでレス遅れました。
自分のレベルじゃ配列ぐらいしか思いつきませんでした。
basenameは、今後の参考にさせていただきたく思います。
ありがとうございました。
0286nobodyさん
04/06/12 00:34ID:???my $a = "aiueo" ; #コメント
の時に今まで半角スペースでやってたけどもしかしてTabでも問題ないの?
プラットフォーム全て共通でTabでもokかな?
0287nobodyさん
04/06/12 00:36ID:???ごめんね
このスレの住人では力になれないようだ
まずは日本語からだ!
0288286
04/06/12 00:55ID:???俺へのレス?
コメント開始までの見やすさのための空白にTabを使っていいのかなっていう質問。
Tabキーを押すと入力されるやつね。
なんかTabってソフトウェアによってコードが違うとか聞いた事あるから、もしかして
UNIXとWINDOWSでは違うのかなと思ったり、そもそもperlのコメント前にそんなの使って
いいのかなと・・・・
やっぱり日本語変かな・・・ごめん
0289nobodyさん
04/06/12 00:58ID:???そんなに手間のかかることじゃないし。
0291286
04/06/12 01:15ID:???2行もレス付けてくれるならyes|noも言って欲しい・・・・・
>>290
かなりのプログラミング言語ではホワイトスペースはどれだけ会っても半角スペース1分として認識される。
みたいなことが見つかった。使っていいんだろうけど、不安。だから誰かに大丈夫と言って欲しい。
0292nobodyさん
04/06/12 01:39ID:???0293nobodyさん
04/06/12 02:10ID:???入れ子をわざわざスペース4個でやれと?
アフォの子ですか?
0294nobodyさん
04/06/12 02:15ID:K+1+iYDq1. aタグでcgiにリンクします。
2. まずそのcgiは、aタグをクリックした人のIPアドレスを取得します。
3. その取得したIPアドレスを(毎日0:00にリセットされる)IPリストと照合します。
4. IPリストに同じIPアドレスがあれば、リンク先に飛ばしません。
5. IPリストに同じIPアドレスがなければ、IPリストにそのIPアドレスを書き込み、リンク先に飛ばします。
一日に二回以上、同一IPアドレスからの訪問を拒否するCGIです。
ここで質問ですが、そのリンク先に残るリファラはCGIになるのでしょうか?
このリファラをaタグの貼ってあるHTMLのままにすることは可能でしょうか?
0296286
04/06/12 02:35ID:???ありがと!かなりすっきりした!
>>293
憎まれ口を叩きながらも教えてくれてありがと。
>>295
結構普通にありますよね。それで俺もなんかあるのかなと
0297286
04/06/12 02:43ID:???関数の使いかたってあるのかな?
結構元もとの関数の意味を考えて使うと、何の処理なのかわかりやすいかもね。
例えばforeachとmapはmapの方が処理速度は速いけど、mapは返り血を出すから、
返り血が必要ない時には使わない。とかって・・・・意味ないか・・・
倫理マークアップの必要性をを軽く勘違いしちゃったね;
0298294
04/06/12 10:23ID:K+1+iYDqレスありがとうございます。
どのような方法か簡単に教えていただけませんか?
0299nobodyさん
04/06/12 10:52ID:???0300nobodyさん
04/06/12 11:50ID:???ファイルを開いた時点のファイルサイズがEOFになるのでしょうか?
それとも、追加書き込みされた分も読める?
0301nobodyさん
04/06/12 11:56ID:???読んだ時点でのEOFまで読める。
経験上、Linuxは糞で偶に嘘読まされる。信頼性が必要な時は他のプリミティブで同期取らないとだめぽ。
0302294
04/06/12 12:01ID:K+1+iYDqではもう少し詳しく教えていただきたいです。
0304nobodyさん
04/06/12 12:08ID:K+1+iYDqlocationで飛ばしたらいいだけ?
0306nobodyさん
04/06/12 12:18ID:???0308nobodyさん
04/06/12 12:46ID:???読んだ内容が、書かれているはずの物と異なる瞬間が存在して、その瞬間に読んだときに
ファイルが壊れているように見える。
再現性が非常に低いから解析できてないけど、どうしてもシステムのバグ以外には考えられない現象に遭遇したら、
そんなこと言ってた名無しがいた事を思い出せば、ちっとは得するかもな。
0309nobodyさん
04/06/12 13:25ID:???書き換え前の内容と書き換え後の内容が混ざってるぐらいは
あってもしょうがないかなと思うけれども、どちらでもない
ゴミが読めるってことでしょうか? そうだとするとかなり嫌
な感じだな...
0310nobodyさん
04/06/12 13:33ID:FD8KxqwO1.
ショッピングサイトを立ち上げているのですが、”決済する” のボタンを押すと、カード会社のサイトにジャンプし
、そのサイトで情報入力を行い、その戻りを受けてユーザに完了画面を出力しようと思います。
2.
こちらから、form post で、カード会社のCGIを呼び出し、カード情報入力画面をだします。
そのCGIは結果を success 又は ng でこちらに返してくるのですが、このままのつくりだと、
ユーザにカード情報入力後の画面に success , 又はngと ぽつんと表示され訳がわからない状態となります
3.
そこで、 form post属性で他のcgiを呼び出し、その結果を受けて、”xxxx円 決済が完了しました ありがとうございます
トップに戻る” と出したいのです。form post で呼び出したcgiの結果を判定する方法がわからないので、教えて下さい。
0313nobodyさん
04/06/12 14:09ID:???良かったら、どこのサイトか教えてくれないか?
2chで質問しながら作るような奴が作ったサイトでは絶対に買物したくないからな。
0314nobodyさん
04/06/12 15:25ID:???0316nobodyさん
04/06/12 16:01ID:???そんな馬鹿な奴は挙手汁。
0317nobodyさん
04/06/12 16:10ID:???http://pc5.2ch.net/test/read.cgi/tech/1085564875/223
0318nobodyさん
04/06/12 16:51ID:???ああ!!
いやマジで何なんだろうと悩んでたよ。<good>とか<evil>とかいうタグがあるのかと。
0319nobodyさん
04/06/12 21:53ID:???0321nobodyさん
04/06/13 12:39ID:???アイタタタ
0323nobodyさん
04/06/13 14:13ID:???0325nobodyさん
04/06/13 15:25ID:???0326nobodyさん
04/06/13 17:04ID:???2: それでラマ本を読んでみたが
3: 画面の作り方すら分からない
よろしこ。
0327nobodyさん
04/06/13 18:14ID:???マジレスしてよかったのかな
0329nobodyさん
04/06/13 19:01ID:???コマンドプロンプトでとかは無理かい
0330nobodyさん
04/06/13 19:37ID:???Advanced Perl Programmingに、Perl/Tkで作った
テトリスの作例があるから参考にしてみたら?
コードだけなら下のURLからダウンロードできるよ。
ttp://examples.oreilly.com/advperl/
0331nobodyさん
04/06/14 08:30ID:???どこで質問すればいいのかわからなかったのでここで質問をします
スレ違いの場合は誘導お願いします
2chではread.cgiを使ってブラウザでも読めるようなcgiを作ってますが
cgiで引数を指定するのは?のはずなのにcgiの次が/で引数にはならないと思います
どうやったら?を入れなくても引数を指定することが出来るんでしょうか?
0332nobodyさん
04/06/14 08:37ID:???おまえ馬鹿?引数とか意味もわからず使うなよ。お前の言いたいのはformのmethodだろ。
form method で調べて来い
0334nobodyさん
04/06/14 08:53ID:???どちらか片方の用語だけでも調べようと思い
perl +fromやperl method 用語などでもぐぐりましたが全然でてきません。。。
もう少しヒントをください
0335nobodyさん
04/06/14 09:45ID:???>2chではread.cgiを使ってブラウザでも読めるようなcgiを作ってますが
>cgiで引数を指定するのは?のはずなのにcgiの次が/で引数にはならないと思います
>どうやったら?を入れなくても引数を指定することが出来るんでしょうか?
つまり Perl で CGI の 引数 について知りたいわけだろ?
自分で書いておいて何故わからんのか
0337nobodyさん
04/06/14 10:42ID:???perlは全然知りません
Cを少しかじってるぐらいですが
ブラウザで?を入れると引数が入るのを以前確認しただけという知識です
>>336
ありがとうございます
>>331でも書きましたがスレ違いということならば
誘導先を教えてください
0339nobodyさん
04/06/14 11:12ID:???0341nobodyさん
04/06/14 18:38ID:???客に「この注文内容でいいですか?」みたいなメールを送りたいんだけど、毎回手打ちは面倒だから
perlでテンプレでも作って、注文内容や送り先とかを自動で埋め込むみたいなのを作りたい。
でも具体的にどういう設計にすればいいか思いつかない・・・
とりあえず注文メールにここから客へのメールが贈れます、みたいなURLを渡して
そこにアクセスするとその時の注文内容とかが書かれたメールの本文が既にできあがって
いて、ワンタッチで送信。
みたいなのがいいと思うんだけど、やっぱ注文受けたときに新規のファイルでも作って、その
URLをメールで渡すくらいしかないかな?なんかイケてないんだよね。
0342nobodyさん
04/06/14 19:00ID:???0343nobodyさん
04/06/14 20:05ID:???0345nobodyさん
04/06/14 20:27ID:???駄々捏ねたかったら自分のサイトで捏ねてろ。
http://e-words.jp/
この辺をお勧めする。
0346未承諾広告※ ◆TWARamEjuA
04/06/14 20:31ID:???流れ的には問題ありありかもしれないけれど一つの方法として、
自分宛に送られてくる発注メール自体を「この注文内容でよろしいですか?」にして、
うけとったらそのまま発注者へ流せば手打ちの手間が減るですね(w
0347nobodyさん
04/06/14 20:35ID:???とやってもエラー画面の表示が変わらないんだけど何がおかしいの?
環境はwin98/ie6/httpd142k/activeperl5.6/
0348nobodyさん
04/06/14 20:38ID:???0349341
04/06/14 20:42ID:???おお!レスありがと!
「この注文内容でよろしいですか?」のメールを実際に贈るのは
コンピュータ全く知らない素人だからインターフェースをある程度のものにしなきゃ
と思ってる。
>>346のやり方で思ったけど、普通に注文を知らせるメール本文の下の方、というかある程度
感覚を空けて、客に出すメールの本文をくっつけておけば、後はそれをコピペ。みたいでもいいかも。
ただ、実際にやる人間がコピペができるかどうか・・・・;
0351nobodyさん
04/06/14 20:48ID:???0354nobodyさん
04/06/14 21:13ID:???0355nobodyさん
04/06/14 21:18ID:???コテはうんざりだから必要もないのにいちいち名乗るな。
それこそ売名ならやめられんのかもしれんが。
本7とカポコンの悪臭だけでゲロゲロだから。
Can't locate object method "requests_redirectable" via package "WWW::Mechanize"
(perhaps you forgot to load "WWW::Mechanize"?) at C:/Perl/site/lib/WWW/Mechanize
.pm line 156.
というエラーが出されるのですが、ソースでは
use WWW::Mechanize;
と宣言しています。原因はなんでしょうか?
0357nobodyさん
04/06/15 14:41ID:???だからここはコーディング質問スレだっていってんだろ!!!!!!
モジュールの使い方は専用のスレに行け!!!!!!!!!!!
0358nobodyさん
04/06/15 15:08ID:???0360nobodyさん
04/06/15 16:21ID:dQxW4G/Wこのデータをブラウザから編集させたいと思うのですが、なにか参考になるモジュールなどは
ありませんでしょうか?
Perl5以上で動作するものがいいです。
-----
# 会員番号 名前 電話番号
0001山田 太郎090-1234-5678
0002山田 次郎090-1111-2222
-----
0361nobodyさん
04/06/15 16:27ID:???0362nobodyさん
04/06/15 16:53ID:???もしかして俺は釣らr(
0363nobodyさん
04/06/15 17:01ID:???メールアドレスを入力するフォーム部で、[0-9A-Za-z]と[@.-]以外の文字列が含まれていた場合、エラーを返す処理を行いたいと思います。
使用可能な文字列を配列@availableに入れるとして、$mailに配列@available内の文字以外のものがあれば○○する、という記述をしたいのです。
foreach (0 .. $#available) {
if (index ($mail, $available[$_]) >= 0) {
こう書くと、@available内の文字があった場合に処理を行うということになりますが、
@available内の文字以外のものがあれば、という判定はどのように書けばいいのでしょうか。
0364nobodyさん
04/06/15 17:12ID:???> メールアドレスを入力するフォーム部で、[0-9A-Za-z]と[@.-]以外の
> 文字列が含まれていた場合、エラーを返す処理を行いたいと思います。
$mail =~ /[^\-.0-9\@A-Za-z]/ and error();
0366360
04/06/15 18:24ID:dQxW4G/W>CGIとして使うならモジュールも糞もあるか?
すいません、意味が分かりません。
0367nobodyさん
04/06/15 18:27ID:???言葉が通じないのでは御話にならない。
0368nobodyさん
04/06/15 18:41ID:???お前がモジュールなんていう言葉を使うのは10年早い。
↓ここでCGIを探せ
【CGI】こんなCGI探してますver.13
http://pc5.2ch.net/test/read.cgi/hp/1081608108/
0369nobodyさん
04/06/15 22:50ID:???ID:passという書式でかかれているdatファイルから
特定のIDとパスワードを検索してその文字列だけを書き換えたいのですがどうすればいいでしょうか?
教えて下さい。お願いします。
0370nobodyさん
04/06/15 22:58ID:???open でファイル開くことから教えてくんかい?
0371369
04/06/15 23:25ID:???特定のIDとパスワードを検索してその文字列だけを書き換えたい
という処理の仕方をどうすればいいかわからないんです。よろしくお願いします。
0374nobodyさん
04/06/16 00:15ID:???0375sage
04/06/16 01:00ID:???0376nobodyさん
04/06/16 01:06ID:???正規表現を15分でいいから勉強するよろし。
0377nobodyさん
04/06/16 04:13ID:???http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq5.html#How_do_I_change_one_line_in_a_fi
0379nobodyさん
04/06/17 12:14ID:???BBSでの投稿フォームの記入内容にNGワードが存在する場合にエラーを返す処理をしたいのです。
フォームはname,mail,textの3つのフィールドがあります。
@ng_word = ("逝ってよし");
# テキスト内を検索して、NGワードが存在した場合
foreach (0 .. $#ng_word) {
if (index ($name, $ng_word[$_]) >= 0 || index ($mail, $ng_word[$_]) >= 0 || index ($text, $ng_word[$_]) >= 0) { 以下略
上記の4行目の判定部分なのですが、フィールドが増えるたびに
index ($mail, $ng_word[$_]) >= 0 ||
のような書き方を追加して書かなければならないのでしょうか。
$nameや$mailなどをあらかじめ配列に追加しておいて、配列内のそれらの変数を判定させると言う書き方はできませんか?
0380nobodyさん
04/06/17 12:38ID:???http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsyn.html#Foreach_Loops
my @ng_word = qw( ... );
foreach my $word (@ng_word) {
foreach ($name, $mail, $text) {
index($_, $word) > -1 && error();
}
}
0382nobodyさん
04/06/18 08:52ID:???文字列内に以下の条件を含む部分があるかどうかを
チェックするために正規表現を使ってみたいのですが
いかようにすればよいでしょうか?
?nnnn (nnnnは4桁の数字)
0383nobodyさん
04/06/18 10:05ID:???でも俺すげー優しいからヒントをやろう。
0-9
あとは自分で考え。
スレタイ嫁
0385nobodyさん
04/06/18 10:48ID:???"?[0-9]{4}"
0386nobodyさん
04/06/18 10:49ID:???0387nobodyさん
04/06/18 10:49ID:???どうダメかは正規表現道場スレで聞け
0389nobodyさん
04/06/18 14:05ID:???0390nobodyさん
04/06/18 14:25ID:???0391nobodyさん
04/06/18 14:58ID:???0392nobodyさん
04/06/18 16:08ID:???お前等面白い
0393nobodyさん
04/06/18 20:06ID:???フォームからPOSTで送信してcgiから帰って来る結果を小さいウインドウを別にポップアップして
そこに表示したいのですが、どうすればいいでしょうか?
教えて下さい。お願い致します。
0394nobodyさん
04/06/18 21:11ID:???http://pc5.2ch.net/test/read.cgi/hp/1087025773/
http://pc5.2ch.net/test/read.cgi/php/1086715675/
0396nobodyさん
04/06/19 04:43ID:Bryn3NL2ブラウザからあるperlのプログラムを起動して、データベースの更新をしているのですが、
これをバッチとして自動起動したいと思っています。
で、 perl xxxx.cgi とすると、エラーになります。
どこでエラーになるかを調べたところ require xxxxx.cgi でrequireが正しくされていないようです。
perl はバッチ処理としては動かないのでしょうか?
0397nobodyさん
04/06/19 07:02ID:???0398nobodyさん
04/06/19 07:28ID:Bryn3NL2レスサンクスですが
絶対パスでもだめでした
0399nobodyさん
04/06/19 09:50ID:???順位付けをしたいです。「変動勝ち点制」とは、1位のチームは6点、
2位のチームは5点、という具合に各チームがランキングポイントを
持っています。試合の勝者が相手チームのランキングポイントを獲得し、
トータルポイントに加算していきます。その日の順位によってランキング
ポイントは変化します。
2.以下にソースを貼り付けます。データを保存しているresult.datは
1行がこんな風になっています。「d,l,w:k,n,w:l,o,q」。":"で区切った
一番目の要素が勝者で、2番目が敗者です。3番目に"w"となって
いるのは試合が決着した場合、"q"は引き分けです。
3.エラーは出ないのですが、何も答えてはくれません。CPUが100%になって
いるので何かやってはいるみたいなのですが……。
0400399
04/06/19 09:50ID:???#$?[2]は昨年の順位=ランキングポイント。
@d=("H","0","6");@s=("L","0","5");@k=("Bu","0","4");
@n=("F","0","3");@l=("M","0","2");@o=("Bw","0","1");
#result.datからその日の試合結果を入力する
open (RESULT,"result.dat");
while ($result = <RESULT>){
chop($result);
while($x = split (/:/,$result)){
while(@y = split(/,/,$x)){
if($y[2] eq "w"){
$$y[0][1]=$$y[0][1]+$$y[1][2];
}else{
$$y[0][1]=$$y[0][1]+($$y[1][2] / 2);
$$y[1][1]=$$y[1][1]+($$y[0][2] / 2);
}
}
#その日のランキングポイントを決める
#鷹
$rp=6;
if($d[1]<$s[1]){$rp=$rp-1;}elsif($d[1]<$k[1]){$rp=$rp-1;}
elsif($d[1]<$n[1]){$rp=$rp-1;}elsif($d[1]<$l[1]){$rp=$rp-1;}
elsif($d[1]<$o[1]){$rp=$rp-1;}
$d[2]=$rp;
#あとは同じなので省略。猫、牛……と去年の順位にしたがって続きます
}}
close (RESULT);
#結果を出力
print ("H\t$d[1]\n");print ("L\t$s[1]\n");print ("Bu\t$k[1]\n");
print ("F\t$n[1]\n");print ("M\t$l[1]\n");print ("BW\t$0[1]\n")
0401nobodyさん
04/06/19 10:17ID:???perl -IC:/WINNT/system32 foo.cgi
-Iオプションでrequireするディレクトリを追加してみるとか
>>400
whileって何するのか勉強してこい
0402nobodyさん
04/06/19 13:31ID:???0403nobodyさん
04/06/19 14:47ID:Bryn3NL2サンクスコ やってみます
0404nobodyさん
04/06/19 21:48ID:???@array(
{'a'=>'value1','b'=>'1234'},
{'a'=>'value2','b'=>'4518'},
{'a'=>'value6','b'=>'4879'},
);
とあったとして、bの値でarrayをソートしたいのですが。
0405nobodyさん
04/06/19 22:10ID:???http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/199909/mgp00039.html
0406nobodyさん
04/06/20 06:51ID:F4x9/MNB元々 Perl(CGI) で動いてたものを PHP へ移植したんですが、クライアントからの呼び出しが
a.cgi 固定で PHP を cgi として動かせないサーバで困っています
そこで a.cgi(Perl) は a.php を呼び出すだけの機能にしたいのですが Perl(CGI) から PHP は
どのように呼び出せばいいのでしょうか?
よろしくお願いします
0407nobodyさん
04/06/20 12:09ID:???<Files a.cgi>
AddType application/x-httpd-php .cgi
</Files>
(w
0408nobodyさん
04/06/20 14:13ID:???open(IN,"$logfile") || &error("ファイルがオープン出来ませんでした。");
@nakami=<IN>;
close(IN);
$log = "$title<>$time<>message\n";
unshift(@nakami,"$log");
open(OUT,">$logfile") || &error("ファイルに書き込み出来ませんでした。");
print (OUT "@nakami");
close(OUT);
と書いたのですがログファイルの先頭にスペースがついていってしまいます。
$title<>$time<>message
$title<>$time<>message
$title<>$time<>message
とこういう風に上書きしていくとどんどん増えていってしまいます。
どこがわるいのでしょうか?教えて下さい。お願いします。
0409nobodyさん
04/06/20 14:38ID:???ところで @nakami=<IN>; って、
昔俺が赤ラクダ本を読んだときには「そんなことするな」と書いてあったような記憶が
あるんだが、最近はみんなやってることなの?
ファイルを全部いっぺんに読み込むからメモリが膨れ上がって、
共用サーバだと結構世の中の迷惑なんじゃないかという気がするんだが。
一行毎に処理していたフィルタ全盛時代の美徳はもはや失われてしまったのか。
0411406
04/06/20 15:10ID:???ありがとうございます
これって apache の設定ですか?
であればレンタル鯖なのでいじれないんです
他になにかいいアイディアはないでしょうか
よろしくお願いします
0412nobodyさん
04/06/20 15:42ID:???@nakami=<IN>;
close(IN);
$log = "$title<>$time<>message";
unshift(@nakami,"$log");
open(OUT,">$logfile") || &error("ファイルに書き込み出来ませんでした。");
$" = "\n";
print (OUT "@nakami");
close(OUT);
0414406
04/06/20 16:19ID:???0415nobodyさん
04/06/20 16:36ID:???my @new = sort{ $a->{b} <=> $b->{b} } @array;
>>406
print (OUT @nakami);
このような配列があるときに、配列の一部に存在する
3, 7, 5の数字を使ってソートしたいです。
こう並べ替えたい↓
@list = (name<>pass<>7, name<>pass<>5, name<>pass<>3);
のですが、うまく処理する方法が思いつきません。
よろしくお願いします。
0419nobodyさん
04/06/20 22:34ID:???@list =(
"name3<>pass3<>3",
"name7<>pass7<>7",
"name5<>pass5<>5");
@array = sort{(split(/<>/,$b))[2] <=> (split(/<>/,$a))[2]}@list;
こんな感じか?
もうちょい綺麗な書き方ありそうだが…
0420nobodyさん
04/06/20 22:35ID:???このケースで効率的なシューウォーツ変換ってなによ?
シューウォーツ変換が効率的なのは>>418のようなケースだろう。
>>418
@list = map{ $_->[1] } sort { $a->[0] <=> $b->[0] } map{ [(split /<>/)[1], $_] } (...list...);
0421420
04/06/20 22:39ID:???適当に脳内補完してくれ。
理解できてないですが、
テストした結果うまく動いてるようです。
ありがとうございました。
0423415
04/06/20 23:45ID:???私にはさっぱり想像がつかないので、
>>404のケースでの使い方を教えてください。
>>418
数値が一桁固定なら、こんなのも。
my @new = map{ substr($_, 1) }
sort map { pack('A1A*', (split(/<>/))[2], $_) } @list;
0424406
04/06/21 04:08ID:???Perl から PHP を呼ぶ方法は無いのでしょうか
クライアント側の変更をお願いするしかないのかな...お金が飛んで行く〜
0425nobodyさん
04/06/21 05:38ID:???それを以下のような形で全て表示させたい場合、
合理的というか、無駄のない書き方が思い浮かば困ってます。
┌テキスト1
├テキスト2
├テキスト3
└テキスト4
今↓のように書いているのですが、おそらく効率がわるいような気がします。
foreach (0 .. $#hoge) {
my $prefix;
if ($_ == 0) {
$prefix = '┌';
} elsif ($_ == $#hoge) {
$prefix = '└';
} else {
$prefix = '├';
}
print "$prefix$hoge[$_]<br>\n";
}
こういうのを書くことって結構あると思うんですが、
ご教示いただけませんでしょうか。
0426nobodyさん
04/06/21 07:29ID:pRQNX02oこれは「124」となる筈ですよね?
何故か「020305」となります。
もしかしてバグでしょうか?
環境は XP + ActivePerl 5.8.3 です。
0428nobodyさん
04/06/21 08:06ID:???0429nobodyさん
04/06/21 14:53ID:???foreach (0 .. $#hoge) {
printf qq|%s%s<br>\n|, $_ ? $_ == $#hoge ? '└' : '├' : '┌', $hoge[$_];
}
ややブサイコ
>>428
おーい 5.8 だろ?(w
0430nobodyさん
04/06/21 23:07ID:???print "┌$hoge[ 0 ]\n";
for(1..($#hoge-1)){ print "├$hoge[ $_ ]\n" }
print "└$hoge[$#hoge]\n";
0431nobodyさん
04/06/21 23:21ID:???$first = shift @hoge;#効率悪いかも
$last = pop @hoge;
print "┌$first\n";
print "├$_\n" for(@hoge);
print "└$last\n";
0432nobodyさん
04/06/21 23:30ID:???0433nobodyさん
04/06/21 23:47ID:???0434nobodyさん
04/06/22 11:03ID:???jcodeを使っても、sjisの場合とかは第二引数に範囲指定が効かない場合がある。
&jcode::tr (\$value, "0123456789", "0-9");
0435nobodyさん
04/06/22 12:14ID:???ていうか、jcode.plに範囲指定はJISとEUCでしか使えないって書いてあるよ。
;# Range operator like `A-Z' for 2 byte code is partially
;# supported. Code must be JIS or EUC, and first byte
;# have to be same on first and last character.
0436nobodyさん
04/06/22 14:14ID:???FormでボタンAとボタンBを作って、web上でボタンA、Bを押すとそれぞれ
$Xの数値を変える(たとえばボタンAを押したら$x = 1、Bを押したら$x = 2)
というのを作りたいんですが、どうすればいいでしょうか。
教えてください。お願いします。
0437nobodyさん
04/06/22 15:07ID:???0438nobodyさん
04/06/22 15:16ID:???0439nobodyさん
04/06/22 18:00ID:???<input type="radio" name="x" value=1>Aボタン
<input type="radio" name="x" value=2>Bボタン
</form>
−−−hoge.cgi
#! /path/to/perl
use CGI;
$cgi = CGI->new();
$x = $cgi->param('x');
print $cgi->header();
print $cgi->start_html();
print $x;
print $cgi->end_html();
0440nobodyさん
04/06/22 19:37ID:???受け取った一番初めに中身に変な文字列が入っていないかを検査したほうがいいのですか?
変な文字列というのはPERLの命令文とかです。受けたデータをそのまま使うの大丈夫なのかなと
疑問に思ったので質問しました。どなたかお願いします。
0441nobodyさん
04/06/22 19:45ID:???渡すのもあなた、受け取るのもあなた。
変なものを渡さないようにするのもあなたでしょ?
誰か知らない人から受け取るんなら、どんなもの渡したのかその人に聞くか、
中身みて期待値かどうか自分で見て下さい。
どなたか知りませんがお願いします。
0442440
04/06/22 20:24ID:???質問の仕方がわるかったのでしょうか?
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
print $buffer;
とかした場合にJSとかHTMLのタグじゃなくperlの関数とか命令文が入っていた場合に
その命令文が実行されてしまうのですか?という質問です。
お願いします。
0443nobodyさん
04/06/22 20:36ID:???0445440
04/06/22 22:27ID:???ですよね。簡潔で最高な答えありがとうございました。
>>444
鯖はまだなのでhttpdとactiveperlでやってます。どっちにしろレンサバでperlのテストなんか
馬鹿なことしませんけどね。
ところで何故にperlの命令文は無効になるんですか?evalしたら実行されますよね?
#自治厨
スレ違い
>>自治厨
森へお帰り
#444
やってみろよ
>>444
お前の話はつまらん
0446nobodyさん
04/06/22 22:41ID:???0447nobodyさん
04/06/22 23:40ID:???0449nobodyさん
04/06/22 23:56ID:???0450nobodyさん
04/06/23 00:09ID:???具体的には、passwdコマンドをperlから実行し、2回促される
入力をプログラムから自動的に入力させたいといったもの
です。
もしも何か方法があれば教えていただきたい次第です。
宜しくお願い致します。
0451nobodyさん
04/06/23 00:11ID:???0452440
04/06/23 01:16ID:???0453nobodyさん
04/06/23 01:19ID:???0455nobodyさん
04/06/23 02:03ID:???各サブルーチンをスクリプト内に全部記述するのと、
それぞれにライブラリファイルを作成して必要なときのみrequireで読み込むのとどっちがいいんでしょうかね?
いまいち意味不明っぽいですが、つまりは
if ($bar) {
require "hogehoge.pl";
&hogehoge::foo(\$bar);
}
と
if ($bar) { &foo(\$bar); }
のどっちがいいのでしょうか?
0456nobodyさん
04/06/23 02:07ID:???0457nobodyさん
04/06/23 02:26ID:???レスありがとうございます。
使い分け、頭の片隅に置いておきます。
まだまだ常時考えながらはコード書けませんです、はい。
もう少し色んなこと考えながらコード書かないとだめだなぁ…
0459nobodyさん
04/06/23 05:27ID:???http://pc5.2ch.net/test/read.cgi/php/1063562491/861
0460nobodyさん
04/06/23 10:31ID:???4<>あ<>20:02<>
2<>き<>08:41<>
このように並んでいるテキストを、入力された数値によってソートしたいのですが
今は
if($num==1){ };
if($num==2){ };
if($num==3){ };
みたいに書いてるのですが、もっとスマートなやり方は無いでしょうか?
0461nobodyさん
04/06/23 11:41ID:???ちゃんと説明しろ
0462nobodyさん
04/06/23 11:44ID:???見たいにハッシュにぶち込んで、
foreach my $num (sort( keys %data)){
#$data{$num} の処理
}
にする
0464nobodyさん
04/06/23 18:02ID:???さあ帰った帰った。
0466nobodyさん
04/06/23 21:04ID:???$a = $ENV{'HTTP_COOKIE'};
@a = split /\;/,$a;
foreach(@a){
(my $a , my $b) = split /=/;
$form{$a} = $b ;
}
クッキーの中にNAME=VALUEが一つだけでも複数あっても大丈夫のようにしたいんだけど、↑ので
合ってる?一つの場合は@aの中には$aがそのまま入るから一応大丈夫だと思うけど、
ここのお墨付きをもらいにきた。
0467nobodyさん
04/06/23 21:16ID:???チェックぐらい自分でしろ。
http://www.studyinghttp.net/cookies.html
0469nobodyさん
04/06/23 21:39ID:???さあ帰った帰った。
0472440
04/06/23 21:44ID:???>さあ帰った帰った。
ってまるで、ここがあなたの居場所みたいな言い方ですけど、
ここがあなたの居場所なんですか?
0473nobodyさん
04/06/23 21:44ID:???0477nobodyさん
04/06/23 21:47ID:???0480nobodyさん
04/06/23 21:50ID:???ここは質問スレなんだから、喧嘩はよそでやってくれ。
0482466
04/06/23 21:54ID:???おまいは>>469-470だろ?でもまあ俺は単純だから、俺より詳しそうなおまいに
okを出してもらえば、それで安心だよ。ありがとね。
>>467でくれたサイトもいいとこみたいだから見に行くよ。それじゃ。ごめんね。
0483480
04/06/23 21:56ID:???俺にはここに俺ともう二人しかいないようにしか思えないんだが・・・・
そして俺以外の二人に向けて言ったんだけど、まあとりあえず早く正常に戻そうよ。
それでは次の質問どぞ↓
0484440
04/06/23 21:57ID:???いつになったら答えてくれるんですか?恥ずかしくて答えられませんか?
0485nobodyさん
04/06/23 22:10ID:???0486nobodyさん
04/06/23 22:20ID:???ここに解説がある。
http://www2.strangeworld.org/uedakana/perl_tips105.txt
0487nobodyさん
04/06/23 22:22ID:???質問者も悪いが、すぐムキになる回答者もどうかと。
っていうかこのスレの回答者は特有だね。
母親に向かってすぐ「くそババァ!」って連呼するタイプの人間だな。内弁慶っていうかな。
0490nobodyさん
04/06/23 22:53ID:???0491nobodyさん
04/06/23 23:08ID:???俺がくらったじゃねえかよ!マジで鬱・・・・何のウイルス?
色々探したが見つからなかった・・・・ウイルス対策なしの俺がここのURLを見に行くなんて
しくじった。
perl_tipsっていかにも正当な名前なのに。マジで直し方教えてくれ。
0492nobodyさん
04/06/23 23:33ID:???0494491
04/06/24 00:04ID:???ありがとう・・・・スキャンかけたいけど、っていうか対策ソフトいれたいけど、c:\が残り
50MBしかないから・・・・
とりあえず、ブラクラ系みたいなのでほっとしてる。変な症状もないし、スタートアップにも
新しい奴なかったからほっとく。
それにしても何故にこのスレでトロイの木馬が貼られてるんだよ・・・・・そんなに憎悪を抱いたのか?
0496nobodyさん
04/06/24 01:29ID:???ソース見てみたが、ウィルスではないと思うぞ。
<meta http-equiv="Refresh" content="0">と、
コンコンクラッシャーとメールストーム。
ただし、
<img src="http:// www. raus. de/ crashme/">
の部分が完全一致でをウィルスとして認定するらしい。
(全角スペースを空けて反応しないようにしてある)
0497491
04/06/24 02:23ID:???ありがと。その優しさに軽く感動;;
俺実は2回踏んだのね。一度目はセキュリティ中のままで行ったらいきなり画面が真っ青になって
例外なんとかってやつが出て再起動して、レジストリ修復してセーフであげてscandiskとかした後、
普通に立ち上げたらとくには問題ないみたいだった。
2回目はそのソースをブラクラチェッカにかけてみたけど、そのチェッカの使い方がわからずに、セキュリティを
最高に挙げて愚直にトライ。結果同じ症状で再起動した後、同じ事やって今の状況・・・・・・
俺の場合ウイルスのとこに行く前に、例外発生画面になった気がする。クリック1秒未満で画面が何も変化
ないまま次の画面は青い例外発生画面だったから。
ほんと優しくしてくれてありがと。癒されたぽ
0498491
04/06/24 03:13ID:???これだったみたい。一応オンラインのウイルススキャンかけてみたら
このウイルスがテンポラリファイルから4つ検出された。とりあえず危険なものではなくて「ほっ」・・・・
0499nobodyさん
04/06/24 10:36ID:???- - - - - Perl コーディング初心者質問コーナー Part35 - - - - -
0500nobodyさん
04/06/24 18:54ID:???警告:ページの有効期限切れ
というメッセージが出るのですが、それが出ないサイトもあるみたいですが、
それはどういう方法を使ってるのですか?PERLでのやりかたが知りたいので教えて下さい。
0501nobodyさん
04/06/24 18:59ID:???0502nobodyさん
04/06/24 19:10ID:???0504500
04/06/24 20:31ID:???キャッシュの制御を<meta>で変えればいいのですか?
>>502
HTTPのヘッダーの辺りということでしょうか?
>>503
getだとできるんですね!getの時はブラウザの戻る、進むでクエリ付きURLだから
そのまま処理をしてくれるということみたいですね。
postの場合は標準入力から読みこむ。それで、postで送ったフォームデータは
セキュリティ上の都合でブラウザ?のデフォルト設定が自動再送信しないようになって
いるんですよね?HTTPのヘッダに何かを追加すると、その設定が変えられるというわけでしょうか?
0505nobodyさん
04/06/24 20:37ID:???0506nobodyさん
04/06/24 20:38ID:???結局違うくて、ノーキャッシュだったと思うんだがなぁ
兎に角何でもかんでも1から10まで全部他人に頼ろうと思わず、
与えられた情報を自分で試す努力しろっての
0507nobodyさん
04/06/24 20:41ID:???0508nobodyさん
04/06/24 21:30ID:???一応header関連だった気がするが、cgiの出力をキャッシュさせるかどうかは
pragma
expires
cache-control
他にもなんかあった気がするけど、HTTPサーバによっては-nphで自分で一からheader
を設定しないと、勝手にno-cacheを吐き出すよ。たしかね。
どうだったっけかな。思い出せない。
0509500
04/06/24 21:56ID:???print "Content-type:text/html\n";
print "Expires:Sun, 06 Nov 2005 08:49:37 GMT"."\n\n";
このようにしてみましたが、効果なしでした。かなり高度なテクニックなんですかね?
0510nobodyさん
04/06/24 22:11ID:???0511nobodyさん
04/06/24 22:13ID:???おまいには悪いが、誰もわからない悪寒・・・・・・・
ついでに>>507のいうようにスレ違いぽ
まあ一応
PERLでどうコーディングしたら出力がUAにキャッシュされるか
という質問みたいだからあながち的ハズレなスレ選びではないが。
どっちにしろ様子をみてる限りではわかる人は今のとこ、まだ来てないんじゃないか?
結局自力で調べるしかない。ガンガレ
0512500
04/06/24 22:19ID:???シェア90%を誇るIEだけクリアできれば満足なんですが、やはり難しいんですね。
cgiの使い勝手のよさを上げようと思っただけなので、無理でも一応機能的には影響はないです。
>>511
応援ありがとうございます。頑張ります!
0513nobodyさん
04/06/24 22:48ID:???いいページ見つけた。俺も後で読んでみるよ。
0515nobodyさん
04/06/24 23:10ID:???心配なときは、一旦グーグルに入れればいいのだ。
0516nobodyさん
04/06/25 02:44ID:???うまくいかない。
コマンドプロンプトで
d:\perl\bin>perl -c ファイルへの絶対パス
でやってるけど、useがないものならうまくいくけどuseがあると何故かuseしてる行数に
エラーがあるって出力される。
実際にhttpdで表示させると問題なくできるやつだから、何が悪いのかわかんない・・・・
もしかしてActivePerlの文法チェク機能ってuseでモジュール読みこんでるとしくじるの?
ちなみにモジュールは自前のPERLだけで書いた簡単なやつ。
誰か何か知ってたら教えて下さい。
0517nobodyさん
04/06/25 04:06ID:???>>1より抜粋
3: こんなエラーが出て上手く行かなかった。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
最低でも1と3が無いと誰も答えられないよ。
0520nobodyさん
04/06/25 11:04ID:???0521nobodyさん
04/06/25 13:49ID:???@Time = gmtime( time + 60 * 60 * 9 );
$Time[5] += 1900;
$Time[4] += 1;
ってしたときに、
sprintf( "%04d/%02d/%02d", @Time[5..3] );
がやりたかったんだけど。。
こういう場合って羅列するしかないんですかね?
0522516
04/06/25 14:04ID:???useしてるものは自作のモジュールって書いたし。
エラーはuseが書いてある行数のとこで出てるって書いたけど、エラーの内容も出力されてるはずだから
それを出せってことかな?
ごめん。今からエラー文そのままあげます。
0523nobodyさん
04/06/25 14:20ID:???俺は今日初カキコだが、>>517と同じことを思ったよ。
>useしてるものは自作のモジュールって書いたし。
ってあるけど、最後におまけのように書いてあるだけじゃん。普通に見落とすよ。
要するに質問の仕方がド下手糞ってことだ。
あるスクリプトを-cオプションでチェックするとエラーがでます。
環境は、Win98 + ActivePerl version○○です。
↓のようなスクリプトで、
---hoge.pl---
1: #!/usr/bin/perl
2: use mymodule; # 自作モジュール(簡単なPurePerlライブラリ)
------------
C:\>perl -c hoge.pl
とすると、
○○○ at hoge.pl line 2.
と出ます。
でも、CGIとしてhttpdに実行させると問題なく動きます。
もしかしてActivePerlの-cオプションはuseでモジュール読みこんでると失敗するのですか?
まず何を調べるべきでしょうか?
0525nobodyさん
04/06/25 14:46ID:???0526516
04/06/25 14:57ID:???ごめん。
D:\Perl\bin>perl -c C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B.CGI
これをやったら↓のエラーがでた。
Can't locate Test1.pm in @INC (@INC contains: D:/Perl/lib D:/Perl/site/lib .) at
C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B.CGI line 3.
BEGIN failed--compilation aborted at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B
.CGI line 3.
b.cgiの中身は↓
#!/usr/local/bin/perl
push( @INC, 'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test\Test1.pm' );
use Test1;
print "Content-type:text/html\n\n";
print "aiueoi";
useしているTest1.pmの中身は↓
package Test1;
#京
sub new{
my $self = shift;
my $obj = {a => 1 , b => 2};
bless $obj,$self;
}
1;
モジュールだけ-cに書けるとエラーはでないのでモジュール側には問題なしかと。
0527516
04/06/25 15:51ID:???b.cgiを書き換えてみたけど、
package main;
BEGIN {
push( @INC, '/Test1.pm' );
}
use Test1;
print "Content-type:text/html\n\n";
print "aiueoi";
まだエラーだった。
Can't locate Test1.pm in @INC (@INC contains: D:/Perl/lib D:/Perl/site/lib . /Te
st1.pm) at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B.CGI line 9.
BEGIN failed--compilation aborted at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B
.CGI line 9.
@INCへの追加が失敗していて、読みこむファイルのパスが見つからないってことだよね?
0528nobodyさん
04/06/25 16:18ID:???ああなるほど、こりゃ確かに >>516 の質問の仕方が悪い。
どうすればいいかを教えるのは簡単だが、その前に一つ質問に答えてくれ。
なんでまた、
「@INC に push しさえすればサーチパスを追加できる」
なんてことを考えたんだ?
0529nobodyさん
04/06/25 17:01ID:???か、Perl/libに入れるとか
0530516
04/06/25 17:25ID:???http://www.rfs.jp/sitebuilder/perl/
ここの@INCの説明にpushすればいいて書いてあったんだけど、意味を勘違いして受け取ったのかも;
それで
http://nonki.net/technical/perl/library/
ここの
>@INCに手動で追加する
っていうところ読んで、BEGINしてみたけどそれも間違ってたのかも;
>>529
use lib;
の一行を足してみたけど、駄目だった。それでプログラムが置いてあるフォルダに移動して
C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test>perl -c C:\WINDOWS\デスクトップ\HTTPD1~1\
CGI-BIN\TEST\B.CGI
をやったら
C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B.CGI syntax OK
成功した!感激!
Perl/libに入れるというのはプログラムをそのフォルダに入れとくって事?やってみたら
同じエラーがでた。
本当は@INCにどうやって追加すればいいんでしょうか?beginもうまくいかないし;
後、文法チェックでは>>526で書いたプログラムはエラーだけど、httpdで
http://localhost/cgi-bin/test/b.cgi
でやると問題なく動作するけど、サーバではエラーになるんですか?
まだサーバと契約してないから、試せない。
0531田舎者 ◆BNNnMrNVbI
04/06/25 17:26ID:???0532田舎者 ◆o0/tSn5Zoc
04/06/25 17:27ID:???0533nobodyさん
04/06/25 17:34ID:???内部的にはコンパイル言語であり、そう認識しないと往々にして罠にはまる。
その罠の一つが use によるライブラリの読み込み。
use で指定したライブラリは、実行時ではなく、コンパイル時に読み込まれる。
たまに if($a==1){ use Foo::Bar;} なんてことをやる人がいるが、
この Foo::Bar はif条件に関係なく必ず読み込まれる。
同様に、初心者は push(@INC,'/hoge/fuga'); use Foo::Bar; と書くことで
@INC にパスを追加してから Foo::Bar を読み込んでくれる、と考えがちだが、
実際には コンパイル→Foo::Bar読み込み→実行→push の順で処理されるので、
Foo::Bar 読み込み時にはまだ @INC にパスが追加されておらず、エラーになる。
このような場合には、push ではなく、use lib を使う。
use lib '/hoge/fuga' と書いておくと、これがコンパイル時に処理されるので、
この時点で @INC に /hoge/fuga が追加され、そこから Foo::Bar を読んでくれる。
0534516
04/06/25 17:49ID:???ありがとうございます!今
use lib "C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test";
を初めに追加してエラーだったので、
use lib 'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test';
にしたら成功しました!シングルクォーテーションじゃないといけないんですね。
lib.pmがBEGINもやってくれてるんですね。
ところで、文法チェックの時以外でもlibを使って自作のモジュールを読みこむ必要が
あるんでしょうか?
モジュールを読みこむとそれだけ処理にかかる時間が増えますよね。なるべく軽くしたいのですが、
やはり自作モジュールをuseするプログラムには初めにlibでやっておいたほうがいいですか?
0535516
04/06/25 17:52ID:???BEGIN {
push @INC,'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test';
}
をlibの変わりに書いたら、エラーがでないで文法チェックokでした!
どちらでも好きな方でやればいいってことですよね。
0537nobodyさん
04/06/25 19:54ID:???ダブルクォーテーションは \ を特別に扱う話を聞いたことはないか?
print "\n"で何が出力される?
print '\n'で何が出力される?
0539nobodyさん
04/06/25 21:02ID:QWdt1cChラジオボタンは
<INPUT name="color" type="radio" value="#758CEA">
<FONT color="#758cea">■</FONT>
のようになっておりcheckedを入れることができればOKなわけですよね。
関係演算子を使ってもcheckedを入れるような方法が思いつきません。
どなたかアドバイスお願いします。
0541nobodyさん
04/06/25 21:14ID:QWdt1cChココ以外には思いつかないのですが、どの辺を出せばよろしいでしょうか?
複数のラジオボタンからクッキーにあった一個を選ぶと言うものですが。
クッキーから前回使った色の読み込みはできます。
0543516
04/06/25 21:53ID:???俺ならそのラジオボタンの部分を全部PERLで動的に作成するかな。
$ENV{'HTTP_COOKIE'}の中身を条件文にかけて、$taguの中に何を入れるか決める。
それでできるよ。
例)
$cook = \$ENV{'HTTP_COOKIE'};
if ($cook eq "758cea" ) {
$tagu = qq|<INPUT name="color" type="radio" value="#758CEA" checked>|.
qq|<INPUT name="color" type="radio" value="#000000">|;
}elsif($cook eq "000000"){
〜
}else{〜}
とか。ちょっとブサイクなコーディングだけど、後は自分でもう少し処理を軽くするといいよ。
0544516
04/06/25 21:54ID:???0545516
04/06/25 22:03ID:???修正も兼ねてもっと簡単に。
if ( $ENV{'HTTP_COOKIE'} eq "hogehoge" ) {$c1 = "checked";}
elsif(〜){$c2 = "checked";}else{〜}
それで
<INPUT name="color" type="radio" value="#758CEA" $c1>
<INPUT name="color" type="radio" value="#758CEA" $c2>
でいいね。
0547nobodyさん
04/06/25 22:15ID:???758CEA
000000
:
:
:
/; # 必要数並べる。
my %Color;
# $Color{'758CEA'} = ' checked';
# $Color{'000000'} = ''; のように成るように久喜をパージングしる。
foreach (@Color_key){
printf qq|<INPUT name="color" type="radio" value="#%s"%s>|, $_, $Color{$_};
printf qq|<span style="background: transparent; color:#%s">■</span>|, $_;
}
0548nobodyさん
04/06/25 22:28ID:???まあほとんどの場合は undef が空文字列として展開されると期待されるだろう
漏れなら Template Kit 使うけど
0549516
04/06/25 22:30ID:???初めに
$c1 = "";
$c2 = "";
をしておく。
if文とかの制御構文はある程度勉強しておくといいよ。ちなみに>>545の場合
真がでてそのブロック処理をした時点でそれ以降の処理はおこなわれない。
0550nobodyさん
04/06/25 23:03ID:???%COLOR_NUM = (1 => "#000000", 2 => "#FF0000", 3 => "#008040", 4 => "#0000FF", 5 => "#C100C1", 6 => "#FF80C0", 7 => "#FF8040");
print <<"EOF";
<TD>Color:</TD><TD><SELECT name="color" style="width : 40px;">
EOF
foreach (sort keys %COLOR_NUM) {
if ($COOKIE{"color"} eq $COLOR_NUM{$_}) {
$selected = " selected";
} else {
$selected = "";
}
print "<OPTION value=\"$COLOR_NUM{\"$_\"}\" style=\"color : $COLOR_NUM{\"$_\"};\"$selected>■</OPTION>\n";
}
print <<"EOF";
</SELECT></TD>
EOF
0551nobodyさん
04/06/25 23:19ID:???まぁ似てるからいいか。
0552nobodyさん
04/06/26 04:58ID:???$hash{abcde}
今はこのように長くても5文字位に抑えてますが、できるだけわかりやすい名前をつけたいので
多少長く10文字くらいになってしまいそうになるのですが、重くなったりしそうで不安です。
みなさんはハッシュのキーを何文字くらいに収めようとしていますか?
0554nobodyさん
04/06/26 05:48ID:???おまい朝早ええな!
俺は16文字位まで。多分他のやつより長めだと思う。
っていうか誰かマジで作ったプログラムで、20文字超えたやついるのかな?
0555nobodyさん
04/06/26 05:53ID:???どうせ内部では数値に変換されるんでしょ、と思ってるから。(されてないかも)
0556nobodyさん
04/06/26 11:15ID:???されてる。
俺はだいたい7文字ぐらいかな。
複数の単語が入ってるときは、多分何かがおかしい。
例:
$hash{HOGE_NUMBER}
$hash{HOGE_NAME}
$hash{HOGE_EMAIL}
おれなら↓こうする
$hash{HOGE}{NUMBER}
$hash{HOGE}{NAME}
$hash{HOGE}{EMAIL}
0557nobodyさん
04/06/26 12:12ID:???0558nobodyさん
04/06/26 13:02ID:???そういうのはありだ。
> 'http://pc5.2ch.net/test/read.cgi/php/1085557731/'
は自分で付けた名前じゃないだろ?
0559nobodyさん
04/06/26 17:23ID:???質問させてください。
トラックバックのpingを実装しようとSocketでPOSTリクエストをする
スクリプトを書きました。実際にリクエストはできるのですが、相手側からの
意図した応答が得られませんでした。リクエスト内容を教えていただけませんか?
ttp://lowlife.jp/yasusii/stories/8.html
ここのリクエスト内容を参考にしました。
ttp://www5e.biglobe.ne.jp/~halcyon/cgi-bin/tb/test.txt
書いたスクリプトです。
よろしくお願いします。
0563nobodyさん
04/06/26 22:19ID:???0565nobodyさん
04/06/27 00:27ID:???0566nobodyさん
04/06/27 01:11ID:???0567nobodyさん
04/06/27 01:23ID:???0568nobodyさん
04/06/27 04:44ID:???$self->{data} = "ここで代入できる文字列の長さが知りたい";
リファレンスは元々格納場所へのアドレスを持ってるだけで、スカラに格納するわけでは
ないから大丈夫だよね。ってリファレンスじゃなくても別に大丈夫だよね?重くなるだけで。
HTML本文をそのままスカラに入れてそれを好きな文字コードに変換したいなあと思ってるんだけど
スカラに入れて一括変換なんてやるべきではないかな?
変換はjcode.pl使う。
0569nobodyさん
04/06/27 05:24ID:???0570nobodyさん
04/06/27 07:27ID:???そうなの?ならモジュールのファイルサイズが20KBでも大したことないよね?
何KBくらいからやりすぎになるの?例えば外部から30KB位のファイル読みこんで
open(FH,"uwa30kb.txt");
$a = join '',<FH>;
とかでもゴギブリの卵くらい?
0572nobodyさん
04/06/27 10:44ID:???0573nobodyさん
04/06/27 15:33ID:???1<>い<>12:50<>
4<>あ<>20:02<>
2<>き<>08:41<>
…
$buf = $ENV{'QUERY_STRING'};
$buf =~s/[^0-9]//g;
@txt = sort{(split(/<>/,$b))[0] cmp (split(/<>/,$a))[0]}@txt if($buf==1);
@txt = sort{(split(/<>/,$b))[1] cmp (split(/<>/,$a))[1]}@txt if($buf==2);
@txt = sort{(split(/<>/,$b))[2] cmp (split(/<>/,$a))[2]}@txt if($buf==3);
観覧者が見たい順にソートしたいんで、今はこのようにしてるんですが、
ハッシュの使い方がいまいち分かりません。
もう少しヒントを頂けないでしょうか?
0574nobodyさん
04/06/27 16:44ID:???0575nobodyさん
04/06/27 22:33ID:???print "Content-type:text/html;charset=Shift_JIS\n\n";
print "Content-type:text/html;charset=euc-jp\n\n";
JISの場合はなんて書くんだっけ?
0576nobodyさん
04/06/27 22:38ID:???0577nobodyさん
04/06/27 22:44ID:???cgiからのSSI許可をしてしまうとセキュリティー的にもあぶなさそう(掲示板などで自由に実行されてしまう等)なので他にSSIと同等のことができる方法はないでしょうか?
教えて下さい。お願いします。
0578nobodyさん
04/06/27 22:47ID:???0579nobodyさん
04/06/27 22:57ID:???ハ?
共通だろ
0580577
04/06/27 22:59ID:???やりたいことは
perlスクリプトAからPerlスクリプトBが出力する結果を取得してPerlスクリプトAで表示したいのです。
呼び出し元がただのhtmlならSSIを使えば簡単に実現できますがCGIからの呼び出しでは実行できません。
何かいい方法がありませんか?
0582577
04/06/27 23:20ID:???できるのは分かっていますが許可した場合第三者が掲示板の本文などにSSIでシステムコマンドなどを実行できてしまうので許可していないんです。
0583nobodyさん
04/06/27 23:24ID:???AからBに処理を渡してその戻り値をAで使いたい。
別に普通にできるし、なんでSSIとか掲示板とか許可とかの話になるん?
すいませんが、何を悩んでるのかわかりません。
0585nobodyさん
04/06/27 23:54ID:???@data = ('A,7,緑',
'C,6,青',
'B,4,赤',
'A,9,紫',
'A,2,黄緑',
'B,10,黄',
'C,3,青紫');
上記のような配列があり、これを一項と二項目でソートしたいのですが、
ここでもう一つの条件、
二項目の比較にある数字にもっとも近い数字からソートする、
という条件を加えたいのです。
例えば 二項目が 8 にもっとも近い数字からソートした場合
@data = ('A,9,紫',
'A,7,緑',
'A,2,黄緑',
'B,10,黄',
'B,4,赤',
'C,6,青',
'C,3,青紫');
といった感じにしたいのです。
前にお聞きした方法で作業を進めていたのですが、
どうしてもこの問題で詰まってしまい困っています。
何か良いお知恵があれば何卒ご教授下さい。
0586nobodyさん
04/06/27 23:59ID:???AからBをrequireするなり、モジュールにしてuseしてもいいだろうしさ。
evalとかdoとかの話もするの?
あ、ただCGIスクリプト内で別のCGIスクリプトの出力をそんまま
取り込みたい、って話なら、それは「CGIのお作法」の話なので、
別をあたってください。
でもそれならperlスクリプトAとBでって聞き方はおかしいよ。
0588nobodyさん
04/06/28 01:40ID:???for (map{$_->[0]} sort {($a->[1] < 0 ? -$a->[1] : $a->[1]) <=> ($b->[1] < 0 ? -$b->[1] : $b->[1])} map{[$_,$base-(split',')[1]]}@data){
print $_,"\n";
}
0590nobodyさん
04/06/28 05:19ID:???<input type=image src="hoge.jpg" name=test>
でも↑をsubmitとして使って、PERLで受けとると
test.x=
test.y=
が付いてきて、
foreach ( split /&/,$ENV{'QUERY_STRING'} ) {
(my $a , my $b ) = split /=/;
$form{$a} = $b;
}
とかやると、%formのキーにtest.xっていうのができちゃう。
一応動作に支障はないけど、ハッシュのキーにピリオド使っていいの?
0591nobodyさん
04/06/28 05:45ID:???my $base = 8;
my @sorted =
map $_->[3],
sort { $a->[0] cmp $b->[0] || $a->[1] <=> $b->[1] || $b->[2] <=> $a->[2] }
map { /^([^,]+),([^,]+)/; [ $1, abs($2 - $base), $2, $_ ] }
@data
;
print map "$_\n", @sorted;
0592nobodyさん
04/06/28 06:02ID:???$a = $b == 0 ? 1:2;
みたいに使うんだろうけど、
map{ /a/ ? $a += $a : $b += $a } @array;
みたいに真と偽の時の処理に↑みたくやるのも正しい使いかた?
これ使うと今の長いソースが短くできるからやりたいんだけど、HTMLでStrict厨な俺は
PERLでもなるべく正しい関数の使い方をしたいとか思ってる;
?:をifみたく処理の分岐で使うのはどうなの?
0593nobodyさん
04/06/28 06:16ID:???sort関数ってどうなってるんですか?
@old=(1,a,4,f,5);
@new = sort{$a <=> $b}@old;
こうゆうのよく見ますけど、どうゆう流れで処理が行われているのかわかりません。
mapみたいに@oldからはひとつづつ要素が渡されてるんですよね?
その渡された要素は$_に入っているわけではなさそうですが、$aと$bには何が入ってるんでしょうか?
0594nobodyさん
04/06/28 06:49ID:???リスト中のどれか2つの要素。
どれがどの順で何回渡されるかは決まってなかったような。
(sortで使ってるアルゴリズムにもよるだろうし)
0596nobodyさん
04/06/28 09:39ID:???なるべくなら $a $b は使わない方がいい。
あとは、perl 添付のドキュメントを読む。描き方に関しては perlstyle あたりを中心に。
0597nobodyさん
04/06/28 14:51ID:cJ2UZAf9データ区切りは<>を使い文字列にカンマが入っても対応できる
ようにしてあります。
一番先頭のデータを重複の無いキー番号としたいのです
そこでレコード追加時に先頭のデータをチェックして
最大値の次の値と先頭にアルファベットを追加してキー番号を
生成したいのですが、どの様にプログラムを組めばよさそうでしょうか?
A000001<>xxxx<>XXXXX
A000003<>xxxx<>XXXXX
A000010<>xxxx<>XXXXX
A000004<>xxxx<>XXXXX
A000008<>xxxx<>XXXXX
0598nobodyさん
04/06/28 15:04ID:???既出レコードIDの最大値に+1=追加レコードのID、てわかってるならそうすればいいじゃん。
途中まででもいいから自分でやってみるべし。
0599nobodyさん
04/06/28 15:23ID:whqvquC3read(STDIN,$in,$ENV{'CONTENT_LENGTH'});
な形で取得しようとしているのですが長い文章の場合に途中までしか取得
できません。
$inを以下のような感じで出力させると、
print $ENV{'CONTENT_LENGTH'};
print length($in);
$ENV{'CONTENT_LENGTH'} が 8205 のときはlength($in)は 8000 と出力され、
$ENV{'CONTENT_LENGTH'} が 9252 のときもlength($in)は 8000 と出力されます。
$ENV{'CONTENT_LENGTH'} が 8000を下回った場合にはlength($in)は同じ数値が出力されます。
どっちにしても8000しかreadが出来ていないようなのですがどうしてなんでしょうか?
環境はIE6 + redhat9 + perl v5.8 です。
0600nobodyさん
04/06/28 15:30ID:vj4wrqzocgiを直接呼ばれたのとpostで来たのとを区別するにはどうしたらいいのでしょうか?
0601nobodyさん
04/06/28 15:33ID:???ループしないとだめじゃない? とくに入力元がpipeやsocketのときは
適当にどこかのバッファ長まで読まれた状態でひとまず戻ってくる
ことはよくある。
0602nobodyさん
04/06/28 15:36ID:???http://perldoc.com/perl5.8.4/pod/func/sort.html
http://flex.ee.uec.ac.jp/texi/perl/perl_54.html
>>599
ご利用の httpd のスレへ行って下さい。
>>600
http://pc5.2ch.net/test/read.cgi/php/1055597189/
>>601
http://perldoc.com/perl5.8.4/pod/func/read.html
http://flex.ee.uec.ac.jp/texi/perl/perl_90.html
0604593
04/06/28 16:26ID:???>リスト中のどれか2つの要素。
>どれがどの順で何回渡されるかは決まってなかったような。
>(sortで使ってるアルゴリズムにもよるだろうし)
ランダムに選ばれた?二つの要素が$aと$bに入れられて、$aの方が大きければ1を等価なら0を
左の方が大きければ-1を返す?$aの方が大きければ$aに入っている要素を左に返す?
$aの中身を左辺に返した場合は元のリストの中からは消えるのですか?
なんかイマイチ流れがわかりません。sort関数については色々見に行きましたが、内部の具体的な
流れが解説されてるサイトが見つかりませんでした;
>>602
perldocは英語ですよね;翻訳かけると関数名まで翻訳されちゃってイマイチ理解できないんですよね;
したのサイトは見たことあります。
0606nobodyさん
04/06/28 18:51ID:???英語が読めないなら駱駝本を買えばいいのに。
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod
$a と $b に何が入るかは >>602 のページに明示されているし、
sort 関数の使い方ではなくソートアルゴリズムの話ならこの辺
行った方がいいよ。
http://pc5.2ch.net/test/read.cgi/tech/1088022524/
0607526
04/06/29 04:35ID:???use lib 'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test';
か
BEGIN{
push @INC,'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test';
}
でやるのはわかったのですが、'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test'
は絶対パスでないといけないのですか?
サバにアップしたときの事を考えて相対パスでいいならそうしておきたいのですが、
use lib '../c';
use lib '..\c';
などをやってみたところ文法チェックでエラーがでました。ローカル環境ではライブラリを@INCに
追加する時のパスをドライブ名からの絶対指定でないと無理でしょうか?
環境は
win98/ie6/httpd/activeperl5.6/
です。
0608nobodyさん
04/06/29 05:03ID:???漏れはローカルとサーバ両方でパスとかを書き換えず動かしたいので、
my $server = $ENV{'REMOTE_ADDR'} eq '127.0.0.1' ? 'http://127.0.0.1/' : 'http://www.鯖.com/' ;
って事をしている。
0609nobodyさん
04/06/29 05:55ID:???>文法チェックでエラーがでました。
そのエラーメッセージを書こう。
ちなみに相対パスの指定は可能。存在しないパスを指定する事も可能。
e.g. use lib qw(../ /home/you/lib/perl E:/lib/perl);
>>608
use CGI ':cgi';
print server_name();
0610607
04/06/29 06:07ID:???それいいですね。でも相対指定ができるならそのほうが楽ですが。
>>609
エラー文は以下の通りです。続いてファイルの中身を挙げます。
C:\WINDOWS>perl -c C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C\A.CGI
Can't locate Test1.pm in @INC (@INC contains: ../c D:/Perl/lib D:/Perl/site/lib
.) at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C\A.CGI line 3.
BEGIN failed--compilation aborted at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C
\A.CGI line 3.
0611607
04/06/29 06:09ID:???#!/usr/local/bin/perl
use lib '../c';
use Test1;
#京
print "Content-type:text/html;charset=euc-jp\n\n";
print "aiueo";
Test1.pmの中身
package Test1;
#京
sub new{
my $self = shift;
my $obj = {a => 1 , b => 2};
bless $obj,$self;
}
1;
a.cgiのlibの一行を
use lib 'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test\c';
にするとオーケーがでます。\を/に変えてもオーケーはでます。
相対パスにすることは可能でしょうか?
0612nobodyさん
04/06/29 06:16ID:???演算子って同じような意味のものがあったりするけどどうしてでしょうか?
>や<の比較系は
数値用として<,>,==,<=,>=
文字列用としてgt,lt,eq,ge,le
それで、
and,or
と
||,&&
も用途別なんでしょうか?優先順位は||,&&の方が高いみたいですが。
これも
数値用||,&&
文字列用or,and
なのですか?でも
$a == 1 || $a == 2
ならいいですが、
$a == 1 || $a eq "ふたつ"
の場合は||とorのどちらを使えばいいでしょうか?
0613nobodyさん
04/06/29 06:22ID:???ブラウザで開くとダウンロードのダイアログが開いてしまいます。
ダウンロードではなくそのままブラウザに表示したいので
アドバイスをください。
以下のようにして出力しています。
#!/usr/bin/perl
print qq(Content-type: text/plain\n\n);
print "minapon";
exit;
宜しくお願いします。
0614nobodyさん
04/06/29 06:23ID:???ありましたらお教え下さいますようお願いいたします。
0615607
04/06/29 06:29ID:???$newfoo = substr $foo,hoge1,hoge2,"hoge3";
hoge1=オフセット。取り出しの起点。
hoge2=取り出す長さ。
hoge3=取り出した後にそこに何か入れる場合は。取り出したものを削除するなら""とする。
詳しくは
perl substrでググれば見つかるかと。
0616607
04/06/29 06:32ID:???#!/usr/local/bin/perl
print qq(Content-type:text/plain\n\n);
print "qwertyui";
exit();
をローカル環境でやったけど何も問題はなく表示されたよ?
0617nobodyさん
04/06/29 06:50ID:???激しく板違い。Web鯖の設定。
Options ExecCGI
AddHandler cgi-script .cgi
AddType application/x-httpd-cgi .cgi
各行の意味を確認したうえで好きなようにどうぞ。
0618nobodyさん
04/06/29 06:52ID:???私の環境で>>616のコードでローカルでテストしてみましたが
やはりDLのダイアログが開きます
サーバにアップロードしても同じでした。
ブラウザ側の問題かも知れませんが
ちゃんとtextをブラウザで開ける場合もあるし・・・
0619nobodyさん
04/06/29 09:51ID:???DL後のファイルの中身はなに?
HTTPサーバーは?ブラウザは?
まぁ、どっちにしろサーバー設定かブラウザの問題だね。
0620nobodyさん
04/06/29 10:18ID:???0621nobodyさん
04/06/29 10:50ID:???有難う御座います。
Perlのリファレンス見てたんですが、語句が思い当たらなかったのでたどり着けなかったんです。
ホントに助かりました。
0622nobodyさん
04/06/29 14:33ID:???cryptがサーバ対応してなくてMD5使えないもので、
教えていただけたら幸いです。
0623nobodyさん
04/06/29 16:29ID:???- - - - - Perl コーディング初心者質問コーナー Part35 - - - - -
0624nobodyさん
04/06/29 16:46ID:???MD5.pm
>>612
おそらく優先度の違いだけかと。 好みの問題だけど、括弧を減らしたいときなどに、and, orを使うといいと思う。
らくだ本ではand, orのほうが自然だからこっちのほうがいい、見たいなことがかかれていた気がしないでもない。
0625nobodyさん
04/06/29 17:19ID:???> C:\WINDOWS>perl -c C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C\A.CGI
C:/WINDOWS からの相対パス ../c は C:/c で
C:/c/Test1.pm
D:/Perl/lib/Test1.pm
D:/Perl/site/lib/Test1.pm
./Test1.pm
のいずれも見つからないとエラーメッセージが言っているわけだが。
>>612
http://perldoc.jp/docs/perl/5.6.1/perlop.pod
0626607
04/06/29 21:39ID:???ありがとうございます。早速
use lib 'C:/c';
にかえてやってみました。
C:\WINDOWS>perl -c C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C\A.CGI
Can't locate Test1.pm in @INC (@INC contains: C:/c D:/Perl/lib D:/Perl/site/lib
.) at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C\A.CGI line 3.
BEGIN failed--compilation aborted at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C
\A.CGI line 3.
というエラーでした。
C:/c D:/Perl/lib D:/Perl/site/lib
少しエラー内容が変わりましたがやはり駄目なようです。
0628nobodyさん
04/06/29 21:49ID:???>>625の
>C:/WINDOWS からの相対パス ../c は C:/c で
ってのは
C:/WINDOWS からの相対パス ../c は C:/c のことだ
の意味だ(と思われる
0629nobodyさん
04/06/29 22:17ID:???> use lib 'C:/c';
> にかえてやってみました。
>>625がコケてそう。
use lib '../../../cgi-bin/test/c';
C:\WINDOWS>cd デスクトップ\HTTPD1~1\CGI-BIN\TEST\C
C:\略>perl -c a.cgi
0630607
04/06/29 22:46ID:???すみません。
>>629
C:\WINDOWS>cd デスクトップ\HTTPD1~1\CGI-BIN\TEST\C
これをやって移動した場合はlibはなくてもエラーはでないです。
質問としましては、どのフォルダからでも文法チェックができるように自作モジュールを
コンパイルの初めに@INCに追加してやりたいんですが、そのモジュールのある場所を相対指定できませんか?
ということです。
それで一応
use lib '../../../cgi-bin/test/c';
use lib 'C:../../../cgi-bin/test/c';
に変えて試しましたが、やはり下のエラーでした。(1行目の場合のエラー内容です。)
C:\WINDOWS>perl -c C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C\A.CGI
Can't locate Test1.pm in @INC (@INC contains: ../../../cgi-bin/test/c D:/Perl/li
b D:/Perl/site/lib .) at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C\A.CGI line
4.
BEGIN failed--compilation aborted at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C
\A.CGI line 4.
>>628
ここまで書いて今気づきました。
>C:/WINDOWS からの相対パス ../c は C:/c で
../cはC:/cと書いてるのと同じことになるってわけですね;すみません勘違いしました。
それでやはり相対指定はムリなのでしょうか?
0631607
04/06/29 22:50ID:???からによる相対していなのですね?合ってます?
そうなるとコマンドプロンプト自体がフォルダ移動すると、パスが変わってくる。だからムリ?
でもなんかまだ勘違いしてるかもしれません。a.cgiに書くパスを相対パスにすると
何に対しての相対になるんでしょうか?a.cgiではないですよね?
0632nobodyさん
04/06/29 23:22ID:???> use lib '../../../cgi-bin/test/c';
スマソ、↑寝ぼけてますた。
吊ってきます。
カレントディレクトリ。
0633607
04/06/29 23:30ID:???カレントディレクトリということはやはり、プロンプト画面の現在作業場所からということになり、
結局libは相対指定が効かないということでよろしいでしょうか?
0634nobodyさん
04/06/29 23:43ID:d2XzHbrj$test = abc123;
と入っている場合、数字の数だけ調べたいのです。
どなたか、ご教授お願いします。
0636607
04/06/29 23:59ID:???ですよね。でもそうなると、libに渡すパスは相対指定が不可能ですよね?
でも>>609さんが相対パスは可能と言っていたのでよくわかりません。
ちなみにサーバにあげた場合もlibのパスを相対で書くと、DOS(UNIX系なので違うぽ)作業ディレクトリ
が基準になりますよね?
その場合はDOSは自動で、a.cgiがある場所まで移動してからコンパイルを行うのでしょうか?
そうだとするとサバ上ではa.cgiがあるフォルダからの相対パスで行けますよね。
でもわざわざ作業ディレクトリを移動してからコンパイルなんてしませんよね。
結局相対パスはあまり使い物にならないんですかね。サバのカレントディレクトリから書けば
サバでは相対にできそうですがやはり絶対指定しておくのが無難ぽいですね。
長くお付き合いいただきありがとうどざいました。失礼します。
0638nobodyさん
04/06/30 00:18ID:???スクリプト中に書かれた相対パスは全てカレントディレクトリからの
相対パスであって、スクリプトが置かれているディレクトリからの
相対パスではない。@INC に相対パスを指定する事は可能だが、
君が常にスクリプトの置かれているディレクトリをカレントディレクトリ
として起動しない限り、期待するディレクトリを指す事にならない。
故に、モジュールやライブラリは通常特定のディレクトリに置き、
絶対パスで指定する事でどこからでも利用可能にする。
どうしてもスクリプトが置かれているディレクトリからの相対パスを
使いたいのなら、スクリプトの最初に以下のような阿呆らしいコード
を追加する事で可能になる。
BEGIN {
__FILE__ =~ m|^(.*[/\\])[^/\\]+\z|;
require 'lib.pm';
lib->import($1 . '../log');
}
0639ウド
04/06/30 18:25ID:???クライアント:WindowsXP Pro
これまで同じスクリプト(簡単なメモCGI)をWindows2k、apache2.0.x、perl5にて動作させておりました。
サーバー変更に伴い、文字コードをshift-jisからeucに変更しました。
Windows2kサーバーにて動作させたところ正常に動作しました。
確認後にLinuxに移しました。
Linuxにて動作させたところ、Winクライアントから書き込んだらログファイルの
文字コードがshift-jisにて保存されてしまい、正常に動作しなくなりました。
考えられる原因はなんでしょうか?
ログファイル、スクリプトファイルともにEUCにて保存、アップロード。
cgi-lib.pl使用、jcode.plは使用していません。
データの受け取りは&ReadParse(*form);として、form{'comment'}として
うけとっています。
フォームはvalue=\"comment\"です。
スクリプトの先頭で文字コードをeuc-jisと設定しています。
0640ウド
04/06/30 18:54ID:???ログファイルに少しでもデータがある場合(追記のような状態)、ログファイルに
セットされた文字コードが適用されるようです。
print OUT,">log.dat";とかにすると、文字コードがshift-jisに再セットされてしまいます。
Linuxからの入力は問題ありません。
0641nobodyさん
04/06/30 21:37ID:???もしくは、CGI側でEUCに変換してもいいと思う。
あと、cgi-lib.plはもういらないでしょ。jcode.pmかencode.pmを使おう。
0643ウド
04/07/01 10:36ID:???フォームも同一スクリプトで生成しているので、ヘッダではeuc-jisで指定しています。
cgi-lib.plはフォームのハッシュを扱うのに楽だったので使用していました。
今、CPANからJcode.pmを取得しインストールしました。
これと組み合わせて使ってみます。
アドバイスありがとうございました。
>>642
動きますが、個人的にEUCが好きなものでして。
製作するスクリプトのコードもEUCにしている為なにかと都合がいいのです。
0644nobodyさん
04/07/01 12:52ID:oq3ug3s3EXCELにあるような最大値を求める関数がみあたらないのですが、どうしたらいいものでしょうか?
0646nobodyさん
04/07/01 13:16ID:???record.txt
--
A000001<>xxxx<>XXXXX
A000003<>xxxx<>XXXXX
A000010<>xxxx<>XXXXX
A000004<>xxxx<>XXXXX
A000008<>xxxx<>XXXXX
--
open IN, 'record.txt' or die "$!\n";
while(<IN>){
chomp;
$record{(split(/<>/,$_))[0]} = $_;
}
print (((sort keys %record))[-1]);
--
出力:A000010
昇順に並べれば一番後ろが最大値
降順に並べれば一番最初が最大値
0647nobodyさん
04/07/01 15:27ID:???List::Utilのmax使え。速いぞ。
ttp://pc5.2ch.net/test/read.cgi/tech/1085564875/71-72
画像の大きさが一定以上大きいときだけ
縮小して表示したいのですがどうやればいいか教えてください。
よろしくお願いします。
0649nobodyさん
04/07/01 21:25ID:???if(でっかい時){ 縮小処理や縮小表示 }
else{ そのまま表示 }
これのどの部分が分からんのだ?
そのことを>>1の書き方で表すとどうなるのだ?
0650nobodyさん
04/07/01 21:25ID:???0651648
04/07/01 21:31ID:???また、画像の縦と横の比率を崩さずに
横幅を100〜150にして表示したいときの
うまい方法はありませんか?
0652nobodyさん
04/07/01 21:33ID:???0654nobodyさん
04/07/01 21:46ID:???0655nobodyさん
04/07/01 21:49ID:???「gif perl 画像サイズ」でググる。jpgの場合も同様。
画像サイズ取得ライブラリって形で公開してる人が多いなぁ。
ゴリゴリ書くサンプルが多いだろうと思ってググってみたんだが....
> 画像の縦と横の比率を崩さずに横幅を100〜150
こりゃ、中学か下手すりゃ小学校で習う計算だな。
0656nobodyさん
04/07/01 22:48ID:???Image::Size
あと、htmlだけどwidthだけしてすればheightは自動で同率で表示する。
> こりゃ、中学か下手すりゃ小学校で習う計算だな。
だな
0657nobodyさん
04/07/01 23:55ID:???書きまちがいだと思うけど、euc-jpね。
あと、ブラウザが自動的に判断してくれるはずだから、
HTTPヘッダとかMETAタグとかは使わずに、何もせずにHTMLの出力をやってみたらどうだろうか。
0658648
04/07/01 23:55ID:???一応完成しました。
ひまつぶしに見てください。
http://www.tcn.ne.jp/~majima/dog/quiz/quiz.cgi
0659nobodyさん
04/07/01 23:56ID:???0660nobodyさん
04/07/02 00:02ID:???[Thu Jul 1 23:57:20 2004] test.pl: Malformed UTF-8 character (overflow at 0x302b374a, byte 0xa5, after start byte 0xbe
) in pattern match (m//) at /home/admin/jcode.pl line 362.
[Thu Jul 1 23:57:20 2004] test.pl: Malformed UTF-8 character (overflow at 0x302b374a, byte 0xa5, after start byte 0xbe
) in pattern match (m//) at /home/admin/jcode.pl line 362.
[Thu Jul 1 23:57:20 2004] test.pl: Malformed UTF-8 character (overflow at 0x302b374a, byte 0xa5, after start byte 0xbe
) in pattern match (m//) at /home/admin/jcode.pl line 362.
[Thu Jul 1 23:57:20 2004] test.pl: Malformed UTF-8 character (overflow at 0x302b374a, byte 0xa5, after start byte 0xbe
) in pattern match (m//) at /home/admin/jcode.pl line 362.
[Thu Jul 1 23:57:20 2004] test.pl: Malformed UTF-8 character (overflow at 0x302b374a, byte 0xa5, after start byte 0xbe
) in pattern match (m//) at /home/admin/jcode.pl line 362.
[Thu Jul 1 23:57:20 2004] test.pl: Malformed UTF-8 character (overflow at 0x302b374a, byte 0xa5, after start byte 0xbe
) in pattern match (m//) at /home/admin/jcode.pl line 362.
何かこのエラーに関して心当たりがおありの方いらっしゃい
ましたらご教授ください。
0661nobodyさん
04/07/02 00:03ID:???いいと思いますけど、1点、
<input type="hidden" name="file_name" value="question1.dat">
の部分はセキュリティ上、良くないです。
このhiddenのタグは使わないような仕様にしましょう。
何で良くないかここで説明してもいいんだけど、これで逮捕された人がいたからな…。
0664648
04/07/02 00:13ID:???うまく回避する方法が思い浮かびません。
今回の場合はたいして問題ないですよね?
0665nobodyさん
04/07/02 00:26ID:???datファイルをopenするとき、ちゃんとパスのチェックしてる?
..が含まれていたり、や/から始まる場合はエラーにしないとだめだよ。
どっちにしろ、下のページは一通り読んでおいたほうがいいよ。
http://www.ipa.go.jp/security/awareness/vendor/programming/a00.html
0666nobodyさん
04/07/02 00:49ID:???( ゚д゚)あの板でやってたこのクイズ作ってたのはお前かよっ!
どこが問題ないってよ。
http://www.tcn.ne.jp/~majima/dog/quiz/question4.datにアクセスしたら
答え全部わかっちまってるだろうが。
そもそもなんで問題を書いたファイルをhiddenで渡す必要があるんだ?
0667質問
04/07/02 00:58ID:dBU8jv45ユーザーは www、グループも www、そしてパーミッションが301(-wx --- --t)になってます。
mvでリネームは出来ます。さらに cd で中に入ることは出来ますが、ls しても何も見えません。
そのサーバでは、CGI(Perl)、telnet、ftpが使用できますが、私はスーパーユーザーではありません。
rmdirをする簡単なPerlスクリプトを書いたり、rm -f -d directryとやってもダメでした。
分かる方が居たら、教えてください。・゚・(ノД`)・゚・。
0668nobodyさん
04/07/02 01:07ID:???CGIでchmod(0777)かな?ってやって、その後、telnetで入って削除すればいいよ。
0669nobodyさん
04/07/02 01:11ID:???ご返答有難うございます。
UTFで指定しているところはないのですが、何かの
文字がUTFと認識させてしまっているという解釈で
宜しいのでしょうか。
0671667
04/07/02 01:19ID:dBU8jv45削除できました。
rmやrmdirじゃなくて、一旦 chmod するのは盲点でした。
即答&的確な指示、ありがとうございました。本当に助かりました。・゚・(ノД`)・゚・。
0672nobodyさん
04/07/02 01:21ID:???いや、エラーにするとかじゃなくてデータファイル名はスクリプトに直で書けよ。
他にも設計やコーディングの誤りがありそうな予感・・・
↓ここで添削してもらえ。
自作CGIを評価するスレ
http://pc5.2ch.net/test/read.cgi/php/1049514428/
0673648
04/07/02 01:28ID:???ありがとう。
複数の問題ファイルをランダムに選んでるので
ファイル名を直でかくのは無理だと思っています。
とりあえず添削してもらってきます。
0674nobodyさん
04/07/02 01:37ID:???って書いておいて、
<input type=hidden name=question value=0>
ってやればいい。valueが添え字ね。
0675nobodyさん
04/07/02 11:08ID:???HTMLのインデントを揃えたいと思っているのですが、
print <<"EOF";
<HTML><HEAD></HEAD><BODY>
EOF
こう書くと、<BODY>とEOFの間に改行コードがあるために、続けてHTMLを出力すると、
<HTML><HEAD></HEAD><BODY>
</BODY></HTML>
のようになってしまいます。
print <<"EOF";を使っても、一番最後の改行コードを含めないようにする書き方はあるのでしょうか?
0676nobodyさん
04/07/02 11:46ID:???これじゃダメなん?
""の中で改行できるし、"自身が存在するならqq使うかエスケープすりゃいい。
0677nobodyさん
04/07/02 11:46ID:???そもそもはじめから print "<HTML><HEAD></HEAD><BODY>"; とするか、
適当に変数に入れてお尻の1文字削るのが普通だと思われる。
どっちも嫌なら
print @{[<<"EOF" =~ /(.*).$/s]};
<HEML><HEAD></HEAD><BODY>
EOF
とかってのも可能だがオススメしません。
0678nobodyさん
04/07/02 12:48ID:???(test.txtの中身)
あいうえお
%{$obj->{form}}
(hoge.cgiの中身)
use Hoge2;
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'};
my &obj = Hoge2->new($buffer);
open(FH,"test.txt")
while( <FH> ){
if( $_ !~ /\$/ ){ print;
}else{
print eval $_; }
}
close(FH);
(Hoge2.pmの中身)
sub new{
my $self = shift;
@a = split/&/,shift;
foreach( @a ){
(my $a , my $b ) = split/=/;
$form{$a} = $b;
}
bless,{form => {%form}},$self;
}
1;
0679黒死犬 ◆EgxBlf8nvc
04/07/02 13:26ID:???他の人が変更不可能な状況ならば問題ナッシング
0680678
04/07/02 13:33ID:???ありがとうございます!txtファイルの管理には気をつけます。
print eval $_;
の部分でもしも%formの中にPERLの命令文が入っていた場合とかに実行されちゃうのか
不安でしたが、↑では変数展開されるだけで終わるみたいですね。
展開された内容を再びevalにかけさえしなければ安全ってことですね。
ありがとうございました。
0683678
04/07/02 14:43ID:???ありがとうございます。
>>682
掲示板ではなく注文システムのCGIなので、実行者に跳ね返るだけのことなのであまり気にしてませんが、
一応
$a =~ s/[><";&\[\]\{\}]//g;
$b =~ s/[><";&\[\]\{\}]//g;
としてから%formに入れてます。
一応わかる範囲でタグとか入れて見ましたが、とりあえず問題ありませんでした。
もし、↑のでは不足していたら教えて頂けると幸いです。
0684nobodyさん
04/07/02 14:57ID:???サイニタイジング自体は開いてか受け取ったデータをどこで使うかによって変わってくる。
HTMLなら<,>,&を置換すれば良い。要は、今から処理を行う部分で入ってこられたら困る文字、
特殊文字を消すか、置換するか。
まあPerlは比較的セキュリティ面はしっかりしてるから、上で言ってたようにevalとか
その他一部の関数の使い方に気を付ければよい。
わかってると思うけど、掲示板系のオウム返しプログラムでXSSを軽視していると、
ウイルスが埋めこまれて、利用者が被害をうける事になるから気をつけてね。
0685nobodyさん
04/07/02 14:58ID:???>サイニタイジング自体は開いてか受け取ったデータをどこで使うかによって変わってくる。
サニタイジング自体は相手から受け取ったデータを
の間違い。ごめん。
0686678
04/07/02 15:16ID:???今XSSについて再度記事をよんでますが、掲示板以外でもスクリプトになり得るタグは削除しなくちゃいけませんね。
うちのサイトでタグをちゃんと消していないと、第三者がうちを使っていたずらしちゃいますもんね。
とりあえず、セキュリティホールのなくせるよう頑張ります。ありがとうございました。
0687nobodyさん
04/07/02 15:28ID:???俺は必要のない記号は全て削除してる。
=~|\/;:+][{}()`'"<>&%#,
っていうか
*-@.
以外は全部削除しちゃいなよ。注文プログラムなら上の四つがあれば問題ないでしょ?
掲示板なら実態参照すればいいし。
0688nobodyさん
04/07/02 15:36ID:???基本的にタグだけでも実態参照にしてるサイトならあまり大きな問題はないと思うけど、
対策を何もしていないとこ見てみたい。
http://www.atmarkit.co.jp/fsecurity/special/31xss/xss01.html
ここなんかXSSについてある程度詳しく書いてるけど、ここが言うには
「XSS対策してないサイトが多すぎる」だってさ。
ほんとにそうなんかな?
0689nobodyさん
04/07/02 16:26ID:???あとはSQLインジェクションはヤバイ。まじでヤバイよ。
まずdeleteできちゃう。もう1レコードなんてもんじゃない。テーブルごと。
何しろ無制限。スゲェ!なんか制限とかないの。
しかも他のテーブルも消せちゃう。ヤバイよ、真っ白だよ。
だって普通は削除できないじゃん。だって削除されたら困るじゃん。
訴えられたら困るっしょ。
だからそのCGIはロールバックできる。話のわかるヤツだ。
けど普通のCGIはヤバイ。そんなの気にしない。消えるだけ。
とにかく貴様ら、SQLインジェクションのヤバさをもっと知るべきだと思います。
そんなヤバい仕事をしてる貴様らとか超偉い。もっとがんばれ、超がんばれ。
0690nobodyさん
04/07/02 16:56ID:???私はCGI側でリファラーを一致してるかチェックしてるんですがこれでもまだセキュリティー的にあぶないんでしょうか?
0693nobodyさん
04/07/02 17:11ID:???hiddenそのものが駄目なわけではないので要は使い方の
問題だと思うのだが。hiddenだろうがなんだろうが、やろうと
思えばclientからは何でも送れるので過度に信用するなっ
てこった。
リファラーもclientの自己申告なんで騙され放題。そんなも
のでまともなチェックにはならない。足切りぐらいにはなる
けどな。
0695nobodyさん
04/07/02 18:02ID:???DBIならいきなり渡されたデータを埋め込んだSQL文作って実行じゃなくて
prepare-bind_param-executeにすればめったなことはないと思うんだが
オレの認識は甘いだろうか?
0696nobodyさん
04/07/02 18:11ID:???やっぱりそうですか。
私が作ってるスクリプトはhiddenの値を変えられるとかなり危険なので修正してみます。
どこかに参考になる方法とか載ってないでしょうか?
0697nobodyさん
04/07/02 18:43ID:???CGI: Common Gateway Interface part 11
http://pc5.2ch.net/test/read.cgi/php/1055597189/
0698nobodyさん
04/07/02 19:32ID:???っていうかさ、クエリは常識として毎回中身をチェックしろよ。
多分今の状態ならお前のサイト思いっきりXSSのえじきだよ。
お前の知らないところで、お前のサイトがウイルス配布に使われてるかもよ。
もちろん配布してるのはお前だからお前が逮捕。とりあえず>>688が晒してるサイト程度の
知識は必要だ。
http://www.ipa.go.jp/security/awareness/vendor/software.html
ついでにここも読んどけ。
0699nobodyさん
04/07/02 19:37ID:???うむ、XSSにしろSQLインジェクションにしろhiddenパラメータにしろ、
Perl に限定されない CGIセキュリティの話は、
そちらで話すことが望ましい。
0701nobodyさん
04/07/02 22:18ID:???サイバーノーガード戦法の時代ですよ。
0702nobodyさん
04/07/03 15:11ID:???DBにパスワードを書ける方法がうまくいきません。
具体的には、perlスクリプトからuse Pgでconnectする際、
ユーザ名とパスワードで認証をかけたいのですが、
createdb -W で指定したパスワードがどうしてもきかない
ようです。
認証をかけるところが間違っているのではないかと思って
いるのですが、どうしてもやり方がわかりません。
ご教授いただけますと幸いです。
0703nobodyさん
04/07/03 17:22ID:dEpm626aうまくいく行と文字化けする行があるのですが,うまく変換する
方法はありますか?
CSVデータはこれです。
http://www.post.japanpost.jp/zipcode/dl/kogaki/lzh/ken_all.lzh
use Jcode;
open IN, "./ken_all.sjis";
while(<IN>){
my $line = $_;
chop $line;
$line = jcode($line)->h2z->euc;
print "$line\n";
}
0704nobodyさん
04/07/03 18:07ID:???お茶呑みながらじっくりと眺めてみる。
http://member.nifty.ne.jp/hippo2000/perltips/Pg.htm
>>703
while(<IN>){
chomp;
printf qq|%s\n|, jcode($_, 'sjis')->h2z->euc;
}
0705nobodyさん
04/07/03 19:05ID:???お返事有難うございます。
connectでパスワードを入れても入れなくても
認証されちゃうので、DB(もしくはテーブル)作成
時の問題と踏んでいるのですが間違っております
でしょうか。
0708nobodyさん
04/07/03 21:54ID:MbMdEpi2何にも情報が無いので、
とりあえず pg_hba.conf の設定でも見直してみろ、
と言ってみる
0709nobodyさん
04/07/03 22:29ID:nSj0iEMYのようにして、桁数を調べたいのですが、どのようにすれば良いのでしょうか?
0710nobodyさん
04/07/03 22:32ID:???0712709
04/07/03 22:45ID:nSj0iEMYでした。すいません・・・
0714nobodyさん
04/07/03 23:36ID:???$i=1;
while(1){ if(@_%10<10) $i++) }
return $i+1;
}
0715nobodyさん
04/07/03 23:38ID:???$i=1;
while(1){
$j=1;
for($j=0; $j<$i; $j++){ $j*=10; }
if(@_%$j<10) $i++) }
return $i+1;
}
0717nobodyさん
04/07/03 23:51ID:???別に動かそうと思って書いたわけじゃないが
0719nobodyさん
04/07/04 00:03ID:???10のn乗で割っていくってようりょうだぞーってレスのつもりだが
で、10で割り続けてたので単純にpow入れようやっておもい
Perlってpowあったかなーとおもい、自分でn乗だすようにしてーー
って適当にやったから括弧の場所とかほっときぱなしになったわけだが
良い訳とかキモイ
0720nobodyさん
04/07/04 00:06ID:???int(log($NO)/log10)+1
0721719
04/07/04 00:06ID:???たしかにそうとられても仕方ない罠。
0723nobodyさん
04/07/04 00:12ID:???0724719
04/07/04 00:16ID:???0725nobodyさん
04/07/04 00:26ID:???length取ったほうが速そうだな。誰かベンチしてみない?
0726nobodyさん
04/07/04 00:49ID:???0727nobodyさん
04/07/04 00:52ID:???0728709
04/07/04 00:54ID:Udr24Tj0lengthで調べてみたら、出来ました。ありがとうございました。
もう一点、お聞きしたいのですが、
特定の文字列と一致した場合だけエラーになるようにしたいのです。
$NO="123456";
$NO2="23";
if ($NO eq /$NO2/g) {
print "エラーです";
}
こんなふうに書いたのですが、上手くいきません。
サイトをいくつか見ながら書いてみたのですが、原因がわかりません。
すいません、どなたか教えてください。
0729nobodyさん
04/07/04 00:54ID:???=~
0730nobodyさん
04/07/04 01:35ID:???0732709
04/07/04 01:47ID:Udr24Tj0HTMLで言う、「とほほのWWW入門」みたいに、
Perl開設の良いサイトなど無いでしょうか?
ここのスレに載っていたページはどうもわかりにくくて・・・
0733nobodyさん
04/07/04 01:49ID:???@no = qw(1 2 3 4 5 6);
print $_ = @no."桁\n";
0734nobodyさん
04/07/04 02:16ID:???http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htm
0735nobodyさん
04/07/04 02:41ID:???> ここのスレに載っていたページはどうもわかりにくくて・・・
だったらなおのこと、本も用意したほうがいいですよ。
>>733
頑張ってください。>>726-727も眺めつつ。
0736nobodyさん
04/07/04 03:33ID:???じゃあ「CGI&Perl究極のレシピ350 とほほが教える」でも買ってみたら?
http://www.esbooks.co.jp/books/detail?accd=31095149
Perlの解説本というより目的別のサンプル集みたいなのだから
丸々コピーばかりしないで参考にすればいくらか勉強にはなるだろう。
0737nobodyさん
04/07/04 07:41ID:???何気に役に立つよ
0738nobodyさん
04/07/04 10:09ID:???知ってると思うけど
http://tohoho.wakusei.ne.jp/wwwperl.htm
0739nobodyさん
04/07/04 13:38ID:bJ9Q5bUPパスワードの暗号か処理で暗号化を施した場合、
暗号化をログから解除して元パスワードを知ることはやはり不可能でしょうか?
例えば↓
sub encrypt {
local($inpw) = $_[0];
local(@char, $salt, $encrypt);
@char = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');
srand;
$salt = $char[int(rand(@char))] . $char[int(rand(@char))];
$encrypt = crypt($inpw, $salt) || crypt ($inpw, '$1$' . $salt);
return $encrypt;
}
のようなものからパスワードを探ることは・・・?
0740nobodyさん
04/07/04 14:18ID:???0741nobodyさん
04/07/04 14:58ID:???0742nobodyさん
04/07/04 18:07ID:???0743nobodyさん
04/07/04 18:39ID:???$testに環境変数の一部をUserAgent,IPみたいにコンマ区切りで入れたいだけなんですが…
助けてください…
0744nobodyさん
04/07/04 18:43ID:???助けてください…
0745nobodyさん
04/07/04 18:44ID:???07467M. ◆dq7M./4Uw.
04/07/04 18:58ID:???それが出来ないから暗号として成り立つわけで。。。
0747nobodyさん
04/07/04 20:30ID:???今は
$file1 = 'one.jpg';
$file2 = 'two.jpg';
$temp = 'temp.jpg';
rename $file1,$temp;
rename $file2,$file1;
rename $temp,$file2;
ってやってるけど、いい方法ある?
教えてエロい人!
0748nobodyさん
04/07/04 21:22ID:???renameの戻り値は見といたほうがいいと思うよ。
あとはtemp.jpgが固定なのとrenameだと上書きされる
のがちと気になるかな。
私がやるなら多分こんな感じにすると思う。最初のrenameを
linkにしたのは一時ファイル名がすでに使われてるときに上書き
しないため。途中でエラーになった時の処理をどこまで凝るかは
その時によるけどor dieは一番手抜きのパターンね。
$file1 = 'one.jpg';
$file2 = 'two.jpg';
$temp = "temp.jpg.$$";
link $file1,$temp or die;
rename $file2,$file1 or die;
rename $temp,$file2 or die;
0750nobodyさん
04/07/04 22:07ID:Sq5R/TGN全文検索でヒットした奴を
行の真ん中に表示されるようにしたいんですがどうすれば良いんですか?
つまりglobalを検索したとすると、
global SchoolNet Director
we have increased the US publics global awareness
CanWest global Communications
help address global warming issues
California Wood Use Endangers global
↑こういう風に結果を出したいんです。
行全体を出力して、まんなかに検索した語を表示させたいんですが
そもそもどういう方針でやればいいのかさえわかりません。
どうすれば良いんですか?
0752nobodyさん
04/07/04 22:46ID:???もしそうだとしたら、単にHTMLの話だから、
プログラミングでも、Webプログラミングでもなく、Web製作板に行くべきだな。
0755nobodyさん
04/07/05 00:30ID:AbFm7153windowsで動かしているとき、
perlを動かすときにdos窓のウィンドウタイトルはc:\perl\bin\perl.exeや
コマンドプロントから起動させた場合はc:\winnt\system32\cmd.exeのようになって
いると思うのですがそれを任意の文字に設定したいのです。
色々検索してショートカットから起動すれば変えられるのはわかったのですが
当方、rocket mouseというtoolからウィンドウタイトルを任意の文字にした
ものを起動させるのが目的でして、このtoolの場合、plファイルのショートカット
を指定してもそのショートカットから起動させるのではなく、リンク先を参照して
起動するため、ウィンドウタイトルを変更して起動させることができません。
ここを調べろ、ここは確認したのかなどのご指摘ありましたらよろしくお願いします。
0758755
04/07/05 03:14ID:???>>756さんの言うとおりもう一度1を読み返してみます。
>>757
私はてっきりperlスレで質問する内容だと思ったのですが
ご指摘いただいたので違う方向からも再度考えさせてもらいます。
ありがとうございました。
0759nobodyさん
04/07/05 04:03ID:???fork関数を使えば良いですか?
0760nobodyさん
04/07/05 06:29ID:???自分はこんな感じです
/&/&/
/\"/"/
/\'/?/
/</</
/>/>/
/\s/ /
/\r\n/<br>/
/\r/<br>/
/\n/<br>/
他に
こんな文字も危険、この文字はこれに置換がいい的なアドバイスもOK
0761nobodyさん
04/07/05 06:30ID:???/&/&amp;/
/\"/&quot;/
/\'/&#39/
/</&lt;/
/>/&gt;/
/\s/&nbsp;/
/\r\n/<br>/
/\r/<br>/
/\n/<br>/
0762nobodyさん
04/07/05 06:48ID:???0763nobodyさん
04/07/05 10:32ID:???1. コーディング以前の箇所で躓いている
2. 自分の抱える問題がコーディングの問題なのかどうかを切り分けできない
3. そもそもコーディングという言葉の意味を知らない
のいずれかだから。
たぶんこのスレも「Perlを使ったCGIに関する質問ならなんでもOK」だと思われてる
0764nobodyさん
04/07/05 10:59ID:???スレタイ嫁
だけじゃ通じなくなってきたワケだな。
0765nobodyさん
04/07/05 15:04ID:???0768nobodyさん
04/07/05 16:48ID:kgB0NkdW### 除算の繰上げ
$a = 10;
$b = 3;
$c = $a % $b;
$d = int($a / $b);
if($c){$d++;}
いつもこんな感じですが
なんか、もっさりしてます。
スマートにコーディングしたものですが・・・。
0769nobodyさん
04/07/05 18:12ID:???$b = 3;
$d = int(($a + $b - 1) / $b);
0771nobodyさん
04/07/05 23:29ID:???0772nobodyさん
04/07/06 00:04ID:Xk4rbtY7ファイルサイズを小さくしたいのですが、できません。
ググってみたところ
$image->Strip();
で削除できるという記述をみたのですが、同じようにやっても
画像が表示できなくなります。
どうやればexif情報だけすっぱり消せるかご存知の方は
いらっしゃいませんでしょうか?
0773nobodyさん
04/07/06 02:32ID:???cookieのexpiresに使える形式の時間の取得って、
gmtime time
だと全て数字だから微妙に違うよね。
cookie用に使える形式にするのに自分でルーチンを作ろうかなとか思ってるけど、
既存のモジュールで、こういうメソッドもってるやつないのかな?
0774nobodyさん
04/07/06 02:52ID:???http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI/Cookie.pod
0775nobodyさん
04/07/06 04:13ID:???http://cachu.xrea.jp/perl/
0777nobodyさん
04/07/06 08:08ID:???PERLでは引数が整数であるか、少数点つきの数字であるかを判定してくれる関数はないのでしょうか?
0780nobodyさん
04/07/06 10:23ID:???print "ぎーーーーーーーーーーーーーーーーーーーーーーーっ" if not $answer - int $answer;
0781777=773
04/07/06 10:33ID:???>>774
なんかムダなソースを読みこんで重くしたくないから、自分で作ってみた。
野暮ったいソースだから、見にくいけど、色々突っ込んでくれるとありがたい。
とりあえず2時間後のGMTを計算するサブルーチン。
ifのとこは上から
処理1.何も繰り上がらず2時間だけプラス
処理2.日、曜、時刻だけ繰り上がり
処理3.処理2+月も繰り上がり
処理4.処理3+年も繰り上がり
一応うるう年は4で割り切れるって部分だけは採用してる。100年とか400年とかは
どうせ生きてないから無視した。
0782777=773
04/07/06 10:39ID:???( my $sec , my $min , my $hour , my $mday , my $mon , my $year , my $wday , my $isdat , my $yday ) = gmtime time;
$year += 1900;
my @wday = qw/Sun Mon Tue Wen Thu Fri Sat Sun/;
my @mon = qw/Jan Feb Mar Apr May Jun Jul Aus Sep Oct Nov Dec Jan/;
my @a = qw/31 28 31 30 31 30 31 31 30 31 30 31/;
if ( !($year % 4) ) { $a[1] += 1 ; }
my @b = qw/00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60/;
my $timer;
if ( $hour < 22 ) {
$hour += 2;
$timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
} elsif ( $a[$mon] != $wday ) {
$hour -= 22;
$wday += 1;
$mday += 1;
$timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
} elsif ( $mon != 11 ) {
$hour -= 22;
$wday += 1;
$mday -= $a[$mon];
$mon += 1;
$timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
} else {
$hour -= 22;
$wday += 1;
$mday -= $a[$mon];
$mon += 1;
$year += 1;
$timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
}return $timer;}
0783nobodyさん
04/07/06 10:41ID:???cookieの有効期限はリミットの2030付近にするのがナウイですよ。
0785777
04/07/06 10:53ID:???のところは
$mday -= $a[$mon] -1;
だった。
0787nobodyさん
04/07/06 12:22ID:???0788nobodyさん
04/07/06 13:40ID:DU8HZvlsabc:123
aiu:456
1.
open(IN, "list.txt");
while (<IN>) { print; }
close(IN);
2.
open(IN, "list.txt");
while (<IN>) {
$tmp = <IN>;
print "$tmp<br>\n";
}
close(IN)
1.だと abc:123 aiu:456 と出力されるのに
2.だと abc:123 としか出力されないのはどうしてでしょうか、、?
0791nobodyさん
04/07/06 13:57ID:DU8HZvlsすいません、aiu:456 としか出力されない の間違いでした・・・
0792nobodyさん
04/07/06 15:02ID:DU8HZvlsopen(IN, "list.txt");
while (<IN>) { 処理 }
データを1行単位で読み込み、データのある行が存在する間は while文で繰り返す
という意味ではないのでしょうか、、、?
0793nobodyさん
04/07/06 15:11ID:???$tmp = <IN>; # ここで list.txt の二行目が読み込まれる
print "$tmp<br>\n" # 当然 $tmp の中には二行目しか入っていない
0794nobodyさん
04/07/06 15:37ID:DU8HZvls<IN>で取得したものは$_ に代入されるのですね。
本当に助かりました。有難うございます。
0795nobodyさん
04/07/06 15:44ID:???# 何だか表現が微妙に気になる…。
1: abc:123
2: aiu:456
3: abc:123
4: aiu:456
5: abc:123
ファイルの中身をこの5行にして、実験してみるのもいいかも。
0796nobodyさん
04/07/06 15:49ID:???早速100行くらいにして試しています。
0797nobodyさん
04/07/06 18:37ID:???っでねが?
0801nobodyさん
04/07/07 03:43ID:Dj0xztEm受け取った変数を自動的に
別ファイルへ渡す処理はどうやってすればいいのでしょうか?
(フォームを使えば変数を渡せるけど、
自動的には不可能ですよね?)
ヒントでもいいので教えてくだせえ
0803nobodyさん
04/07/07 11:11ID:???use CGI;
$q = CGI->new;
$hash = $q->Vars;
print $hash;
としたら
HASH(0x8158408)と表示されます。
%hash = $q->Vars;
だとeachなどを使ってもキーなどが出てきません。
色々と検索をするのですが、どうして良いものか解からなくなってきたので
どなたか良い方法を教えて下さい。
いちおう、下記のサイトは見たのですが上手く目的のことができませんでした。
簡単なCGI
http://member.nifty.ne.jp/hippo2000/perltips/Cgi.htm#FETCHING_A_LIST_OF_KEYWORDS_FROM
0804803
04/07/07 11:20ID:???自分で色々と勘違いをしていました。
自己解決しました。
0805nobodyさん
04/07/07 12:12ID:lnfuZW7Xその関数を抜けたときって
require したファイルの内容は有効なんでしょうか?
0809nobodyさん
04/07/07 16:32ID:???1: abc:123
2: aiu:456
3: abc:123
4: aiu:456
5: abc:123
open(IN, "list.txt");
while (<IN>) {
$tmp .= $_;
}
print "$tmp\n";
0811nobodyさん
04/07/07 16:46ID:???open(IN, "list.txt");
while ($tmp = <IN>) {
print "$tmp<br>\n";
}
close(IN)
暗黙の$_使うか明示的に一時変数$tmpを使うか、だけの違いだろ。
>>808
間違ってるよね
0813nobodyさん
04/07/07 17:04ID:???0814nobodyさん
04/07/07 17:42ID:???0815801
04/07/07 17:54ID:Dj0xztEmこの方法、他にないんでしょうか?
0817nobodyさん
04/07/07 18:12ID:???0818801
04/07/07 18:17ID:Dj0xztEm変数を送る部分を、
クリックしなくても変数を送れるようにしたいんです。
意味分かりますかね?perlの超町長初心者なんで勘弁してください。
どうかよろしこです
0819nobodyさん
04/07/07 18:36ID:???perlの問題じゃないです。
要は【submit】ボタンを押さなくても、submitされるようにしたいって事?
JavaScriptとかで勝手にクエリ送るとかか?
やっぱ、perl関係ないです。
0820nobodyさん
04/07/07 18:37ID:???ちゃんと持ってるもの全部吐き出してください。
0821黒死犬 ◆EgxBlf8nvc
04/07/07 18:39ID:???<input type="hidden" name="Name" value="Value">
</form>
<script language="PerlScript">
$window->document->all->forms->send->submit();
</script>
これで出来んじゃないか(テストしてない)
てか板違い
0822nobodyさん
04/07/07 18:42ID:???ユーザ側の視点だと「自動的」「クリックしなくても」で済むんだろうけど、
プログラムにとっては「ある条件が満たされたとき」じゃない?
その「ある条件」は、あなたしか知らないわけですよ。
# で、JavaScriptで何かしらのイベント拾うんだろーけど。
0824nobodyさん
04/07/07 20:13ID:???・・・何故お前が皆に叩かれてるのか未だに分かってないのか???
下の二つを実行してみなさい。そして首吊ってください。
# 1
while (<IN>) {
$tmp = $_;
print "$tmp\n";
}
# 2
while (<IN>) {
$tmp .= $_;
print "$tmp\n";
}
0825nobodyさん
04/07/07 20:39ID:???@d = ( " abc ", " bcd ", " cde " );
for($i=0;$i<@d;$i++){ $d[$i] =~ s/^\s*(.*)\s*$/$1/; }
これをもうちょっとスマートに書いてみたいですが
どしたらいい? for文ははずせないのかな
0826黒死犬 ◆EgxBlf8nvc
04/07/07 20:45ID:???0828nobodyさん
04/07/07 21:40ID:???何で俺にレスしてんの?
しかもみんなって・・・
日本語理解してるか?
ついでいっとくと俺は質問者でも解答者でもない。愉快な煽り厨
0829nobodyさん
04/07/07 21:40ID:???お前大丈夫か?
どこが叩かれてるんだ?>>810は・・・
レス一つもないじゃん。
まさか勝手に前の人と同じと認定してるとか?
0832nobodyさん
04/07/07 21:59ID:???ググっても使用例が見つからなくて困っています。
0833nobodyさん
04/07/07 22:09ID:???もっとググれ
0834nobodyさん
04/07/07 23:02ID:???http://www.google.co.jp/search?hl=ja&ie=UTF-8&c2coff=1&q=Perl+%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%A2%E6%95%B0&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
PHPしか出てきませんが・・・
0835nobodyさん
04/07/07 23:07ID:???ttp://www.google.co.jp/search?q=Perl+-PHP+%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3&ie=UTF-8
( ゚д゚)ポカーン
0837nobodyさん
04/07/08 00:41ID:???0838nobodyさん
04/07/08 03:00ID:???<q cite="http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlstyle.html">
戻り値をただ単に捨ててしまうような void 文脈で、grep()やmap()、
`backticks` (訳注: `ls`のようにバッククォートで括った実行文のこと)
を使うことは避けましょう。そういった関数はすべて戻り値を持って
いるのですから、それを使うべきです。戻り値に用がないのであれば、
代わりにforeach()を使ったループか system()関数を使いましょう。
</q>
>>825
s/^\s+//, s/\s+\z// for @d;
0839nobodyさん
04/07/08 03:04ID:LQirb/WJwindowsで他のサーバのディレクトリを
ネットワークドライブに割り当て
その中のファイルに対して
-e を実行したらエラーしか返ってきません。
自分のサーバ内なら正常にファイルを検知できたのですが
ネットワークドライブはファイルの検査ができないのでしょうか?
$Path="d:/data/"
$Data="test.dat"
if(-e "$Path$Data")
0840nobodyさん
04/07/08 03:04ID:o03xV6akdo $line = <FILE> until (($line eq "<HOGE>") || (eof FILE));
だと$line eq "<HOGE>"がいつまでも真になりません。
$line =~ /<HOGE>/だと真になってくれますが、「含まれる行」ではなく「一致する」行を検出したいのです。
上のやり方だとなぜ出来ないのでしょうか?
0841nobodyさん
04/07/08 03:34ID:???do { chomp($line = <FILE>) } until $line eq "<HOGE>" || eof FILE;
do { $line = <FILE> } until $line eq "<HOGE>\n" || eof FILE;
0842nobodyさん
04/07/08 03:38ID:???$line =~ /^<HOGE>$/
0843840
04/07/08 04:02ID:???回答ありがとうございます。しかしそれでも解決しませんでした・・・
がその後自己解決しました。
アップロード時の文字コード変換が原因で認識しなかったようです。
# 最近HDが吹っ飛んでOSアプリすべてを再インストールしたために、FFFTPの転送設定が正しくなされてませんでした
<FILE>をアスキーモード転送でアップしたところ正しい挙動になりました。
0844nobodyさん
04/07/08 08:07ID:???だれも指摘してないが、その置換では末尾の空白は
とれないよ。先に.*の方に食われちゃうので。838は
黙ってさりげなく直しちゃってるけどな(笑)
0846nobodyさん
04/07/08 11:32ID:lii7HGr3PCやドコモの携帯では普通に書き込めていましたが、auで試したら、
書き込んだ内容がURLエンコードされたまま書き込まれてしまいました。
なぜでしょうか。
書き込まれた内容 : %92x%82%ea%82%c4%83X%83%7d%83%93
デコード処理部分
sub getparam{
my($QUERY_DATA,@pairs,$pair,$key,$value,%FORM);
if($ENV{ 'REQUEST_METHOD' } eq "POST"){
read(STDIN, $QUERY_DATA, $ENV{'CONTENT_LENGTH'});
}
@pairs = split(/&/,$QUERY_DATA);
foreach $pair (@pairs){
($key,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/"/"/g;
$value =~ s/&/&/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\r\n|\r|\n//g;
$value =~ s/\,/、/g;
$value =~ s/\t//g;
$FORM{$key} = $value;
}
return(%FORM);
}
0848847
04/07/08 11:39ID:???0849nobodyさん
04/07/08 13:09ID:???自分のスクリプトから欠陥を見つけられないならauの方の糞さを疑ったらどうだ?
三菱から欠陥を見つけられないなら乗り手の方の糞さを疑ったらどうだ?
0850nobodyさん
04/07/08 13:26ID:???よく眺めてみるのがいいかもね。
0851nobodyさん
04/07/08 13:29ID:???横軸が等間隔じゃないデータは
扱いにくそうだな
ほかにグラフ描くいいライブラリないかな
0852nobodyさん
04/07/08 14:03ID:???独り言の前にCPAN
http://search.cpan.org/search?m=module&q=Graph&n=100
0853nobodyさん
04/07/08 14:09ID:???http://pc5.2ch.net/test/read.cgi/php/997829243/
の方がベターと思われる
0854nobodyさん
04/07/08 16:34ID:???http://developer.apple.com/internet/webcontent/xmlhttpreq.html
これ使えばいけるかもね
0855nobodyさん
04/07/08 17:51ID:fxJBz/QH#!/usr/local/bin/perl -Tw
use strict;
my $data = './data.dat';
open COUNTER, "+<", $data or die "$data:$!";
my $count = <COUNTER>;
$count += 1;
seek COUNTER, 0, 0;
print COUNTER $count, "\n";
close COUNTER;
#html排出
print "$count";
exit;
なんどやっても、おかしいと思うところやタイプミスを直しても動きません(Internal Server Error)
どこが間違っているのでしょうか?勉強後初プログラミングなもんで…
ご教授よろしくお願いしますm(_ _)m
0856nobodyさん
04/07/08 18:01ID:???cgiのパーミッションは755
datのパーミッションは777
です。よろしくお願いします
0858nobodyさん
04/07/08 18:11ID:???速レスありがとうございます。
-Twが間違っているのですか
あの、よろしかったらどのようにすればよいのか教えていただけないでしょうか?とりあえず抜いてみたのですが、事態は変わらず…
0861nobodyさん
04/07/08 19:59ID:???ヘッダ書け。
#!/usr/local/bin/perl
use strict;
my $data = './data.dat';
open COUNTER, "+<", $data or die "$data:$!";
my $count = <COUNTER>;
$count += 1;
seek COUNTER, 0, 0;
print COUNTER $count, "\n";
close COUNTER;
#html排出
print "Content-type: text/html;";
print "$count";
良心で書いてやったぞ(藁
0862nobodyさん
04/07/08 20:14ID:???まともにエラーも確認できないようじゃ、大変だよ。
見られない環境なら↓こんなんもあるし。。。
http://www.kent-web.com/utility/index.html
0863nobodyさん
04/07/08 20:21ID:UcZ/C4OX$testdat = 'c:/Program Files/Apache Group/Apache2/cgi-bin/test.dat
open IN, $testdat or die "$!\n";
while(<IN>){
chomp;
$record{(split(/<>/,$_))[0]} = $_;
}
print (((sort keys %record))[-1]);
でテストすると、syntax error at test1.cgi line 8, near "open "
Execution of test1.cgi aborted due to compilation errors.
が、出てしまいます、これはどこを縦・・・じゃなくて
どうやって原因をつきとめていったらいいのでしょうか?
0864名無しさん@Linuxザウルス
04/07/08 20:29ID:3Hvq7uliあったら最初は楽しいかもしれんが、ウダイだろ
0865863
04/07/08 20:34ID:7oRlGTHBperl -cw test1.cgi
で出てきたものです。
0866名無しさん@Linuxザウルス
04/07/08 20:37ID:3Hvq7uliかえしてくれるやつを作るとしたら
まず何をすればいいのでしょうか?
0867863
04/07/08 20:44ID:7oRlGTHBnear "open " のところがわかりません。
近いっていったいなにが?って感じです。
0868nobodyさん
04/07/08 20:49ID:???0869nobodyさん
04/07/08 20:51ID:???0870nobodyさん
04/07/08 21:05ID:???よくWebサイトに『〜〜100の質問』ってありますよね。
あれを簡単にHTMLで出力できるようなCGIを作ってるのですが
うまくうごかなかったので、質問させてください。
処理の流れは以下の通りです。
1.テキストファイルから質問を読み込む
2.質問を一度表示させる。その際、1つの質問に対して1つのテキストエリアをつける(sub quesView)
3.テキストエリアに回答をいれ、一番最後に出力というボタンをおすことにより、HTML出力のサブルーチンに移動(sub sub regist)
4.HTML出力
質問を読み込んで出力できているのですが
HTML出力するときのサブルーチンにうまく移行できていないみたいなのですが
どうあがいてもうまくいきません。
よかったらご教授いただけませんでしょうか?
【サンプル】
ttp://cgi.www5f.biglobe.ne.jp/~c-fellow/cgi-bin/04_test/100/100q.cgi
【ソース】
ttp://www5f.biglobe.ne.jp/~c-fellow/cgi-bin/04_test/100/100q.zip
ソースはコピペだらけで、汚いと思いますが、宜しくお願いします。
0871名無しさん@Linuxザウルス
04/07/08 21:17ID:???開店前の銀行がどうしたんだ?
0873nobodyさん
04/07/08 22:18ID:???自分のソースを読み直してくれ。
$testdat = 'c:/Program Files/Apache Group/Apache2/cgi-bin/test.dat
これはどう見てもopenの前にあるよな?
0874nobodyさん
04/07/08 22:19ID:???なぜ、このような文法が許されるのですか?
unless($_) { $_=undef; } と書かないのはなぜですか?
0876nobodyさん
04/07/08 22:22ID:???そのようにPerl上で定義されてるから。
> unless($_) { $_=undef; } と書かないのはなぜですか?
ここではunless($_)より$_を解放する処理が有るということの方が重要だから。
0877nobodyさん
04/07/08 22:51ID:???0879nobodyさん
04/07/08 23:00ID:???sub Form_Input {
my($buffer,@pairs,$value,$name);
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs =split(/&/,$buffer);
foreach $pair (@pairs) {
($name,$value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$input{$name}=$value;
}
}
を最後の行にぶち込み、%Form_Input(); を条件分岐(# メイン処理 つーところ)の前で呼びだし、$mode を $input{'mode'} に変更し、
サブルーチン、registを、
sub regist {
&header;
print "$buffer";
&footer;
exit;
}
とすればとりあえず動く。長くてスマソ。
0881nobodyさん
04/07/09 01:31ID:???0883nobodyさん
04/07/09 02:16ID:???0886nobodyさん
04/07/09 02:27ID:???俺も>>882見た瞬間に
「なんでそうつなげるんだろ?面白い人だなぁ」
と思ったんだけどな。
俺も必死杉な質問者扱いされる仕様なのか…。
# このスレ、どうなっとるんだ?
>>866
% vi ~/tateyomi.pl
0887870
04/07/09 08:45ID:???レスありがとうございます。
ご指摘があった箇所を書き換えたところ、一応動きました。
が、$bufferが書き出されません・・・。
sub Form_Input の処理というのは
Formデータを読み込んで$bufferにいれ
それを&で切り分けたものを@pairsにいれる。
@pairsに入れたものを=でさらに分けて、$nameと$valueにいれる。
$valueに対してデコード処理。
で合ってますか?
これならば、$bufferは生データが表示されるはずですよね・・・。
(´ヘ`;) う〜ん・・・
もうちょっと頑張ってみます。
0888nobodyさん
04/07/09 11:39ID:???%Form_Input();じゃなくて&Form_Input();だよな。キー隣だもんな。
>>870
ソース見れないので、間違ってたらスマソ。
print $input{'1'} ;
にするとどうなる?
0889863
04/07/09 11:42ID:???朝起きて、もう一度みたら気が付いた・・・・。
>>880以降の人たち
漏れには0時過ぎに起きて2ちゃんやれるほどの元気はないぞ・・・いいな若いって。
0890nobodyさん
04/07/09 11:44ID:6LTGfdJzif ($aaa_tel eq $bbbtel){print "同じ電話番号が存在します。";}
こうしたソースで、$aaatelが0123-45-6789の場合、$bbbtelの中が
0123456789や、01-2345-6789、012-345-6789、012-345-6789
0123-45-6789、01-2345-6789なども
同じ番号と判定して警告を出すためには、どのように書き直した方が
いいのでしょうか?
0892nobodyさん
04/07/09 12:04ID:???とかやった上で比較するわけだな。
一般には「正規化」と呼ばれる。
0893890
04/07/09 12:05ID:6LTGfdJz0894nobodyさん
04/07/09 12:11ID:???0897nobodyさん
04/07/09 13:37ID:???1. 双方とも全角→半角する。Encode でも Jcode でも。
2. 双方とも tr/0-9//d; にする。
3. 双方を比較する。
4. おしまい。
0899nobodyさん
04/07/09 17:20ID:???%table = ('A' => '5',
'B' => '10',
'C' => '8',
'D' => '13');
sub number {
if ( $table{$a} > $table{$b} ) {
return 1;
}
elsif ( $table{$a} == $table{$b} ) {
return 0;
}
elsif ( $table{$a} < $table{$b}) {
return -1;
}
}
foreach $KEY (sort number values %table){
print "It's $KEY \n";
}
上記のプログラムを実行したところ、tableの値がソーティングされておらず、しかもデバッグにより、サブルーチン内の$aと$bに値が入っていないことが解りました。時分でも減員を調べたのですが解らなかったので、教えて頂けませんでしょうか?
0900nobodyさん
04/07/09 17:51ID:???foreach( sort{$table{$a} <=> $table{$b}}keys %table){
print "It's $_ \n";
}
何してるんだか、どっから説明すればいいんだか、
なんで何の為にこねくり回してるんだか
0901nobodyさん
04/07/09 18:03ID:???| | __,-'ニニニヽ . | |
.. | `、ヽ ヾニ二ン" / |
| ヽ\ / |
AA略
誤字は誤字であると見抜ける人でないと
(Perlのコーディングは)難しい
0902nobodyさん
04/07/09 18:55ID:???cgiを通してネット上のファイルを書き換えてレンダリング、というのをやりたいんですが、
同じサーバーのものしか扱えなくて困ってます。
0903nobodyさん
04/07/09 19:40ID:???0905nobodyさん
04/07/09 20:00ID:???どういうものを想像してるのかわかんないんですが、
ファイルを書き換えて保存するわけじゃなくて、
ファイルを読み込んで、書き換えたものをレンダリング、です。
電波ニュースとかご存じないでしょうか。あんな感じなんですが。
0907nobodyさん
04/07/09 20:43ID:???相手がhttpならLWP使って読めばいいんじゃねーの?
変数なりなんなりに中身入っちまえば後は煮るなり
焼くなり好き勝手すりゃいいわけで。
0908nobodyさん
04/07/09 21:08ID:???でも、素人はperl使っててください、お願いだからPHP使わないでね^^
0909nobodyさん
04/07/09 22:21ID:???tr/0-9//d;ってのは、変換する文字が数字で
変換する文字のリストが無い訳ですよね。
すみません、どのような効果があるのかわからないのですが。
0911nobodyさん
04/07/09 22:33ID:???ハイフンの有無が混在してると比較の邪魔。
それを比較しやすいデータにして返してくれる、という効果。
tr///d; ←この d の意味を調べると幸せになれる予定。
0912nobodyさん
04/07/09 22:37ID:170SmloAこまった899の顔に見えるな
0914911
04/07/09 22:42ID:???0916nobodyさん
04/07/10 00:50ID:???>915
有難う御座います。ざっと具具って読んでみましたが、鯖にインストールしないと使えないみたいですね。
借り鯖なんで、試して無理なら無理、ってことでしょうか。
0917nobodyさん
04/07/10 01:48ID:???という感じで($fileは動的で、ファイル名が入ります)、
そのディレクトリ、を特定したいのですが、(つまりファイル名だけ省く)どうすればいいんでしょうか。
一番最後の . 〜その直前の / までの割り出し方があればなんとか出来そうなんですけど。
0918nobodyさん
04/07/10 02:02ID:???0919917
04/07/10 02:05ID:???で拡張子だけはずす事までは出来るんですけど。
$fileに入るファイルURLは / がいくつはいるか特定できないので / で区切るわけにもいかないし。
どうしたらいいんでしょうかね。
0921917
04/07/10 02:22ID:???最後のスラッシュを書き換えればその書き換えたもので区切って、前方を、ってできるような気がしたんですけど。
#完全におかしなことを言ってるような気がしてきた。
>>918
えっと調べてみたんですが、「一番最初に見つかった○○」〜「一番最初に見つかった××」ですかね。
$file = 'system/news/index.html';
だと「system/」しか拾ってくれないのではないでしょうか?
誤読してますかね。
0922nobodyさん
04/07/10 03:15ID:???$file =~ s/(.*\/).*/$1/;
とか
$dir = substr($file, 0, rindex($file, "/") + 1);
0924nobodyさん
04/07/10 07:39ID:INTe94T2そこでperlのソースコードで縦読みって作れるんでしょうか?
一見、ふつうのソースだが、縦とか斜めに読むと
面白い事が書かれているとか。
変数名だけじゃなくて、命令や関数が組み合わさって縦読みできたら、かなりすごいんじゃないでしょうか。
0925nobodyさん
04/07/10 08:09ID:???http://books-support.softbank.co.jp/pq/backnumber/036_ans_reader.html
の一番下。
0926nobodyさん
04/07/10 08:10ID:???あんたにゃ無理かもしれんが、
エンコード文字列だけのスレの54がすごいぞ
http://pc5.2ch.net/test/read.cgi/php/1065258181/54
縦読みっていうレベルの話じゃないぞ。
見たら「ビックリ」するぞ。
漏れも初めてあのスクリプトを見たとき、perlの行き着く先には絶望しかないかと思ったよ。
じゃ、がんばって解凍してね。
0928nobodyさん
04/07/10 14:43ID:???答えてやるよ!
0929nobodyさん
04/07/10 15:06ID:???0930nobodyさん
04/07/10 15:31ID:???存在していて、害にならなければ存在価値はあると言っていいだろう。
でも大事なことを教えてやろう。パアルのコージングとは無関係な質問ね。
0931870
04/07/11 06:02ID:???>>888
一応&Form_Input();にはしてあります。
それで、アドバイスがあった
print $input{'1'} ;
を入れてみたのですが、表示されません。
一応ソースですが、再アップしてみたので、よかったらご覧になってください。
もう自分挫折しそうですorz
どなたか、愛の手を・・・
0932nobodyさん
04/07/11 06:15ID:???print "Content-type: text/html;\n\n";
それと、ソースのファイル名が100q.zipじゃなくて100.zipになってたぞ。
0933932
04/07/11 06:50ID:???ヘッダの問題じゃなかったのかな?
print $input{'1'} ;
って何を表示するのかわかってる?
print $input{$_} for 1..100; こうした方が君にはいいかも
0934名無しさん@そうだ選挙に行こう
04/07/11 08:06ID:???$input{'1'}
を
foreach (1..100){
print qq($_ : $input{$_} <BR>\n);
}
にしてみる。
0935名無しさん@そうだ選挙に行こう
04/07/11 18:24ID:???こんなスクリプトを書きましたが、結局画像の形だけが表示されてしまいしまた。
画像を出して、Locationで飛ばしたかったんだけど。
#!/usr/local/bin/perl
$image = "./image.gif";
$SIG{ALRM} = \&timeout;
#GIF画像の出力
sub timeout{
print "Location: http://******/success.html\n\n";
alarm 0;
exit;
}
alarm 5;
print "Content-type: image/gif\n\n";
#画像の書込
open(IMG,"$image");
binmode(IMG);
print <IMG>;
0936935
04/07/11 18:26ID:???0937nobodyさん
04/07/11 21:09ID:???filename.jpgへリンクしたhtmlを出力させたいと思ってます。
<a href="特定のURL指定/$f">●</a>とおいたときに$fがfilename.jpgじゃなく空白になります。
filename.jpgを出力するために何か処理が必要になるのでしょうか?
htmlの出力、URLの指定などは問題なしです。
アドバイスお願いします。
0938nobodyさん
04/07/11 21:16ID:???>>1
> 1: 自分はこう言う事がしたい。
> 2: それでこんな風にやってみたが・・・
> 3: こんなエラーが出て上手く行かなかった。
2が抜けてる。
?f=filename.jpg を $f にどうやって代入してるの?
0939937
04/07/11 22:16ID:???レスありがとうございます。
?f=filename.jpgが$f指定してると思ってたので特に記述してなかったです。
?f=のような指定について調べてみたのですが、参考になるページが見つかりませんでした。
情報ありましたらアドバイスいただけないでしょうか?
0940nobodyさん
04/07/11 22:26ID:???QUERY_STRINGでぐぐれ。
0941nobodyさん
04/07/11 23:12ID:YH96401L$array[] = "apple";
とすると配列の最後に"apple"を追加してくれるのですがこれをPerlでやる場合
簡単な方法ってどうやりますか?
0943nobodyさん
04/07/11 23:20ID:???0946nobodyさん
04/07/12 10:17ID:???$gd=$graph->plot(\@data);
open(IMG, '>test.gif' ) or die $!;
binmode IMG;
print IMG $gd->gif; ★
close IMG;
★のところで Can't call method "gif" on an undefined value
pngにしてもだめなので、ここで何をサポートしているのか知りたい。
サポートしているファイル形式を知るためのメソッドってありますか?
0949nobodyさん
04/07/12 11:03ID:???@a = qw( 0.1 0.2 0.3 );
だとちゃんと入るんだけど
@a = { 0.1, 0.2, 0.3 };
だとなんかすっげー数字が入っている
なんでだすか?
0950nobodyさん
04/07/12 11:26ID:???0953nobodyさん
04/07/12 12:53ID:???my @a = { 0.1, 0.2, 0.3 }; # ハッシュリファレンス 1 つを @a に代入
print @a, "\n"; # リファレンスを文字列として評価 → "HASH(0x10c1350)"
# 文字列 "HASH(0x10c1350)" を強制的に数値コンテキストで評価
# 0x10c1350 → 17568592
$_ += 0 for @a;
print @a, "\n"; # 17568592
0956nobodyさん
04/07/12 19:33ID:???0957nobodyさん
04/07/12 20:56ID:???例えばpingを打ちたいと思ったら
CGIだと
クライアントから要求→サーバがping実行→クライアントに実行結果を返す
ですが、
HTMLの中にスクリプトを埋め込むことによって、クライアントからpingを打つことは可能でしょうか?
うまく意味が伝わらなかったらごめんなさい_no
0959nobodyさん
04/07/12 21:26ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_can_I_make_a_filehandle_loca
>>957
"PerlScript" で調べ回れ。
0960957
04/07/12 21:40ID:???回答ありがとうございます。
ゼミの教授が「タグで簡単に出来る」と言ってきて、
自分なりに色々調べたのですが、全くそのような情報がなかったので質問させて頂きました。
胸を張って「そんなこと出来ませんよ」って言いたいと思います!
0962nobodyさん
04/07/13 03:39ID:???恥かくのは本人なんだから
0963nobodyさん
04/07/13 05:45ID:???ゼミの教授は嘘つきだ
Perlにタグなどない!
だいたいHTMLに埋め込むのってCGIじゃなくてSSIでしょー
確かにSSIをHTMLに埋め込むのはタグだけどなぁ
0964nobodyさん
04/07/13 06:00ID:???学生「先生!あのpingの話ですけど、できませんよ!」
教授「ほう、何か調べたのですか」
学生「はい。調査の結果、2chのnobodyさん(958)が『無理』と。句読点なしで」
教授「…帰れ」
…こんな感じのコじゃないかな。
「タグで出来る」ってのも、>>960さん用語に変換されてるだけかもしれない。
0965nobodyさん
04/07/13 08:12ID:???「<img>タグ」でアクセスとかだったら、
ちょっと、いぢわるだなぁ、その教授。
>957とりあえずガンガレ。。
0966nobodyさん
04/07/13 11:28ID:???「クライアントからpingを打つ」てのは難しそうに思えるなあ。
それができるとたぶん物凄いセキュリティホールになる。
0967nobodyさん
04/07/13 12:36ID:???無理
って言ったんですけどね・・・
0968nobodyさん
04/07/13 13:17ID:Q7wc8BxWprint "<table>\n";
print "<tr><th>No.</th><th>FileName</th><th>FileSize</th><th>UploadTime</th></tr>\n";
opendir(DIR, "$dir" ) or die;
while(my $filename=readdir(DIR)){
if($filename=~/^\.{1,2}$/){
next;
}
++$no;
@fileinfo = stat("$dir$filename");
$upldtime = &time($fileinfo[10]);
$filesize = int ($fileinfo[7] / 1024);
$filesize = ~ s/(\d)(\d\d\d)(?!\d)/$1,$2/g;
print "<tr><td>$no</td><td><a href=\"$dir$filename\">$filename</a></td><td>$filesize KByte</td><td>$upldtime</td></tr>\n";
}
print "</table>\n";
closedir(DIR);
左端からNo.、ファイル名、ファイルサイズ、アップロードされた時間・・・と4つ並びます。
ここで、「アップロードされた時間」を基準にして、時間の新しいものから順にリスト表示したいのですが
根本的にやり方がわかりません。
whileより上でソートしていないといけないような気もするのですが・・・
誰か教えてください。。
&timeはここには出ていませんが、yyyy/mm/dd hh:mm:ss形式で表示させるためのサブルーチンです。
0970nobodyさん
04/07/13 13:33ID:???0971nobodyさん
04/07/13 13:38ID:???whileの中でhtml出力まで一気にやらなけりゃいいんじゃないの?
while内でhashなりにデータ格納して、
後で好きなようにソートなり何なりしてHTML出力すれば?
0972968
04/07/13 13:57ID:Q7wc8BxW>>969
system "ls -lt" >hoge.txt
・・・みたいな感じですね。system禁止されてなきゃいいのですが。
>>970
そうか。
アップローダーCGIを参考にすればよかったのですね。
全然思いつきませんでした。
ファイルのアップはFTPです。アップローダーなんて高機能なもの、まだ作る腕がありません。。
>>971
perlのsortを調べてて、「先頭からn番目(今回の場合は4番目)のものをキーにして・・・」というのが、探し当てられませんでした。リャマ本にも「すぐわかるperl」にもなかったですし、いろいろ探し回ったのですが。。
・・・と書いてて今思いつきました。
タイムスタンプを先頭に格納すればいい?
がんばってみます。
0974nobodyさん
04/07/13 14:12ID:???<table summary="アップロードされたファイルの一覧">
\t<tr><th abbr="番号">No.</th><th abbr="ファイル名(リンク)">FileName</th><th abbr="サイズ(Kilo bytes)">FileSize</th><th abbr="アップロード時刻">UploadTime</th></tr>
EOS
my $count = 0;
local *DIR;
if (opendir DIR, $dir) {
foreach my $filestatus (
sort { $b->[3] <=> $a->[3] } # 最新更新時間を降順に並べ替え
map { [ $_, qq|$dir/$_|, (stat qq|$dir/$_|)[7,9] ] } # [ファイル名、ファイル位置、ファイルサイズ、最終更新時間]
grep { !/^\.+/ } # . .. を排除
readdir DIR # 読む
) {
printf qq|\t<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n|,
++$count, # ファイル番号
sprintf (qq|<a href="%s">%s</a>|, $filestatus->[1,0]), # ファイル名とそのリンク
sprintf (qq|%s KBytes|, int($filestatus->[2]/1024) =~ s/(\d)(\d\d\d)(?!\d)/$1,$2/eg), # サイズ(KBytes)
×tamp($filestatus->[3]) # 最終更新時刻
}
}
print qq|<td colspan="4">ファイルがないかも (´・ω・`)</td>\n| unless $count; # $count が 0 ならば
print <<"EOS;
\t</tr>
</table>
EOS
脳内処理につきご勘弁m(_ _)m
0975968
04/07/13 15:40ID:pa0oo0i5ヒントの宝庫ですね。
特に
>sort { $b->[3] <=> $a->[3] } # 最新更新時間を降順に並べ替え
添え字の位置はそこだったのか。。
あとアップロードされた時間を所得するのは$mtimeなんですね。。($ctimeだと思い込んでた)
一生懸命がむばってみます。ありがとうございました。
0976nobodyさん
04/07/13 16:09ID:???別のファイルをFHで書き出しをしてフラッシュした場合、以前の書き出しも
フラッシュされるのでしょうか?
0978nobodyさん
04/07/13 16:20ID:???なかなか判別が難しいです。やった感じでは問題ないのですが・・・
チェックの仕方や解説が載ってるサイトなどあればぜひ教えていただきたいです
0979nobodyさん
04/07/13 16:55ID:???Cに慣れているので、人のコードを見るとまるでパズルをしているようです。
ところで、配列の中に入った値を、3つずつ改行して表示するには
どうかくのがスマートでしょうか?
0982nobodyさん
04/07/13 17:28ID:???$i = 0;
for(@array){
print;
$i++;
print "\n" if $i%3 == 0;
}
あんまりスマートじゃないな。
0983nobodyさん
04/07/13 17:32ID:???print "@list";
0984nobodyさん
04/07/13 17:51ID:???@tmp = @array[0..2];
@array = @array[3..$#array];
print @tmp, "\n";
}
0985nobodyさん
04/07/13 18:07ID:C9iP6fNVif ($] > 5) {
eval( $icode = &jcode'getcode(\$hash{$key}) );
}
else {
$tmp = $hash{$key};
$icode = &jcode'getcode(*tmp);
}
Perl4でのエラーを回避しようとeval に放り込んでみたんですが
やっぱりエラーでしょうか?
0986nobodyさん
04/07/13 21:43ID:???print "$_\n";
}
0987nobodyさん
04/07/13 22:08ID:???Perl4 の実行環境が手元に無いんで確かめられんが
for ($hash{$key}) { $icode = &jcode'getcode(*_) }
で Perl4 でも Perl5 でも通ると思う。
0988nobodyさん
04/07/13 22:52ID:???0989nobodyさん
04/07/13 22:57ID:???>>5-6 、ごちゃごちゃ列挙しても誰も読まんからム板のと一緒でいいよ。
http://pc5.2ch.net/test/read.cgi/tech/1085564875/3
0990nobodyさん
04/07/13 23:03ID:???あとは「コーディング」と関係のない質問者さん…
・Perl環境自体の質問とか(別板にスレがあったような)
・HTTPの仕組みについての質問とか(CGIスレへ行け、と)
・<form>の話とか(Web制作板で勉強しろ、と)
…この辺の人が、どこに行けばいいのかわかりやすくなるとよさそう。
でも「コーディングって、何?」って人のほうが多そうだなあ_| ̄|○
0991nobodyさん
04/07/14 00:06ID:???0992nobodyさん
04/07/14 00:43ID:???まじめな質問はこちらへ。
http://pc5.2ch.net/test/read.cgi/tech/1085564875/
0994nobodyさん
04/07/14 01:12ID:???自分の質問が Perl に関することなのか
それとも Perl ではなく CGI や HTML についてなのかを
切り分けできないからなあ
0996nobodyさん
04/07/14 11:25ID:???0999nobodyさん
04/07/14 13:28ID:???http://pc5.2ch.net/test/read.cgi/php/1089779036/
1000nobodyさん
04/07/14 13:31ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。