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

【Perl】初心者コーナー Part12

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/04/27 23:17ID:1NNXdNsp
 
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。

CGIの質問は【CGIだけどなんか質問ある Pert 6 】
http://pc.2ch.net/test/read.cgi/php/1019561283/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4 】
http://pc.2ch.net/test/read.cgi/php/1012839651/

過去ログ、その他の役立ち情報は>>2-10を見よう。
 
0196nobodyさん02/05/02 01:16ID:???
>>188
サブルーチンを別ファイルに追い出して 呼出し側で use strict しているとか。
0197nobodyさん02/05/02 01:31ID:???
>>195
型グロブをやめれ。その必要も無いし。
0198nobodyさん02/05/02 01:49ID:???
>>195
敢えて型グロブを使うなら

×
my(*str,$size,$omit)=@_;

○
local *str = shift;
my($size,$omit)=@_;
0199あぼーんNGNG
あぼーん
0200nobodyさん02/05/02 04:20ID:Opu6NMoF
二度と出てくるな!!!!!!!!
0201nobodyさん02/05/02 05:10ID:???
>>199-200
おまえはカルシウム不足だから、煮干しでも喰っておけ(w
0202nobodyさん02/05/02 08:05ID:???
>>200
お前がな。
020319302/05/02 10:34ID:???
>>192
な。ちゃんといるだろ?
0204nobodyさん02/05/02 16:25ID:Opu6NMoF
>>203

お前を見てるとむかつくんだよ。死ね!!!!!!
死ね!

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


(省略されました・・全てを読むにはここを押してください)


0205nobodyさん02/05/02 16:26ID:???
掲示板とかのログファイルをダウンロード(閲覧)できないようにするにはどうしたら?
0206nobodyさん02/05/02 16:30ID:???
>205
・.htaccessで制限
・ログの拡張子を.cgiや.plにしてしまう
サーバーによって使えたり使えなかったりするけど。

ちなみにコーディングの話じゃないからスレ違いな。
0207nobodyさん02/05/02 16:37ID:???
>>205
せっかく書いちゃったので。

ログ入れてるディレクトリの .htaccess で
<Files "*.log">
Order allow,deny
Deny from all
</Files>
0208nobodyさん02/05/02 16:46ID:???
>>207
それをしてもCGIから読み込みできますか。?
0209nobodyさん02/05/02 16:52ID:???
>208
出来ない方法を教えられてると思ったか?
出来るよ。
0210nobodyさん02/05/02 16:52ID:???
>>188 >>189
調べたところrequireしたplファイル内のサブルーチンで
宣言するとエラーにならず、メインのルーチン内で宣言するとエラーになるようです。
021118302/05/02 16:56ID:lVIeVo5W
>>197-198
すいません。型グロブというのはよくわかりません。
Cのようなポインタ渡しをPerlで行う方法はありませんか?
021220702/05/02 17:00ID:???
>>208
試せば分かることじゃん。まず自分で試そうよ。
もちろん、悪意のあるアドバイスかもしれんので、apacheの<Files>
の意味を調べてからね。
http://japache.infoscience.co.jp/japanese_1_3/manual/mod/core.html#files

で、CGI内でのファイルの読み書きは、httpd(webサーバ)とは関係ないので、
いくらでもできるよ。
system("cat /etc/passwd");
とか。

0213nobodyさん02/05/02 17:03ID:???
       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       | >>209
       | うるせーモカ!うるせーモカ!うるせーモカ!
   ∧ ∧ |/\_________
   (,,゚Д゚)____.
   (つ/~ ※ ※ \
   /※ ※ ※ ※ \
>>205じゃないよ
0214nobodyさん02/05/02 17:07ID:???
>>211
↓調べてみた。型グロブ。
http://www5a.biglobe.ne.jp/~n_rieko/perl/1.htm

リファレンス渡しについては
perldoc perlref
0215nobodyさん02/05/02 18:39ID:???
ユーザに設定を任せた配列をコピーする場合、あればそのまま、
無ければデフォルト値をセットしたいのですが、変数で
よく使われるテクニック(?)が使えませんでした。

@week = qw(日 月 火 水 木 金 土);# ユーザ任せ
my @week = @week || qw(Sun Mon Tue Wed Thu Fri Sat);

これでは $week[0] に配列の要素数が入るだけのようでした。
それで考えたのは下記ですが、もっと簡単な方法ありませんか?

my @week = @week ? @week : qw(Sun Mon Tue Wed Thu Fri Sat);
021621502/05/02 19:01ID:???
すいません、「簡単」というか「普通はこうするよ」ってな
セオリー通りのやり方が知りたいのでした。宜しくお願いします。
0217nobodyさん02/05/02 19:07ID:???
>>215
@week or @week = qw(Sun Mon Tue Wed Thu Fri Sat);

変数だったら $var ||= $default; が普通かなー。
021821502/05/02 19:27ID:???
>>217 それ簡潔でいいですね、有難う御座いました。変数の方もスッキリしてます。
0219nobodyさん02/05/02 21:28ID:???
if ($in{'name'} =~ /★/) { $in{'name'}=~ s/★/☆/g; }
if ($in{'name'} eq "#pass") { $in{'name'} = "管理人 ★"; }

これでキャップと似たようなものになるはずなんですが、
パスを打って書き込むと「管理人 ★」になるはずですが
「管理人 ☆」になってしまいます。

どうすればいいのでしょうか?
022019702/05/02 21:35ID:???
>>211
型グロブがよくわらんって、あなた自分で使っているやつだよ。
local(*str,$size,$omit)=@_; って書いてる、*strの部分。
型グロブには my は使えんから、>>195のエラーが出るって
とこまで書かないとダメかいね。
しかし、なんでスカラ値渡すのに、リファレンスや、型グロブが
必要なのか謎。
0221nobodyさん02/05/02 21:39ID:???
>>219
パス付きでも何でもいいけど、
書き込んだ時にどういう順番で処理されるかをもう一度考えてみれ。

あと、if ($in{'name'} =~ /★/) { $in{'name'}=~ s/★/☆/g; }は
$in{'name'} =~ s/★/☆/g; で十分。
0222nobodyさん02/05/02 21:44ID:???
>>219
#passに★が含まれてるんじゃねーの?
0223nobodyさん02/05/02 21:47ID:???
>219
if ($in{'name'} eq "#pass") { $in{'name'} = "管理人 ★"; }
else{$in{'name'} =~ s/★/☆/g;}
としておけば問題は起こらないと思われ。
これでもまだ「管理人 ☆」になるなら、
1:プレビュー画面を挟んでいないか
2:この処理が2回以上行なわれるようになっていないか
を確認するべき。
022421902/05/02 22:25ID:???
219です。
再確認してみたら

if ($in{'name'} eq "#pass") { $in{'name'} = "管理人 ★"; }
if ($in{'name'} =~ /★/) { $in{'name'}=~ s/★/☆/g; }

と書かれており、上下を入れ替えて試してみたら正常に動作しました。
つまり、ただ自分がミスしてただけでした(w

>>221-223
質問に答えてくれてどうもありがとうございました。
0225nobodyさん02/05/03 01:45ID:???
初心者なんですが、これでまちがいないでしょうか?

if ($in{'name'}=~ /アホ/) { $in{'name'}= 'Dream ★'; }
elsif ($in{'name'}=~ /無能/) { $in{'name'}= '_gunzip'; }
elsif ($in{'name'}=~ /厨/) { $in{'name'}= '弐編'; }
0226pear ◆FRUIT8pk 02/05/03 02:45ID:???
>>225
あ、そのコードを使うなら、下に2行足さないとダメですね

elsif ($in{'name'}=~ /用(無|な)し/) { $in{'name'}= 'pear'; }
else{ $in{'name'}='その他名無し'; }
0227nobodyさん02/05/03 03:03ID:???
500KBほどのファイル300個に対して、ファイル検索をしたいのですが、
効率の良い方法はありませんか?
ファイルの一覧は、@filesに格納してあります。
入力された、$in{'word'}が含まれるファイルをリストアップしたいのです。
よろしくおながいします。
0228nobodyさん02/05/03 03:57ID:???
>227
楽勝だな!
0229nobodyさん02/05/03 07:36ID:???
>>227
{
    my $tmp;
    @files = grep {
        open  FILE, $_ or die;
        read  FILE, $tmp, -s FILE;
        close FILE;
        $tmp =~ /\Q$in{'word'}\E/;
    } @files;
}
0230nobodyさん02/05/03 07:38ID:???
{
    my $tmp;
    @files = grep {
        open  FILE, $_ or die;
        read  FILE, $tmp, -s FILE;
        close FILE;
        $tmp =~ /\Q$in{'word'}\E/o;
    } @files;
}

すまん、/oつけ忘れた。
0231nobodyさん02/05/03 07:57ID:???
全くの初心者です(このスレできくべきなのかもわからない)
でも作りたいものはあります。

まず、お手数かけて恐縮ですがこのサイトを見てみてください。
http://kooks-highhat.com/jpn_index.html
ここの「カラーピックアップシステム」では、何種類もの色と柄を
自由に組み合わせてオリジナルTシャツ作りのシュミレーションができる
ようになっています。
私は、こういったことをTシャツの色と柄ではなく、
「複数種のワイシャツ(写真画像)」と「複数種のネクタイ(写真画像)」を自由に組み合わせて
シュミレートできるようなシステムを作りたいと思っています。

しかしながら全くの初心者のため、どんな言語をどんなふうに使えばできるのか
さっぱりわかりません。
どなたか教えて下さいませんか?
とりあえず「すぐわかるPerl」とかで学べばよろしいのでしょうか?
0232nobodyさん02/05/03 08:37ID:???
>>231
PerlとGDで出来そうだけどね。
Javaとか使った方がパフォーマンスは良いかと。
0233nobodyさん02/05/03 08:39ID:???
>>231
それなら、CGIじゃなくてJavaScriptがイイと思う。
もしくは、Flash
0234nobodyさん02/05/03 08:55ID:6+RS1vf9
>>226
コテハンは死ね!
0235nobodyさん02/05/03 08:56ID:6+RS1vf9
( ´,_ゝ`) プ プ プ プ プ プ プ プ プ プ プ プ
0236nobodyさん02/05/03 09:04ID:6+RS1vf9
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
gdsdgsdgsdgsdgsdgsdgsdgsdgsdgsdgsdgsdgsdgsdgsdgsdgsdgsdgsdgsdgsdgs
xs5r6rs56rs56rs56rs56rs56rs56rs56jtx,7wz434w34w34w34w34w34w34w34w34w34w34,........
0237nobodyさん02/05/03 10:54ID:6+RS1vf9
程度ひくぅ(p
0238nobodyさん02/05/03 10:54ID:6+RS1vf9
このスレの1だが、あまりに程度が低いので終了とします。
0239pear@空気固定 ◆FRUIT8pk 02/05/03 10:55ID:???
>>234
うんうん
0240nobodyさん02/05/03 11:05ID:6+RS1vf9
とんでけ
0241nobodyさん02/05/03 11:09ID:6+RS1vf9
コテハンはみんな無能。
スキルの低い奴ばっかり
0242こてはん ◆W181N/6Q 02/05/03 11:22ID:???
呼んだ?
0243nobodyさん02/05/03 11:23ID:???
>>241
ばかばっkあ(藁
0244nobodyさん02/05/03 11:26ID:6+RS1vf9
コテハンはみんな無能。
スキルの低い奴ばっかり


0245nobodyさん02/05/03 11:48ID:KcX/dW60
サブルーチンの引数でハッシュの参照渡しってどのようにするのですか?
0246nobodyさん02/05/03 12:01ID:6+RS1vf9
コテハンなんてなぁ、所詮はしろーとなんだよ(ワラ
要するに初心者以下のレベルってことよ(ゲラ
おめーら小学校からやりなおせよ(ハゲワラ
0247nobodyさん02/05/03 12:08ID:???
>>245
foo(\%bar);
0248nobodyさん02/05/03 12:10ID:???
229=230=Mr.ohzaki?
0249nobodyさん02/05/03 12:11ID:6+RS1vf9
p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;
0250_gunzip02/05/03 12:21ID:???
>>246
しろーと か否かはレベルではなく、収入を得ているかどうかです。あしからず。
025124502/05/03 12:21ID:KcX/dW60
sub hashtest(\%){
my (%s) = @_;
my %test;

%h_test = ("1", "h1",
"2", "h2");

%$s = %h_test;
}

これでは駄目でしょうか?
025224502/05/03 12:24ID:KcX/dW60
訂正:
my %test; -> my %h_test
0253nobodyさん02/05/03 12:27ID:???
>>251
my ($s) = @_;

リファレンスは常にスカラー値。
0254_gnuzip02/05/03 12:33ID:???
>>250
出てくるな。ヴォケ
0255nobodyさん02/05/03 12:36ID:6+RS1vf9
>>254
はげ指導医
0256nobodyさん02/05/03 12:37ID:6+RS1vf9
>>254        
激しく同意
0257nobodyさん02/05/03 12:59ID:6+RS1vf9
次は>>226がターゲットです。
0258_nobodyさん02/05/03 13:17ID:???
>>254
それ、オレのコテハンだったのに・・・
もういいもん。
0259_gnuzip02/05/03 13:18ID:???
煽り専用の共用コテハンかと思うて使っただけなのだ。
すまど
0260_nobodyさん02/05/03 13:22ID:???
>>259
じゃ共用でOKです。
0261nobodyさん02/05/03 13:43ID:6+RS1vf9
┌──────────────────────―─―┐
│□ ■2ch BBS . − Microsoft Internet Explorer     囗曰区| |
├───────────────────────┬─┤
│ファイル(F) 編集(E) 表示(V) お気に入り(A) モナー(∀)   |::田|
├────────────────┬──────┴─┤
| ←     →     ×     圍    合  |   Q          》|
| 戻る   進む   中止  更新  ホーム |  検索          |
├────┬───────────┴──┬─┬───┤
│アド レス(D) | □http://www.2ch.net/2ch.html. . |▼|⇒移動|
├────┴───┬┬─────────┴─┴──┬┤
│                ├┤                      ├┤
|2ちゃんねる..    ||                      ||
│2chの入り口..    ||                      ||
│2ch総合案内┌───────────────────────┐
│.           | 2ch.                                    |
│        ├───────────────────────┤
│おすすめ   | 1は不正な処理を行いました 。         ┌───┐  |
│モナー    | 残念ですが1の人生を               | 終了.... |  |
│        | 終了させてあげて下さい。(推奨).     └───┘  |
│        |                                  |
│        └───────────────────────┘
│特別企画        ├┤                      ├┤
├┬──────┬┼┼┬────────────┬┼┤
├┴──────┴┴┴┴──┬─┬─┬─────┴┴┤
│□ エラーが発生しました    |  |  |●インターネット |
└─────────────┴─┴─┴───────┘
0262nobodyさん02/05/03 15:29ID:???
http://cgi.members.interq.or.jp/www1/q-mail/gh/img-box/img20020502225058.jpg
0263nobodyさん02/05/03 15:50ID:7hc2ohlW
タグの中を英字を大文字→小文字にするにはどうすればいいんでしょうか?
ただ、<img src="image.png">などの場合の""の中は変換したくないのですが。
0264nobodyさん02/05/03 15:57ID:???
>263
すっごいめんどうくさい正規表現を組む。
0265nobodyさん02/05/03 16:19ID:???
>>263
$str = join '', map {
    /^</ and $_ = join '', map { /^"/ or $_ = lc; $_ } split /("[^"]*")/; $_
} split /(<[^>]*>)/, $str;

$strにHTML文書を入れれ。
0266nobodyさん02/05/03 16:21ID:???
>265
alt='この中では"が使えます'
が入ってた場合は?
0267nobodyさん02/05/03 16:43ID:???
>>266
$str = join '', map {
    /^</ and $_ = join '',
        map { /["']$/ or $_ = lc; $_ } split /(["'])([^\1]*\1)/; $_
} split /(<[^>]*>)/, $str;

こんな感じかな? 適当スマソ。
0268nobodyさん02/05/03 18:01ID:7wVKBbUQ
#! c:/perl/bin/perl

print "Content-type: text/plain\n\n";
print "Hello Perl !";

これをローカルで試そうとして、http://127.0.0.1/chapter1/1.cgi
と入力しました。が、なぜかダウンロードしてしまいます。(保存するか聞いてくる)
text/htmlにするとちゃんとブラウザに表示されます。
解決策教えてください。
0269nobodyさん02/05/03 18:06ID:???
どういう風に解決したいのかがわからん・・・・
0270nobodyさん02/05/03 18:06ID:???
>>268
いろんなブラウザで試してみた? IEだとたまにそうなる。
0271nobodyさん02/05/03 18:13ID:7wVKBbUQ
>>269
ダウンロードせずに、結果をブラウザで表示させたいんです。

>>270
Netscape6で確かめたらちゃんとできました。Opera6.01だとだめでしたが。
どうもありがとうございました。
0272nobodyさん02/05/03 19:17ID:???
ファイル情報を取得するにはどうすれば良いですか?
0273nobodyさん02/05/03 19:24ID:???
>>272
ファイル情報って例えばドンナンデスカ
0274cova02/05/03 19:26ID:???

スカラ変数 = (stat(ファイルハンドル または ファイル名))[インデックス番号];

---------------------------------------------------------------------

インデックス番号

0 → ファイルシステムのデバイス番号
1 → iノード番号
2 → ファイルのモード
3 → ハードリンクの数
4 → ファイル所有者のユーザID
5 → ファイル所有者のグループID
6 → デバイスID
7 → ファイルサイズ(バイト単位)
8 → 最終アクセス時間
9 → 最終変更時間
10→ iノード変更時間
11→ ファイルシステムI/Oの最適ブロックサイズ
12→  割り当て済みのブロックサイズ
0275cova02/05/03 19:27ID:???

data.datというファイルの最終アクセス時間を取得する場合は

$accesstime = (stat(data.dat))[8];

という感じ
0276nobodyさん02/05/03 19:29ID:7hc2ohlW
>267
それだと Foo="Bar" の組み合わせが複数あると最初の一つしかできませんでした。
というか自分がその事書いてなかった。。逝ってきます。
0277nobodyさん02/05/03 19:32ID:???
>>275
Web上のファイル情報は取得できないのでしょうか?
0278nobodyさん02/05/03 20:01ID:???
>>276
ごめんなさい……。
直すついでにPerlメモの『HTMLタグの正規表現』(のコメント抜き)を取り入れてみました。
ttp://www.din.or.jp/~ohzaki/perl.htm#HTML_Tag

my $tag_regex_ = q{[^"'<>]*(?:"[^"]*"[^"'<>]*|'[^']*'[^"'<>]*)*(?:>|(?=<)|$(?!\n))};

$str = join '', map {
    /^</ and $_ = join '',
        map { /["']$/ or $_ = lc; $_ } split /(["'])(.*?\1)/s; $_
} split /(<$tag_regex_)/o, $str;

で、試してみたら <!DOCTYPE まで小文字になって鬱。
0279nobodyさん02/05/03 20:07ID:???
>>278
<!DOCTYPE

って、必ず1行目だっけ?だったら、最初の1行目だけスキップすれば?
0280nobodyさん02/05/03 20:20ID:???
>>279
xml宣言もあるのでそうとも限らない.
まあ指摘の通り>>278に特殊な場合の処理を足していけばいいだけだね.
0281nobodyさん02/05/03 20:22ID:???
>>280
カキコしたあとで気づいた…
1行目に記述されてても、複数行に渡って書いているのもあるな…
0282nobodyさん02/05/03 20:40ID:???
>278-281
うまく動きました。ありがとうございました。
あと、<!DOCTYPEは削除してしまうので特に問題ないです。
0283nobodyさん02/05/03 21:05ID:vg/qOBA6
初めまして。
さっそくですが、質問です。
これはどういういみですか?第2引数がわかりません。
push(@sqcookie, "${name}_${value}");
0284nobodyさん02/05/03 21:05ID:???
http://と打つと自動的にリンクされるようにしたいのですが(本文の変数は$FORM{'comment'} )

$url = '([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)';
$FORM{'comment'} =~ s/$url/<a href=\"$url\" target=\"_top\">$url<\/a>/g;

こうしても上手くリンクされますか?
028528402/05/03 21:06ID:???
誤字

こうしても上手くリンクされますか?
↓
こうすると上手くリンクされますか?
0286nobodyさん02/05/03 21:09ID:???
>>284

そのコードで動かしてみればいいじゃん
0287nobodyさん02/05/03 21:11ID:???
>>277

ファイル情報って具体的にどういう情報を知りたいんだYO
0288nobodyさん02/05/03 21:11ID:???
>>286
おれもそうおもったw
0289nobodyさん02/05/03 21:13ID:???

$scalar = "10";

$scalar += 10;

とやらないで,いきなり

$scalar += 10;

とやるとスカラ変数'$scalar'にはundef値である0が代入されていますが

このundef値って何て読むんですか?アンダフ値でいいの?
029028402/05/03 21:21ID:???
284です。
実際に試してみましたが、無理でした・・・。

どうすればURLが自動リンクされるのでしょうか?
0291nobodyさん02/05/03 21:22ID:???
>>289
あんでふじゃない?
定義されていないって意味
0292nobodyさん02/05/03 21:29ID:???

なるほど アンデファイン undefine の略か

じゃあ人前で使うときはアンデファインでいいや
0293nobodyさん02/05/03 21:29ID:???
>284
後方参照($1とか$2とか)は知ってる?
029428402/05/03 21:33ID:???
>>293
すみません。
全然知りません。
KENT WEBのCGIにはあったけど・・・
0295nobodyさん02/05/03 21:34ID:???
undefinedだろ ボソ
■ このスレッドは過去ログ倉庫に格納されています