トップページ⇒php
1001コメント356KB

Perlコーディング初心者質問スレ Part 53

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/11/26(日) 14:38:23ID:SlmGsFMB
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >>2-10

前スレ http://pc8.2ch.net/test/read.cgi/php/1153987463/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0665nobodyさん2007/01/06(土) 19:32:53ID:???
超低レベルな質問お許し下さい。
PerlによるCGIの参考書を買ってゼロから勉強中ですが、
下記のプログラム(参考書を丸写し)が動作しません。エラーコードは500です。
原因は何でしょうか?
・Perlのパスはレンタルサバのサイトで確認
・ファイル名はindex.cgi
・OSはWinで、メモ帳で編集しFFFTPでUL
・パーミッションは755

#!/usr/bin/perl

print <<_EOF;
Content-type: text/html

<html>
<head><title>test</titel></head>
<body>
test
</body>
</html>
_EOF
0666nobodyさん2007/01/06(土) 19:54:15ID:???
>>665
500エラーじゃ何も判らんし、そもそもレン鯖使って勉強するなといいたいが。

・FTPの時にASCIIモードで送って無い
・パーミッションがレン鯖指定のものと違う
・そもそもindex.cgiが使えないようになっている(別名でテストしてみ)

とかそんなあたりか。ソースそのものは問題ない。
タグでtitleの打ち間違いがあるくらいか。
0667nobodyさん2007/01/06(土) 20:03:54ID:???
メモ帳だと最終行末改行がないとか
0668nobodyさん2007/01/06(土) 20:07:39ID:???
もう出てるけど、
・バイナリモードで転送した
・ヒアドキュメント終端文字列でファイルが終わってる(改行がない)
辺りが有力っぽい。
0669nobodyさん2007/01/06(土) 20:23:33ID:lBOtCkKI
掲示板の改造で、半角カタカナが本文に含まれる場合
エラーメッセージを出すようにしたいと思っています。

投稿されたメッセージ$messageに
半角カタカナが含まれているかどうかを判定する、というのは
どう書けばよいでしょうか?

全角文字があるかどうかを判定ならググって出てきましたが・・・。
0670nobodyさん2007/01/06(土) 20:23:42ID:???
>>666
回答ありがとうございます。
>・FTPの時にASCIIモードで送って無い
FFFTPの環境設定に転送設定という箇所があったので、
「常にアスキー」に設定し、ULしなおしました。

>・パーミッションがレン鯖指定のものと違う
確認したところ、実行ファイルは700が推奨されていたのでそうしました。
705も試しました。

>・そもそもindex.cgiが使えないようになっている(別名でテストしてみ)
確認したところindexで問題ないようですが、test.cgiに変更しました。

ですが、動作しませんでした。
06716652007/01/06(土) 20:31:56ID:???
>>666-668
最後に一回改行を入れてからULしたら動作確認できました!
回答ありがとうございました!
06726692007/01/06(土) 21:04:52ID:???
もっと探したらみつかりました。ごめんでした。

・・・が、さらに質問です。
名前とタイトルに含まれる半角カタカナは全角に変換でいい。
そこでログに書き込むサブルーチンregistに、
&jcode'h2z_sjis(*name);#$nameの半角を全角に
&jcode'h2z_sjis(*subject);#$subjectの半角を全角に
と書いたのですが、名前のほうが変換されません。
0673nobodyさん2007/01/06(土) 22:19:16ID:???
それだけで全てをわかってくれるエスパーさんが来るといいね
0674nobodyさん2007/01/06(土) 22:29:08ID:???
30字くらいのパスワードを暗号化したいのですが、
モジュールのインストールなしに出来る方法はどんな方法があるのでしょう。
今はuse libとuse Crypt::CBCとBlowfish_PPでやっているのですが、どうしても遅いので
もう少し早くできると良いのですが。

