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

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2009/09/03(木) 23:51:12ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1234752149/
0885nobodyさん2010/05/19(水) 13:19:13ID:???
お前らコーディングしろよ。アルゴリズムスレに来たのかと勘違いしたわ
0886nobodyさん2010/05/19(水) 14:46:10ID:???
>>870
関係ないが奇数通りはおかしいとおもってほしいな
0887nobodyさん2010/05/19(水) 15:30:14ID:???
むしろauto_incrementを使わない理由が分からない
頭おかしいんじゃねえの?
0888nobodyさん2010/05/19(水) 15:41:50ID:???
ファイル名がただの連番だとパスワードかけてないシステムだとスコスコ抜かれてアクセス増えて面倒よ
0889nobodyさん2010/05/19(水) 17:41:34ID:???
保存しようとするディレクトリは初めからバラけさせるんじゃなく順次作成し、
何等かの管理ファイルまたはdbには

現在の保存ディレクトリ
現在の保存数

を記録。


ただディレクトリが深くなりすぎず、且多くなりすぎないボーダーがわからん

ext3とかNTFSがパフォーマンス低下しないレベルの数どれぐらいなんだろうな
0890nobodyさん2010/05/19(水) 17:57:19ID:???
use Error qw(:try);
の「:」って何?
0891nobodyさん2010/05/19(水) 18:02:03ID:???
>>888
それをハッシュにかければ問題ないな
衝突するっていうならIDをインクリメントして再試行すればいいし
0892nobodyさん2010/05/19(水) 22:01:01ID:???
>>891
とりあえず0〜10000000まで衝突なし。
while( $i < 10000000 ){
  $sha1 = sha1($i);
  $digest{$sha1}++;
  $i++;
}
で衝突有無の確認したんだけど、
たったこれだけでメモリ1GB消費するんだよね。
単体スクリプトで、他に何かいい書き方ってあるのかな?

っつーか、sha1って脆弱性突いて2^52の計算でおk!なんだよね・・・・
まだ2^24未満だよ。このままだと$i = 2^80まで衝突しないんだろうか?
0893nobodyさん2010/05/19(水) 23:46:07ID:???
>>892
逆にどのくらいのメモリ消費なら納得したのかな
0894nobodyさん2010/05/20(木) 01:34:31ID:???
いや、「たったこれだけ」ってのは、bigint中の1000万しか検証してないって事ね。
何か省メモリな方法(知恵?)があったりするんかなーって思っただけだから。
0895nobodyさん2010/05/20(木) 01:34:50ID:Y0b7Ouqx
WEB API 等を使ってATOM形式のデータを
my $data = get 'http://search.twitter.com/search.atom?q=java';
use XML::Atom::Syndication;
を使って
my $doc = XML::Atom::Syndication->instance->parse_file($data);ーー�@

として、##XPathを使用して取り出す
my $title = $doc->query("/feed/title")->text_value;のようにして、各要素を取りだそうとおもったのですが、
Can't locate object method "instance" via package "XML::Atom::Syndication"
と�@で、エラーになります。どうすれば、�@で変数に格納できるでしょうか?
0896nobodyさん2010/05/20(木) 01:44:41ID:???
>>895
まず、その使い方はどこで覚えたの?
0897nobodyさん2010/05/20(木) 05:12:58ID:???
>>883
>1万のファイル数制限をかけたいのに4000物ディレクトリなんて使いたくないよママンw
>>863
>1万未満に制限し、あふれたファイルは別のサブディレクトリというのを考えてます。

ここなんか矛盾してない?
0898nobodyさん2010/05/20(木) 05:38:10ID:???
>>891
YouTubeがそれやってるね

>>895
XML::Atom::Syndicationはバージョンによって
インタフェースがガラッと変わってるので、まずはバージョンを
0899nobodyさん2010/05/20(木) 17:06:08ID:???
本当は5000に制限したいんだけど、スレに書いたときは10000万だったので便宜上数は変えないでいるだけっす。
0900nobodyさん2010/05/20(木) 17:43:39ID:???
1億個か
inode的には全然余裕あるな
もう分ける必要ないね
0901nobodyさん2010/05/20(木) 18:16:37ID:???
あ〜、、、間違えたorz
0902nobodyさん2010/05/20(木) 19:07:44ID:???
ここWebProgだよね…

「年月日/時/分/秒/ミリ秒/接続元IP.拡張子」でよくない?
1ミリ秒に5,000〜10,000リクエストなんて処理できないから大丈夫だよ
0903nobodyさん2010/05/20(木) 19:10:04ID:???
そういう簡単な答えを欲してたんかもね>質問者
0904nobodyさん2010/05/20(木) 21:48:03ID:???
すみません教えてください。
インターネットを見ながら見よう見真似なのですが、ファイルを上手く書き出せません。
Windowsのperl(5.8.8)です。スクリプトはUTF-8でUTF-16でファイルを作りたいのですが、
文字が■□◇みたいになって化けてしまいます(><)何処がおかしいですか?

