トップページ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/
0237nobodyさん2007/06/21(木) 18:43:32ID:???
つーかどこからも呼び出されないCGIならそもそも存在する必要ないっしょ
0238nobodyさん2007/06/21(木) 18:43:38ID:???
それは変数名をタイプミスすることによるエラーの回避や
可読性を考慮してのことなのでしょうか?

↑で9割正解かと
0239nobodyさん2007/06/21(木) 18:53:29ID:???

Template Toolkit で EVAL_PERL オプションを付け、
テンプレートの中にPERLのコードが書けるようにしました。
で、下記のように書いてテンプレートフォルダ内の count.txt を読み込むよう記述したのですが
その内容が全く出力されませんでした。
Template Toolkitではパールのコードは書けるけどファイルハンドルは扱えない等、
そういう制限があったりするのでしょうか?

[% PERL %]
open FH,"count.txt";
my @count = <FH>;
print @count;
close FH;
[% END %]
02402352007/06/21(木) 18:59:48ID:???
>>236
これから新たに書く場合は心掛けた方が良いけど
既に書き上げてしまったものの中で、自分でコードを全て把握しており
第三者に読ませることがないものについては放置でも良い
という方針でいこうと思います。

>>237
「そのCGIだけで完結していて、他のCGIから呼び出されない」という意味です。

>>238
ありがとうございます。
「とりあえずuse strict;は必須!」と書いてあるところは多いのですが
そのメリットやデメリットについてまで詳しく書かれているところは少なく
自分の理解が合っているのか不安だったので助かりました。
0241nobodyさん2007/06/21(木) 19:05:29ID:???
>>239
そんな制限はきいたこともないな。よくわからんがファイル開けて
ないんじゃねーの?

