トップページ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/
0289nobodyさん2007/06/24(日) 22:47:38ID:???
>>288
perlのコーディングの話したら
延々と質問→>>257の流れになるだけだけどな
0290nobodyさん2007/06/25(月) 02:13:52ID:???
>>275に同意。
0291nobodyさん2007/06/25(月) 11:35:07ID:???
かにでも食って落ち着けよ
0292nobodyさん2007/06/25(月) 13:12:47ID:???
いやカニは落ち着けないだろ
0293nobodyさん2007/06/26(火) 07:28:23ID:QSRpPplO
1:CGIでCGIファイルを生成したい。
2:以下のようにやってみました。
open(OUT,"> ./$id/g4.cgi");
print OUT $Buf4;
close(OUT);
chmod 0775,'./$id/g4.cgi';
3:エラー表示発生せず、なぜか属性644で作成される。
以前もどこかのスレに相談させていただいたのですが、
chmod 0775,'./$id/g4.cgi';
↑これでいけるとの事でしたが動きません><
サーバーはジオプラス→ロリポップ→さくらインターネットと乗り換えてみました
いずれも動きません。


0294nobodyさん2007/06/26(火) 08:31:12ID:???
>>293
chmod 0775,'./$id/g4.cgi';

''

""
の違いについて調べれ。

chmod 0775,"./$id/g4.cgi";

これなら動く。
0295nobodyさん2007/06/26(火) 08:31:38ID:???
ときどきCGIを動作させてるとエラーでもなく、正しい表示結果が出るでもなく、



って出るんですが、これはどういうことでしょうか?
0296nobodyさん2007/06/26(火) 10:20:52ID:???
貴方が1と出力するように組んだから。
ソースも無く、再現する状況を並べるでもなく、どうすればいいのか。
0297nobodyさん2007/06/26(火) 10:25:23ID:???
DBIの質問です。

use DBI;
$sth = $db->prepare("SELECT seller, Sum(price) FROM hogehoge GROUP BY seller");
$sth->execute;
while (my $hash_ref = $sth->fetchrow_hashref) {
print "$hash_ref->{seller}  $hash_ref->{Sum(price)}<br>\n";
}

fetchrow_hashrefで、Sum(price)の値を見たいのですが、$hash_ref->{ } の { }中にはどう書けばいいのでしょうか?
0298nobodyさん2007/06/26(火) 10:31:16ID:???
そこでエスパー初心者が登場ですよ

require するファイルの末端に 1; って書くけど、もしかして
実行させる CGI 本体のファイル末端にも 1; を書いていませんか?
0299nobodyさん2007/06/26(火) 10:32:57ID:???
>>297
俺もよく知らんがkeys使うとかして調べればわかるんじゃない?
0300nobodyさん2007/06/26(火) 10:40:05ID:???
>>299
foreach (keys %$hash_ref) { print; } で見てみると、sellerとSum(price)っぽいんだけど、
$hash_ref->{Sum(price)} って書くとエラーになります…
0301nobodyさん2007/06/26(火) 10:47:43ID:???
$hash_ref->{'Sum(price)'} だろ
0302nobodyさん2007/06/26(火) 10:55:12ID:???
>>301
でもだめなようです。スレ違いですが、SQL文を工夫して

use DBI;
$sth = $db->prepare("SELECT seller, Sum(price) AS sumprice FROM hogehoge GROUP BY seller");
$sth->execute;
while (my $hash_ref = $sth->fetchrow_hashref) {
print "$hash_ref->{seller}  $hash_ref->{sumprice}<br>\n";
}

とすることで一応の解決はみたのですが、直接参照する方法はないのでしょうか?
03032962007/06/26(火) 11:13:42ID:???
>>298
書いてません。__END__はありますが・・・
外部ファイルはuseで読み込んでます。
そっちには1;って書いてます。
一体どうしたらいいのか・・・出るのは毎回じゃなくて時々です。
0304nobodyさん2007/06/26(火) 12:42:27ID:QSRpPplO
>>294