>>662でlinux上で単純にコンパイルしてそのままautoディレクトリをコピーしてやれば良いのかと思って
コピーしてみましたが
Blowfish.so: undefined symbol: Perl_Gthr_key_ptr
こんな感じのエラーが出てしまいました。
Blowfish_PPとBlowfishでは速度が違いすぎるので、出来ればBlowfishの方を使いたいのですが、
どうすれば使えるのでしょうか。
0675nobodyさん2007/01/06(土) 22:59:26ID:???
ちょ、パスワードをなんのために暗号化するのさ
0676nobodyさん2007/01/06(土) 23:03:37ID:???
xor暗号最強
0677nobodyさん2007/01/06(土) 23:21:18ID:???
>>672
同じ文字列入れてnameの方だけ変換ないってんなら
おまいが間違ってるとしか言えん。

>>674
モジュール無しで、ということだけならopensslに投げるという手もある。
モジュールのほうが速いと思うけど。
0678nobodyさん2007/01/06(土) 23:44:23ID:???
>>675
マジレスして欲しいのかな?
0679nobodyさん2007/01/07(日) 00:26:44ID:???
>>674
手順はそれで間違ってないと思うのだけれど
・make testは通ったのか
・perlのバージョン
を
0680nobodyさん2007/01/07(日) 00:28:09ID:???
>>675
拡張子をcgiにすればファイルの中身を見られることもないのですが、まあ気休め程度に。
>>677
すみません。解決しました。
サーバーとローカルのperlのバージョンが違ったためにモジュールのバイナリを使用できていなかったようです。
サーバーとローカルのperlのバージョンをそろえてコンパイルしなおしたらそのままコピーでuse libしたら
出来ました。
0681nobodyさん2007/01/07(日) 00:28:21ID:???
>>645
レス遅れましたが、本当に有難うございました。
検証もしてみましたので検証報告も兼ねさせていただきます。

結論から申し上げますと、16桁目の4以上、つまりは4000兆
くらいから計算が狂ってきました。
これは645さんのおっしゃる32ビットマシンの性能ということ
に当てはまったのではないかと思いました。

ご丁寧に有難うございました。
0682nobodyさん2007/01/07(日) 00:29:35ID:???
>>679
どうもです。
まさにバージョンでした。
0683nobodyさん2007/01/07(日) 19:30:50ID:???
毎度お世話になっております。

Mac OS X PantherのTerminal上にて運用する予定のPerlスクリプトをMac OS X Tigerにて作っています。
指定されたディレクトリの中にある1万個程度のテキストを片っ端からチェックして、
ある特定の文字列があったら別の文字列に置き換えて保存するという処理なのですが、
一部ファイル名の最後の文字がスペースのものがあった場合に
それらの展開に失敗する(最後のスペースが無いものとしてファイルを開こうとする)ようです。

ファイル名の最後のスペースを認識させるにはどのような方法があるのかご教示頂けますと幸いです。
よろしくお願いいたします。
0684nobodyさん2007/01/07(日) 20:02:05ID:???
>>683
>>1
> 2: それでこんな風にやってみたが・・・
0685nobodyさん2007/01/07(日) 20:02:08ID:???
3引数openで開けばいいんでないの
0686 ◆TWARamEjuA 2007/01/07(日) 20:11:46ID:????BRZ(6700)
何となく板違いの伊予柑♪

panther も tiger も5.8.xなのでバージョンの違いとか、OSの違いによるもんじゃないと思うそ。
0687nobodyさん2007/01/07(日) 20:15:21ID:???
Tiger(perl v5.8.6)で試してみたけど、3引数openなら大丈夫だった。
0688nobodyさん2007/01/07(日) 20:27:45ID:???
2引数openはファイル名の前後にあるスペースを削っちゃうのよね
案外知られてないのかな
0689nobodyさん2007/01/07(日) 20:47:03ID:???
>>684
とりあえずやってみたのがファイルのパスを' 'でくくるとか
" "でくくって\を付けるとかくらいなもので…

