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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/05/30(水) 11:34:01ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

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

前スレ http://pc11.2ch.net/test/read.cgi/php/1171102883/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0487nobodyさん2007/07/18(水) 19:42:48ID:???
その前に質問の仕方を学んだらどうだ
0488nobodyさん2007/07/18(水) 19:44:38ID:U8dvSnpW
mod_perl2 + Apache2.2でセッション管理したい場合、
CGI::Session、Apache::Session(mod_perl2に対応していない?)
以外の方法ってありますか?
自前で実装になる?
0489nobodyさん2007/07/18(水) 19:45:15ID:???
perlとかプログラミングをもっと基礎から勉強してレベル上げてから来い。
0490nobodyさん2007/07/18(水) 20:22:03ID:???
>>486
なんでいきなり謝ってんの?
perlは日本語の勉強してからにしたほうがよいよ
0491nobodyさん2007/07/18(水) 20:23:17ID:???
>>489
初心者スレってスレタイが良くないよな

プログラミングは初心者がやるものではない
0492nobodyさん2007/07/18(水) 20:38:08ID:???
>486
C、C+、tcl、lisp、sh、perl、PHP、java、ruby、ほか好きな言語、スクリプトで
open か fopen でもしていじってくださいな
04934862007/07/18(水) 20:45:04ID:???
>>487,>>489,>>490
血ヘド吐いて死にさらせ

>>492
ありがとうございましたm(_ _)m
0494nobodyさん2007/07/18(水) 21:10:34ID:???
open関数も知らない馬鹿だったのか
0495nobodyさん2007/07/18(水) 21:21:38ID:???
>perlは日本語の勉強してからにしたほうがよいよ
ワロスww
0496nobodyさん2007/07/18(水) 21:33:02ID:???
はいはい自演乙
0497nobodyさん2007/07/18(水) 22:11:24ID:???

> 1: 自分はこういう事がしたい。
> 2: それでこんな風にやってみたが・・・
> 3: こんなエラーが出て上手く行かなかった。
0498nobodyさん2007/07/18(水) 22:21:31ID:???
>>497
結局open関数が知りたかっただけかw
0499nobodyさん2007/07/19(木) 02:03:02ID:???
( ゚д゚)…

>>495は、>>490が日本語云々言ってるのに「よいよ」って書いてるのにつっこんでんのに、
自演とか言ってる>>496は何だ?

>>497は質問者に>>1嫁と言っているだけだと思うのだが、>>498のつっこみは何だ?

何だ( ゚д゚)何だ(゚д゚ )何なんだ(゚д゚)???
0500nobodyさん2007/07/19(木) 02:27:41ID:???
この板も強制ID欲しいよ。
0501nobodyさん2007/07/19(木) 13:11:12ID:???
>>500
Andy使えば?
0502nobodyさん2007/07/19(木) 13:16:44ID:???
>>501
Auの携帯ブラウザのこと?
それを使うと任意IDのこの板が強制IDで見れるの?

なんじゃそりゃ。
0503nobodyさん2007/07/19(木) 16:53:55ID:???
>>502
dat読み込みの仕様ががまだ不十分だから、今なら見れるよ
0504nobodyさん2007/07/19(木) 17:23:44ID:???
そもそもdatにIDは書かれていないわけだが。
http://pc11.2ch.net/php/dat/1180492441.dat
0505nobodyさん2007/07/19(木) 20:27:45ID:???
正規表現で、対象変数の中の値が「ひらがなだけ」なら真とする if 文は
どのような表記になるのでしょうか?
この場合「ー」や「〜」も含めたいです。
0506nobodyさん2007/07/19(木) 20:29:49ID:???
文字コードで範囲指定すりゃいいだけですね
で使うのは !~ を使ってください
0507nobodyさん2007/07/19(木) 20:38:30ID:???
こうかな?

