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

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

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

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

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

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

過去ログやお勧めサイトは >>2-10
0352nobodyさん05/02/12 01:31:57ID:???
一般的に、多くの場合関数には()をつけ、
演算子には()をつけないほうが読みやすいとされるそうです。
俺もそう思いますが、printは演算子です。
035334705/02/12 01:34:34ID:DEctNxAs
>>351
なるほど〜、うまいことやる方法がきちんとあるのですね。
なんせCGIは初めてで正直まだ何もわかっていないんです。
でも351さんがおっしゃっていることは自分も同意で、普段書く時
は気をつけています、綺麗なコーディング。

とにかくがんばります。
035434705/02/12 01:40:35ID:DEctNxAs
>>352
え、、、PerlやPHPだとprintは演算子なんですかぁ、ちとびっくり。
てっきり関数かと思ってました。
だから()がいらないんですね、なるほどなるほど。
0355nobodyさん05/02/12 03:35:24ID:W11W0gdq
>>346
そもそもCGIでprint文なんていくつも書かないだろ。
出力用のルーチンに投げてprintは1つでお終い。そこで変数展開してやればいい。
0356nobodyさん05/02/12 10:55:57ID:???
()の省略をprintとprintfでしかやってなかった俺は馬鹿者ですか、そうですか。('A`)
0357nobodyさん05/02/12 12:43:51ID:???
>>354
正確に言うと少し違う。Perlの組み込み関数はある意味で全て演算子であるといえる。

>>356
それでいいよ。その方が分かりやすい。
0358s05/02/12 16:09:49ID:???
文字「&」をpostで送りたいんですが、受け渡し後&を区切りとしているので
うまく読み取ってくれません。どうやればいいのでしょうか?
0359nobodyさん05/02/12 16:22:44ID:???
>>358
エンコード
0360nobodyさん05/02/12 17:35:59ID:???
>組み込み関数はある意味で全て演算子であるといえる
こら。好き勝手書くんじゃない。
0361nobodyさん05/02/12 19:42:57ID:???
>>360
関数は名前付単項演算子かリスト演算子になるのです。
perlfunc(1)の最初の方にそう書いてあるよ。

0362nobodyさん05/02/12 20:57:06ID:???
>>358
%26
0363nobodyさん05/02/12 23:09:29ID:???
サブルーチンではプロトタイプ宣言するべきですか?
0364nobodyさん05/02/13 00:57:42ID:???
>>363
プロトタイプ宣言を行うとどうなるかわかれば必要の有無もわかるはず
0365nobodyさん05/02/13 04:12:34ID:???
関数は名前付単項演算子かリスト演算子になるのです。

print ←リスト演算子
scalar ←名前つき単行演算子
rand ←引数が一つの関数
sort ←関数

演算子はコンパイラが変換形式と答えを知っている。
関数はインタプリタにて処理が実行される。
0366nobodyさん05/02/13 05:23:09ID:???
2文字ごとに%を入れたいんだけど、どうすればいいのか教えて欲しいです。
例
82CA82E982DB
を
%82%CA%82%E9%82%DB
にしたいのです。

使われる文字はa-zA-Z0-9の半角英数です。
ちなみに漏れが考えたのは、2文字ごとにsplitで分割して配列に入れ、joinでくっつけて頭に%をくっつけるって方法だけど、これでいいっすか?
0367nobodyさん05/02/13 05:30:51ID:???
>>366
それでいいよ

s/([a-zA-Z0-9]{2})/%\1/g

これでもいいし
0368nobodyさん05/02/13 05:33:24ID:???
>>367
即レスthx!
> s/([a-zA-Z0-9]{2})/%\1/g
採用させていただきました。
0369nobodyさん05/02/13 08:31:42ID:???
>>368
× \1
○ $1
0370nobodyさん05/02/13 12:40:44ID:NsfysfMz
perl modulesのhttpプロトコルを実装したモジュールの使い方を紹介したページは無いでしょうか。

googleでperl http webなどとしてもURLのスキーマがヒットするので要領を得ないのです。

0371nobodyさん05/02/13 14:54:56ID:???
>>370
httpプロトコルを実装したモジュールなどいくらでもあるから
どういうものを探してるのかわからんが、LWPなどよく使うものなら
↓に少々載っている。
http://homepage3.nifty.com/hippo2000/perltips/index.htm
0372nobodyさん05/02/13 16:48:05ID:???
>>371
ありがとうございました。実装できました。
0373nobodyさん05/02/13 16:50:52ID:Lwv6BlB8
if文で
$a == 1 かつ $b == 2
みたいに条件にaかつbみたいな複数条件を付けるにはどう書いたらいいんでしょうか?

教えてエロイ人
0374nobodyさん05/02/13 16:52:28ID:???
>>373
andか&&。
両者で演算子の優先順位が違うので要確認。
下名は何でもかんでも括弧でくくるのでその辺曖昧です。
0375nobodyさん05/02/13 16:53:57ID:Lwv6BlB8
>>374
即レスサンスコ
0376nobodyさん05/02/13 20:33:35ID:???
配列変数の中の物を消したいのですが、一行で済ませる方法ないですか?
@xx=();とやってもだめでした。

for($i=0;$i<=$#xx;$i++){
$xx[$i]="";
}
↑こうすればできましたが、やっぱり一行で何とかなりませんか?
0377nobodyさん05/02/13 21:00:28ID:???
@array = ();
でできるけど。
0378nobodyさん05/02/13 21:03:58ID:???
>>376
できなかった時のテストコード書いてみなさい。
0379nobodyさん05/02/13 21:08:31ID:???
>>376
@xx=()でだめということは、要素数を保ったままで全要素を
空文字列にしたいという問題なのかな?

もしそうなら、

map $_ = '', @xx;

$_ = '' for @xx;

for (@x) { $_='' }

あたりからお好きな奴を。下のほうに行くにしたがって
微妙に遅くなるけどそれほど差はない。map使う奴はvoid
コンテキストじゃないと遅くなるので注意。

空文字列じゃなくてundefでよければ、
@xx = ();
したあとに
$#xx = 要素数-1;
で要素数あわせる方が速いけど。



038037605/02/13 21:35:58ID:???
なぜか、今回やるとできました。ありがとうございます&お騒がせしました。
0381nobodyさん05/02/13 21:45:50ID:MAmE7PYm
入力されたメールアドレスが変じゃないかどうか調べるのはこんなのでいいですか?

!~ /[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,6}$/

なんかもうちょっといいのあったら教えてください
0382nobodyさん05/02/13 22:24:52ID:???
>>381
メールのアドレスはまじめにやるとかなりメンドウななので、
Email::Valid(または日本の携帯のRFCに違反したアドレスにも
対応したければEmail::Valid::Loose)を使うのが楽だよ、
というかすこしまえにこのスレで話題になってたぞ。せめて
現行のログぐらい読め。

ttp://search.cpan.org/~maurice/Email-Valid-0.15/
ttp://search.cpan.org/~miyagawa/Email-Valid-Loose-0.04/
0383nobodyさん05/02/14 02:06:35ID:???
$mail =~ /[\w\-\.]+\@([\w\-\.]+)/;
$host = $1;
if ( !$host || !gethostbyname($host) ) {
print "不正なメールアドレスです";
}

俺はこうしてる。
0384nobodyさん05/02/14 07:52:59ID:mZmBq9e/
         ナ ゝ   ナ ゝ /    十_"    ー;=‐         |! |!
          cト    cト /^、_ノ  | 、.__ つ  (.__    ̄ ̄ ̄ ̄   ・ ・

            ,. -─- 、._               ,. -─v─- 、._     _
            ,. ‐'´      `‐、        __, ‐'´           ヽ, ‐''´~   `´ ̄`‐、
       /           ヽ、_/)ノ   ≦         ヽ‐'´            `‐、
      /     / ̄~`'''‐- 、.._   ノ   ≦         ≦               ヽ
      i.    /          ̄l 7    1  イ/l/|ヘ ヽヘ ≦   , ,ヘ 、           i
      ,!ヘ. / ‐- 、._   u    |/      l |/ ! ! | ヾ ヾ ヽ_、l イ/l/|/ヽlヘト、      │
.      |〃、!ミ:   -─ゝ、    __ .l         レ二ヽ、 、__∠´_ |/ | ! |  | ヾ ヾヘト、    l
      !_ヒ;    L(.:)_ `ー'"〈:)_,` /       riヽ_(:)_i  '_(:)_/ ! ‐;-、   、__,._-─‐ヽ. ,.-'、
      /`゙i u       ´    ヽ  !        !{   ,!   `   ( } ' (:)〉  ´(.:)`i    |//ニ !
    _/:::::::!             ,,..ゝ!       ゙!   ヽ '      .゙!  7     ̄    | トy'/
_,,. -‐ヘ::::::::::::::ヽ、    r'´~`''‐、  /        !、  ‐=ニ⊃    /!  `ヽ"    u    ;-‐i´
 !    \::::::::::::::ヽ   `ー─ ' /             ヽ  ‐-   / ヽ  ` ̄二)      /ヽト、
 i、     \:::::::::::::::..、  ~" /             ヽ.___,./  //ヽ、 ー