>>685
デキタ━━━━━━(゚∀゚)━━━━━━!!!!

何でなのか理屈がよく分かりませんができたっぽいです。
迅速なお答え、本当にありがとうございました!
06906832007/01/07(日) 20:52:01ID:???
>>686
ご察しの通りPerlの仕様だったようです。
これでPantherのPerlが5.6だったりしたら路頭に迷うところでした。

>>687
検証して頂きありがとうございます。
おかげさまで何とかなりそうです(*´∀`)

>>688
Perlは一応それなりに馴染んでいたつもりだったのですが
今回の件には完全にやられました。もっと精進します。
0691nobodyさん2007/01/07(日) 21:22:42ID:???
マック欲しい…
0692nobodyさん2007/01/08(月) 05:15:48ID:???
先着で500名までマックだって。急げば間に合うんじゃないか?
ttp://www.mcdonalds.co.jp/mcgriddles/index.html
0693nobodyさん2007/01/09(火) 00:38:49ID:???
PerlCGI制掲示板の改造で、半角カタカナを全角カタカナに変換するには
どう書けばいいでしょうか。
jcode.plではなく普通に置換で行いたいと思うのですが。
ここの正規表現みていたら訳が分からなくなってきた・・・。
ttp://sieg.xeong.com/archives/2005/06/perl.html
0694nobodyさん2007/01/09(火) 00:48:18ID:???
>>693
それ・・・問題おきまくりだよ
0695nobodyさん2007/01/09(火) 01:08:35ID:???
jcodeg.pl使うと半角カナを化けずに使えるけど、これって問題ある?
0696nobodyさん2007/01/09(火) 01:11:19ID:???
unicodeなりeucで書いておけばとりあえず半角だのなんだの気にしなくてもかまわんでしょ
06976932007/01/09(火) 02:24:52ID:???
ん〜サイト全体(CGI以外)がS_JIS。
EUCはブラウザのミスによる文字化けがあるから嫌なんです(タブブラウザにしなくていいからこっちを先に治せM$)。
CHARSET設定していながら何かの拍子に化ける→エンコードし直しうざい

それに半角カタカナを使えるようにしたいのではないので。
・・・大体、半角カタカナを使って書く言葉って、あまりいい意味の言葉じゃないですよね。
06986972007/01/09(火) 02:37:18ID:???
しかし問題ありなんですね・・・>>694
tr使ってもダメだと書いてあるページを見つけました・・・

もともとのスクリプトではフォームデコードに
&jcode'h2z(\$value);
があって、投稿した半角カタカナは全て全角に変換されるんですが
これだと「・・・」まで変換されて(個人的に)変な感じがする。
しかもこれはカタカナではない記号ですしね。
で、他に方法はないかと思ったのですが。
半角→全角は諦めるしかないみたいですね。
レスありがとうございました。
0699nobodyさん2007/01/09(火) 02:47:31ID:???
サイト全体がSJISだからCGIもそれにあわせるとか、まったく意味の無い統一の仕方なのだが・・・
どうしてもあわせたいならHTMLをunicodeにしちゃえよ
0700nobodyさん2007/01/09(火) 03:06:27ID:???
use utf8をやればtrでも行ける。
後は濁点付きを適当に置き換えれば。
0701nobodyさん2007/01/09(火) 03:14:56ID:???
>>699
SJISだから合わせるとかなんとかってのは無視してくださいな。
そんなことどうでもいい。

とにかく半角カタカナを使ってもらいたくないというのと
半角カタカナを2ちゃん以外の場所で見たくないってだけ。

半角カタカナがあればエラーってのもやってみたし
半角カタカナを全角変換もやってみたけど
カタカナじゃないやつまで処理してしまうというのが・・・ってだけの問題。
0702nobodyさん2007/01/09(火) 04:25:59ID:???
そんなに半角カナを嫌わんでもw

ナンテイウカ タンナル アレルギー ニ シカ ミエナイ カンシ ゙ダナ
0703nobodyさん2007/01/09(火) 06:21:11ID:???
正しいパスワードを入力したはずなのにエラー(´・ω・`)
何処か一文字間違ってるんだろうけど何処が間違ってるか分からない、といったユーザの不満を解消すべく
ショッピングカートの改良しようと思っています