ありがとうございました
自作に行き詰まって業者に制作依頼の見積もりしたら40万だったので諦めて
いたのですが、0円ですみましたほんとうにありがとぉ。
0305nobodyさん2007/06/26(火) 13:58:53ID:???
>>302
これでどう?
$hash_ref->{'Sum (price)'},

# 一度、use Data::Dumper; して print Dumper($hash_ref); してみるといいかも。
0306nobodyさん2007/06/26(火) 14:45:38ID:VwPHcZDu
perlを実行すると↓のsftpのコマンドが実行されるようにしたいのですが、
どのように組めばよいですか?
---------------------------
sftp hogehoge
get /home/member/110
bye
-------------------------
0307nobodyさん2007/06/26(火) 14:49:59ID:???
>>306
いくつか方法はあるがどうせそのうちいろんなことしたくなるんだから
Expectモジュール使っとけ。
0308nobodyさん2007/06/26(火) 14:50:33ID:???
そろそろ夏休みですし、夏休み中に色々勉強することをお奨めします
0309nobodyさん2007/06/26(火) 23:20:42ID:???
>>302
普通、お前がやったように
Sum(price) AS sumprice
こうする。これが「直接」でないというお前の感覚が腐っている。
0310nobodyさん2007/06/28(木) 11:56:41ID:YXGDvJmi
今までモジュールを使ったことがなかったのですが、
HTML::Template.pm を使うようになって便利さを感じています。

そこで、フォームの入力の取得も cgi-lib.pl から CGI.pm に変更しようと思い

&ReadParse;
## タグ処理
foreach (keys %in) {
$in{$_} =~ s/</</g;
(略)
}

としているのを、

my $q = new CGI;
my $in = $q->Vars;
foreach (keys %$in) {
$in->{$_} =~ s/</</g;
(略)
}

としてみたのですが、変わった気がしません。

これくらいなら、CGI.pm に変更するメリットはないのでしょうか?

03113102007/06/28(木) 11:59:09ID:YXGDvJmi
s/</&lt;/g;
です。
0312nobodyさん2007/06/28(木) 12:00:42ID:???
変わったところ:標準モジュールになった
これはこれで大きいんじゃないの?
0313nobodyさん2007/06/28(木) 13:46:44ID:5j7nThKQ
cgi-libを利用してアップローダー作りました。
wavファイルをアップしようとしたらこのようなエラー表示が出てアップできません
Short Read: wanted 194, got 0
これがなんなのか教えてください。
0314nobodyさん2007/06/28(木) 14:05:04ID:???
CGI.pmを使ってるのにcgi-libも使ってたりしません?
0315nobodyさん2007/06/28(木) 16:29:12ID:???
オブジェクトを持ちまわせよ
何のためにOOインタフェースも用意してあんだよ
0316nobodyさん2007/06/29(金) 13:30:50ID:FzkfeL60
Shift_JISで出力する場合、全半角の変換を確実に行う方法は
今でもやはりjcode.plが一番なんでしょうか?
Jcode.pmだとEUCを通してから変換を行っているせいか
一部文字化けが避けられませんよね。
何かおすすめの方法とかモジュールとかあれば是非教えて下さい。
Perlは5.8.6です。
よろしくお願いします。
0317nobodyさん2007/06/29(金) 13:55:16ID:???
>>316
jcode.pl使ってるけど、文字コードをEUCに揃えておいて、出力するときにShift_JISじゃだめかな。

ついでに、俺も似たような質問。
文字列に全角ひらがな [ぁ-ん]以外が含まれていないことをチェックしたくなりました。
文字コードはEUC-JPです。
あまりいい方法が思いつかないので、下記のページを参考にして、文字を1文字ずつ分割して
チェックしようかなと思うのですが、他にエレガントな方法はないでしょうか?

Perlメモ
ttp://www.din.or.jp/~ohzaki/perl.htm

# 全角ひらがな [ぁ-ん] # EUC-JP
$Zhiragana = '(?:\xA4[\xA1-\xF3])';

# $str を文字単位に分割して配列 @chars に代入する
$ascii = '[\x00-\x7F]';
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
@chars = $str =~ /$ascii|$twoBytes|$threeBytes/og;