if( $test !~ '^[\82\9e-\82\ef]+$' )
{
//ひらがなの場合
}
0508nobodyさん2007/07/19(木) 20:41:15ID:???
!~使うなら^[]は要らないんじゃない?
わからん
0509nobodyさん2007/07/20(金) 01:10:35ID:???
// (笑)
0510nobodyさん2007/07/20(金) 10:31:22ID:???
あるあるwww
0511nobodyさん2007/07/20(金) 17:57:06ID:???
>>505
つ ttp://www.din.or.jp/~ohzaki/perl.htm#Character
EUCかSJISの場合
05125052007/07/20(金) 21:55:38ID:???
>>511
ネ申降臨!
一発で性交だったよありがとう!!
0513nobodyさん2007/07/20(金) 22:12:15ID:???
困ったときにそのサイト見るのは常識だろ。
0514nobodyさん2007/07/21(土) 20:05:13ID:???
どこの国の常識だよww
0515nobodyさん2007/07/22(日) 02:05:22ID:???
テンプレにあるぐらいなんだから、こことム板のスレでは常識に近いんじゃないか。
0516nobodyさん2007/07/22(日) 10:54:01ID:???
質問

サーバーで実行されることを想定して
作られているCGIゲームを、自分の
windowsのパソコン上で一人で実行したいのですが、
perl+アパッチ+アクtィブパール
という構成になるのでしょうか?
アパッチは必須ですか?
0517nobodyさん2007/07/22(日) 11:16:44ID:???
AN HTTPDでも使っとれ
0518nobodyさん2007/07/22(日) 11:21:20ID:???
PerlとActivePerlの両方って何?
0519nobodyさん2007/07/22(日) 11:32:45ID:???
>>518
もし言ってることが変だなーと思ったら
遠慮なくいってくれたほうが早いです
0520nobodyさん2007/07/22(日) 11:32:56ID:???
きっと使い分けたいぐらいの凄腕なんだろ
0521nobodyさん2007/07/22(日) 12:30:49ID:???
perlで、静止画を少しずつ(ドット単位orピクセル単位で)左右上下に動かしたりできますか?
特に、ImageMagickとかでそういう機能ありますか?
0522nobodyさん2007/07/22(日) 13:28:00ID:???
ここはエスパーの集う場所ではありませんよ?
0523nobodyさん2007/07/22(日) 14:12:18ID:???
超ヤサシイ俺が。
初心者はAN HTTPDとActive Perlでいいだろ
つーかぐぐれ
0524nobodyさん2007/07/22(日) 14:27:23ID:???
あまりの優しさに全米が感動した
0525nobodyさん2007/07/22(日) 15:17:51ID:???
>>521
超ヤサシイ俺が。
左右上下に動かすって、ボタンを押すたびに動かす事は出来るかもな。
基本的にPerlが動くのはボタン押したりアドレス開いたりした直後だけ。
つーかCGIの入門書でも嫁。
0526nobodyさん2007/07/22(日) 16:26:43ID:???
>>525
いや、それでもいい。
フォームでボタン押してパラメタ送信、受け取ったら画像が右に少し移動してるって状態で十分。
空白文字分を入れて右にずらしたりはできるけど、上下左右に細かく描画位置を変えれる方法が知りたす。
0527nobodyさん2007/07/22(日) 16:46:42ID:???
>>526
超ヤサシイ俺が。
テーブルで囲んで上下左右にセルを用意して透明画像(幅、高さ指定して)を挿入すりゃいいんじゃね?
それか、GD使って元画像を編集するか・・・。マンドクサイな。

ってかなんでCSS+JavaScriptでやらねえのか、かなり疑問。
CGIの出力なんてHTMLなんだから、そこをDynamicHTMLにしちゃいけないって決まりはないんだし。
05285182007/07/22(日) 16:52:24ID:JZmpPZ9R
ActivePerlはPerlインタプリタの1つであって、
ActivePerlと別途にPerlが必要、ってのは何かおかしくないか?