0385nobodyさん05/02/14 09:45:44ID:IE9wtcnB
CSV形式のファイルってどう読み込めばいいでしょうか?
カンマ区切りでダブルクォートで括られてると中のメタ文字は評価しないってやつです。
0386nobodyさん05/02/14 10:26:10ID:???
http://www.rfs.jp/sitebuilder/perl/02/08.html

ここを見ながらファイル操作をためしてます。
しかし
open FH,"+>file";
こうした時に何故かファイルの既存データが読み取れません。
+<を使うと普通に読み取れますが、このサイトは間違った事を書いてるのでしょうか?
+>は読み取りも可能だと一覧表には書いてあるんですが・・・・
0387nobodyさん05/02/14 10:37:57ID:???
>>385
Text:;CSV_XS

0388nobodyさん05/02/14 10:48:19ID:???
>>386
'+>'はファイルを開くときにまずいったん空にするのでそうなる。
そのあと新たに書き込んだ内容は読み出せるので読み取り可能と
いうのはそういう意味でいっていて間違いではない。

open(2)のflagsパラメタでいうと

'+>'はO_RDWR|O_CREAT|O_TRUNC
'+<'はO_RDWR


0389nobodyさん05/02/14 10:56:31ID:???
>>387
分ると思うが:;は::の打ち間違いです。シフトキーの押しが足りなかったようでスマヌ(汗)
039038605/02/14 11:07:15ID:???
>>388
そういうことでしたか!ありがとうござます。