パスワードのMD5ハッシュをDBに保存するロジックを平文での保存にすることは簡単にできたので、
あとは何処がが間違っているかをユーザに教えるロジックを作ればいいんですが、どうするのがユーザビリティ的に好ましいでしょうか?

正しいパスワードとユーザ入力のパスワードが同じ文字数の場合には、

正しいパスワード "hoge2CH" の時、ユーザが "hoge2ch" と入力したら、
「パスワードの6文字目・7文字目が間違っています。」 と返す、のように簡単にいくんですが、

正しいパスワードが "hoge2CH" の時、ユーザが "hoge2C" と入力した場合に、
貴方がユーザだとしたらどういうエラーが返って来て欲しいかを教えて下さい。


0704nobodyさん2007/01/09(火) 06:34:19ID:???
>>703はそんなことをしたら恐ろしく少ない回数の試行で
パスワードが特定できるということを解っているのだろうか…
0705nobodyさん2007/01/09(火) 07:11:16ID:???
>>704
間違いが一定文字数以下の時だけヒントを出すようにすりゃ大丈夫じゃね?
0706nobodyさん2007/01/09(火) 09:15:15ID:???
>>703
危険なのでヤメレ
>>705
クマー
0707nobodyさん2007/01/09(火) 11:49:21ID:???
>>703
> 貴方がユーザだとしたらどういうエラーが返って来て欲しいか

正しいパスワードそのものを表示して欲しいな。
0708nobodyさん2007/01/09(火) 12:40:14ID:???
パスワードがわからない時は該当IDのメールアドレスに
パスワード送信できるようにすれば
0709nobodyさん2007/01/09(火) 13:09:11ID:???
>>702
>>697
>・・・大体、半角カタカナを使って書く言葉って、あまりいい意味の言葉じゃないですよね。