と思ってたのだけど、俺が勘違いしてたかもしんない。
0529nobodyさん2007/07/22(日) 16:56:58ID:RK22sjeK
配列の全ての要素に対して一定の処理をしたい場合、例えば要素の全てを2倍したいときなんかに、
foreachを使わない方法があったと思うのですが、忘れてしまいました。
foreach(@list){$_*=2;}
以外の、foreachを使わない、全ての要素にアクセスする関数か何かあったと思うのですが・・・教えてエロイ人。お願いいたします。
0530nobodyさん2007/07/22(日) 17:13:41ID:???
map
05315292007/07/22(日) 17:20:08ID:???
>>530
ありがとうございました〜!!!!
0532nobodyさん2007/07/22(日) 18:24:04ID:???
>>527
CSSとJavaScriptもいいんだけど、俺の知り合いが携帯しか持ってない奴ばっかりで。
携帯じゃCSSもJavaScriptも無理だから。

つーか超ヤサシイもまいは超ヤサシイ俺という名前なのか気になた
0533nobodyさん2007/07/22(日) 18:42:34ID:???
超ヤサシイ俺が。は1人じゃないよ。
中野一人が言うんだから間違いない。
0534nobodyさん2007/07/22(日) 19:39:53ID:???
うん、超ヤサシイ俺のひとりだけど別人だよ。
0535nobodyさん2007/07/22(日) 22:18:20ID:???
俺も、超ヤサイ俺のひとりだけど別人だ
0536nobodyさん2007/07/23(月) 15:42:25ID:???
cryptに関する質問というか、えらいコーディングミスが見つかったので…

パスワードをcryptで暗号化して、ファイルに保存しておいたものを、$CRYPTとして読み出して、
フォームから入力された$form{'pass'}と一致するかをチェックしようとしたところ、
$CRYPTが空だと、$form{'pass'}がどんな値でも通ってしまう。

if (crypt($form{'pass'}, $CRYPT) eq $CRYPT) {
 # $CRYPTが空だと、$form{'pass'}がどんな値でも通ってしまう。
}

こういうのは

if (crypt($form{'pass'}, $CRYPT) eq $CRYPT) && ($CRYPT)) {
 # $CRYPTが空だと、$form{'pass'}がどんな値でも通ってしまう。
}
0537途中で書き込んじゃったスマソ2007/07/23(月) 15:43:52ID:???
cryptに関する質問というか、えらいコーディングミスが見つかったので…

パスワードをcryptで暗号化して、ファイルに保存しておいたものを、$CRYPTとして読み出して、
フォームから入力された$form{'pass'}と一致するかをチェックしようとしたところ、
$CRYPTが空だと、$form{'pass'}がどんな値でも通ってしまう。

if (crypt($form{'pass'}, $CRYPT) eq $CRYPT) {
 # $CRYPTが空だと、$form{'pass'}がどんな値でも通ってしまう。
}

こういうのは、以下のような対策でいいと思いますか?

if ((crypt($form{'pass'}, $CRYPT) eq $CRYPT) && ($CRYPT)) {
 # $CRYPTが空だと、通らないはず。
}
0538nobodyさん2007/07/23(月) 15:55:07ID:???
>>537
その対策だとパスワードに「0」を設定されると問答無用でfalseになりますね。
$CRYPT eq "" のほうがいいかも?

というかそれ以前にif( crypt($form{'pass'}, $CRYPT) eq $CRYPT )で常にtrueになるのが変です。
本当にやってることはそれだけ?
0539nobodyさん2007/07/23(月) 16:29:20ID:???
>>538
cryptを通した後の暗号化された文字列$CRYPTが、一文字の"0"になるってことはあるんでしょうかね。

if (($form{'id'} eq $ID) && (crypt($form{'pass'}, $CRYPT) eq $PASS)) { }
みたいにIDも照合してます。
0540nobodyさん2007/07/23(月) 16:29:38ID:???
環境によってはcryptにおかしな値を食わせると空文字列が返ってくる
それともundefだったかな?
0541nobodyさん2007/07/23(月) 16:37:49ID:???
0になりませんね。
蛇足は間違えてるし本題はなんの役にも立たないしで恥ずかしいので無視してください。
0542537=5392007/07/23(月) 16:41:51ID:???
>>540でFAだとすると、結構怖いですね…ありがとうございました。
ちゃんと、値のチェックを行っていなかった自分に反省…
0543nobodyさん2007/07/24(火) 09:20:42ID:???
はじめまして。