ActivePerl5.6.1
Apache1.3
WindowsXP
この環境で今しがたflockのテスト行いました。flock初めてです;
open FH,"+<test.txt";
if (flock FH,2) {print "ok";}
seek FH,0,0;
print FH "あいうえお";
close FH;

>ok

okと出たのでflockがwinXPで使えるんだと思ってよいのでしょうか?
そうでしたら今から契約サーバでもこれを試して排他処理を選択しようかなと
思ってるんですが。
039138605/02/14 11:37:39ID:???
すみませんそれとflockなのですが
+<の時もflockはモードを2にしておいていいんでしょうか?

読み込み時にモード2でやるとロックがかからない時があるようですが、
+<これはどうなのでしょうか?
0392nobodyさん05/02/14 11:42:51ID:???
>>390
flockは9x系では使えないけどNT系は使えるということになってたと
思った。未実装だと致命的エラーになるはずだし。
0393nobodyさん05/02/14 11:57:52ID:???
>>391
perlのflockがlockfやfcntlを用いたエミュレーションで実現されている場合は、
書き込みで開いてないとLOCK_EX使えないことがあるようだ。XpのActivePerlが
どうなのかは知らない。どちらにせよ'+<'は書き込み付だから問題ないと思う。

Note that the emulation built with lockf(3) doesn't provide
shared locks, and it requires that FILEHANDLE be open with
write intent. These are the semantics that lockf(3) imple-
ments. Most if not all systems implement lockf(3) in terms of
fcntl(2) locking, though, so the differing semantics shouldn't
bite too many people.

Note that the fcntl(2) emulation of flock(3) requires that
FILEHANDLE be open with read intent to use LOCK_SH and requires
that it be open with write intent to use LOCK_EX.

あと「モード2」とかって見づらいので、use Fcntl qw(:flock);して「LOCK_ほげ」
という名前の定数を使った方がいいと思う。
039438605/02/14 12:21:05ID:???
>>392>>393
+系は書き込みで大丈夫なんですね^^
ありがとうございましたm(_ _)m
039538505/02/14 12:25:37ID:IE9wtcnB
>>387
どうもです
0396nobodyさん05/02/14 13:58:03ID:IE9wtcnB
Email::Valid
Email::Valid::Loose
この二つを使いたいのですがwin版perl5.6にはプリインストールされてないようです。
そこでppmを使用してEmail::Validだけインストールしてみました。
しかしどうやらMail::Addressともう一つ何かが必要なようでMail::Addressの法を
ppmでインストールを試みてみたらどうやらPPDがないので無理なようですorz

