Perlコーディング初心者質問スレ Part 55
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/05/30(水) 11:34:01ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >>2-10
前スレ http://pc11.2ch.net/test/read.cgi/php/1171102883/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
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:???超ヤサシイ俺が。
左右上下に動かすって、ボタンを押すたびに動かす事は出来るかもな。
基本的にPerlが動くのはボタン押したりアドレス開いたりした直後だけ。
つーかCGIの入門書でも嫁。
0526nobodyさん
2007/07/22(日) 16:26:43ID:???いや、それでもいい。
フォームでボタン押してパラメタ送信、受け取ったら画像が右に少し移動してるって状態で十分。
空白文字分を入れて右にずらしたりはできるけど、上下左右に細かく描画位置を変えれる方法が知りたす。
0527nobodyさん
2007/07/22(日) 16:46:42ID:???超ヤサシイ俺が。
テーブルで囲んで上下左右にセルを用意して透明画像(幅、高さ指定して)を挿入すりゃいいんじゃね?
それか、GD使って元画像を編集するか・・・。マンドクサイな。
ってかなんでCSS+JavaScriptでやらねえのか、かなり疑問。
CGIの出力なんてHTMLなんだから、そこをDynamicHTMLにしちゃいけないって決まりはないんだし。
0528518
2007/07/22(日) 16:52:24ID:JZmpPZ9RActivePerlと別途にPerlが必要、ってのは何かおかしくないか?
と思ってたのだけど、俺が勘違いしてたかもしんない。
0529nobodyさん
2007/07/22(日) 16:56:58ID:RK22sjeKforeachを使わない方法があったと思うのですが、忘れてしまいました。
foreach(@list){$_*=2;}
以外の、foreachを使わない、全ての要素にアクセスする関数か何かあったと思うのですが・・・教えてエロイ人。お願いいたします。
0530nobodyさん
2007/07/22(日) 17:13:41ID:???0532nobodyさん
2007/07/22(日) 18:24:04ID:???CSSとJavaScriptもいいんだけど、俺の知り合いが携帯しか持ってない奴ばっかりで。
携帯じゃCSSもJavaScriptも無理だから。
つーか超ヤサシイもまいは超ヤサシイ俺という名前なのか気になた
0533nobodyさん
2007/07/22(日) 18:42:34ID:???中野一人が言うんだから間違いない。
0534nobodyさん
2007/07/22(日) 19:39:53ID:???0535nobodyさん
2007/07/22(日) 22:18:20ID:???0536nobodyさん
2007/07/23(月) 15:42:25ID:???パスワードを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として読み出して、
フォームから入力された$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:???その対策だとパスワードに「0」を設定されると問答無用でfalseになりますね。
$CRYPT eq "" のほうがいいかも?
というかそれ以前にif( crypt($form{'pass'}, $CRYPT) eq $CRYPT )で常にtrueになるのが変です。
本当にやってることはそれだけ?
0539nobodyさん
2007/07/23(月) 16:29:20ID:???cryptを通した後の暗号化された文字列$CRYPTが、一文字の"0"になるってことはあるんでしょうかね。
if (($form{'id'} eq $ID) && (crypt($form{'pass'}, $CRYPT) eq $PASS)) { }
みたいにIDも照合してます。
0540nobodyさん
2007/07/23(月) 16:29:38ID:???それともundefだったかな?
0541nobodyさん
2007/07/23(月) 16:37:49ID:???蛇足は間違えてるし本題はなんの役にも立たないしで恥ずかしいので無視してください。
0542537=539
2007/07/23(月) 16:41:51ID:???ちゃんと、値のチェックを行っていなかった自分に反省…
0543nobodyさん
2007/07/24(火) 09:20:42ID:???my %file = map { chomp; $_ } <f>;###こんな感じで一旦chompして改行取っ払って、、、
delete $file{'$blogFileName'};###こんな処理をしたあと、、
また改行をくっつけてもどしたいのですが、どうすればいいか教えていただけませんか。
0544nobodyさん
2007/07/24(火) 09:53:00ID:???0545nobodyさん
2007/07/24(火) 09:58:11ID:???ありがとうございます
言葉足らずですいません
一番最後の要素にも改行コード付けて戻したいんですが、どうすればいいでしょうか…
0546nobodyさん
2007/07/24(火) 10:26:09ID:???0547nobodyさん
2007/07/24(火) 10:30:34ID:???あと連想はやめろ
0548nobodyさん
2007/07/24(火) 11:26:52ID:???0549nobodyさん
2007/07/24(火) 11:28:33ID:???0550nobodyさん
2007/07/24(火) 12:03:01ID:???0551nobodyさん
2007/07/24(火) 18:09:32ID:???とかじゃダメ?
0552nobodyさん
2007/07/24(火) 18:56:17ID:???print f $name, "\n", $value, "\n";
}
0553nobodyさん
2007/07/24(火) 20:59:43ID:???正しくないIDやDB名を入れた場合はきちんと
DBI::errstr にそのエラー文言が入るのですが、
正しくないパスワードを入れた時は何故かそのまま通っちゃいます。
帰ってきた中身を見ても、パスを入れた時、入れない時でどちらもハッシュが入っています。
これは不可思議な事に何故か両方繋がってしまっていると見た方がいいですよね??
0555nobodyさん
2007/07/24(火) 22:06:21ID:???ありがとうございます。
セキュリティをかなりガチガチにしているところなのでちょっと考えにくいような。。。
パスワードの値を変更したらハッシュの値も微妙に変わりますがこれは仕様でしょうか?
何にも入れない時と入れた場合で±8くらい差があります。
文字数でハッシュも変わる!?
0556nobodyさん
2007/07/24(火) 22:35:34ID:???DBI->connectの復帰値はデータベースへの接続ハンドル(接続者の識別コードみたいなもの)なので、
接続毎に違う値になる事もあるし、disconnect → 再connect で同じ番号が割り当てられないとは限らない。
ってか、値自体に意味はない。(0ならエラーって意味以外は人間様が解析するべき内容じゃない。)
レン鯖でも、ポスグレがlocalhostを無条件トラストしてる事は十分考えられる。
コンソール前に座って、コンソールの管理者ログインパスワード知ってても
DBパスワード知らなきゃメンテナンス出来ないんじゃ、管理コスト高くつくからな。
その状態で、ポスグレ鯖とHTTP(CGI)鯖が同じマシンだったら、
localhost(=HTTP(CGI)鯖)は無条件トラストされてるから、ユーザー名さえあってりゃコネクトできる。
試しにテーブル作ってダミーデータぶち込んで、それを表示するプログラムを
パスワードありなし両方で動かしてみれば良いんジャマイカ?
それでパスワードなしで繋がっちゃったら鯖缶に問い合わせれば良いと思われ。
0557nobodyさん
2007/07/24(火) 22:44:50ID:???ポスグレ鯖とWeb鯖は同一PCです!
さっそく今からためしにテーブル作ってデータぶちこんで表示させてみます!
0558554=556
2007/07/24(火) 22:51:24ID:???役に立ててよかった。
漏れ、ポスグレ+アパッチの鯖缶兼CGI開発やってるから多少は分かるが、
鯖缶としてはシロウトに近いんで(テスト用2台、本番用1台しかやってない)
切り分けぐらいまでしか役に立てない。スマソ。
もし設定やらについて必要ならポスグレスレででも聞いてみてくれ。
0559nobodyさん
2007/07/24(火) 23:13:21ID:???試してみたところ、仰せの通りパス無条件設定でした。
原因が分かってすごく安心してます。
ポスグレスレの方にもこれから常駐させて頂きます!
テスト用2台と本番用1台って十分すごいですw
助かりましたありがとうございます!
0561nobodyさん
2007/07/26(木) 10:17:46ID:6zNTEP+lそれぞれがラジオボタンで○・×などを選択して、一つのページに結果を表示させたいです。
初心者なので調べても、文字の表示程度の簡単なことしかできなくて困っています。。
どなたか土台になるものを作って頂けませんか。
工程をご教授していただけるだけでもあり難いです。よろしくお願いします。
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:???予算を述べよ
0565nobodyさん
2007/07/26(木) 12:06:15ID:???スレ違い
http://pc11.2ch.net/test/read.cgi/php/1157787046/
0566nobodyさん
2007/07/26(木) 13:14:45ID:???__FILE__
>>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:???0569nobodyさん
2007/07/26(木) 20:56:44ID:Im3nlar7WWWサーバはwww-dataユーザ権限で動いているのですが,パスワードなどの認証を行った上で,
そのCGIを呼び出したユーザ個人の持っているファイルに中身を書き込みたいのです.
su などを呼び出してなんとかするという方法は思い付くのですが,なんかもっと簡単にする方法はないでしょうか?
; というか,以前どこかでそういう目的のモジュールを見掛けた気がするのですが,思い出せなくて困っているのが真相なんですけど.
>>569
作戦1.
ファイルを書き込む wrapper を作成して、setuid root する。
(この wrapper はその中で対象のユーザに setuid する。
十分注意して作成しないとセキュリティホールになる。)
CGIプログラムからはwrapperを呼び出す。
作戦2.
FTPサーバが動いていれば、入力されたIDとパスワードを使って接続する。
作戦3.
CGIプログラムでは一時ファイルを作成するまで。
定期的にroot権限で動作するプログラムで各ユーザごとにコピーする。
作戦4.
ウェブサーバとして動作するプログラムを作成し、rootで動作させる。
これも十分に注意しないと危険。
0572nobodyさん
2007/07/28(土) 00:47:16ID:AqKfoxxhしかし、これをブラウザからアクセスしてもInternal Server Errorになります。
#!C:/perl/bin/perl
$ perl -v
kentwebの掲示板は正常に動きますので、perlのインストール事態には問題ありません。
どこを手直ししたらブラウザにperlのバージョンを表示できるでしょうか?
0574nobodyさん
2007/07/28(土) 02:26:06ID:???0575nobodyさん
2007/07/28(土) 02:49:38ID:???0576nobodyさん
2007/07/28(土) 03:09:03ID:???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:bc1YYpxVFTPサーバ経由は目から鱗でした.LWPとの組合せで簡単に実現できそうですね.もう少し考えてみます.
0580nobodyさん
2007/07/28(土) 17:13:28ID:FChki3sWまた時代が変わってきたな
0581nobodyさん
2007/07/28(土) 18:50:02ID:AqKfoxxhなのでperlはじめてみました。
0582nobodyさん
2007/07/28(土) 20:18:21ID:???失礼な!プンスコ!
0583nobodyさん
2007/07/28(土) 20:51:25ID:FChki3sWPerlはドラクエみたいな感じだな。なかなか次期バージョンが出ない。
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:???0586nobodyさん
2007/07/28(土) 21:38:15ID:???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
0587nobodyさん
2007/07/28(土) 21:42:09ID:FChki3sWopen(FH, "+< $datafile");
$count = <FH>;
seek(FH, 0, 0); # ファイルポインタを先頭にセット
print FH $count++; # 書き込む
truncate(FH, tell(FH)); # ファイルサイズを書き込んだサイズにする
close(FH);
0588名無しさん@そうだ選挙に行こう
2007/07/29(日) 00:40:21ID:???0589名無しさん@そうだ選挙に行こう
2007/07/29(日) 17:41:22ID:4RCBobOYPostgresqlとPerlの組み合わせってあんまり良くないんですか?
参考書とかもあまり深く説明が無いのですが。。
今更PHPを覚えなおすのも厳しいかなと思ってます。
この辺りとかとか♪
0591名無しさん@そうだ選挙に行こう
2007/07/29(日) 18:46:31ID:???DBIで接続して、SQL投げるだけでしょ?
SQL内容はPostgresを解説してるサイトがあるので、
そこを見ればいいんじゃないか。
0592名無しさん@そうだ選挙に行こう
2007/07/29(日) 19:28:58ID:???それSQL使いこなせてないってレベルなんじゃ?
0593名無しさん@そうだ選挙に行こう
2007/07/29(日) 19:48:26ID:???0594nobodyさん
2007/07/29(日) 21:08:12ID:???0595nobodyさん
2007/07/29(日) 21:10:01ID:???超ヤサシイ俺が。
Perl好きは重いのキライが多いから話題にのぼりにくいだけで、組み合わせが悪いとかは全くない。
で、もし藻前が重いDBがキライならMySQLを使えばいい。
今となってはPgもMySQLもそれほど変わらんと俺は思うけどね。
あと、せっかくDB使うならビジネスロジック(データの処理)はストアードプロシージャに任せて
Perlはフロントエンド(入力チェックや画面遷移など)に徹した方が、
例えば帳票用にMS-ACCESSからもデータを見たい・いじりたいって時に便利だ。
0596nobodyさん
2007/07/29(日) 21:40:07ID:???print <<tekitou;
aaaaaaaaaaa
$2chaaaaaaaaaaa
aaaaaaaaaaa
tekitou
printの中で$2chを表示させるのってどうすればいいんですか??
aaaaaaaが続くからこれだと表示されないTT
0600nobodyさん
2007/07/30(月) 04:51:28ID:???フォームに入力されたメールアドレス宛てに、sendmailで送信しているのですが、
例えば、hogehoge@yahoo.co.jpと入力しようとして、誤ってhogehoge@yahooと入力すると、
hogehoge@yahoo.sakura.ne.jpのように、レン鯖のホスト名が補完されるのは仕様なのでしょうか。(レン鯖はさくらです。)
0601nobodyさん
2007/07/30(月) 04:55:48ID:???0602nobodyさん
2007/07/30(月) 09:53:03ID:???0603nobodyさん
2007/07/30(月) 16:13:02ID:9vd3BgBNClass::DBI で Postgres にアクセスしているのですが、
任意のデータの "stat" というカラムのデータを書き換えるために
$self->stat("now()::text || ',$stat'");
としたところ、書き換え後のデータ内容は
now()::text || ',00000001'
となってしまいました。
2007-07-30 16:09:47+09,00000001
↑こうしたいのですが、どうすればいいでしょうか?
SQL の UPDATE文でないとだめですか?
0604nobodyさん
2007/07/31(火) 11:45:26ID:???特に理由があるならSQL文発行すればいいんじゃないの
0605nobodyさん
2007/07/31(火) 15:58:20ID:???now()::text.','.$stat
0606603
2007/07/31(火) 17:21:44ID:???>604
1行で書ければラクかなと思ったのですが・・・
Perl の localtime で文字列 $new_stat を生成してから、
$self->_stat($new_stat);
とすることにしました。
>605
syntax error って怒られました。
0607nobodyさん
2007/07/31(火) 17:40:25ID:???$self->stat(now()::text || $stat);
0608nobodyさん
2007/07/31(火) 18:19:29ID:???$self->sql_stat(do{ref($self)->set_sql('stat',q{UPDATE __TABLE__ SET stat = now()::text||%s});",$stat"})->execute;
0609nobodyさん
2007/08/01(水) 11:03:14ID:cHuXo2mz/home/mydirectory/
Bサーバ
/var/saitama.txt
Bサーバの/var/saitama.txtを
Aサーバの/home/mydirectory/以下にコピーした後に
/var/saitama.txtを削除する
と言う動作を1つのスクリプトを作りたいと思います。
サーバ間のファイルの転送はSFTPです。
どのようにしたらよいでしょか?
perlのバージョンは5.8 RedHatです。
0610nobodyさん
2007/08/01(水) 11:07:27ID:???>>1
> 1: 自分はこういう事がしたい。
> 2: それでこんな風にやってみたが・・・
> 3: こんなエラーが出て上手く行かなかった。
>
> 最低でも1と3が無いと誰も答えられないよ。
1はわかったので、2と3を書いてくれ
0611nobodyさん
2007/08/01(水) 11:17:25ID:???0612nobodyさん
2007/08/01(水) 17:34:49ID:???ftpだけかと思ってた。
0613nobodyさん
2007/08/01(水) 21:53:07ID:EB3VEkPE一応PostgresqlとDBIモジュールをインストールし、localhostでテストを行ってます。
sampleというDBを作成してperlから以下のように接続しようとしていますが、
うまく行きません。
use DBI;
$dbh = DBI->connect("dbi:Pg:dbname=sample");
エラーログをみると、
install_driver(Pg) failed: Can't locate DBD/Pg.pm in @INC (@INC contains: C:/usr/local/lib C:/usr/local/site/lib .) at (eval 7) line 3.
Perhaps the DBD::Pg perl module hasn't been fully installed,
or perhaps the capitalisation of 'Pg' isn't right.
Available drivers: DBM, ExampleP, File, Gofer, Proxy, Sponge, mysql.
at C:/Apache2/htdocs/testdb.cgi line 24
となっています。
これって、DBIモジュールのインストールがうまく行っていないのでしょうか?
ちなみにDBIモジュールはhttp://www.jisaba.net/xp/mt3/05.htmから行いました。
なんか質問自体も正しいのか分からない状態ですが、よろしくお願いします。
0614nobodyさん
2007/08/01(水) 22:34:28ID:???エラーメッセージよく読め。
Perhaps the DBD::Pg perl module hasn't been fully installed,
と親切に指摘してくれてるじゃないか。
0615nobodyさん
2007/08/02(木) 00:15:05ID:???0616nobodyさん
2007/08/02(木) 01:27:36ID:???0617nobodyさん
2007/08/02(木) 04:14:18ID:???0618nobodyさん
2007/08/02(木) 07:34:23ID:???夏夏夏夏
0619nobodyさん
2007/08/02(木) 10:13:28ID:???0620nobodyさん
2007/08/02(木) 13:13:49ID:???愛愛愛愛
0621nobodyさん
2007/08/02(木) 13:14:46ID:???■ このスレッドは過去ログ倉庫に格納されています