my %file = map { chomp; $_ } <f>;###こんな感じで一旦chompして改行取っ払って、、、
delete $file{'$blogFileName'};###こんな処理をしたあと、、


また改行をくっつけてもどしたいのですが、どうすればいいか教えていただけませんか。
0544nobodyさん2007/07/24(火) 09:53:00ID:???
join
0545nobodyさん2007/07/24(火) 09:58:11ID:???
>>544
ありがとうございます
言葉足らずですいません

一番最後の要素にも改行コード付けて戻したいんですが、どうすればいいでしょうか…
0546nobodyさん2007/07/24(火) 10:26:09ID:???
文字列連結演算子
0547nobodyさん2007/07/24(火) 10:30:34ID:???
てかデータ構造を示せ
あと連想はやめろ
0548nobodyさん2007/07/24(火) 11:26:52ID:???
map { print f "$_$/" } %file;
0549nobodyさん2007/07/24(火) 11:28:33ID:???
map { print f $_,$/ } %file;
0550nobodyさん2007/07/24(火) 12:03:01ID:???
map { print f $_,$/ } %file;
0551nobodyさん2007/07/24(火) 18:09:32ID:???
smaf { print f $_,$/ } %file;

とかじゃダメ?
0552nobodyさん2007/07/24(火) 18:56:17ID:???
while(my ($name, $value) = each %file){
print f $name, "\n", $value, "\n";
}
0553nobodyさん2007/07/24(火) 20:59:43ID:???
DBI->connect を使ってポスグレにアクセスしています。
正しくないIDやDB名を入れた場合はきちんと
DBI::errstr にそのエラー文言が入るのですが、
正しくないパスワードを入れた時は何故かそのまま通っちゃいます。
帰ってきた中身を見ても、パスを入れた時、入れない時でどちらもハッシュが入っています。
これは不可思議な事に何故か両方繋がってしまっていると見た方がいいですよね??
0554nobodyさん2007/07/24(火) 21:48:16ID:???
>>553
ポスグレの設定で、Perl動かしてるマシンをポスグレ鯖が無条件でトラストしてるんジャネ?
0555nobodyさん2007/07/24(火) 22:06:21ID:???
>>554
ありがとうございます。
セキュリティをかなりガチガチにしているところなのでちょっと考えにくいような。。。
パスワードの値を変更したらハッシュの値も微妙に変わりますがこれは仕様でしょうか?
何にも入れない時と入れた場合で±8くらい差があります。
文字数でハッシュも変わる!?
0556nobodyさん2007/07/24(火) 22:35:34ID:???
>>555
DBI->connectの復帰値はデータベースへの接続ハンドル(接続者の識別コードみたいなもの)なので、
接続毎に違う値になる事もあるし、disconnect → 再connect で同じ番号が割り当てられないとは限らない。
ってか、値自体に意味はない。(0ならエラーって意味以外は人間様が解析するべき内容じゃない。)

レン鯖でも、ポスグレがlocalhostを無条件トラストしてる事は十分考えられる。
コンソール前に座って、コンソールの管理者ログインパスワード知ってても
DBパスワード知らなきゃメンテナンス出来ないんじゃ、管理コスト高くつくからな。

その状態で、ポスグレ鯖とHTTP(CGI)鯖が同じマシンだったら、
localhost(=HTTP(CGI)鯖)は無条件トラストされてるから、ユーザー名さえあってりゃコネクトできる。

試しにテーブル作ってダミーデータぶち込んで、それを表示するプログラムを
パスワードありなし両方で動かしてみれば良いんジャマイカ?

それでパスワードなしで繋がっちゃったら鯖缶に問い合わせれば良いと思われ。
0557nobodyさん2007/07/24(火) 22:44:50ID:???
とても参考になる詳細なご説明ありがとうございます!
ポスグレ鯖とWeb鯖は同一PCです!
さっそく今からためしにテーブル作ってデータぶちこんで表示させてみます!
0558554=5562007/07/24(火) 22:51:24ID:???
>>557
役に立ててよかった。