実は今までppm以外のインストールをしたことがありません。
しかしこの度メールフォームを作成したいので、XSS対策?代わりにメルアドチェックを
Email::Validに任せたいのです。
多分鯖にもインストールされてないモジュールだと思うので、winXP環境の
ものをそのままLinux鯖のユーザスペースに移して使おうと思ってます。
0397nobodyさん05/02/14 14:00:26ID:IE9wtcnB
やはりMail::Addressともう一つ必要になるものは自分でコンパイルするしかないのでしょうか?
しかしその場合はLinux上にコピーしたところで使用するのは不可能ですよね?

Email::Valid
Email::Valid::Loose
使用してる皆様アドバイスお願いします。
0398nobodyさん05/02/14 14:13:07ID:???
>>397
Email::Valid::Looseはperlだけで書かれているっぽいので、
コピーすればいけるんじゃないかな。

ちゃんとディレクトリを掘ったりuse lib追加したりは必要
だろうけど。

しかしLinuxなら普通の手順でインスコできそうなもんだが
貸し鯖かなんかですかね。
0399396 05/02/14 14:24:17ID:IE9wtcnB
>>398
Email::Valid::Looseは
Email::Validのサブクラスですよね?

Email::Valid自体もpureperlなんでしょうか?
実は私は中身を見てもそれがpureperlなのかどうか判断できない馬鹿者なんですorz

実際の実行はLinuxのレンサバですが、テスト環境がwinXPなのです。
以前にpureperlのモジュールをLinuxレンサバのユーザスペースに移して
使用したことはあるので、今回もpureperlならできると思いますが、
結局Mail::addressとNet::DNSモジュールあるいはnslookupが必要なので
むりぽですorz

行き詰ってるのでとりあえずソースを自分でコンパイルしてインストールする
方法を勉強してみます。
0400nobodyさん05/02/14 14:36:52ID:???
>>399
開発手元に持ったほうがいいよ。
俺はデスクトップ環境にはLAN上にRH9置いてる。
持って歩くノートにはWinXPをホストにしてcolinux+debianを使ってる。
perlモジュールはCPAN使ってインストしてる。
実機はレンサバだけどSSHできるのでCPANで ~/lib/perl5 とかにインストして use lib〜使ってる。

環境作るの少々めんどいけど、都度Win環境でごたごたするよりはまし。
マシンなければ colinux+debian(デストリは何でもいいけど)で、これ最強。
0401nobodyさん05/02/14 14:40:17ID:???
>>396
あまり知識がないなら簡単なチェックで我慢したら?
@.-_
確かこれ以外の記号を使ってるメールアドレスってないよ。
だからこれと英数字以外を含んでるなら「メルアドが不正!」みたいな
メッセージを出してメールフォーム画面に戻せばとりあえず問題ないけどね。

まともなメールフォームなら
"<>スペース
あたりも許容するべきだけど、まあないならないでいんじゃないかな?
0402nobodyさん05/02/14 14:49:16ID:???
>>399
Net::DNSまたはnslookupが必要になるのはmxcheckを有効にしたときで、
無効にしとけばいらないはず。
040339605/02/14 14:52:18ID:IE9wtcnB
>>400
colinux+debian
聞いたことない名前ですが調べてみますm(_ _)m
>環境作るの少々めんどいけど、都度Win環境でごたごたするよりはまし。
そうですよねorz

>>401
そうなのですか!?
メールフォームといっても相手していするアドレスに固定文章を送りつけるだけなので
メールフォームとは呼ばないのかもしれません^^;
>@.-_
でもrfc882か何かではサイトURLなどと同じ記号が許されてましたよね。
で、それが結構な数になりますが私も401さんが挙げてくれた記号以外を
使ったメールアドレスを見たことがありません。

でもちょっと不安です;
どなたか @.-_  この4種類以外の記号が使われてるメールアドレスを
見たことがある方はいますでしょうか?
0404nobodyさん05/02/14 15:11:05ID:???
>>403
ttp://www.kawaijibika.gr.jp/kaomoji1.shtml
0405nobodyさん05/02/14 15:23:42ID:???
>>403
別の世界のメールシステム(多いのはLotus)に中継される場合なんかで