はい、いい意味じゃない言葉。
m9(^Д^)プギャー ( ´_ゝ`)フーン ( ゚д゚)、ペッ( ゚Д゚)ヴォケ!!
('A`)マンドクセ ( ´,_ゝ`)プッ
顔文字だけでこれだけありますね。
顔文字だけならДゝあたりをNGにすればいいですが、顔文字なしで
使う場合もある。
NGワードに半角カタカナを指定すると誤爆しまくるのでダメ。
#ギあたりでひっかかる
0710nobodyさん2007/01/09(火) 13:12:47ID:???
ところでjcode.plのマニュアルってなんで英語なんだ。
日本人だよね?作ったのって。

;#$jcode'h2zf{'xxx'}
;#These are pointer to the corresponding function just
;#as $jcode'convf.

これなんかどういう意味?どういう使い方するわけ?
訳はできても使い道がわからないんだが。
0711nobodyさん2007/01/09(火) 13:20:54ID:???
見たまんまだし、日本語マニュアルあるし、今時jcode.plを使うのもどうかと
0712nobodyさん2007/01/09(火) 15:28:47ID:???
>>711
まだまだJcodeが使えなかったり、Perlのバージョンが古いままの鯖はたくさんある。
0713nobodyさん2007/01/09(火) 16:27:08ID:???
ttp://www.itmedia.co.jp/help/tips/linux/l0149.html
ここの内容をコマンドライン上ではなく、
perlスクリプト内でしたいのですが、
どうやってやればよいでしょうか?
ご教授お願いします。

PHPは結構かじりましたが、perlは全く0です。
正規表現もそれほど自信がないです・・・・ orz
0714nobodyさん2007/01/09(火) 16:39:09ID:???
>>713
-i相当のことをやるのはめんどくさいので、system使えばいいんじゃない?
0715nobodyさん2007/01/09(火) 17:01:19ID:???
>>713
単に「perlスクリプト内でしたいの」であれば1行毎に
$var =~ s/¥r¥n/¥n/;
をすれば良いのだが、>>714が読み取ったように、
「ファイルの読み書きやらデータのIOをどう処理したら良いか」
ということを聞きたいのか?
0716nobodyさん2007/01/09(火) 17:07:56ID:???
>>713
要はWindowsの改行コードをUNIXのものに変えたいということじゃないの?
$textに問題の文字列が入っているとしよう。
$text =~ s/\r\n/\n/g; # Perl
これで$text内の全ての\r\nが\nに変換される。
これはPHPでいう以下のいずれかの構文と同じ処理になる。
$text = preg_replace("/\r\n/", "\n", $text); // PHP: 意味合いとしてはこっちがより正確だが
$text = str_replace("\r\n", "\n", $text); // PHP: PHPではこっちがより推奨される

問題がWindowsとUNIXだけなのであれば、単純に\rを排除するだけでも良い。
$text =~ s/\r//g; # Perl
これはPHPでいう以下のいずれかと同じ処理。
$text = preg_replace("/\r/", "", $text); // PHP: 意味合いとしてはこっちがより正確だが
$text = str_replace("\r", "", $text); // PHP: PHPではこっちがより推奨される

が、これにMacが絡むと改行コードは\rだけだったりすることもありうるわけで、
単純に\rを排除していてはMacでは改行が全て消えて無くなってしまう。
より汎用性を求めるなら以下のようにすべきだろうね。
$text =~ s/\r\n/\n/g; # Perl1: Win -> UNIX
$text =~ s/\r/\n/g; # Perl2: Mac -> UNIX
これはPHPでいう(以下略
$text = preg_replace(array("/\r\n/", "/\r/"), "\n", $text); // PHP: 意味合いとしてはこっちがより正確だが
$text = str_replace(array("\r\n", "\r"), "\n", $text); // PHP: PHPではこっちがより推奨される
もしくは
$text =~ s/\r\n|\r/\n/g; # Perl: 上の1と2をまとめたもの
これはP(ry
$text = preg_replace("/\r\n|\r/", "\n", $text); // PHP: 配列を使わない場合
0717nobodyさん2007/01/09(火) 17:12:28ID:???
>>713
以下を hoge.pl で保存
=======
#!/usr/bin/env perl -i.old -p
s/\r\n/\n/ ;
=======
$ perl hoge.pl hoge
じゃダメか?w
しかしソース元の -npe ってなんだかなあ
=====
#!/usr/bin/env perl
for my $name ( @ARGV ){
open IN, $name or die ;
my $data = do { local $/ ; <IN> } ;
close IN ;
rename $name , $name . '.old' ;
$data =〜 s/\r\n/\n/g ;
open OUT, '>' . $name ;
print OUT $data ;
close OUT ;
}
=====
0718nobodyさん2007/01/09(火) 17:13:48ID:???
しまった、サファリでカキコしてしもうた。全角バックスラッシュは
単なるバックスラッシュに脳内置換よろ
0719nobodyさん2007/01/09(火) 17:21:51ID:???
>>714-715
レスありがとうございます。

perlのスクリプトをちょっと改造したい
(ある変数内のデータから^Mを削除したい)のですが、
systemとかを使うと、ほかの部分も弄る必要性が出てきそうで、
現時点の自分のperl能力からはできれば避けたいと考えてます。

PHPなら下みたいな感じでよい気がするのですが、
同じことをperlではどうすればいいでしょうか。
perlは変数宣言とかが厳しいと聞いたことがありますが、
ほかはphpと似たようなものでしょうか?

$file_array = file( $file_path );
for($i=0; $i<count($file_array); $i++){
$file_array[$i] =~ s/\r\n/\n/;
}
$file_data = implode("\n", $file_array);
0720nobodyさん2007/01/09(火) 17:31:31ID:???
そのプログラム、ある変数から\rを削除してるだけには見えないのだが。

$file_pathに格納されたパスにあるファイルを開いて読み出し、
各行の\rを削り、さらに各行をさらにもうひとつの\nをはさんで
つなげているような。

そもそもPHPとかperl以前に、自分が何をやりたいのか、何をやろうと
しているのかを的確に理解して説明する能力を身につけるべきな気が
するぞ。
0721nobodyさん2007/01/09(火) 17:33:08ID:???
>>720
713 見てからレスれよ
0722nobodyさん2007/01/09(火) 17:38:59ID:???
>>718
rep2マジお勧め。

>>719
その構文だと各行の間が"2つの"\nで連結されてしまうけどそれでいいのかな?

open(FILE, $file_path);
@file_array = <FILE>;
close(FILE);
for (my $i = 0; $i < @file_array; $i ++) {
$file_array[$i] =~ s/\r\n/\n/;
}
$file_data = join("\n", @file_array);

>>721
おまいも>>719見てからレスれw
0723nobodyさん2007/01/09(火) 17:49:05ID:???
ただいまより、語尾にレスれとつけるスレとなりました。
ネスレじゃありませんよレスれ
0724nobodyさん2007/01/09(火) 17:51:22ID:???
半角カナはマルチなんだな。
スルーで。
0725nobodyさん2007/01/09(火) 18:12:19ID:???
くっそー移転してるの気づかなかった
0726nobodyさん2007/01/09(火) 18:27:32ID:???
>>712
軽く確認してみただけけれども、ファイルコピーだけで5.005でもJcode動いてるような。
5.005よりも古い鯖って見たこと無いのだけれどそんなにあるんですか?
0727nobodyさん2007/01/09(火) 18:51:04ID:???
aaacafeは5.005
http://fh.aaacafe.ne.jp/cgiperl.html

iswebは5.6
http://help.www.infoseek.co.jp/isweb/?id=20601

Jcode.pmは度忘れしたけど、CGI.pmも入ってないとこがあったはず。
上の2つは古きよきなんとやら。
すでに引越ししてるだろうけど。
0728nobodyさん2007/01/09(火) 18:51:43ID:???
直リンしてもた、吊ってくる
07296502007/01/09(火) 20:30:53ID:???
>>654
アドバイスありがとうございます。
>>660
やはりそれが原因でしたエスケープで解消しました。
>>664
CGIでCGIファイルを書き出す必要性が頭悪すぎてよくわかりませんorz...
ですがいずれそういう必要性が無いとも限らないので作ってみようと・・・

たとえばホームページを春には桜吹雪の演出、夏は魚が泳ぎ、秋には紅葉が降り、
冬には雪が降るような演出をするとします。
このページそのものがHTMLでは作れそうに無いのでHTMLではなくCGIの
ファイルだとします。
そのページを季節に合わせるためFTPを使わずに更新するには更新用のCGIの
ページからCGIのファイルを更新すれば出来るみたいなー感じでいいのかなと。
でも、もっと簡単な方法がありそうですね。
0730nobodyさん2007/01/09(火) 20:49:40ID:???
>>729
もしかしてJavaScriptとCGIの違い分かってないのでは?
0731nobodyさん2007/01/09(火) 22:47:00ID:???
むかし、覚えた手の頃だったか。
処理速度あっぷのためにif分などの分岐をなくそうとcgiからcgiを書き出してたなぁ・・・。
今ならテンプレートを読み替えるだけで済むなぁ。
0732nobodyさん2007/01/09(火) 23:05:36ID:???
>>650の人は難しく考えすぎというか、なんというか。

当然、各季節用の js なり背景なりを用意しておいて、CGIの中に書かれた
CSS部分を書き換えて背景変えたり、script type="text/javascript" src="ここ" を書き換えて
呼び出す js を変えたり…という動作をするCGIは作れる。
CGIからHTMLを書き換えたり、別のCGIを書き換えたり、いろいろできることはできる。
やることは「テキストファイルを読んで内容を変更して書き出す」だけですから。

適当に「設定ファイル」を作ってそれを差し替えるだけで済むようにすればCGIを組むより楽ですよ。
「季節が変わる毎」程度だったら、もっとも簡単かもしれないのがローカルで書き換えてFTP(ry

でも、勉強のためにローカル環境でこういうのを作って遊んでみたくなったんだったら、
是非遊んでみるべきだと思う。
0733nobodyさん2007/01/09(火) 23:13:11ID:???
てか季節によってわけたいだけなら、JavaScriptだけでいいじゃん
0734nobodyさん2007/01/09(火) 23:32:53ID:???
>>729
>CGIでCGIファイルを書き出す必要性が頭悪すぎてよくわかりません

それはこちらのセリフなのだがw

第三者にやれと言われてやってるなら仕方ないが、自分で思い付いてやってるとしたら、
他にもっと勉強した方が良いと思うぞ。
リファレンスとかオブジェクト指向とかな。
0735nobodyさん2007/01/10(水) 01:36:37ID:???
>>729
cgiも所詮はただのファイルなのでパーミッションだけ注意すれば普通に作れる。
0736nobodyさん2007/01/10(水) 02:02:13ID:???
>>726
tuf8に変換する、utf8から変換するのが必要な場合は
ソースをちょっと書き換えないとだめよん。
0737nobodyさん2007/01/10(水) 02:08:30ID:???
>>735
物理的にファイルを生成するという意味ではそのとおり。

論理的なプログラグを生成する難易度はまた別だけどな。
0738nobodyさん2007/01/10(水) 10:52:10ID:???
HTML表示プログラムで分岐すればいいだけでは?
あるいは設定ファイルのようなものを外部で持っておいて
その設定ファイルを書き換えるとか。
0739nobodyさん2007/01/10(水) 15:22:36ID:???
>>727
モジュールがまったくない鯖があったはず
ぷららだったっけ?nifty?忘れた
0740nobodyさん2007/01/10(水) 16:08:45ID:???
便利なものは上手く使うとして、
仕組みを学び知ることは大事だよね
0741nobodyさん2007/01/11(木) 02:30:38ID:???
>>739
Niftyは確かに strict.pm も入れてないほどきれいさっぱりモジュールがない。
0742nobodyさん2007/01/11(木) 05:11:48ID:???
最近Perl/CGIを始めた者ですが、お聞きたいことがあります。

ifを使って、特定の条件を満たさないと隠しページへ行けない様にしたい
のですが、どういう関数を使えば良いかさっぱりわかりません。例えば、
あるページ上でテキストボックスに1と入力したら隠しページへ移動する
といった感じにしたいのですが、Basic認証のプログラムなどを参考にし
てみましたが、意味がわからず挫折しました。

隠しページはcgiファイルにして、直接URLを打ち込んでも閲覧できないよ
うにし、特定の条件をクリアした場合のみ閲覧できるようにしたいのです。
もちろんパーミッションは644にします。url_jump_toで最初試したのです
が、案の定駄目でした。

どなたか、条件をクリアしたらcgiファイル(パーミッション644)を閲覧
できる方法をよろしければ教えてください。房ですみません。
0743nobodyさん2007/01/11(木) 07:13:27ID:???
拡張子が.plのスプリクトの動かし方を教えてください!!!
ActivePerlをインストールしたのですが、そこからどすればいいのか分かりません・・
.plファイルをダブルクリックしてもコマンドラインが一瞬でて消えるだけです・・
どなたか教えてください!!!
0744nobodyさん2007/01/11(木) 07:52:48ID:???
プログラムが終了すればプロセスも終了する
DOS窓を開いて
> perl /path/to/hoge.pl
みたいに実行させたり hoge.pl が終了する部分に `pause` を書くとか。。
0745nobodyさん2007/01/11(木) 07:57:07ID:???
コマンドプロンプトの設定で閉じないようにできなかったっけ?
0746nobodyさん2007/01/11(木) 10:36:19ID:???
>>742
644は実行権限が無いから、プログラムとしては動かない
とはいえ拡張子がcgiだとhttp経由ではプログラムとしてしか見れないようになってるはず
つまり644で閲覧は現実的じゃない(できないことは無いだろうけど)

それよりもif文で分岐して2つのファイルのどちらかを読み込んで表示すればいいんじゃね?
0747nobodyさん2007/01/11(木) 12:13:26ID:???
PPM3 なんですが、Time::HiRes が search で見つからない orz
以前は PPM 経由でインストールできてたのにこんなことってあるんですね・・・
0748nobodyさん2007/01/11(木) 13:04:09ID:???
VC Express Edition じゃコンパイルでエラー … windows.h がパッケージに含まれてないとか .net つかえねぇ orz
0749nobodyさん2007/01/11(木) 13:04:29ID:???
>>747
あったとしても最新バージョンでないことも多いからね
0750nobodyさん2007/01/11(木) 13:13:49ID:???
>>748
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
0751nobodyさん2007/01/11(木) 13:14:15ID:???
>>747
リポジトリを追加
0752nobodyさん2007/01/11(木) 13:20:57ID:???
>>747
ppm3はモジュール名じゃなくてディストリ名で検索しないといけなかったような
つまりTime-HiResで
0753nobodyさん2007/01/11(木) 13:28:22ID:???
いつからかは知らんが少なくともperl-5.8.8ではTime::HiResは本体と一緒に
配布されてるので、いちいち別にとってきてインスコする必要はなくなった。
0754nobodyさん2007/01/11(木) 13:29:22ID:???
>750
ありあと・・・でも >751 さんの方法で見つかった m(_ _)m
0755nobodyさん2007/01/11(木) 14:23:06ID:???
>>746
ありがとうございます。
ファイルを読み込ますのですか...
requireを使用するんですかね?
0756nobodyさん2007/01/11(木) 14:54:00ID:???
>>755
いや、openとprintとcloseを使う。
必用であればforeachも使う。
0757nobodyさん2007/01/11(木) 14:56:34ID:???
まぁrequireでもいいけどね
0758nobodyさん2007/01/11(木) 15:08:39ID:???
foreachよりもwhileだね。
0759nobodyさん2007/01/11(木) 15:23:52ID:???
>>756-758
ありがとうございます!
ちょっと試してみますね。
0760nobodyさん2007/01/11(木) 15:27:03ID:???
759です。
少し疑問があるのですが、これってURLを直接打ち込まれたら
第三者に覗かれる恐れがありますよね?
0761nobodyさん2007/01/11(木) 15:28:49ID:???
なんのURL?
0762nobodyさん2007/01/11(木) 15:30:33ID:???
データファイルの URL じゃない?
データファイルは HTTP で見れる範囲より外に置くか、ランダムな文字列で生成された16文字ほどのディレクトリに置けばいい
でなきゃ DB にぶち込むとか・・・
0763nobodyさん2007/01/11(木) 15:32:42ID:???
それこそ拡張子cgiで644にして置いておけば?
0764nobodyさん2007/01/11(木) 15:36:39ID:???
>>761
説明不足でした。条件を満たしたら隠しページのファイルを読み取るよう
にしたかったのですが、隠したいページのURLを直接入力されたら終わり
だなあと思いまして。

>>762
HTTPで見れる範囲外ですか...なるほど。ちょっと調べてみます。
ランダムなディレクトリはrand関数でなんとかなりそうですが、
僕の知識ではまだまだできそうにありませんorz

>>763
cgiを644にするとファイルが読み取れなくなってしまうので
どうしたもんかと途方にくれています。

みなさんありがとうございます。
■ このスレッドは過去ログ倉庫に格納されています