漏れ、ポスグレ+アパッチの鯖缶兼CGI開発やってるから多少は分かるが、
鯖缶としてはシロウトに近いんで(テスト用2台、本番用1台しかやってない)
切り分けぐらいまでしか役に立てない。スマソ。

もし設定やらについて必要ならポスグレスレででも聞いてみてくれ。
0559nobodyさん2007/07/24(火) 23:13:21ID:???
>>558
試してみたところ、仰せの通りパス無条件設定でした。
原因が分かってすごく安心してます。
ポスグレスレの方にもこれから常駐させて頂きます!
テスト用2台と本番用1台って十分すごいですw
助かりましたありがとうございます!
05605432007/07/25(水) 21:31:06ID:???
>>546-552
遅くなりましたがありがとうございました
0561nobodyさん2007/07/26(木) 10:17:46ID:6zNTEP+l
複数の人間でカレンダーにスケジュールを書き込めるcgiを作りたいのですが、、
それぞれがラジオボタンで○・×などを選択して、一つのページに結果を表示させたいです。
初心者なので調べても、文字の表示程度の簡単なことしかできなくて困っています。。
どなたか土台になるものを作って頂けませんか。
工程をご教授していただけるだけでもあり難いです。よろしくお願いします。
0562nobodyさん2007/07/26(木) 11:32:11ID:???
ググれ
0563nobodyさん2007/07/26(木) 11:47:35ID:???
例えば、エラー個所にあたると
エラーメッセージ at ./test.pl line 123
とか出ますが、どこから呼ばれてエラーが出てるのか
(サブルーチン又はrequireのスタック?)わかる方法はありますか?

例えば
hoge.pl line 234 で呼ばれて
fuga.pl line 564 で呼ばれて
test.pl line 123 でエラー
…みたいな
0564nobodyさん2007/07/26(木) 11:53:05ID:???
>561
予算を述べよ
0565nobodyさん2007/07/26(木) 12:06:15ID:???
>>561
スレ違い
http://pc11.2ch.net/test/read.cgi/php/1157787046/
0566nobodyさん2007/07/26(木) 13:14:45ID:???
__LINE__
__FILE__
0567 ◆lVJAPUTeX. 2007/07/26(木) 18:48:35ID:???
ハニャーン

>>563
コード:
use Carp qw[confess];
foo();
sub foo { bar() }
sub bar { baz() }
sub baz { confess "moemoe" }

実行結果:
moemoe at - line 5
main::baz() called at - line 4
main::bar() called at - line 3
main::foo() called at - line 2

参考サイト:
http://perldoc.perl.org/Carp.html
0568nobodyさん2007/07/26(木) 20:22:43ID:???
KCatch
0569nobodyさん2007/07/26(木) 20:56:44ID:Im3nlar7
CGIで入力された内容を,ユーザ個人のファイルを書き込む処理でちょっと悩んでいます.

WWWサーバはwww-dataユーザ権限で動いているのですが,パスワードなどの認証を行った上で,
そのCGIを呼び出したユーザ個人の持っているファイルに中身を書き込みたいのです.

su などを呼び出してなんとかするという方法は思い付くのですが,なんかもっと簡単にする方法はないでしょうか?

; というか,以前どこかでそういう目的のモジュールを見掛けた気がするのですが,思い出せなくて困っているのが真相なんですけど.
0570 ◆lVJAPUTeX. 2007/07/27(金) 00:05:00ID:???
うぐぅ。

>>569

作戦1.
ファイルを書き込む wrapper を作成して、setuid root する。
(この wrapper はその中で対象のユーザに setuid する。
十分注意して作成しないとセキュリティホールになる。)
CGIプログラムからはwrapperを呼び出す。

作戦2.
FTPサーバが動いていれば、入力されたIDとパスワードを使って接続する。

作戦3.
CGIプログラムでは一時ファイルを作成するまで。
定期的にroot権限で動作するプログラムで各ユーザごとにコピーする。