#!/usr/bin/perl

use strict;
use utf8;
binmode STDIN, ":encoding(cp932)";
binmode STDOUT, ":encoding(cp932)";

open W, ">:encoding(utf-16)", "[TEST].txt" or die $!;
print W <<EOF;
A「もしもしB君?パソコンが動かなくなっちゃったんだけど」
B「どこのメーカーのPCだっけ?」
A「スイッチ押すとピーって言って止まっちゃう」
B「ふーん・・・で、メーカーは?」
A「何回も再起動してるんだけど、ピーって言って止まっちゃう」
B「・・・なんかエラーメッセージ出てない?」
A「まただ・・・またピーって言って止まったよ。なんで?」
B「知るかっ!」
EOF
close W;
print "書き出しました...\n";
exit;

__END__
0905nobodyさん2010/05/20(木) 22:13:30ID:???
>>904
エディタ何使ってる?メモ帳?
0906nobodyさん2010/05/20(木) 22:18:16ID:???
>>905
秀丸です。
0907nobodyさん2010/05/20(木) 22:36:11ID:???
>>906
で、このスクリプトはutf8で保存してる?
書き出されたファイルは全部文字化け?
0908nobodyさん2010/05/20(木) 22:44:57ID:???
>>907
秀丸の表示ではスクリプトは[UTF-8][CR+LF]になってます。
書き出されたファイルは↓な感じで部分的に読めます。
秀丸では[Unicode(Big-Endian)][CR]と出ています。


A「もしもしB君?パソコンが動かなくなっちゃったんだけど」
???椰???????????????A「スイッチ押すとピーって言って止まっちゃう」
???田???????????????A「何回も再起動してるんだけど、ピーって言って止まっちゃう」
??????��????????????��????A「まただ・・・またピーって言って止まったよ。なんで?」
??????????
0909nobodyさん2010/05/20(木) 22:47:27ID:???
あれ、一行明けでおかしくなってるのかな。どうしてだろう。
0910nobodyさん2010/05/20(木) 22:57:45ID:???
>>908
ttp://hirakun.blog57.fc2.com/blog-entry-76.html
これかな
0911nobodyさん2010/05/20(木) 23:04:25ID:???
>>910
できました。
真似してみたら解決しました。
嘘みたいです。
嬉しいです!!
有難うございました!!!!
0912nobodyさん2010/05/21(金) 03:02:13ID:???
>>902
5000個ごとに分けたいだけなのに1000ディレクトリもわけないといけないなんて
と嘆くのが今回の質問者

cronで定期的にファイルの数かぞえて、(たとえば)4500を超えていたら新しいディレクトリを作成して、
シンボリックリンク(たとえばcurrent)を張り替えるのがいいかもしれん
09139022010/05/21(金) 04:19:19ID:???
(現状では)SHA-1の話しは論理的に)280回の施行で衝突を起こせるらしいので
SHA-1以外のなにかで、280とおりもとめられればおよそ問題ないハズなのでそっちから検討するのもあり
(誕生日問題を含む)偶然まで考慮するなら他のアルゴリズムを採用するべき
ただし、どの場合でも(衝突率が誕生日問題で崩壊してるので)ファイル名はキーになりえない。
09149022010/05/21(金) 04:21:28ID:???

1. ベストは「要件に合わせて適切な処理をする」なのでこんな大雑把な質問にベストの解は無いので
 小でも動くけど大まで見越すのであれば大がある程度基準になってしまうのはしょうがないと思う。
 「小でも〜」を考慮するとあらかじめ保存先をすべて作っておくよりなければ都度作る方が効率がいいと思う。
 >アクセスに依存する考えなので「1000に分けないで〜」と言う要件は解決
2.FAT16やext2世代より以前のファイルシステム使ってるようなサーバなら
 そもそもそんなにトランザクションさばけないので要件を満たす。
 現状の良いスペックでも要件を満たす。
 将来性もある程度考えた仕組みを考える。
 >勝手に作った前提
3. 株とかFXみたいにものすごいトランザクションでは無い投稿系の処理なら
 msまでわけないで秒までにしておいて衝突するようなら攻撃的なアクセスとみなしてエラーにしちゃえばいい
4. ディレクトリ数は秒までなら366*24*60*60ディレクトリ(合計31,622,400)となるので
 ひとつのディレクトリは1000こえないのでext2でも十分機能する
 もっと古いFSを考慮するなら255こえないほうが安全なので年/月/日にすればいい
 >msまで考えると1000になりえるので破綻