printやcloseのエラーまで厳密にチェックしろとまではいわないが、
openのエラーチェックだけは省略しないほうがいいよ。
0242nobodyさん2007/06/21(木) 19:18:14ID:???
>>239
ありがとうございます。
エラーチェックしてみたところ、openの段階でファイルが開けていませんでした。
しかしパスも間違えていないのに何故に開けないんだか。。
原因不明です(´・ω・`)
0243nobodyさん2007/06/21(木) 19:19:16ID:???
すいませんアンカ間違えました。
>>241さんです。
0244nobodyさん2007/06/21(木) 19:52:32ID:???
>>239
ちょこっと検証したけど挙動が変だわw
何れも当環境下なので、あなたの所で上手く行くかどうかは保証外。
以下、成功例
#!/usr/bin/env perl -w
use strict ;
use Template ;
my $tt = Template->new({ EVAL_PERL => 1}) ;
$tt->process(\*DATA, ) ;
__DATA__
[% PERL %]
open FH , 'hoge.pl' or die ;
my @line = <FH> ;
close FH ;
print @line ;
[%- END -%]

'hoge.pl' という名前で保存。これは上手く動いた。ちなみに $/ が undef されてるっぽいので、
@line を $line に変更しても動く。最終改行の制御がどうしても一個多かった。
02452442007/06/21(木) 19:54:53ID:???
失敗例。

my $tt = Template->new({ EVAL_PERL => 1}) ;
$tt->process(\<<"EOF", ) ;
[% PERL %]
open FH , 'hoge.pl' or die ;
my @line = <FH> ;
close FH ;
print @line ;
[% END %]
EOF

Possible unintended interpolation of @line in string at hoge.pl line 9.と
Global symbol "@line" requires explicit package name at hoge.pl line 9.が出る。
かといって my @line を普通に先に宣言しても上手く動かない。
0246nobodyさん2007/06/21(木) 20:22:49ID:???
事故レス。'EOF' にしたら動いた、、、、orz...
0247nobodyさん2007/06/21(木) 20:24:59ID:???
>>245
それはttが動く以前の話だろ。

use strict;
print <<"EOF";
@line
EOF

と同じこと。
0248nobodyさん2007/06/21(木) 20:35:19ID:???
>>244さん
わざわざ検証して下さってありがとうございます!
環境の違いがありますが試してみます!
大変参考になりました、感謝です!
0249nobodyさん2007/06/21(木) 21:06:24ID:???
>>247
> かといって my @line を普通に先に宣言しても上手く動かない。
ってこっちの例を出すべきでしたね。失礼。
02502442007/06/21(木) 22:19:28ID:???
ああ、復活した!
アホでした。245以降の私の戯言は消去してください。バルス!!
ああああああ、穴があったら入りたい。ったらありゃしない。
0251nobodyさん2007/06/21(木) 23:04:05ID:???
unless(open(FILE,"<test.dat")){&error();}
flock(FILE,2);
my @test = <FILE>;
flock(FILE,8);
close(FILE);

として、test.dat(↓)を読み込み、
テスト1
テスト2
テスト3


unshift(@test,"テスト\n");

と先頭に文字列を追加して

unless(open(FILE,">test.dat")){&error();}
flock(FILE,2);
print FILE @test;
flock(FILE,8);
close(FILE);

という様に書き込んだのですが、見てみると

テスト4 テスト1
テスト2
テスト3

の様に改行されず出力されている様ですが、これは何故でしょうか?
02522512007/06/21(木) 23:24:48ID:???
すみません、自己解決しました;
\nではなく\r\nとしたら、理想どおりの結果になりました。
スレ汚しすみませんでした…。
0253nobodyさん2007/06/23(土) 11:05:34ID:???
TT で EVAL_PERL とかするくらいなら php 使ったほうがよくね?
0254nobodyさん2007/06/23(土) 16:43:39ID:???
1: うんこがしたい
2: トイレに行って踏ん張ってみたが
3: うんこがでない
0255nobodyさん2007/06/23(土) 20:09:32ID:???
一つのファイルに以下のように書きます。

use strict;
my $a = 1;
print "$a\n";

これは正しいのに

# b.pl
my $a = 1;
1;


#a.pl

use strict;
require "b.pl";
print "$a\n";

これは正しくないのは何故ですか?
b.plで変数を宣言し、a.plでb.plをrequireしたら、b.plで宣言した変数が使えるのではないですか?
0256nobodyさん2007/06/23(土) 20:13:58ID:???
ファイルスコープ
0257nobodyさん2007/06/23(土) 23:12:26ID:???
そんなこと出来たらいろんなファイルをrequireしたら好きな変数名使えませんね


ちったぁ考えろヴァカが!!!!!
0258nobodyさん2007/06/24(日) 00:04:21ID:???
> ちったぁ考えろヴァカが!!!!!

オマエモナー
以下無限ループ
0259nobodyさん2007/06/24(日) 03:10:40ID:???
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsub.html#Persistent_Private_Variables
> 最も外側のスコープであるファイルスコープで宣言されたのであれば、
> レキシカル変数はCのファイルにstaticなものと同じように振る舞います。
> 同じファイルの、宣言の後にある全ての関数から参照可能でありますが、
> そのファイルの外側から参照することはできません。これはモジュールの中で
> モジュールにプライベートな変数を作るために使われます。
0260nobodyさん2007/06/24(日) 03:11:31ID:???
> ちったぁ考えろヴァカが!!!!!

いつからここは初心者罵倒スレにかわったの?
質問に答える気ないなら繰るなよ
0261nobodyさん2007/06/24(日) 03:13:38ID:???
1行目で答えてるのにそれが目に入らないらしい
眼科池よ
0262nobodyさん2007/06/24(日) 03:23:31ID:???
3行目が目に入らないらしい
眼科池よ
0263nobodyさん2007/06/24(日) 06:49:32ID:???
ん… >>255 = >>258 = >>260 = >>262 なのか?
なんか最近こういうの多くないか…意図的な偽者な気もするけど。
普通に別ファイルでmy付で宣言したら参照出来ないのは当たり前な気がするが
0264nobodyさん2007/06/24(日) 08:29:54ID:???
どーでもいいけど特殊変数の$a, $bでテストするの止めろ。
普通の変数で実行したら、きちんとエラーメッセージが出る
(compilation errors)し、そしたらここで質問せずに済む。
0265nobodyさん2007/06/24(日) 16:08:49ID:???
>>263
>>262だが、>>260の3行目は確かにおかしいが、それに対する>>261
「回答してるからいいじゃん」的な発言もどうかと思うのでレスしただけ。
ここは初心者質問スレなわけで、当たり前の事でもわからない人が来る訳で。
それに対していちいち馬鹿だのなんだのと余計な一言つけないと回答できない
>>257 = >>261 = 263 は来なくていいと思う。
0266nobodyさん2007/06/24(日) 16:35:34ID:???
質問回答じゃない、つまらない煽りが多すぎw
0267nobodyさん2007/06/24(日) 17:01:06ID:???
>>266
オマエモナー
0268nobodyさん2007/06/24(日) 17:18:27ID:???
最近暑いからなぁ
0269nobodyさん2007/06/24(日) 18:02:44ID:???
>>263 だけど同一人物と見なせる >>265 の脳味噌を疑う…
暴言が嫌ならmixiとかでやれよ。ここはそこまで平和な掲示板じゃないっての。
わたくすは普段は回答に罵倒なんか付けない善良な回答者ですが、何か。
0270nobodyさん2007/06/24(日) 18:10:57ID:???

馬鹿扱いされた質問者が
必死になってるとしか思えないww
0271nobodyさん2007/06/24(日) 18:27:57ID:???
0272nobodyさん2007/06/24(日) 19:03:18ID:???
>>269
自分の事を棚に上げる>>269の脳味噌はさぞ凄いんだろうな。

暴言が嫌とか、そもそも俺は質問者じゃないからどうでもいい。
ただ単に>>261が、>>260のレスに対してあほなレスして、
それに俺があほなレスを返したところで善良な(笑)>>263様が登場したわけさ。

>>270みたいな安直な考えしか浮かばないなら、勝手にそう思っとけ^^
0273nobodyさん2007/06/24(日) 19:30:15ID:???
お前ら暇すぎ
0274nobodyさん2007/06/24(日) 19:35:46ID:???
>>272
どこが自分のことを棚に上げてるの?
もしかして>>263の1行目のこと? "なのか?"って読める?
しかもまた>>270と同一人物だと認定するの? どこまで自己中なの?
0275nobodyさん2007/06/24(日) 19:37:42ID:???
どこか他所でやれよ荒らしども
0276nobodyさん2007/06/24(日) 19:59:40ID:???
>>274
ゆとりでしたか^^;
0277nobodyさん2007/06/24(日) 20:21:05ID:???
言い返せなくなったら
ゆとり〜童貞〜中卒〜在日〜部落〜
もうこの手のレッテル貼りは飽きたわ…
0278nobodyさん2007/06/24(日) 20:40:42ID:???
>>274
>>258,260,262は特に質問者を擁護している訳でもないのだが、
>>263は根拠もなく自演を思わせるレスをしている。
なのか?が該当者或いは他の閲覧者に対する疑問文なら相当な池沼。

>>261,263は>>257を擁護しており、
>わたくすは普段は回答に罵倒なんか付けない善良な〜
が「罵倒したのは257の時だけ」とも取れる内容なので、自演と疑われる要素はある。

そして、>>272の末行の内容は269のみに宛てたレスではなく、
270と同様の考えをしている者に向けられたものである。
よって自演を指摘するものではないが、>>274は自己な解釈のみで
自演を指摘するものと判断し、それを根拠に自己中呼ばわりしている。

また、「同一人物だと認定」発言や、それらしい発言が無いにも関わらず「自己中」等という
レスを返す>>274は「ゆとり」或いはそれと同程度の知的レベルであると推測される。

さらに、>>277が269や274と同一人物であるかは定かではないが、
>>276が272であると、やはり自己の解釈のみで判断し、レスをしている。

思考に似た点が多い為、恐らくは同一人物であると推測されるが、いずれにせよ
「自分を非難する者を同一人物とし、レスを勝手に解釈し批判する」という
自分の自己中心的思考に気付かずにレスを繰り返す理解し難い有機生命体には
何を言おうが無駄だと推測できるので、これにて閉店とさせて頂きます。

またのご来店をお待ちしております^−^
0279nobodyさん2007/06/24(日) 21:06:02ID:???
line
[1~] 2chに限らず周りに意見を求めるのを知的障害者と認定するなんて、
   余程あなたは世間知らずなのですね。社会に出ましょう。
[6~] 罵倒自演云々はあなたの勘違いですね。反省して下さい。
[10~] 何度も言いますが、日本語読めますか。私は疑問系で書いてるのに、
    君は265で断定して書いてる訳で。一緒にしないで下さい。
[15~] 自分のレスを読み返せばあなたが自己中なのは明瞭です。
[18~] 自己矛盾してますね。自分で妄想で語ってるのに気付きませんか。
[21~] 同一人物化云々も君の妄想の域を出ませんね。何を言おうが無駄なら
    これ以上私にレスしないで下さいね。閉店とか言って顔文字使ってるのから
    必死さが伝わってきて、個人的に気持ち悪いです。初心者みたいで。
0280nobodyさん2007/06/24(日) 21:11:20ID:???
テンプレもム板からのパクリだしホントこのスレには低脳しかいないな( ´,_ゝ`)プッ
0281nobodyさん2007/06/24(日) 21:25:13ID:???