hoge/fuga/[email protected]

みたいのはよく見ますね。hoge/fuga/gagaは適当に分解されて
向こうの世界のユーザ名やドメイン名みたいなものになるらしい。

あと+=?あたりは普通に名前の一部として使ってるのをたまにみるかな。
404が紹介した顔文字アドレスはさすがにまだ見たことないです(笑)
040639605/02/14 15:27:00ID:IE9wtcnB
>>404
おお!これはありがとうございます!
つまり自前サーバ立ててる人以外は大丈夫ということですね。
自前サーバ立ててる人はきっと私より知識が豊富なので説明もしやすそうですし。

さっき他のサイトを色々見てたらみなさんけっこうrfc準拠アドレスでも
@_.-以外を含んでる拒否するんですね。
とりあえず現状はこれでよしとして、なるべく早くEmail::validにイコウシマス!
0407nobodyさん05/02/14 16:25:33ID:???
初歩的ですみませんが、&test(1,3,{a => 1 , b => 2});
みたいな無名ハッシュリファレンスを引数にしますが、これってメソド側でどうやって
受け取るんでしたっけ?
sub test{
$a = shift;
$b = shift;
ここでどうやればいいのか忘れてしまいました。誰か知ってますか?
0408nobodyさん05/02/14 18:51:18ID:M2nRDwE8
SSIのファイルサイズを返すものでfsizeというものがあるのですが
バイト単位で返すようにすると1,000という風にカンマ区切りが入ってしまうのです。
具体的には<!--#include virtual="filesize.cgi?file=パス"-->として自動的にページに
?fileクエリで指定したファイルのサイズを区切りなしのバイト単位で出力したいのです。

<!--#include virtual="filesize.cgi?file=/test/test.jpg"-->バイト
1000バイト

どなたかどのように書けばよいのか分かりませんか?
0409nobodyさん05/02/14 19:01:43ID:sFNZsuc6
http://o.z-z.jp/?gongonbobo
最新情報
0410nobodyさん05/02/14 19:20:41ID:???
>>407
普通にスカラーで受け取ってデリファレンスすれば?
0411nobodyさん05/02/14 20:27:00ID:???
>>408
好きなのどうぞ

test1({a => 1 , b => 2});
test2({a => 1 , b => 2});
test3({a => 1 , b => 2});
test4({a => 1 , b => 2});

sub test1{
my %z = %{shift()};
print map{"$_ => $z{$_}\n"}keys %z;
}

sub test2{
my %z = %{+shift};
print map{"$_ => $z{$_}\n"}keys %z;
}

sub test3{
my $z = shift;
my %z = %$z;
print map{"$_ => $z{$_}\n"}keys %z;
}

sub test4{
my $z = shift;
print map{"$_ => $z->{$_}\n"}keys %$z;
}
0412nobodyさん05/02/14 20:28:06ID:???
>>411は>>407のレス
0413nobodyさん05/02/14 21:34:32ID:azOG+8a2
MCPANについての質問です。 (PC等のプログラムスレにも投稿してしまいました、すみません)

MCPANでImage::Magickモジュールを入れようとしましたが、エラーになってしまいました。
そこで、ついforce installをしてしまいました。その結果か、入っていないにもかかわらず、
MCPANではImage::Magick is up to dateと表示されてしまうようになりました。

現状どおり、Image::Magickが入っていないと表示されるようにするには、どのようにしたら
良いのでしょうか。よろしくお願いします。
0414nobodyさん05/02/15 00:00:01ID:???
>>413
uninstallしろよ。
できなきゃOSから再インストールしろ。
自己責任でforce installなんかやったんだろ。
ついでにスレ違いだ。

Perlモジュールについて
http://pc5.2ch.net/test/read.cgi/php/997829243/
0415nobodyさん05/02/15 08:40:45ID:6J2om7eC
$hoge内の
数字アルファベット以外のすべての文字に
\をつけるにはどうすればいいんでしょうか
$hoge=~s/([^0-9a-zA-Z])/(?:\\)\1/g;
とかやってもうまくいきません
0416nobodyさん05/02/15 08:44:19ID:???
>>415
$hoge=~s/([^0-9a-zA-Z])/\\$1/g;
0417nobodyさん05/02/15 09:38:39ID:???
ハッシュ変数ってリファレンスにしないとルーチンに渡せないのですか?
&hoge(%hash);
こうすればリスト形式で渡りますよね?

sub hoge{
my %hash = (@_);

こうすればハッシュが壊れることはないでしょうか?とりあえずテストは成功しましたが、
私の知らないおかしなことが起こる瞬間があると怖いです。
0418nobodyさん05/02/15 09:55:53ID:???
>>417
my %hash = ...の代入で新しく確保した%hashにコピーされるから
元の方が壊れることはない。
041941705/02/15 09:56:56ID:???
それとこのような方法がダメですと代替方法って何かありますか?
リファレンスにするとルーチンで作らせたハッシュは全てリファレンスになり
出力整形時に
->
が大量に出てくるので嫌なのです;
0420nobodyさん05/02/15 10:25:40ID:???
やじるしで書かない。
042141705/02/15 10:34:23ID:???
>>420
そういうことなのですか?^^;

例えばルーチンが複数のハッシュリファレンスオブジェクトを返してくるとします。
その時に受け取り側でデリファレンスしながら受け取ることっでできませんか?
1個なら
my %hash = %{[&method]};
でいいですが返り血がだと、あ、
my %hash = %{[(&method)[0]]};
my %hash2 = %{[(&method)[1]]};
とすればいいのかな?


0422nobodyさん05/02/15 10:58:14ID:???
$c = $a;
$a = $b;
$b = $c;

$aと$bを入れ替える関数ってなかったでしたっけ?
0423nobodyさん05/02/15 11:42:03ID:???
グローバルな%aとローカルな%aがあった場合にはどちらが優先的に解釈されるのですか?
又、どちらかを意識的に呼び出すにはどうすればいいでしょうか?
0424kobayashi ◆M6R0eWkIpk 05/02/15 12:04:06ID:???
>>422
($a,$b)=($b,$a);
こういう書き方もできますよ。
0425kobayashi ◆M6R0eWkIpk 05/02/15 12:07:04ID:???
>>422
($a,$b)=($b,$a);
こういう書き方もできますよ。
0426nobodyさん05/02/15 12:08:39ID:kdpe8a8e
>>424-425
おー!せんきゅー、ぶらざー
0427nobodyさん05/02/15 12:16:30ID:???
sub test{
my %hash = %{[shift]} ;
}
shiftにはハッシュロファレンスが入ってますが、デリファレンスできないのでしょうか?
0428nobodyさん05/02/15 12:21:04ID:5Ng5Me3b
PHPのrequire_onceみたいな機能はありませんか?
時々コンパイルできなくなってしまうのですが
0429nobodyさん05/02/15 12:21:57ID:???
>>427
>>411
043042705/02/15 12:54:20ID:???
>>429
ありがとうござました。%{(shift)}でやったら何故かできました^^
0431nobodyさん05/02/15 13:27:42ID:???
>>430
それはなぜかではない。%{[shift]}がだめなのは
shiftでとりだした値(たぶんハッシュのリファレンス)
ひとつからなる無名配列を作ってそのリファレンスを
%{}でハッシュとしてデリファレンスするという無理
なことをしているから。

[]とか%{}の意味わbゥってないんじb...
0432nobodyさん05/02/15 13:35:26ID:???
>>428
時々って事は変な薬をやりすぎ
0433nobodyさん05/02/15 14:19:09ID:???
>>423
試せば直ぐにわかることだが、レキシカル変数が優先される。
グローバル変数を参照するにはパッケージ名で修飾すればいいが、
グローバル変数とレキシカル変数に同じ名前をつけるのは奨励できない。

>>428
PerlのrequireはPHPのrequire_onceに相当する。
0434nobodyさん05/02/15 14:48:48ID:dZXRK/qg
[Tue Feb 15 14:41:06 2005] [error] [client 127.0.0.1]
DBI::db=HASH(0x1a51d38)->disconnect invalidates 1 active
statement handle (either destroy statement handles or call
finish on them before disconnecting) at
ファイル名 line 231.\n

こういうエラーがでました。
apacheのエラーログです。
どうやら$dbh->disconnect辺りが問題点らしいですがどういうことなのでしょうか?
一応mysqlにDBIで接続してinsert構文の発行などはできています。
画面上もエラーがでません。

しかし何故かログにはエラーとして残るようです。
どなたかわかる方いませんか?
043543405/02/15 14:50:57ID:dZXRK/qg
失礼しました。
$sth->finishがなかったせいでした。
しかしmysqlには不要なはずなんですがね;
disconnectも本来不要だから使うならfinishもしっかり使えとかいう感じですかね。

とりあえずすみません解決です。
043642805/02/15 15:09:22ID:5Ng5Me3b
>>433
有難うございました
0437nobodyさん05/02/15 19:48:45ID:sBhWNNlk
1: GDで製作した画像を中間ファイルを使わずにImage::Magickへ引き渡したい。
2: my $image = new GD::Image(640, 480);
  $image->Scale(width=>320,height=>240);
  と
  my $image = new GD::Image(640, 480);
  my $image2 = Image::Magick->new;
  $image2->Read($iamge);
3: 500 Internal Server Error

GDで画像を製作し、Image::Magickで縮小などの加工を行いたいと思っています。
(GDで縮小するとアンチエイリアズがかからず汚くなるのと、その他の加工も行いたいので、Image::Magickを使っています)

現在は、GDで製作した画像を中間ファイルに出力した後、Image::Magickで中間ファイルを読み込んでいるのですが、
中間ファイルを使わずに、GDからImage::Magickへ直接画像データを渡すことはできないのでしょうか?
0438nobodyさん05/02/15 19:51:25ID:FRNIfDdj
質問ですが
オフラインでperlで作成したcgiを作成した場合で、cgiにパラメータを引き継がせたい場合
どのように起動すればいいのでしょうか?

./exsampl.cgi?a=abc
0439nobodyさん05/02/15 19:55:38ID:???
>>438
詳しく
0440nobodyさん05/02/15 19:57:05ID:???
>>438
--exsampl.cgi
#!/usr/local/bin/perl
print "$ARGV[0]\n";

$ ./exsampl.cgi aho?

0441T女の竹田05/02/15 21:07:10ID:???
>>438
このへんのことかな?
http://www.att.or.jp/perl/cgi-debug-env/deb-tech.html
QUERY_STRINGがQUERY_STRINGSになってるのは罠なので気をつけて。

WindowsならSET文ね。
SET "QUERY_STRING=item=hoge&item2=moge"
って感じ。
0442T女の竹田05/02/15 21:11:17ID:???
あぁ…マルチポストだった
0443nobodyさん05/02/15 22:05:37ID:???
T女の竹田って、鶴見女子のエリ?
0444nobodyさん05/02/15 22:26:13ID:ilxRQfx7
Perlというよりプログラミングの手法についてですが、質問です。

ある関数内で必要な引数の数が、関数内の処理によって異なる場合、次のような方法はアリですか?

&hoge("2ch");
&hoge(["yahoo", "損", "氏ね"]);

sub hoge {
 my($kind) = shift;

 if($kind eq "2ch"){
  print qq(オマエモナー);

 }elsif($$kind[0] eq "yahoo"){
  print qq(とりあえず$$kind[1]$$kind[2]);
 }
}

きれいに書くにはどう言う方法を取ったら良いのでしょうか。
0445nobodyさん05/02/15 22:34:23ID:???
関数を二つに分けたら?
044644405/02/15 22:44:57ID:???
>>445
その後の処理が殆ど同じなのですが、やはりそれしかないですかね・・・うーん
0447nobodyさん05/02/15 22:49:03ID:???
引数の数によって、処理が変わるって事ではないの?
0448nobodyさん05/02/15 22:57:13ID:???
>>444
引数が複数の時には無名配列にしてる意味はなに?
引数の数で処理を分けるなら、

scalar @_ の数を見ればいいんじゃないの?
044944705/02/15 23:00:54ID:???
&hoge("2ch");
&hoge("yahoo", "損", "氏ね");

sub hoge($;@){
 unless( $_[1] ){
  print "オマエモナー\n";
 }else{
  print "@_\n";
 }
}

じゃ、ダメかい?
0450T女の竹田05/02/15 23:13:38ID:???
>>444
どのくらい共通でどのくらい共通じゃないか、
もうちょっとわかりやすい例にならない?
>>444では共通の処理がないからピンと来ないよ。
045144405/02/15 23:43:31ID:???
一箇所だけ例外処理があって、その例外処理の部分で複数の引数が必要になるんですが、、、
共通の処理の方がかなり多いです。
うーんどんな例を出せば良いんだろう
■ このスレッドは過去ログ倉庫に格納されています