if ((grep { $_ =~ /$Zhiragana|\s/ } @chars) != ($#chars + 1)) {
 print "全角ひらがな以外がある!";
} else {
 print "全角ひらがなしかない!";
}
0318nobodyさん2007/06/29(金) 13:57:36ID:???
>>317を撤回して再掲

>>316
jcode.pl使ってるけど、文字コードは全てEUCに揃えておいて、出力するときにShift_JIS変換じゃだめかな。

ついでに、俺も似たような質問。
文字列に全角ひらがな [ぁ-ん]以外が含まれていないことをチェックしたくなりました。
文字コードはEUC-JPです。
あまりいい方法が思いつかないので、下記のページを参考にして、文字を1文字ずつ分割して
チェックしようかなと思うのですが、他にエレガントな方法はないでしょうか?

Perlメモ
ttp://www.din.or.jp/~ohzaki/perl.htm

# 全角ひらがな [ぁ-ん] # EUC-JP
$Zhiragana = '(?:\xA4[\xA1-\xF3])';

# $str を文字単位に分割して配列 @chars に代入する
$ascii = '[\x00-\x7F]';
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
@chars = $str =~ /$ascii|$twoBytes|$threeBytes/og;

if ((grep { $_ =~ /$Zhiragana/ } @chars) != ($#chars + 1)) {
 print "全角ひらがな以外がある!";
} else {
 print "全角ひらがなしかない!";
}
03193162007/06/29(金) 14:10:58ID:???
>>317-318
>jcode.pl使ってるけど、文字コードをEUCに揃えておいて、出力するときにShift_JISじゃだめかな。
全く問題ないと思います。
質問の趣旨としてはjcode.plに代わる新たなモジュールとか方法とかが
出てきてないかな、ということだったんですが分かりにくかったらすみませんでした。
できたら標準モジュールで済ませたいという思いがあって
Jcode.pmを見てみたんですが、ちょっと問題ありだったのでそのことについても
対策があるのか聞いてみました。

やはりjcode.plは今でも全半角変換の定番なんでしょうか?
0320nobodyさん2007/06/29(金) 14:25:23ID:???
unicodeにして\p{Hiragana}使ったほうが楽だと思うのだが

decode('euc-jp', $s) =~ /[^\p{Hiragana}]/
0321nobodyさん2007/06/29(金) 15:31:43ID:???
>>320
シンプルでいいですね。ありがとうございました。
やっぱjcode.plは卒業した方がいいんだろうか…
0322nobodyさん2007/06/29(金) 16:09:18ID:???
Perl5.8ならEncode.pmだろ
0323nobodyさん2007/06/30(土) 14:49:08ID:taxZDsiL
掲示板のエラーファイルの容量が一定値を超えたら新しいファイル名にリネーム(一定ファイル数になったら圧縮)して、
元のファイルを空にしようと思うんだけど、どの程度の容量を超えた場合にリネームするのが適切?
0324nobodyさん2007/06/30(土) 15:37:16ID:???
1 日とか 1 週間単位でやればいいんじゃないの?
0325nobodyさん2007/06/30(土) 17:34:51ID:???
ファイルシステムの中の人と相談した方が良いんでないすか
0326nobodyさん2007/07/03(火) 14:19:01ID:8gn4hJb2
$a>0 and $a<=1;
常に判定式が真になるという条件付きで$aに乱数をセットしたいです。
my $a = rand 1;
これでは0が入る可能性がありますのでアウトということです。

unless($a>0 and $a<=1){ $a+0.000001 }
などのように乱数の公平性を崩しかねない方法は避けたいです。

unless($a>0 and $a<=1){ $a = rand 1 }
これをループ処理でやっても多分公平性を損ないますよね。

(最低でも小数点第9位までと考えていますが、多くても困らないので*1億→int→/1億などはしていません。)

賢い方どうぞよろしくおねがいします。
0327nobodyさん2007/07/03(火) 14:22:12ID:???
my $a = rand 1;

$a>=0 and $a<1;
0328nobodyさん2007/07/03(火) 14:29:13ID:???
>>326
rand(-1) + 1
例示でも sort と無関係に $a が出てくると何だか落ち着かない。
03293262007/07/03(火) 14:32:53ID:8gn4hJb2
>>327
???
http://perl.misty.ne.jp/function02/rand.html
ここを見る限りでは0~1ということなので0も1も出てくるみたいですが。
解釈が間違ってるでしょか?
0330nobodyさん2007/07/03(火) 14:35:08ID:???
1-rand(1)
0331nobodyさん2007/07/03(火) 14:38:20ID:???
>>329
rand(1) だと0以上1未満が返ってくる
0332nobodyさん2007/07/03(火) 14:38:23ID:???
>>329
そのページの記述はいい加減なのでちゃんと付属のマニュアル嫁

rand EXPR
rand Returns a random fractional number greater than or equal to 0
and less than the value of EXPR. (以下略)
0333nobodyさん2007/07/03(火) 14:42:29ID:???
>>328
EXPR should be positive.
03343262007/07/03(火) 14:43:10ID:8gn4hJb2
>>330
つまりrand 1の返り血が1であることは100%ないということですか?

なるほど。0~1というのは自分の勘違いですね。

>>328
これはどうなるんですか?
-1から始まって0までが選択される?
つまり -1<rand(-1) and 0<=rand(-1) ということですか?
なんかこんがらがりそうorz
03353262007/07/03(火) 14:45:30ID:8gn4hJb2
とりあえず解決していただきましてありがとうございました。
0以上1未満ということで。感謝ですm(__)m
03363282007/07/03(火) 15:51:45ID:???
>>333
そうなの?

use strict;
use warnings;
print rand(-1); # -0.689697265625 が出た。strict も warnings も何も言わない。

>>334
rand(1) が返すのは0以上1未満の値。なので>>330へのお返事についてはそのとおり。
>>328は、上で負数を食わすな的に言われてるから忘れてください。
03373282007/07/03(火) 15:53:35ID:???
連投ごめん。自分で調べろ、と。

perldoc -f rand
> Returns a random fractional number greater than or equal to 0
> and less than the value of EXPR. (EXPR should be positive.)

知らなんだ。>>333ありがとう。
0338nobodyさん2007/07/03(火) 16:08:03ID:???
>>336
望ましい(should be)だから絶対だめというわけではない
ねばならない(must be)ならだめだけど
0339nobodyさん2007/07/03(火) 18:04:35ID:???
ソース見たけど ([0,1)の乱数) * (第一引数) で計算してるので
今の実装なら負でも特に問題なさそう。
03403262007/07/03(火) 22:37:20ID:8gn4hJb2
すいませんおかしなことになりました。多分自分のコーディングにミスがあるはずですが。

# 設定
my $set = 0;

# 各役確率設定別
my @rep = 1/7.29, 1/7.29, 1/7.29, 1/7.29, 1/7.29, 1/7.29;
my @che = 1/39.20, 1/39.15, 1/39.10, 1/39.03, 1/38.99, 1/38.92;
my @mus = 1/5.26, 1/5.22, 1/5.18, 1/5.14, 1/4.95, 1/4.88;
my @zou = 1/168.0, 1/166.3, 1/165.0, 1/162.6, 1/160.6, 1/159.0;
my @bel = 1/291.2, 1/286.1, 1/282.4, 1/275.3, 1/269.7, 1/265.3;
my @big = 1/1598.4, 1/1560.3, 1/1489.4, 1/1424.7, 1/1337.4, 1/1260.3;
my @reg = 1/2259.8, 1/2114.0, 1/1872.4, 1/1771.2, 1/1598.4, 1/1489.4;

# 決定各役確率
my $rep = $rep[$set];
my $che = $che[$set];
my $mus = $mus[$set];
my $zou = $zou[$set];
my $bel = $bel[$set];
my $big = $big[$set];
my $reg = $reg[$set];


# 各初期値
my $medal = 0;
my $in = 0;
my $out = 0;
my $game = 10000;
03413262007/07/03(火) 22:41:20ID:8gn4hJb2
for(my$i=1;$i<=$game;$i++){

# 乱数取得
my $a = 1 - rand(1);

# コインを入れた
$in += 3;

# 取得乱数に応じた挙動
if($a>0 and $a<=$rep){
$out += 3;
}elsif($a>$rep and $a<=$rep+$che){
$out += 4;
}elsif($a>$rep+$che and $a<=$rep+$che+$mus){
$out += 7;
}elsif($a>$rep+$che+$mus and $a<=$rep+$che+$mus+$zou){
$out += 10;
}elsif($a>$rep+$che+$mus+$zou and $a<=$rep+$che+$mus+$zou+$bel){
$out += 15;
}elsif($a>$rep+$che+$mus+$zou+$bel and $a<=$rep+$che+$mus+$zou+$bel+$big){
$out += 350;
}elsif($a>$rep+$che+$mus+$zou+$bel+$big and $a<=$rep+$che+$mus+$zou+$bel+$reg){
$out += 104;
}elsif($a>$rep+$che+$mus+$zou+$bel+$big+$reg and $a<=1){
# ハズレなので何もない
}else{
print "error";
}
}

これを実行したところerrorがprintされてしまうのです。
03423262007/07/03(火) 22:42:43ID:8gn4hJb2
つまり先ほど教えてもらった
my $a = 1 - rand(1);
この方法での乱数取得が
$a>0 and $a<=1;
を満たせない時が存在してることになってしまいます。
単純にそのほかの部分の自分のミスだと思うのですが見つけられません。

アドバイスお願いできますでしょうか?
もしよろしければ上記のコードを数度実行してみて確認もしてみてください。
03433262007/07/03(火) 23:34:12ID:8gn4hJb2
どう思われますか?
activeperl 5.8.1
windowsXP
遅ればせながらこちらの実行環境になります。
0344nobodyさん2007/07/03(火) 23:45:02ID:???
>>342
my @rep = 1/7.29, 1/7.29, 1/7.29, 1/7.29, 1/7.29, 1/7.29;
これは
my @rep = 1/7.29;
に等しいって気付いているか?
0345nobodyさん2007/07/03(火) 23:55:10ID:???
関数のリファレンスから関数名やパッケージ名を取得するにはどうすればいいですか?
0346nobodyさん2007/07/03(火) 23:58:23ID:???
とりあえずerrorになったときは$aの値も表示しろよ
0347nobodyさん2007/07/04(水) 00:07:43ID:???
何やってるコードか全く理解してないうえで、
とりあえず、変数の並びが法則に反してるとこ一か所あるけど、
それで正しいの?
0348nobodyさん2007/07/04(水) 00:11:21ID:???
>>345
そもそも、その関数に名前がついてるとは限らないので不可能。
0349nobodyさん2007/07/04(水) 00:21:06ID:???
なるほどです。
名前がないものは当然取得できないですが、
名前のあるものも取得する手段はないということでしょうか。
03503262007/07/04(水) 00:36:21ID:GRubSazo
>>346
なるほど。確認したところ、0.342-0.343あたりの時にerrorになってるようです。
$musのあたりになるはずですが・・・なんでこんなことになるのでしょう。
>>344
すいません、たまにしか触らないのでどうしても細かい部分は忘れて無難な方法を取りガチです。
>>347
ぜひどこなのか教えてください。
03513262007/07/04(水) 00:41:01ID:GRubSazo
すいません。

}elsif($a>$rep+$che+$mus+$zou+$bel+$big and $a<=$rep+$che+$mus+$zou+$bel+$reg){

ここでしたorz
03523262007/07/04(水) 00:52:15ID:GRubSazo
本当メチャクチャすいませんm(__)m
0353nobodyさん2007/07/04(水) 01:54:39ID:1Rhv3smG
ブログCGIで、削除された記事をパラメータ指定されたときに
404を返したいんですが、その後の表示(ErrorDocument)を
htaccessなどの指定に従う方法はあるでしょうか。
CGIにエラーページを持たせたくないという理由です。
apacheに丸投げできればいいんですが、何らかの方法で
htaccessに指定されたパスを取得して自分で出力してもいいです。
よろしくお願いします。
0354nobodyさん2007/07/04(水) 02:00:20ID:???
リダイレクトするか、読み込んで垂れ流したらいいじゃん。
それ見た10人が10人ともCGIスクリプトが存在しないと思うだろうけど。
0355nobodyさん2007/07/04(水) 02:22:20ID:???
あれ、やっぱりそういうことになります?
例えば、検索ロボットがblog.cgi?a=1を見に行って、404だったら、
blog.cgiが消えたものとしてblog.cgi?a=2もDBから削除するでしょうか。
実際はそんなことしないとは思いますが、
世の中のルール的には、そうされてもやむなしでしょうか。
0356nobodyさん2007/07/04(水) 02:30:20ID:???
400が正しいですね。たぶん。では、400を返すとして。

リダイレクトだと301を返すことにならないでしょうか。
読み込む場合、パスをハードコーディングしたくないのです。
0357nobodyさん2007/07/04(水) 02:41:56ID:???
検索ロボがどれくらい融通をきかせてくれるのかとか
世の中のルール的になんちゃらとかもよくわかんないけど、
とりあえず400は違うだろうし(410のこと?)、301だけがリダイレクトじゃないと思うよ。

つーか、Perlはあまり関係なさそうですよ。

CGI: Common Gateway Interface part 13
http://pc11.2ch.net/test/read.cgi/php/1126436361/
△▲ WebProg 初心者の質問 Part15 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1169725490/
0358nobodyさん2007/07/04(水) 02:53:29ID:???
あれ、すいません。400は確かに違いました。
404でよかったみたいですね。
やっぱり、blog.cgiの設定項目として
ErrorDocumentを指定させるような仕様に
してみようと思います。ありがとうございました。
0359nobodyさん2007/07/04(水) 02:58:38ID:???
print "Status: 404\n\n";
0360nobodyさん2007/07/04(水) 04:31:59ID:???
ごめん、寝ぼけてた。
0361nobodyさん2007/07/04(水) 17:36:06ID:???
サブルーチンの戻り値についての質問です。配列とスカラー変数を戻り値にしたいのですが、
@hogeは値が帰ってくるものの、末尾に2つ空の要素が入り、$hoge1と$hoge2に値を返すことが出来ていません。
このような場合どう記述するのでしょうか?

sub main {
 my (@hoge, $hoge1, $hoge2) = &hogehoge();
}

sub hogehoge {
 return (@ho, $ho1, $ho2);
}
0362nobodyさん2007/07/04(水) 17:41:24ID:???
($ho1, $ho2, @ho)
0363nobodyさん2007/07/04(水) 17:46:44ID:???
>>362
つまり、(@hoge, $hoge1, $hoge2)っていう書き方だと、配列の末尾に値を追加するという意味になってしまうのでダメ
ということでしょうか。

# でも、配列が2つ以上だったらどうするんでしょう…
0364nobodyさん2007/07/04(水) 17:49:00ID:???
リファレンスを返す
0365nobodyさん2007/07/04(水) 17:59:20ID:???
>>364
リファレンスはよくわかってないですが、そういう時に使うんですか。ありがとうございました。

# と、今回は配列1個だけだから、>>362の方法で乗り切りましたw
0366nobodyさん2007/07/04(水) 18:40:00ID:???
リファレンスを返すか、配列を戻り値のケツに持ってくるか。
見た目ならリファレンスのが綺麗かなぁ
0367nobodyさん2007/07/04(水) 19:19:57ID:???
配列が1つとは限らないからリファレンス覚えたほうがいい
0368nobodyさん2007/07/05(木) 04:46:34ID:Ees4tlLi
特定の処理のみでモジュールやライブラリが必要な場合、

1.ソースの冒頭の方で呼び出す
2.その特定の処理の中で呼び出す

どちらが一般的なんでしょうか?
0369nobodyさん2007/07/05(木) 04:55:41ID:???
アマグラマの意見で申し訳ないが、その辺に落ちてるソースだと冒頭以外は見た記憶が無い。
03703682007/07/05(木) 05:16:30ID:???
>>369
配布前提の場合は、ライブラリのパスを設定したり、どのモジュールを使用するかを
利用者に分かりやすく書く必要があるのでまた特別かなと思ったりもするんですが
やはり冒頭にまとめて書くのが普通なんですかね。

めったに使われない処理のためだけにモジュールを毎回呼び出すのって
何か妙に無駄な気がしてしまうんですが、どうなんでしょうか。
0371nobodyさん2007/07/05(木) 05:58:33ID:???
配布目的ならPODやマニュアルを用意するんでしょ?
そこで必要なモジュールや処理の補則をすれば問題ないじゃない
0372nobodyさん2007/07/05(木) 06:25:44ID:???
つかuseはどこに書いてもプログラム実行前に必ず実行されるわけで
03733682007/07/05(木) 06:46:04ID:???
>>372
し・・・知らなかった・・・
は、恥ずかしー
出直してきます。
0374nobodyさん2007/07/05(木) 10:45:56ID:???
処理で分けて読み込むかどうか決めたいなら require でできるけど、
プラグインみたいな使い方じゃない限り素直に読み込ませた方がいいんじゃないかな
0375nobodyさん2007/07/05(木) 11:06:56ID:???
そういうときはrequireを使うんだ!

ってバニング大尉が言ってた
0376nobodyさん2007/07/05(木) 11:33:04ID:???
今更ながらuse strict;の存在に気付いて書き直そうとしてるんだけど、
使ってる変数全部まとめて最初にmy宣言、ってのはアリ?
例えば

$title = 'タイトル';
$hoge01 = '値1';
$hoge02 = '値2';
.......

ってのを
my $title = 'タイトル';
my $hoge01 = '値1';
my $hoge02 = '値2';

とせずに
my ($title,$hoge01,$hoge02);
$title = 'タイトル';
$hoge01 = '値1';
$hoge02 = '値2';

ってやると、何かマズイとこありますか?
あまり美しくない程度ですか?
0377nobodyさん2007/07/05(木) 11:45:14ID:???
俺は趣味の範疇だと思うけど、頭にmyつけるだけのほうがいちいち
変数名しらべて書き並べるより楽じゃない?
0378nobodyさん2007/07/05(木) 11:46:32ID:???
どうせなら
my ($title,$hoge01,$hoge02) = qw(タイトル 値01 値02);
0379nobodyさん2007/07/05(木) 11:52:22ID:???
書き方としては
my ($title,$hoge01,$hoge02);
で問題無し

書き直すなら>>377に同意
03803762007/07/05(木) 12:03:58ID:???
>>377>>379
どっちでも良いと分かって一安心。
前半同じ名前で後半の数字が違うだけ、って変数名が多いんで
調べる手間はそんなかなぁ、と思ってたけど、結局全部網羅するとなると
大して作業量は変わらないかな・・・。

>>378
それはムチャクチャ長くなりそうなんで、ちょっと勘弁w


アドバイス感謝!
03813782007/07/05(木) 12:15:33ID:???
なにも使うのを1つの my で済ませろって意味ではなくて、
my ($authID, $authPASS, $authEXP) = qw(〜); # 認証関連
my ($htmlTITLE, $htmlSUBTITLE, $htmlCSS) = qw(〜);
のように似てるもの同士でまとめて書くのよ
0382nobodyさん2007/07/05(木) 13:21:28ID:rw6MBlh9
Perl上級者です。すいませんラリって幻覚が見えてるので教えてください。
65,536byteは60KB以上で間違いありませんか?
0383nobodyさん2007/07/05(木) 13:23:29ID:???
しゅくだいはじぶんでやろう!
0384nobodyさん2007/07/05(木) 13:49:32ID:rw6MBlh9
またか。このスレで答えてもらったことねーや( ´ ー ` )
答えたことはあるけどな。>>19>>362の二回だけ。

もういいや。ありがとうございます。たしかGNOME電卓にそんな機能が・・・
0385nobodyさん2007/07/05(木) 13:58:27ID:???
use vars
our
0386nobodyさん2007/07/05(木) 14:05:14ID:???
>>384
スレタイ100回音読して半年ラリってろ
0387nobodyさん2007/07/05(木) 14:06:19ID:???
なんだこいつwwwww
0388nobodyさん2007/07/05(木) 14:08:13ID:???
60KB=61440B
■ このスレッドは過去ログ倉庫に格納されています