余程自身が自己中扱いされるのを嫌ってる様だけど、事実なんだよね。
>>265を自分で読み返せば分かると思うけど、一応書いて置くね。
罵倒が嫌なら温いコミュニティに行けば良い訳。それで、自分の掲示板でもないのに

『いちいち馬鹿だのなんだのと余計な一言
つけないと回答できないxxxは来なくていいと思う。』

これは、誰がどう見ても自己中心的な考えだよね、回答者を排除する。
2chは自由な掲示板なんだよ。質問者も自由、回答者も自由。
もちろん、君も意見を言うことは自由だよ。しかし、それによって
住人に叩かれたら、それは事実として認めないといけない訳。
0282nobodyさん2007/06/24(日) 21:30:30ID:???
>>281
基地外乙。
0283nobodyさん2007/06/24(日) 21:35:43ID:???

つまり、何を言いたいかと言うと、君は2ちゃんねるには不向きなんだよ。
こんな些細な「馬鹿」とか「阿呆」に反応してる様ではまだまだ未熟な訳ですよ。
いわゆる半年ROMれっていう。適当な板で経験積んでからお越し下さい。
それでも君がこんな2chの体質は異常だと主張するなら、批判要望板にでも行って下さい。
板違いです。 [2ch批判要望] http://ex21.2ch.net/accuse/
0284nobodyさん2007/06/24(日) 21:44:36ID:???
>>280
ほんとその通り。てか最近ム板にも変な奴が
湧いてるんだよな。お前が主導で捕獲してこっちに連れて来い。
0285nobodyさん2007/06/24(日) 21:49:30ID:???
論破したつもりで長文書いて、
文脈から低脳さが滲み出てる奴多いよね〜
0286nobodyさん2007/06/24(日) 22:16:25ID:???
>>278
なにこの馬鹿
0287nobodyさん2007/06/24(日) 22:22:04ID:???
夏っすね
0288nobodyさん2007/06/24(日) 22:31:22ID:???
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ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は、上で負数を食わすな的に言われてるから忘れてください。
■ このスレッドは過去ログ倉庫に格納されています