作戦4.
ウェブサーバとして動作するプログラムを作成し、rootで動作させる。
これも十分に注意しないと危険。
0571nobodyさん2007/07/27(金) 22:07:36ID:???
>>569
そのファイルのモードを666にしておく。
おまえさんが提示した制約は逸脱していない。
0572nobodyさん2007/07/28(土) 00:47:16ID:AqKfoxxh
test.cgiにperlのバージョンを表示するコードを書きました。
しかし、これをブラウザからアクセスしてもInternal Server Errorになります。

#!C:/perl/bin/perl

$ perl -v


kentwebの掲示板は正常に動きますので、perlのインストール事態には問題ありません。
どこを手直ししたらブラウザにperlのバージョンを表示できるでしょうか?
0573nobodyさん2007/07/28(土) 00:56:28ID:???
>>572
ちょっと吹いた
0574nobodyさん2007/07/28(土) 02:26:06ID:???
どこから突っ込んでいいかってレベルじゃねえぞ
0575nobodyさん2007/07/28(土) 02:49:38ID:???
プロンプトが一番ツボに来た。
0576nobodyさん2007/07/28(土) 03:09:03ID:???
>>572
Perlで実行すると決めたからには、
スクリプトはperlの言語に従って書かなければいけない。

print `perl -v`;

と書けば表示できると思う。

その前にちょっと訊きたいけど、コマンドプロンプトを知っているかい?
ちょっと古めかしいけど、perlと付き合うには、もってこいの奴なんだ。
知らなかったら、ぜひ、このサイトを見て欲しい。

http://cmd-pro.com/

そして、コマンドプロンプトで

perl -v[ENTER]

([ENTER]はエンターキーを表す。)
を入力すれば、バージョンを知ることができる。
どうだいイカしてるだろ?
0577nobodyさん2007/07/28(土) 04:09:46ID:AqKfoxxh
ありがとうございます。
おかげさまで無事バージョンをしることができました。

PHPからはじめて、今日からPERLの勉強をはじめたばかりですが、
このスレのお世話になります。
0578nobodyさん2007/07/28(土) 04:51:04ID:???

    ___
   /     \
 / ⌒  ⌒ ヽ       _________
/  (●)  (●) |     /
| ::: ⌒(__人__)⌒:: |   <   ま、お断りしますけどね
|      |r┬|   i     \_________
\    ー―' _/.   | |            |
  ⌒ヽ ヽノ ヽ     | |            |
/   ノ::::::::::::::::::l\.   | |            |
ヽ  `ー― ⌒、ヽ    |_|______|
  ー――、_ヾ⌒ヽ〜== | |  |
0579nobodyさん2007/07/28(土) 16:42:17ID:bc1YYpxV
>>570

FTPサーバ経由は目から鱗でした.LWPとの組合せで簡単に実現できそうですね.もう少し考えてみます.
0580nobodyさん2007/07/28(土) 17:13:28ID:FChki3sW
PHPからPerlに移行してくる奴が出てくるって、
また時代が変わってきたな
0581nobodyさん2007/07/28(土) 18:50:02ID:AqKfoxxh
いまだにperlでcgi組んでくれって人がいるんですよ。
なのでperlはじめてみました。
0582nobodyさん2007/07/28(土) 20:18:21ID:???
> いまだにperlで
失礼な!プンスコ!
0583nobodyさん2007/07/28(土) 20:51:25ID:FChki3sW
PHPがファイナルファンタジーなら
Perlはドラクエみたいな感じだな。なかなか次期バージョンが出ない。
Rubyは

板違いスマソ
0584nobodyさん2007/07/28(土) 21:06:05ID:???
数字が書かれているファイルを開いて、その数字をインクリメントして上書きしたいと思います。

open FH, "count.txt";
$count = <FH>;
close FH;

open FH, "+>$ct";
print FH ++$count;
close FH;

こんな感じなのですが、2回openせずにできますか?
0585nobodyさん2007/07/28(土) 21:23:42ID:???
perl -i
0586nobodyさん2007/07/28(土) 21:38:15ID:???
>>584
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq5.html#i_still_don_t_get_locking__i_just_want_to_increment_the_number_in_the_file__how_can_i_do_this
■ このスレッドは過去ログ倉庫に格納されています