5. 最近のハードでも1台で運用するのであれば5000〜10000UU/秒をさばける構成は思いつかない。
 将来的(5〜10年後)もよほど画期的な何かがでてこない限り要件を満たすハズ。
 画期的なアイデアがでたとしても普及には時間がかかるので見直して修正する時間は十分にある。
 「一台で」という勝手に作った前提がくずれて複数のフロントエンド、1つのファイルサーバとみても
 フロントエンドのIPを要件にあわせて必要な位置に足せば十分機能する。
6. (プログラムの性質にもよるけど一般的に)拡張性を考えても頭の方の「年月日」を「年/月/日」にして
 当年ディレクトリまたは当月ディレクトリ辺りを早いデバイスにすれば十分な速度が得られる
 
0915nobodyさん2010/05/21(金) 07:37:40ID:???
「年月日/時/分/秒/ミリ秒/接続元IP.拡張子」で良いかと思う
に対する考察ってことでOK?
0916nobodyさん2010/05/21(金) 17:19:06ID:???
秒間2000ファイル前後ぐらいしか作れなかった。無念。
0917nobodyさん2010/05/21(金) 23:24:55ID:???
>>913
280 って何じゃそりゃ?
SHA-1 の衝突(#)困難性の脆弱化は、 総当たり攻撃で
2**80 の計算で一回起ると言われていたが、現在
2**52 で起るとの報告がされてる。
「4.5035996273705e+15」の計算だ。
「 280 回の施行で衝突を起こせる」つーのはググって、
ソース元にアクセスせずに鵜呑みで書いてるだろ。
ま、一つほど大歩危カマしてる .jpg ファイルは見つけたけど。

== 余談 # の事 ==
SHA-1 の話題で「衝突」と言えば、
「異る2つの対象ファイルが同一のハッシュ値を持つ事」
を意味する。
決して「偶然同じ名前を付けられた二つのファイルの
ハッシュ値が同じ」などの意味では使わない。
んなもん一回の計算で衝突させられるに決まってる。
ネットワークデータ通信で衝突と言う言葉も使われるが、
混同しない様に注意しながら文を書くのが礼儀じゃねーの?


スレ違い失礼。

0918nobodyさん2010/05/21(金) 23:36:08ID:???
「偶然同じ名前を付けられた二つのファイル名の
ハッシュ値が同じ」
09199022010/05/21(金) 23:44:50ID:???
SHA-1使う必要ないよね?って話なので、おっしゃる通り適当にしらべてました。
0920nobodyさん2010/05/22(土) 00:13:35ID:???
質問者の意図ともズレてると指摘されてるのに。
>>892氏が既に呟いてる事柄を見落したりして、
適当に調べた事を、平気で書く人間の文を真面目に
読む気にはならんよ。
0921nobodyさん2010/05/22(土) 19:18:04ID:VfPIyjHK
1ヶ月前くらいからPerlを勉強し始めた超がつく初心者です。
配布されてるCGIのゲームをホームページにつくり、そのスクリプト改造しながら勉強してます。
最初は改造方法とか書いてあるページでいろいろやってましたが。。
そろそろ基本的なことを着実にやらないとと思い、ちまちまやってます。
学生でお金もあまりないので参考書とかあまり買えないです。ネットで勉強してます。
なので恐ろしく馬鹿馬鹿しい質問するかもしれませんが許してやってください。意欲だけなら底なしです。。

ゲームの内容は普通にプレイヤーがモンスターを倒す(ダメージをあたえる)ようなもんです。
そこでプレイヤーの技に「〜〜という文字が含まれているモンスターには普通より多いダメージを与える」というものを作りたかったんです。
それで
if ($xx =~ /ABC/){  ・・・の文法を使おうとしたんです。
でもABCのところにいざモンスターの名前をいれようと全角カナを使ったらエラーです。
どうにかできないかと""で囲ったりいろいろやってたらどんどん迷いこんでしまいました。
jcodeとかあるなーなんてやってみてもjcode呼び出す文とかがぜんぜん分からなくて・・・
解決方法と解説、よろしければお願いします。m(__)m

※全部半角でいこうかと考えましたが、これのほかに解決方法がなければそうしたいなと思ってます。
0922nobodyさん2010/05/22(土) 20:06:15ID:???
if ($xx =~ /\QABC/){
0923nobodyさん2010/05/22(土) 20:14:20ID:???
技名に特定文字列が入ってたら・・・とかで動作を決めるのはやめておいたほうがいいかと。
とりあえず、技名は全て決め、その技名に対してユニークな (重複の無い) な ID を振る。
その技がどんなタイプなのかを決めておくといいかも。
例えば、スライム系に対して攻撃力何パーセント上乗せみたいな。

my $SPAttack = {
 '00001' => {
  'name' => 'アイスアロー',
  'base_power' => 30,
  'type' => {'magick' => 1, 'physical' => 1}, # 技が魔法、物理かどうか
  'attribute' => 'ice',
  'target_attribute' => {'slime' => 120, 'dragon' => -30, } # base_power に対するパーセンテージ。 存在しない属性は±0
 }
}
みたいな感じはどうでしょ?
参照は $SPAttack{'00001'}->{'name'} で出来る。
敵のパラメータにどんな属性が弱いのかを持たせておけばいいのかなと。
my $monsters = {
 '00001' => {
  'name' => 'スライム',
  'def' => 10,
  'str' => 5,
  'attribute' => 'slime',
  'weak' => ['ice, 'fire'],
  'strong' => ['poison']
 }
};
などなど
とにかく、技名とか武器とか敵とかにはそれぞれで重複しない固有の ID を割り振るのが鉄則かと。 (属性も ID 振っても良いのかなとは思う)
0924nobodyさん2010/05/22(土) 20:17:02ID:???
'weak' => ['ice, 'fire'],
は
'weak' => {'ice' => 1, 'fire' => 1},
にした方がいいのかな
09259212010/05/23(日) 12:29:26ID:IxcMBDCu
レスありがとうございます。

IDを振るっていうのがよくわからなかったんですけども
とりあえず技の特定の属性に対してのダメージ増減とモンスターの属性設定だけしてやってみました。
やっぱ文字設定よりこっちのほうが便利ですね。最初は大変ですが。
0926nobodyさん2010/05/24(月) 14:15:12ID:???
IDで判断しないと、
「今のはメラゾーマではない・・・メラだ・・・」
って演出が出来ない。
 id, name, power
 101, メラ, 10
 103, メラゾーマ, 180
 104, メラ, 200 #魔王専用
ってやるのがデータを扱う定石。
0927nobodyさん2010/05/25(火) 12:37:02ID:???
こうすると、ファイル名に空白があると失敗します。
空白有りにも対応するには、どうすれば良いでしょうか。

system "soft.exe $file";
0928nobodyさん2010/05/25(火) 13:33:10ID:???
system 'soft.exe', $file;
0929nobodyさん2010/05/25(火) 14:20:58ID:???
すみません、soft.exeに$fileを渡したいのです。
0930nobodyさん2010/05/25(火) 15:35:08ID:???
それPerlの話じゃなくてOSの話では

Windowsなら system "soft.exe \"$file\""; か system qq(soft.exe "$file");  でどうか
他のOSは知らん
0931nobodyさん2010/05/25(火) 17:07:23ID:???
>>930
"を二重に囲うような方法が分からなくて。
教えて頂いた方法でエラーなく動作しました。
ありがとうございました。
0932nobodyさん2010/05/25(火) 19:44:20ID:???
みんな qq()は使わないのけ?
0933nobodyさん2010/05/25(火) 20:40:06ID:???
たまに使うけどあんまり使わねえな
エスケープすることが多い
0934nobodyさん2010/05/25(火) 20:46:05ID:???
,でつないだほうが早いよと聞いてからそうしてて、それが癖になってる
print 'Hello, ', $name, " san!\n"; とかw

>>931
なるほどエスケープの方法が訊きたかったわけね
0935nobodyさん2010/05/25(火) 22:22:42ID:???
qq//はwindowsのコマンドプロンプトでワンライナーやるときぐらいしか使わないなあ
qw//とかqr//は普通に使うんだけど
0936nobodyさん2010/05/26(水) 01:36:17ID:???
> ,でつないだほうが早いよと聞いて
なにー、マジで? ちょっと今度ベンチとって見よう。

いや、最近php絡みの案件でHTMLやJavascriptを出力する時なんか、
 ' と " が多重に出現するのでヒアドキュメントとかを使うんだが、
そんな時Perlのqq() が使えればなー、ってよく思う。
0937nobodyさん2010/05/26(水) 13:16:36ID:???
直感的には、.でつなぐほうが速そうではあるけど
読みづらくなるからなぁ

>いや、最近php絡みの案件でHTMLやJavascriptを出力する時なんか、

うちの場合JavaScriptやcssは全部外部に置いてるから打ち出すのはイベントで関数を呼ぶ部分ぐらい
HTMLはヒアかSmarty
0938nobodyさん2010/05/26(水) 18:52:28ID:???
. だと結合した文字列を一旦メモリに格納しなきゃいけないから、
リストを頭から出力していくだけの , 区切りに比べて遅いんじゃないの?
どっちにしても相当長い文字列で何千万、何億回とか回してみてやっと差が出るぐらいだろうけど
0939nobodyさん2010/05/26(水) 21:09:03ID:???
my $results = timethese(10000000, {
  'comma1' => sub { print 'πは ', $num, ' だもにゅ', "\r" },
  'comma2' => sub { print "πは ", $num, " だもにゅ\r" },
  'dot1' => sub { print 'πは ' . $num . ' だもにゅ' . "\r" },
  'dot2' => sub { print "πは " . $num . " だもにゅ\r" },
  'merge' => sub { print "πは $num だもにゅ\r" },
  }, 'none',);
cmpthese($results);

print;
           Rate   dot1   dot2 comma2  merge comma1
dot1   323719/s     --    -4%    -6%    -7%   -11%
dot2   337029/s     4%     --    -2%    -3%    -7%
comma2 342618/s     6%     2%     --    -2%    -5%
merge  348578/s     8%     3%     2%     --    -4%
comma1 362188/s    12%     7%     6%     4%     --
0940nobodyさん2010/05/26(水) 21:09:16ID:???
sprintf('πは ', $num, ' だもにゅ', "\r"); の様に sprintf() に置き換えた場合
            Rate   dot1  merge   dot2 comma1 comma2
dot1   1488538/s     --   -13%   -15%   -46%   -51%
merge  1720578/s    16%     --    -1%   -38%   -44%
dot2   1743679/s    17%     1%     --   -37%   -43%
comma1 2770851/s    86%    61%    59%     --   -10%
comma2 3061849/s   106%    78%    76%    11%     --

0941nobodyさん2010/05/26(水) 21:20:16ID:???
IO のコストに比べれば print の出力の仕方によるコストなんか微々たる物
ってことかな?

ってことで sprintf でメモリ内の処理でベンチ
(そもそも sprintf の使い方を間違えてけどwww)

" " で囲むより ' ' で囲ったほうが高速
変数展開を無視する分、それだ早い?

カンマで区切った方が遅いのは、カンマで区切る分だけ print が発生してるのでは? と思った

ちなみに perl 5.10 で計測しました

使用されたメモリ含めてのベンチって取れないのかしら?
0942nobodyさん2010/05/26(水) 21:37:06ID:???
Memchmark?
0943nobodyさん2010/05/26(水) 22:23:39ID:???
>>938
ぶっちゃけ、環境依存。俺の環境だと以下。
% cat hoge.pl
use Getopt::Long ;
use Benchmark qw( timethese cmpthese ) ;
GetOptions( 'c=i' => \my $cnt ) ;
die if ! $cnt ;
my @arr = (q{a} x $cnt ) x 10 ;
cmpthese timethese ( undef, {
'concat' => sub {
print STDERR $arr[0] . $arr[1] . $arr[2] . $arr[3] . $arr[4] . $arr[5] . $arr[6] . $arr[7] . $arr[8] . $arr[9] . qq{\n} ;
},
'list' => sub {
print STDERR $arr[0] , $arr[1] , $arr[2] , $arr[3] , $arr[4] , $arr[5] , $arr[6] , $arr[7] , $arr[8] , $arr[9] , qq{\n} ;
},
'quote' => sub {
print STDERR qq{$arr[0]$arr[1]$arr[2]$arr[3]$arr[4]$arr[5]$arr[6]$arr[7]$arr[8]$arr[9]\n};
},
});
% perl hoge.pl -c 10 2> /dev/null
(略)
list 67414/s -- -83% -83%
concat 385602/s 472% -- -1%
quote 389251/s 477% 1% --
% perl hoge.pl -c 1000000 2> /dev/null
(略)
concat 95.0/s -- -0% -50%
quote 95.3/s 0% -- -50%
list 189/s 99% 98% --
0944nobodyさん2010/05/26(水) 22:24:37ID:???
ああ、先にベンチしてる人がいた。
失礼。
0945nobodyさん2010/05/26(水) 22:49:18ID:???
こんなんもある。
http://d.hatena.ne.jp/dayflower/20060603/1149311938
これのサンプルちょっといじったけど、
test_1_の方は、シングルクォート最強他は糞状態。
test_2_の方は、qrだけアウト。クォート有/無、シングル/ダブル、qqでほぼ一緒。
リテラルでの比較は危険ってことか?とにかくシングルクォートが一番安定かも。
09469452010/05/26(水) 23:02:10ID:???
リテラルとか関係なかったわ。
とにかく上記test_1_は、シングルクォート以外糞遅い。

環境:XP home SP3, ActivePerl-v5.10.1 built for MSWin32-x86-multi-thread
0947nobodyさん2010/05/27(木) 12:45:24ID:4E5NJ/2P

よろしくお願いします。
Windows2000 + ActivePerl です。

CPANで初めてモジュールをインストールしました。

cpan> install Net::Twitter したところ、

各種ファイルが  C:\Perl\cpan\build  以下に配置され、
Net::Twitter は  C:\Perl\cpan\build\Net-Twitter-3.13003-Pu89O8\lib\Net\Twitter

にインストールされました。

当然、そのままでは

Can't locate Net/Twitter.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib
. C:\Perl\cpan\build) at test.cgi line 48.

と怒られてしまい、使えません。

普通に@INC 以下のディレクトリに配置されると思っていたのですが、
インストール時に何か指定を間違えましたでしょうか?

また、この後どうしたらよいか教えていただけると助かります。

0948nobodyさん2010/05/27(木) 17:00:17ID:???
正しく入ってるかperldoc Net::Twitterで確認して、cpanからi /Net::Twitter/で確認。
入ってなかったら、ppm install Net::Twitterでppmからインストール。
いじょ。
09499472010/05/27(木) 17:56:53ID:rbfUMQUI
ありがとうございましたー できました^^ 感謝感謝
0950nobodyさん2010/05/31(月) 13:14:59ID:jC7AE+TD
ActivePerl で GD::Graphを使ってグラフ書こうと思ってるのですが、
ドキュメント通り

my $graph = GD::Graph::chart->new(400, 300);

と書くと、

Can't locate object method "new" via package "GD::Graph::chart" (perhaps you for
got to load "GD::Graph::chart"?) at test.cgi line 42.

と怒られます。

GD::Graph::chartは確かに入って無さそうなのでinstallしようとして
ppmとCPANで調べると、 GD::Graph::chartそのものがなさそうなのですが

どうしたら良いでしょう。

use Chart; の方がいいんでしょうか。
0951nobodyさん2010/05/31(月) 13:28:06ID:???
>>950
chart is bars, hbars, lines, points, linespoints, mixed or pie
0952nobodyさん2010/05/31(月) 16:08:22ID:???
>>951
「linesとかbarsとかのチャート機能をnewして・・・」ってつもりで書いてあるんだなw
紛らわしいドキュメントだ

>>950
こういうときは「Perl モジュール名」で検索して、ひとまず動作する実例を探すって手もあるよ
2004年の記事だけどここなんかどうかな

GD::Graphを使ったPerlグラフ生成 - SourceForge.JP Magazine : オープンソースの話題満載
ttp://sourceforge.jp/magazine/04/04/15/0110216
09539502010/05/31(月) 16:28:31ID:jC7AE+TD

>>951さん
>>952さん

ありがとうございました。
できました^O^
09549512010/05/31(月) 16:49:18ID:???
>>952
うむ。

# CHART is bars, hbars, lines, points, linespoints, mixed or pie.
my $graph = GD::Graph::CHART->new(400, 300);

こう書いてくれたら、だいぶ分かりやすくなるのになぁ。
0955nobodyさん2010/05/31(月) 17:08:15ID:GblyjBgz
在日朝鮮人の生活保護の実態 〜働かず年600万円で優雅な生活〜

在日の40%の生活保護者所帯への援助は年間平均一所帯600万円。
年計2兆3千億円が「在日朝鮮人の生活保護費」になっている。

≪都市部の30代母親と小学生子供2人の生活保護費の内訳≫

生活費として月に『15万円』
母子家庭なら母子加算と呼ばれる追加支給が月に『2万3千円』
教育費として給食費・教材費など『7千円』
住宅費は上限が決まっているが『5万円』全額支給される。
これだけで合計月に『23万円』 

国民年金全額免除。上下水道基本料金免除。NHK受信料全額免除。
医療費は保険診療内なら全額免除。通院費も認められれば全額支給。
都営交通無料乗車券。JRの定期券割引。

年金は支払い免除のうえ“掛け金無しで”年金受給が可能である。
他にも名目を変え様々な給付や免除がある。

民潭の統計では在日朝鮮人約64万人中、約46万人が『無職』という。
つまり4分の3が無職である。 在日は「特権は存在しない」というが、
民潭が自ら「46万人が無職」と公言しているのである。
無職がどのように飯を食っているか考えればそんな嘘は通じない。

http://www.koreanantijapan.comze.com/index.html
09569502010/06/01(火) 15:43:22ID:0JV8JwVp

引き続き申し訳ないのですが、ActivePerl GD::Graphで質問です。

GD::Graphの文字がデフォルトの文字がカクカクで読みにくいので

use GD::Text;
GD::Text->font_path('C:/WINNT/Fonts');
$graph->set_title_font('arial.ttl','40');

など、arial.ttfをカレントディレクトリに移動したり色々変更してやってみてるのですが、
文字に全く変化ありません。

アドバイスいただけると助かります。m(_)m
0957nobodyさん2010/06/01(火) 19:50:00ID:???
ファイル名ぐらい見直そうぜよ
09589502010/06/02(水) 13:52:42ID:VCaPMnRA
失礼しました。
$graph->set_title_font('arial.ttf,'40');
修正して、以前状況かわりませんが、
自分でももう少し頑張ってみています。
0959nobodyさん2010/06/02(水) 15:11:11ID:???
>>958
志村、シングルクォート!
09609502010/06/02(水) 15:21:58ID:VCaPMnRA
>>959さん
途中で気が付き直しました。スミマセン。

フォントをカレントディレクトリに移して
GD::Text->font_path('./');
$graph->set_title_font('ARIAL' , 16)
$graph->set_title_font('ARIAL.TTF' , 16)

や、
$graph->set_title_font('C:\WINNT\Fonts\ARIAL.TTF' , 16);
も試したのですが、上手く行かないので

$graph->set_title_font(gdGiantFont);

としたら、フォントは見づらいのですが文字が大きくなって若干マシになりました orz
0961nobodyさん2010/06/02(水) 21:25:05ID:???
$graph->set_title_font(略) or die $graph->error; してみれば
libgd was not built with FreeType font support と出るんじゃないの
0962nobodyさん2010/06/02(水) 22:32:28ID:???
undef $ENV{HTTP_USER_AGENT};

このような使い方はできるのでしょうか。
どうか教えてください。
0963nobodyさん2010/06/02(水) 22:54:03ID:???
>>962
http://perldoc.perl.org/functions/undef.html
0964nobodyさん2010/06/02(水) 23:39:55ID:???
>>963
えーと、使えるという認識で宜しいでしょうか。
すみません。。
0965nobodyさん2010/06/02(水) 23:54:43ID:???
必要なのはundefの意味じゃなくて環境変数の意味だな。
0966nobodyさん2010/06/03(木) 09:40:00ID:???
LWPかなんかのUserAgentを隠蔽したいと予想してみる
0967nobodyさん2010/06/03(木) 16:49:28ID:???
杜甫々さんの全文検索WwwSearchを改造しようとしています。
http://www.tohoho-web.com/soft/wsrch.htm
英数字の全角半角を同一視する素人発想のルーチンを入れると極端に遅くなってしまいます。

★まず、入力フォームのルーチン内で、キーワード$wordに英数字が含まれているかどうか、
(ここを通る前に、入力されたキーワードの全角英数字は半角英数字に変換済です。)
if ($word =~ /[0-9A-Za-z]/) {
$wordeisu = 1; #英数字あり(検索時に全角→半角に統一)
} else {
$wordeisu = 0; #英数字なし(検索時の全角→半角をせず、スピードアップ)
}

★そして、検索ルーチン内で以下の処理を追加...  $lineは、全文を一行づづ取り出したものです。
if ( $wordeisu eq "1") { #検索語に英数字が含まれる場合、すべて半角英数字に統一
&jcode'tr(\$line,'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', '0-9A-Za-z');
         #ここはeucではないので、&jcode'tr(\$line,'0-9A-Za-z', '0-9A-Za-z');だと上手くいきません。
}

これで、入力された$wordも全文の一行$lineも半角英数字に統一され、
検索結果としては正しく出来るのですが、時間が10倍以上かかってしまいます。
(もちろん、この改造をしても英数字を含まない場合は時間がかかりません。)
なにか良い方法がありますでしょうか?
0968nobodyさん2010/06/03(木) 17:30:16ID:???
jcode.plとかいつの時代だよ。今のperlならutf8文字列にすれば
日本語でもtrできるから書きなおすのお勧め。
0969nobodyさん2010/06/03(木) 17:43:34ID:???
gethostbyaddr関数が使用できないレンタルサーバを使ってるんですが
この関数を使う以外にIPアドレスからホスト名を取得する方法ってありませんか
0970nobodyさん2010/06/03(木) 17:46:44ID:???
無い

それを防ぐ理由は名前を引くコストを削減したいから。


IP からホスト名を返す仕組みを他に用意するか、自分でゴリゴリ書くか。
0971nobodyさん2010/06/03(木) 17:54:09ID:???
うんその方法がちょっと分からなかったんですが、
↑の関数が使えなくてもWHOIS?とかいうのを使えばどうにかなるのかな?
0972nobodyさん2010/06/03(木) 18:20:16ID:???
dns引けばいんじゃね
0973nobodyさん2010/06/03(木) 19:10:30ID:???
DNS への問い合わせの仕方を学べば良いかと

ただ、タイムアウトが厳しいサーバーだとやらないほうがいいのでは?
とは思う


ログの活用なら、ローカルに落として活用するとかとか
0974nobodyさん2010/06/03(木) 19:43:21ID:???
Net::DNS もないのかな。
0975nobodyさん2010/06/03(木) 21:38:54ID:???
nslookupも入ってないのかな
0976nobodyさん2010/06/03(木) 22:24:04ID:???
ちょっと分からない用語が増えたのでその辺から調べればいいでしょうか
DNS 問い合わせ辺りでぐぐれば分かりますか
0977nobodyさん2010/06/03(木) 22:40:53ID:???
DNS 逆引き
がいいとおもいます。
0978nobodyさん2010/06/03(木) 22:46:09ID:???
というかその用途のためにゴリゴリ書いたことがあるんだけど、書いたところで力尽きたw
なんかUDPも通らないという制限もあったし。
09799502010/06/03(木) 22:57:17ID:oT6XV7cd
>>961 さん

$graph->set_title_font(略) or die $graph->error; すると、
何もエラー文字吐かずにdie してしまうので
原因が判らなかったんですよね。

Fontが対応していないということでしょうかね。
ちょっと探してみます。
ありがとうございます。
0980nobodyさん2010/06/04(金) 09:06:06ID:???
>>979
フォントが日本語対応じゃないとかいうオチないよな?
09819212010/06/04(金) 18:54:41ID:jTzgRcFe
また行き詰ってしまったので質問させてください。m(__)m


sub send_item2 {
my($kind, $no) = @_;
$send_id = unpack 'H*', $m{guild};

if (-f "$guilddir/$send_id/depot_g.cgi") {
open my $fh, ">> $guilddir/$send_id/depot_g.cgi";
print $fh "$kind<>$no<>\n";
close $fh;
}
}

長すぎエラーなので続きます。
09829212010/06/04(金) 18:56:26ID:jTzgRcFe
sub hokan {
my $target = shift;

if ($m{is_full_g}) {
$mes = "$max_depot_g個までしか保管することはできません";
return; }
if ($weas[$m{wea}][1] eq $target) {
$npc_com = "$weas[$m{wea}][1]を倉庫にいれました";
&send_item2($m,1, $m{wea});
$m{wea} = 0; }
elsif ($arms[$m{arm}][1] eq $target) {
$npc_com = "$arms[$m{arm}][1]を倉庫にいれました";
&send_item2($m,2, $m{arm});
$m{arm} = 0; }
elsif ($ites[$m{ite}][1] eq $target) {
$npc_com = "$items[$m{ite}][1]を倉庫にいれました\n";
&send_item2(3, $m{ite});
$m{ite} = 0; }
if ($npc_com) {
&get_depot_cg;
return; }
$mes = qq|どれを倉庫にいれますか?<br />|;
$mes .= qq|<span onclick="text_set('@ほかん>$weas[$m{wea}][1] ')">$weas[$m{wea}][1]</span> / | if $m{wea};
$mes .= qq|<span onclick="text_set('@ほかん>$arms[$m{arm}][1] ')">$arms[$m{arm}][1]</span> / | if $m{arm};
$mes .= qq|<span onclick="text_set('@ほかん>$ites[$m{ite}][1] ')">$ites[$m{ite}][1]</span> / | if $m{ite};
$act_time = 0;
}
09839212010/06/04(金) 18:57:38ID:jTzgRcFe
今回もゲーム製作(というか改造)です。
$kindはアイテムの種類(武器か防具か道具か)、$noはアイテムのナンバーです。$mは自分(プレイヤー)
アイテムを倉庫にいれるスクリプトを作ってみたのですが
どうもうまくいきません。
文法上のミスはないのですが暗転エラーが起きます。
$max_depot_gとか&get_depot_cgとかはこれより前に指定しています。
エラーの具合からsub send_item2で何か呼び出せないのかなと思い
いろいろ書き方も変えてみたのですけどもやっぱりエラーが起きます。
どこをどういう風に変えたほうがいいのでしょうか?

説明下手ですみません
09849762010/06/04(金) 19:10:22ID:???
http://sugutsukaeru.jp/support/84/
これでサーバを調べてみたんですがNet::DNSモジュールは使えないみたいです
逆引きについては諦めた方がいいんでしょうか
0985nobodyさん2010/06/04(金) 19:31:58ID:???
>>983
>&send_item2(3, $m{ite});

とりあえず、斜め見ただけでもここは
&send_item2($m, 3, $m{ite});
じゃねーのか?

それにしても、すっげー、気持ち悪いコード。
元コードがそれなら、悪癖が付くだけだから今すぐ止めるのをお勧めする。
勉強の為なら、1から rewrite すれば良いかも知れん。
レス数が950を超えています。1000を超えると書き込みができなくなります。