07/09/16 19:51:29
ム板Perlスレより 1 of 2
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: URLリンク(www.site-cooler.com)
[本]
リャマ: URLリンク(www.oreilly.co.jp)
駱駝: URLリンク(www.oreilly.co.jp)
Effective Perl: URLリンク(www.ascii.co.jp)
クックブック: URLリンク(www.oreilly.co.jp)
Perl ベストプラクティス: URLリンク(www.oreilly.co.jp)
Perl Hacks: URLリンク(www.oreilly.co.jp)
[オンラインマニュアル] (追加)
最新のドキュメント: URLリンク(search.cpan.org)
perl5.8.xのドキュメント(一部): URLリンク(www.kt.rim.or.jp)
perl5.005_03 のドキュメント: URLリンク(www.kt.rim.or.jp)
日本語ドキュメント検索: URLリンク(www.cpan.jp)
perldoc.jp: URLリンク(www.perldoc.jp)
Perldoc.com: URLリンク(www.perldoc.com)
3:nobodyさん
07/09/16 19:52:04
ム板Perlスレより 2 of 2
[モジュール]
CPAN.com: URLリンク(search.cpan.org)
河馬屋二千年堂: URLリンク(homepage3.nifty.com)
[テクニック]
Perlメモ: URLリンク(www.din.or.jp)
Perlのページ: URLリンク(homepage1.nifty.com)
Perlの小技: URLリンク(homepage3.nifty.com)
[Perl5.8Unicodeメモ]
URLリンク(www.pure.ne.jp)
URLリンク(www.namazu.org)
URLリンク(www.lr.pi.titech.ac.jp)
4:1
07/09/16 19:56:03
独断でPBPとPerl Hacksを追加してます。
5:nobodyさん
07/09/16 20:04:09
>>1
お疲れ様です。
前スレ最後に質問してしまいました。
こちらに再投稿させていただきますm(__)m
use Math::BigFloat;
my $tr = Math::BigFloat->new((@array * (1-0.68)/2));
と書くの大変なので
my $a = use Math::BigFloat;
my $tr = $a->new((@array * (1-0.68)/2));
と書いてみましたがエラーでした。
こういう意図を実現するのは無理ですか?
小数の計算をさせた上で配列のインデックスにする場合はBigfloatしておかないと危ないです。
やってない$trに
$array[-($tr +1)];
とすると実質インデックスが2個変わってしまいます。
15.999だったのが、+で16になり、さらに1が足されて17になる。
そんな現象を確認しました。
簡単な記述方法はないでしょうか。
6:nobodyさん
07/09/16 20:22:00
>5
use bignum
7:nobodyさん
07/09/16 20:40:18
>>6
???
どういうことですか?
英語読めませんが、URLリンク(perldoc.perl.org) を見てやったところ
全くMath::BigFloatが不要になってしまいました。
冒頭でuse bignumをしておけば小数点の変な誤差が発生することは皆無になるんですか?
代償として重くなるとかがあるので、軽くしたいなら面倒でもMath::BigFloatを使えばいい。
簡単にしたいならbignumを使えばいい?
8:nobodyさん
07/09/16 20:56:51
use bignum;
my $tr = (@array * (1-0.68)/2);
メチャクチャな計算になりました。
@arrayは100なので16になるべき計算なのに50が入ってました。
もちろんbignumをつかわなければ16が入ります。
bignumを使うと他にも多大な影響があるようですね。
どういう基準で影響を与えてくるんでしょうか。
9:nobodyさん
07/09/16 21:58:06
>>前996
$#test
で最後の添え字をゲット。
10:nobodyさん
07/09/16 23:09:56
>8
再現しない。再現する最小コードは?
use strict;
use warnings;
use bignum;
my @array;
$array[99] = 0;
print scalar(@array), "\n"; # 100
my $tr = (@array * (1-0.68)/2);
print "$tr\n"; # 16
11:nobodyさん
07/09/16 23:24:10
>>10
#!/usr/bin/perl
#京
#use bignum;
my @array;
for (1..100){ push @array,$_ }
@array = sort {$a<=>$b} @array;
my $tr = (@array * (1-0.68)/2);
print $tr;
これでできると思います。EUCコードで記述されています。
use bignum;をコメントアウトするかしないかで表示が変わります。
本来とは違う挙動をしているのでしょうか?
12:nobodyさん
07/09/16 23:35:36
普通にprintしていたものを、突如ファイルに納めたくなりました。
print 1;
というのが何千行もあった場合
print FH 1;
とやりなおすのは間に色々な式が挟まってる為一括ではできません。
標準出力先をファイルハンドルに変える設定などが冒頭でできるなら一発でできると思うのですが。
13:nobodyさん
07/09/16 23:36:59
select関数でおk
14:12
07/09/16 23:53:18
>>13
うわ!
感謝感激恐悦至極にございますm(__)m
15:nobodyさん
07/09/17 00:17:12
>11
俺のとこだと再現しないわ。環境は
This is perl, v5.8.8 built for MSWin32-x86-multi-thread
This is perl, v5.8.8 built for cygwin-thread-multi-64int
16:nobodyさん
07/09/17 00:32:28
>>11
どっちも16になるぜよ
17:nobodyさん
07/09/17 00:44:08
>>15-16
This is perl, v5.8.1 built for MSWin32-x86-multi-thread
(with 1 registered patch, see perl -V for more detail)
5.8.1のみの問題ですかね?
そんなに違いがあるのでしょうか。
一体何なのでしょうか?
ちなみにbignumって何に使うためのものなのですか?
浮動小数の誤差関係に使えるというのは一つですよね。
本筋はそれですか?
だとしたらこんな影響が出てしまう理由がわかりませんし。
EUCコードでやっておられますよね?
それかもしかしたらbignumの方がバージョン変わってるとか?
18:nobodyさん
07/09/17 06:36:57
>>17
1. 再現せず。きちんと計算される。
This is perl, v5.8.1-RC3 built for darwin-thread-multi-2level
2. bignum は BigFloat と Math::BigInt, Math::BigInt::Lite のラッパー
それぞれググレ。でかい方に関しては
perl -le 'print 2**2**2**2**2' # => inf
perl -Mbignum -le 'print 2**2**2**2**2' # => やってみ?
とか
perl -le 'print 10**16' # => 1e+16
perl -Mbignum -le 'print 10**16' => 10000000000000000
効能が分るだろ。
19:nobodyさん
07/09/17 07:36:15
前スレ993へ
% cat Hoge.pm
package Hoge ;
use 5.005_02 ;
use vars qw( @ISA @EXPORT ) ;
use vars qw( $hoge ) ;
use subs qw( hoge ) ;
use Exporter ;
use Cwd ;
@ISA = qw( Exporter ) ;
@EXPORT = qw($hoge hoge ) ;
$hoge = 42 ;
sub hoge{ return 42 ;}
1;
% perl -Mstrict -Mwarnings -MHoge -le 'print $hoge; print hoge'
ってか朝っぱらから何やってんだろ俺。
20:nobodyさん
07/09/17 07:37:27
ああ、いらんモジュール use しとるし orz...
21:nobodyさん
07/09/17 11:15:49
-wスイッチを使うと警告を出すというんですが、これは一体どういう意味の警告なんですか?
-cは確か構文チェックをしてくれるわけですよね。
22:nobodyさん
07/09/17 11:37:55
print scalar(grep{$_>15}(1..99));
>84
print scalar(1..99);
>何も表示なし
print scalar(0,1,2);
>2
リストをscalarに渡すとどうなるかというのが知りたかったのです。
要素数を出してくるのか末尾要素だけ評価するのか。
真ん中のやつは何も評価しなかったようですが。何故なんでしょうか。
それとgrepでリストが作られるのかと思っていたら配列が作られているのですよね?これは。
scalar(配列) とすると要素数が出てきて
scalar(リスト) とすると末尾要素が評価される
scalar(n..m) とすると何も起こらない
grepの返り値は配列だということでokですか?
23:nobodyさん
07/09/17 11:46:15
1/0
これをやらせるとIllegal division by zero at hogehogeと警告されます。
0/1
こっちは警告なしなので大丈夫なんだと思いますが。
あまり気にしてないと、無自覚のうちに0による除算が発生してしまうことってありますよね。
意識的に0による除算が行われないよう、例えば
my ($r,$p) = (rand,rand);
print $r/$p;
こういう場合は
my ($r,$p) = (rand,rand);
if ($p>0){ print $r/$p }
と保険?を掛けておくのが推奨されるコーディングなのでしょうか?
24:nobodyさん
07/09/17 11:56:26
>>22
perl -w -le 'print scalar (1..99)'
Use of uninitialized value in range (or flip) at -e line 1.
range 演算子は、君の希望の挙動の他に
while( <> ){
print if ( /^\s+/ .. /^$/ ) ;
}
つう風にも使う。で、上述ではperlの中の人がどっちの機能
を求めているのか判断出来ない。=> エラー出して保留
∴まともに機能してないよ
25:22
07/09/17 12:16:00
>>24
while( <> ){
print if ( /^\s+/ .. /^$/ ) ;
}
読めないorz
正規表現の部分は「先頭から空白文字が1個以上あるか」「中身が空であるか」の二つですね。
で、..この範囲演算子はどういう意味でしょう?
ついでにwhileの評価式自体が皆目検討がつきません。
26:nobodyさん
07/09/17 12:24:45
>>25
例だからあまり意味のないものを書いたんで。。。
「先頭から空白文字が1個以上ある行」から
「中身が空であるか」まで
を出力せよ。
と言う意味になります。ホントは/^\S+/ のつもりだったのよw
後は、、、ぐぐれ。
27:21
07/09/17 12:26:13
すいません。試してるんですが。
Use of uninitialized value in addition (+) at 行数
こういうのやsubtractionとかがちょくちょく出てくるんです。
「初期化されてない値を使ってる」みたいな意味だと思いますが、
具体的にどういうエラーなのかわからず再現ができないでいます。
28:22
07/09/17 12:32:34
>>26
う~んどうしてそうやって動くのでしょうか?
一旦中身が空である行を迎えたら自動でループはlastされるのですか?
ifに掛けられるのは1行ずつですよね。
う~ん・・・
29:nobodyさん
07/09/17 12:37:27
>>28
左の正規表現が真 => スイッチオン
右の正規表現が真 => スイッチオフ
for( 1..1000){
print $_ if $_ == 10 .. $_ == 100 ;
}
つかまじでググってくれ。
21氏は質問の意味自体が理解不能だ。
俺は消えるので、相手してくれる人はいなくなるかもしらんが
頑張れ
30:21
07/09/17 12:38:16
my $pl = undef;
my $ze = $pl + 1;
my $we = $pl - 1;
レスこないのでガンばてたら、これでadditionとsubtractionエラーが再現できました。
この二つのエラーが出たら未定義値が格納されてる変数が計算に使われてるって思っておけばいいですよね。
でも一応スクリプト自体は動くんですが、-wはuse strict程度の感覚なのですか?
31:nobodyさん
07/09/17 14:45:52
>>26
それ範囲演算子じゃないから。普通は使いません、ていうか使うな。
明らかに不適切な例を唐突に持ち出して何がしたいんだか。
32:nobodyさん
07/09/17 15:07:46
>>31
ぐぐっても分らなかったのかw
33:22
07/09/17 16:17:24
>>32
確かにまだ理解できていませんが、>>31は僕ではないです。
回答してくれる方にそんな不遜な態度は取りません。
34:nobodyさん
07/09/17 16:27:17
仕事押しつけられて、戻って来たらなんかオレ煽られてんなあ。
31=21 か?
Programming Perl の P135 の範囲演算子の項を読んだ後に
まともに煽ってくれ。つか突っ込みどころは他にもあるんだから。
35:nobodyさん
07/09/17 18:09:34
> Programming Perl の P135 の範囲演算子の項を読んだ後に
> まともに煽ってくれ。つか突っ込みどころは他にもあるんだから。
とりあえず、該当箇所をスキャンしてうp汁。
36:nobodyさん
07/09/17 18:24:44
>>35
URLリンク(perldoc.jp)
の範囲演算子の項はほぼ上述書物と同じだ。
37:22
07/09/17 19:13:34
とにかく仲良くして下さい。
38:nobodyさん
07/09/17 19:21:59
scalar って書いてあるから、スカラコンテキストで評価するか。
↓
> スカラの ".." の被演算子が定数表現であるときは、
> その被演算子は暗黙に、変数 $. と比較されることになります。
↓
ちょっくら$.と比較するか。
↓
$.にundef入ってるし。
↓
Use of uninitialized value
39:nobodyさん
07/09/17 20:57:51
やっぱりどうもプログラム系のスレの住人って人とのコミニュケーションが下手っぽいよね。
変な皮肉を言ったり、あえて言葉足らずにしてみたり。
そういう悪い癖に自分で気付いてるんだろうか。
こういうところが、「キモイ」イメージが付いてしまう原因なんだろうな。
40:nobodyさん
07/09/17 21:44:30
変な分析したがりが一番キモい
41:nobodyさん
07/09/17 23:15:28
つまりここにいる奴は全員キモイってことだな。
42:nobodyさん
07/09/18 01:53:41
ま、いくら挑発しても答えてやらないけどな
43:nobodyさん
07/09/19 19:41:21 uZuxrlKv
Perl の CGI::Application モジュールを使ってアプリを作成しているのですが、
デバッグの仕方でつまづいています。
というのも CGI::Application の場合 ランモードのそれぞれのメソッドからブラウザに表示させたい
htmlを return しますよね?
で、その途中で 勝手に「 print $hensu; 」みたいにやっても画面上には表示されません。。。
もちろん「 return $hensu; 」とやればその変数の内容は表示されるのですが、複数の変数の値を
一度に表示させたいのですーー。
こんな時みなさんどうしてるのでしょう???
44:nobodyさん
07/09/19 19:47:18
V に TT とか使えばいいんじゃね?
45:nobodyさん
07/09/19 20:52:24
ヘッダを出力する前にprintしてもブラウザには表示されないよ
CGI::App::Plugin::DebugScreenとかLogDispatchとか使ってたっけかな
手っ取り早いのはData::DumperとかYAML使ってwarnでダンプとか
httpdのエラーログにね
46:nobodyさん
07/09/19 23:34:44
CGI::Application ってテストサーバないのか。ダサいな。
47:nobodyさん
07/09/19 23:44:49 BE:914760566-PLT(15017)
あるよ
URLリンク(search.cpan.org)
URLリンク(search.cpan.org)
48:nobodyさん
07/09/20 00:36:25 FmGzC+A0
DBIを使用してDB処理をした場合、sqlのログってどうしてます?
プリペアードステートメント使っていますが、肝心の値の部分が「?」なので、実際に流れるクエリが分かりません。
49:nobodyさん
07/09/20 09:16:22
モジュールの質問ならpodくらい見てからしろよ
URLリンク(search.cpan.org)
>DBI->trace($trace_setting)
>DBI->trace($trace_setting, $trace_filename)
>DBI->trace($trace_setting, $trace_filehandle)
>$trace_setting = DBI->trace;
50:nobodyさん
07/09/20 12:35:47 yNzQPcIL
>>44
>>45
43です。レスありがとうございます。
なるほど、簡単にはいかないんですね。。CGI::Applicationしょぼ!
結局グローバルな変数(ハッシュ)に変数の値を保存していって
cgiapp_prerun (メソッド名間違ってたらスマソ)でその変数に
値が入っていればブラウザに表示するという方法でいきます。
ていうかこれぐらいのこともできないのかよ。CGI::Application
51:nobodyさん
07/09/20 13:40:05
ヘッダの送る前にprintしてもブラウザに出力されないのは当たり前だろ・・・
自分の無知を認識しろよ
52:nobodyさん
07/09/20 13:45:10
だからwebprogは揶揄される
53:nobodyさん
07/09/20 14:21:55
今時 CGI::Application なんか使うなよ…
54:nobodyさん
07/09/20 19:18:46
じゃあ何使えって言うんだよ。
どこのレンタルサーバでも使えるような方法で頼む。
55:nobodyさん
07/09/20 21:46:49
if文ダラダラ使えってことじゃね
56:nobodyさん
07/09/20 21:49:39
あるいはR信者が言語批判したかっただけとか
57:nobodyさん
07/09/20 21:50:20
yukiwiki 的にサブルーチン呼べば?
値は PATH_INFO とかでとればよい。
58:nobodyさん
07/09/21 04:57:02 9/Wk3rtw
質問です。
ネットに落ちてるサンプルを見ながら、アクセス解析や掲示板などを書いて
練習しているのですが、データを書き込んでいく空ファイルは
どこのサンプルでも自前で事前に用意しています。
これを、日時ごとに070921.dat、070922.dat…のように自動生成させたいのですが、そのようなことは出来ないのでしょうか?
よろしくお願いします。
59:nobodyさん
07/09/21 05:11:32
問題なく出来ると思う。
60:nobodyさん
07/09/21 05:15:49
テキスト表示のアクセスカウンタを作っているのですが、<img>タグで呼び出すとテキストを返せません。
SSIが使えないならば、直接CGIにアクセスさせるしかないんでしょうか??
61:nobodyさん
07/09/21 09:28:25
質問させてください。
GDでファイルを生成→表示というスクリプトを組んでいますが
どうやら生成されるまえに表示する処理が実行されてしまい。うまくいきません。
リロードすれば表示されるようにはなるのですが・・・
生成されるまで待つ→表示処理実行
という事を考えて生成→slepp 2とか10;→次を実行
と、してみましたがうまくいきません。
生成完了するまでウェイトをかける方法を教えていただければありがたいです。
よろしくお願いします。
62:61
07/09/21 09:35:31 EZVVl+6I
自己解決しました。
sleepでOKでした。
よくみると
コメントアウトしてましたw
63:nobodyさん
07/09/21 14:07:32
>>60
scriptタグのsrcでアクセスさせる。JavaScript。
64:nobodyさん
07/09/21 20:24:02 yGE03KVM
winXPsp2とactive perlでローカルテストをする時の質問なのですが、
例えば print 1; という命令のあるplファイルをダブルクリックしても1が表示されません。
いや正確には一瞬何かが出てきてるっぽいんですが、閉じるの早すぎです。
コマンドプロンプトから実効命令をするとprint先がコマンドプロンプトに来るので、
勝手に閉じることはないようですが。
いちいちコマンドプロンプトやらずに簡単なコードテストの時はダブルクリックで済ませたいのですが
方法ありましたら教えてください。
65:nobodyさん
07/09/21 20:46:57
>>64
END{<STDIN>}
とか書いとけば。
66:64
07/09/21 21:00:38 yGE03KVM
>>65
ありがとうございます。
うまく出ました^^
endって一体なんなのですか?
perlの説明サイトとかで関数調べてendありませんし。
最後にやるってことですか?
となると<STDIN>が閉じさせない命令の本体になるんでしょうか?
どういう理屈なんでしょうjか。
67:nobodyさん
07/09/21 22:37:24
>>66
URLリンク(perldoc.jp)
perlmodのBEGIN, CHECK, INIT and END BEGIN CHECK INIT ENDのところ。
プログラムの終了するところで、
<STDIN>で、コンソールの入力待ちをしてる。
68:64
07/09/21 23:02:02 yGE03KVM
>>67
コンソール???あの黒い画面のことかな。
で、試しに適当に打ち込んだら本当に入力できました。
最後にenterを押したら画面が消えました。
perlの方にはしっかりとその内容が送られてるんですかね?
試しに
my @array = <STDIN>;
print $array[0];
としてみましたが、今度はenterを何度押しても画面が閉じません。
配列に入れてるから無限に取るっぽいですね。
my $scalar = <STDIN>;
print $scalar;
END{<STDIN>}
としたらうまくいきました。
任意の内容を入力してenterした瞬間に制御が一瞬コードに行ってprint $scalar;が実行されました。
ローカルでやるときはこうやって引数を取るというのも面白いですね。
物凄い面白いことを教えていただいて感謝です。
69:nobodyさん
07/09/22 13:27:49
質問です。
Class::DBI使ってDB操作する場合、二つのレコード間で主キー以外のデータを交換するには
どのように書いたらいいですか?
70:nobodyさん
07/09/22 15:58:05
#! /usr/local/bin/perl
print "content-type:text/html\n\n";
print "<html>\n";
print "<head><title>タイトル</title></head>\n";
print "<body>\n";
print "<h2>テスト</h2>\n";
print "</body>\n";
print "</html>\n";
↑これでInternal server error 500になる。
ただしレンタルサーバー上ではエラーだが、
自分のパソコンでやったらちゃんと表示される。
ソースにもし間違いがあったら
場所と対処法を具体的に指摘しろ。
71:nobodyさん
07/09/22 17:15:55
>>70
態度でかいぞ。
そんなやつには教えてやらん。
#! と /usr の間に半角スペースが入ってるのが問題とか言わん。
72:nobodyさん
07/09/22 17:44:10
>>68
和んだ、俺も10年くらい前Cやった時そんなだった。
73:69
07/09/22 19:54:58
すみません。解決しました。
74:nobodyさん
07/09/22 21:34:17
>>70
パーミッションはちゃんとやってあるのか?
とりあえず雑魚が粋がるのはやめておけ。
75:nobodyさん
07/09/22 22:09:17 VEv2R0s3
スレリンク(php板:369-372番) から来ました。
URLリンク(ws.strikeiron.com)
このサービスを SOAP::Lite から使いたいんですが、ドキュメントのWSDL関連部分を読んでも
use SOAP::Lite;
print SOAP::Lite
-> service('URLリンク(www.xmethods.net)')
-> getQuote('MSFT');
としか書いてません。
WSDLを見てみると、GetStockQuotesメソッド(オペレーション?)のパラメタとして
QuoteTicker(MSFTとかの文字列)だけでなく、オブジェクト構造みたいなのを組んで
メアドなども渡さないといけないようなんですが、どう書けばいいんでしょうか。
76:75
07/09/22 22:43:31
URLリンク(guide.soaplite.com)(wsdl)
> SOAP::Liteでは今のところWSDL 1.1のサポートは限定されているが〔中略〕、
> 複雑な型(types)を記述に含まないサービスにはアクセス可能だ。
と書いてあるので、無理なのかもしれませんね・・・
77:75
07/09/23 03:01:09
やっと自己解決・・・
URLリンク(wsparam.strikeiron.com)
という、もっと単純なWSDLを使用。
URLリンク(www.strikeiron.com)
ここの下のほうにPerlのサンプルが(も)置いてあるので、それを改造。
わかりやすいのでSOAP初心者にはおすすめかも。
78:nobodyさん
07/09/23 03:53:09
>>74
なぁーんてこった!
cgiファイルのパーミッションを
755にしたらそれで動いたぜ
そんなこと教科書には
どこにも一言も書いてなかった!
ローカルで動かす教科書だからかな?
サノバビーィーーーッチ!
それでパーミッションが500でも
動くのはなんでだ?
79:nobodyさん
07/09/23 05:27:46
それくらいググれカス
80:nobodyさん
07/09/23 06:45:28
やはりWebProg板はレベルが低いな。最高。
81:nobodyさん
07/09/23 06:53:38
だって初心者スレだもん。いいじゃない。
なんか、すごくレベルの高い質問が最近多すぎな気がする。俺のレベルが低いだけなんだろうけどw
Webprogなんだから、動けばいいじゃない的な考えがイクナイ?
82:nobodyさん
07/09/23 07:50:40
if ( $hoge =~ /$moge/ ){ print "もげら" }
って感じで書いて$mogeが展開されてくれないみたいなんだけど、
特別な書き方があるのかな。
ぐぐったけど正規表現ばかりで、変数をつかってる例が全然見つからなかったんだけど、
こういう記述方法自体があまり一般的じゃなくて、他の書き方があるのかな。
教えてちゃぶだい。
83:nobodyさん
07/09/23 08:00:28
>>82
$mogeの中には何が入ってるの?
2バイト文字関係とか、文字コードでこけてる可能性もありそう。
84:nobodyさん
07/09/23 11:07:04
>>82
変数使うときはquotemeta()くらいはかましときなはれ。
85:nobodyさん
07/09/23 14:57:13
サンクス!
quotemetaでいけたよ。
1)index($hoge, $moge) でもやったけどダメ
2)auotemeta() してみた
3)$hoge =~ /$moge/ で成功!
4)でもなぜかそれ+ index($hoge, $moge) じゃダメ
って感じだった。
中に入ってるのはどちらもEUCの2バイト文字列なんだけど、
なぜか$mogeが空の文字列として扱われてしまってるっぽい動作だった。
print $hoge.$moge;とかで出力するとちゃんと出力されるんだけどね。
良く分からないけどとりあえず解決はしてよかった。
ありがとう。
86:nobodyさん
07/09/25 00:47:19 XOfpdsF8
はじめまして。
use strict;
use diagnostics;
という宣言をした状態で、
Name "html::copyright" used only once: possible typo at bbs.cgi line 554 (#1)
というwarningが出ました。
html::copyrightは、htmlモジュール で、
$copyright = 'hogehoge ';
などというように、宣言されています。
warnings は、他のモジュールの変数は見てくれないのでしょうか?
実は、html::copyright 以外にも数十個でていて、紛らわしいことこの上ないです。
(他のwarningにも混じってしまい、識別が困難です)
このwarningをつぶしたいのですが、何とかする方法はないでしょうか?
87:nobodyさん
07/09/25 00:49:11 XOfpdsF8
x 実は、html::copyright 以外にも数十個でていて、紛らわしいことこの上ないです。
o 実は、html::copyright 以外にも used only once: possible typo が、数十個でていて、紛らわしいことこの上ないです。
used only once: possible typo・・・
は、意味は、わかっておりまして、
一度しか使ってないので、ミスじゃない?ってことなのですが、
実際には、ちゃんと、htmlモジュールで代入してから、mainで参照しているのに・・・ということです。
88:nobodyさん
07/09/25 03:43:51
>>87
Use of uninitialized value
が続かないなら、理由が分からない。
一度ourで宣言してみたらどうなる?
89:86
07/09/25 17:25:00 XOfpdsF8
試しに、最小限のコードを書いてみたら、
-----test_pm.pm-------
package test_pm;
use strict;
use warnings;
our $hoge = "test foo bar";
1;
-----main.pl---------
use strict;
use warnings;
use test_pm;
print $test_pm::test;
-------------------
> perl main.pl
Name "test_pm::test" used only once: possible typo at main.pl line 5.
Use of uninitialized value in print at main.pl line 5.
ちゃんと、Use of uninitialized value でて、実行不能でした orz
ourでも、myでも同じでした
>>86は、CGIなんですが、なんで、ちゃんと動いているんだろ・・・
もうちょっと解析してみます。
90:86
07/09/25 17:28:00 XOfpdsF8
x print $test_pm::test;
o print $test_pm::hoge;
スペルミス。
これでも同じ結果です。
91:nobodyさん
07/09/25 21:26:37 o7XeBw4v
先日このスレで
END{<STDIN>}
を教えてもらったものです。その節はありがとうございました。
ローカルチェックをする時に、ダブルクリックだけでいいという大変便利なものなのですが、
エラーが出てるときに一瞬で画面が閉じてしまうのです。
ちなみにその時のエラーはuse strictによるmy使え先刻でした。
途中でエラー中断してるのでEND{}まで行かないのは至極当然な話ですが、
エラーの時はエラー内容をSTDINに出力させりょうと思うと大変なことになりますか?
エラーにも色々あるので難しいかもしれませんが、用はコマンドプロンプト画面に出ることを
代わりにそのままSTDINに出力してもらえばいいわけなのですが。
92:nobodyさん
07/09/25 21:28:39
>>89
CGIってことはサバにあるわけだ。
つまり君がローカルで試してるファイルとは違うファイルが動いてる可能性もあるわけね。
93:nobodyさん
07/09/25 21:36:47
>>91
コンソールを開いておけない余程の事情でもあるの?
94:91
07/09/25 22:20:58 o7XeBw4v
>>93
いえ、単純にちょっとしたコードテストをしたいときにわざわざ
1.コマンドプロンプト画面を開いて
2.ファイルがあるフォルダを開いて
3.黒画面にファイルをD&Dしてenter
という手順を踏むのが面倒だといつも思っていたのです。
1.ファイルをダブルクリックする
これだけで済むなら最高です。
意外に大きな差かなって思いまして。
黒画面へのエラー内容出力ってどういう仕組みで行ってるんでしょうか?
きっとperlの方から出してるんだと思いますが、その出し先をSTDINに変えればできるのでは?
とか思ったり。
95:nobodyさん
07/09/25 22:46:42
>>94
同じファイル?ならコンソール開きっぱなしで1回目だけ「perl スクリプト名」で実行しておけば連続テストは↑+Enterで済む。
慣れにもよるけど多分ダブルクリックより速く操作できる
エラーはSTDERRに出力される。
誤解しているようだけどSTDINは標準入力であって出力ではない。標準出力はSTDOUT
96:91
07/09/26 00:17:27 zmZEFb0X
>>95
2回目以降は確かに楽なんですけど。
STDERRに出力されてるので、END{<STDIN>}で出る入力受付画面には出力されない?
STDOUTへの分はきちんと表示されますし。
STDERRの取得方法があるのでしょうか?
97:nobodyさん
07/09/26 00:27:31
>>89
これ、ActivePerl 5.8.8.822で普通にtest foo barと表示された
ダメ出しも無し
98:nobodyさん
07/09/26 00:37:06
>>96
ラクダ本より
>内部的に発生する例外によって終了する場合でも、ENDサブルーチンは呼び出される(ただし、シグナルによって撃沈された場合は除く)
とあるようにENDそのものが実行されない。自分で(できれば)トラップする必要がある。これはsigtrapを使えばよい。
…が、それくらいなら最初からコンソールから使うことを強く勧める。元々ダブルクリックで起動するようには設計されてないし。
99:nobodyさん
07/09/26 00:41:02
>>91
echo off
perl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
pause
みたいなバッチファイル作って、,plに関連付けして置くぐらいかなぁ。
統合型開発環境(みたいなエディタ)を使うと、その場で実行して、
その場で結果表示できたりするので、そういうの使うと便利だよ。
100:nobodyさん
07/09/26 00:56:23
しまった。
> perl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
は
> perl %1 %2 %3 %4 %5 %6 %7 %8 %9
だた。
101:101
07/09/26 02:22:27
型グロブというものについて
教科書を今日読んで理解したので
型グロブについて誰か質問してください。
説明します。
102:nobodyさん
07/09/26 05:15:12
型グロブをうまいこと使っているモジュールを列挙してください。
103:nobodyさん
07/09/26 13:38:32
>>99-100 perl %*
104:nobodyさん
07/09/26 17:01:12
>>101
ありがとうございます!
スカラー変数
配列変数
リスト
ハッシュ変数?
それらのリファレンスなど
上記との違いを説明してください。
そして何の為にグロブがあるのですか?
僕は素人なのでまだ使うべきところに出会っていません。
いや使えてたらもっと簡単につくれてたのかもしれません。
105:nobodyさん
07/09/26 18:35:06
ビウログってなんですか?
106:nobodyさん
07/09/27 02:15:46 rW8f5K4d
質問です。
if($Fm{'form'}){ 処理 } #フォームに何か入力されていれば処理
上記の場合
フォームに0と入力した場合もスルーされてしまいます。
認識させるにはどのような書き方になるのでしょうか。
if分の前に
$Fm{''form'}=sprintf( "%c", $Fm{''form'} );
のように文字列にするという方法を思いついたのですが、ちょっとスマートじゃないなと思っています。
よろしくおねがいします。
107:nobodyさん
07/09/27 02:23:35
if($Fm{'form'} ne ""){ 処理 }
108:nobodyさん
07/09/27 02:35:47
>>107
素早い回答ありがとうございます。
その手がありましたか。目からうろこでした。
ありがとうございます!
109:nobodyさん
07/09/27 03:41:52
length とかも
110:nobodyさん
07/09/27 06:29:35
1000:1234:abcd:2000::/120のような省略されたIPv6のアドレスを展開して
リストに格納したいのですが、プレフィックス長(=120)に応じて
展開する部分が一部不完全なので教えてください。
下のコードだと、下4桁の連番生成しかできない上に、プレフィックス長が4の倍数でない場合にうまくいきません。
これを4の倍数でなくても&下4桁以上もちゃんと展開できるようにしたいのですが…。
たとえば、1000:1234:abcd:2000::/127であれば、
1000:1234:abcd:2000:0000:0000:0000:0000
1000:1234:abcd:2000:0000:0000:0000:0001
の二つが出来てほしいのです。
できれば10進数で連番作ったものを16進数変換してる部分もなんとかしたいんですけど…。
sub _Gen{
my ($addr, $pref) = split(m|/|, $_[0]);
$addr = &_Format($addr); # ここで省略のない32桁の英数字を4桁ごとに:で区切ったものになる
$addr =~ s/://g;
if($pref % 4 != 0 || $pref < 112 || $pref > 128){
return;
}elsif($pref == 128){
1 while $addr =~ s/(\w+)(\w\w\w\w)/$1:$2/;
return $addr;
}
my $fixed = substr($addr, 0, $pref / 4);
my $keta = (128 - $pref) / 4;
my (@addrs, $tmp);
for(my $i=0; $i<16**$keta; $i++){
$tmp = sprintf("$fixed%0${keta}x", $i);
1 while $tmp =~ s/(\w+)(\w\w\w\w)/$1:$2/;
push(@addrs, $tmp);
}
return @addrs;
}
111:nobodyさん
07/09/27 06:34:39
defined 常考
112:101
07/09/27 09:02:14
型グロブについて。
スカラー変数
アレイ
ハッシュ(連想配列)
この3つを同時に
扱うために、型グロブは
生まれてきたのです。
113:101
07/09/27 09:04:34
例えば
$a ←これはスカラー変数
@a ←これはアレイ(配列)
%a ← これはハッシュ(連想配列)
aの左側についてる記号は
$だったり
@だったり
%だったりとそれぞれ違うが
記号の右側はaで全部統一されている。
このとき
あ
「aの型グロブ!」
と宣言すれば、
$a @a %a
この3つを全部同時に扱うことができる。
これが型グロブ。
114:nobodyさん
07/09/27 09:14:21
こいつはOmotiとかタクトくせぇ
115:101
07/09/27 09:59:46
つまり
4年1組と
4年2組と
4年3組が
いたとして、
「4年生全員集合!」
と言うと、4年生が全員集まってくるのです
これが型グロブです。
116:nobodyさん
07/09/27 11:04:43
全員集まってくることがどういうことか(メリットなど)
を語らないと通じないでしょ
肝心な部分が抜けてるポ^^
117:nobodyさん
07/09/27 13:26:43
どっちも4年生なら配列かハッシュ使えば済むでしょ
どっちかというと「全学年の1組集合」の方が近いのではないかと。
118:nobodyさん
07/09/27 13:32:25
その例なら多重配列使いたいからそれもちょっと…
119:118
07/09/27 13:33:29
ごめん勘違いしてた
120:nobodyさん
07/09/27 13:34:07
この聞いてjも居ないのに延々と騙ろうとするのはタクトに違いない。
121:nobodyさん
07/09/27 13:58:24
ねぇねぇ
なんでおじちゃんたち
DBが全部やってくれることを一生懸命書いてるの?
122:nobodyさん
07/09/27 14:53:03
DB使ってないしぃ
123:nobodyさん
07/09/27 15:13:12
DB使わない理由って やっぱサーバーにないから?
それとも手をつけたことがない?
後者なら絶対覚えたほうがいいよ。
生産効率が全然ちがうよ
124:nobodyさん
07/09/27 16:59:17
>>110
これじゃだめなん?
use Net::CIDR;
print join("\n", Net::CIDR::cidr2octets("1000:1234:abcd:2000::/127"));
125:nobodyさん
07/09/27 17:11:50
わざわざDB使うほどの事してないしぃ
ゴミ箱にごみを捨てるのは、わざわざ執事雇って呼んで捨てさせる程の事じゃないしぃ
126:nobodyさん
07/09/27 19:38:27
>>124
うああああ、助かった
こんな便利なものがあるなんて!
ありがとう~!
127:nobodyさん
07/09/27 20:05:25 fs1IYXrA
色々なPerlがあるようですが、
rand ≠ rand(1)
となるものはあるのでしょうか?ちなみに自分のactiveperl fow win32 5.8は
rand == rand(1)
になっていると思います。
サバによって違うなら面倒でもrand(1)としといたほうが無難なのでしょうか?
それと演算子の優先順位をわかりやすい表にしてるところ知っていたら教えてくださいませm(__)m
last if 1-rand(1) <= 0.3;
こういうの書く時
last if ( (1-rand(1)) <= 0.3);
とすれば確実ですが、地味に面倒で意外と見づらいです。
128:nobodyさん
07/09/27 20:36:42
同じだよ
その手の仕様をプラットフォームによって違うようにする必要性がないし
129: ◆TWARamEjuA
07/09/27 20:40:25 BE:2178645-2BP(6825)
URLリンク(perldoc.perl.org)
とか。。。
130:127
07/09/27 20:54:10 fs1IYXrA
>>128
そうですよね。まあでも括弧を外すなら結局rand(1)としないとしつこく引数にとられてしまいますね。
>>129
英語のページですか・・・
僕の学力の低さを見透かしたような皮肉orz
バカにでもわかる一覧表的なページはないということでFA?
131:nobodyさん
07/09/27 21:18:44
unless (0 and 1){
print 1;
}
1と表示されます。unlessは条件式が偽を出してくる時にブロックを実行するのですよね?
0 and 1なら片方が真を出すのでブロック実行されないと思ったのですが。
複数の条件式が全て偽を出した時にだけブロック実行をさせたいのです。
回答宜しくお願いいたします。
132:131
07/09/27 21:22:38
ちなみにこれをifでやるとさらにおかしなことになります。
if (1 and 0){
print 1;
}
これです。何も表示されません。先ほどのunlessとの整合性がつきません。
ifによる条件式部分ではちゃんと二つ共が真の時だけ実行されるのに、
unlessの場合は片方が偽を出せば実行されます。
もしかして
真 and 偽
は最終的に偽扱いされるのですか?
133:nobodyさん
07/09/27 21:28:31
>>132
>もしかして
>真 and 偽
>は最終的に偽扱いされるのですか?
そう。当たり前。
134:nobodyさん
07/09/27 21:28:52
(0 and 1) は(「偽」かつ「真」)だからそんなの成り立たない
(「真」かつ「真」)なら結果「真」と評価できる
つまり、(0 and 1)は常に「偽」と評価される
だから unless (偽) は常にそのブロック内が実行される
135:131
07/09/27 21:46:53
なるほどです。
やはりちょっと違いますねunlessは。
ifのfalse版みたいに思うと微妙にやられますね。
全然関係ない話ですが、Perlには資格ってあるのですか?
書道3段とか簿記3級みたいに客観的にPerlにおけるプログラミング力を第3者に示すもの。
頑張って勉強してそのうちバイトでプログラムの仕事取ってみたいですが、
その時にそういう資格的なものがあるなら売り込みやすいなと思いまして。
本当に関係ない話ですいません。
136:nobodyさん
07/09/27 21:59:00
>>130
URLリンク(perldoc.jp)
137:127
07/09/27 22:08:14 fs1IYXrA
>>136
日本語のページありがとうございます。
見てきますm(__)m
138:nobodyさん
07/09/27 22:39:59
perlの仕事なんか無いよ
139:nobodyさん
07/09/27 22:51:34
>>135
記号論理をやれば当然のことで、それを理解していればifの否定版と考えて問題は起きない
140:nobodyさん
07/09/28 00:24:10
スカラー変数と配列変数をいっぺんに作りたいです。
my ($s1,$s2............$s20);
my (@r1,@r2............$r20);
全部書くのが面倒な時は簡単な方法はありますか?
141:nobodyさん
07/09/28 00:37:13
コードの先頭でまとめて宣言するってこと?
そんなことすんならuse strict使わない、宣言しないほうがよっぽどいい
142:140
07/09/28 00:42:26
>>141
# 初期化
というところでいっぺんに使う変数を宣言しています。
何故というより癖みたいなものですかね。
それで分析プログラムを作ってたら、やたらと記録や集計用の変数が必要になったんです。
一つ一つまともに名前を考えるのが非効率なのでそこだけ適当な名前にしています。
strcit使いながら賢く宣言できませんか?
無理ならあきらめます。
143:nobodyさん
07/09/28 01:00:34
変数をたくさん使いたいなら代わりにハッシュ使えば一つで済むじゃん
144:nobodyさん
07/09/28 01:01:15
なんだか意味が良くわからないけどハッシュにいれればいいじゃない
キー名を考えるのは同じだけど
145:nobodyさん
07/09/28 03:02:00
>>140
なんか、その変数名だと単に配列と二次元配列の初期化だけですむ気がすんだけど?
my ( @s, @r ) ;
# @s は、オマエさんの ( $s1, $s2, ..... ) を入れる配列
# @r は、オマエさんの ( [@r1], [@r2], .... ) を入れる配列
本当に別々の変数名が必要なのか?
本当に必要ならば上の人たちが言ってる通りハッシュorハッシュリファレンス
使え。
146:nobodyさん
07/09/28 03:04:18
for (1..20) { eval "my(\$s$_ , \@r$_)" }
147:140
07/09/28 06:42:10
>>143-145
ごもっともなんですけど、リファレンスにするとコードが汚くなるんですよね。
いちいちデリファレンスしながらのコードは読みにくいし。
ハッシュも同じです。単なるスカラーと配列変数以上に読みやすいものはないかと。
>>146
それってforブロックの中でローカル化されてませんか?
evalするとローカル化されないとか?
148:nobodyさん
07/09/28 06:53:34
>>147
そのevalに突っ込み入れられる実力があれば、
キミの望んだことは実現出来るよな?
まあ、自分の考えに固執しないで、他の人が普通に「hash使え」って
言ってる意味を考えた方が良いと思うけど。
=> perlでは143-145が普通の感覚だし、たかだか変数の
宣誓にevalなんぞ使ってたら「変態さんがいるわ&hearts」
と言われること受けあいだ。
そもそもそんなに個別の変数が必要か否かを考え直したほうがいい
んじゃね?
149:nobodyさん
07/09/28 08:03:45
> 書道3段とか簿記3級みたいに客観的にPerlにおけるプログラミング力を第3者に示すもの。
書道の段位なんて流派ごとに異なるので、客観性があることにできないんと思うよ。
日商簿記2級くらいまでなら試験対策する時間さえあれば能力関係なしにとれるから
持ってたからといってだから何?レベルだよね。
150:nobodyさん
07/09/28 08:31:35
URLリンク(d.hatena.ne.jp)
脳内では、コレが参考になるかもしらんが、
○自己判断のレベルが客観的判断のレベルと一致しない。
○レベル7と8との間にとても深くて暗い河がある。
プログラミングの技量の判断として有名なのはFizzBuzz問題
だが、有名になりすぎて知ってて当たり前。
151:nobodyさん
07/09/28 12:19:13
Lv8かなぁ?Lv9にはなってない気がする。
152:nobodyさん
07/09/28 14:28:43
>>150
ほんと、7と8の間の河が深すぎる。7.5がほしい。
俺はたぶん6か7だけど。
153:nobodyさん
07/09/28 15:13:33
use strictってどういう効果有るの?ググってもよく分からないや
とか思ってる他人のソース弄って何とかしている人がここに一人。
154:nobodyさん
07/09/28 15:43:49
strictやwarningsは融通が利かなくなるので嫌いでちゅわ
155:nobodyさん
07/09/28 15:58:21
いいね、初心者スレらしい。
156:nobodyさん
07/09/28 16:22:17
strictや-wを使って粋がってる自称玄人は笑えるww
157:nobodyさん
07/09/28 16:32:49
無理にstrictやwarings使って本末転倒になってる馬鹿はよく見る
158:nobodyさん
07/09/28 17:27:09
普段から常に使ってるがどういう場面で本末転倒になるんだろう
159:nobodyさん
07/09/28 17:36:03
その昔はグローバル変数をサブルーチンでいじり倒すようなコードがあったけど
スコープ区切って引数と戻り値のやりとりするほうが100万倍読みやすいよ
160:140
07/09/28 18:12:42
>>148
>そのevalに突っ込み入れられる実力があれば、
>キミの望んだことは実現出来るよな?
すいません。もう少し普通の会話がしたいです。
>そもそもそんなに個別の変数が必要か否かを考え直したほうがいい
んじゃね?
このよくある「答は一つ、綺麗でスマート」っていうのはどうにも好かない。
161:nobodyさん
07/09/28 20:40:06
>>160
じゃおまえの好きなようにすれば?
162:nobodyさん
07/09/28 21:25:32
>>140
「Perlはあなたが自分の首を締めるのに十分なロープを
提供しているのだ」てな忠告がラクダ本に載ってたな。
#--- Filter/Range.pm ---
package Filter::Range;
use strict;
use Filter::Simple sub {
s{
my \s* \( \s*
([\$\@%][A-Z_a-z][0-9A-Z_a-z]*?) ([0-9]+) \.\. ([0-9]+)
\s* \)
} {
'my(' . join(',', map "$1$_", $2 .. $3) . ')'
}egx;
}; 1;
__END__
#!/usr/local/bin/perl -w
use strict;
use Filter::Range;
my($s1..20) = (1..20);
print $s10;
__END__
163:nobodyさん
07/09/28 21:41:10
Damian Conway ぷろだくとか。
164:nobodyさん
07/09/28 22:27:42 3wKaaJqT
サブルーチンを10個くらい作ってあります。
同じディレクトリに5個くらい違うCGIファイルがあります。
5個のCGIファイル全てに、冒頭の10個のサブルーチンをコピペしてあります。
print routin(1,2);
5個のCGIふぁいるではこういう記述でサブルーチンが使えます。
どうもこれを外部ライブラリ化とかいうのすると
print パッケージ名::routin(1,2);
で使えるようになるとか。
でもパッケージ名を入れるとなると5個のCGIファイル全てを書き直すのが嫌です。
またパッケージ名が入って見た目がウザくなるのも嫌です。
外部ライブラリにしながらも、メインパッケージにあるのと同じごとくサブルーチンを使うにはどうすればいいでしょうか?
メインパッケージに初めに全部もらえばいけるんじゃないかとか妄想していますが。
165:nobodyさん
07/09/28 22:30:18
>>164
>>19読んで応用しろ。キーワードはexporter
166:nobodyさん
07/09/28 22:45:38 3wKaaJqT
orz
167:nobodyさん
07/09/28 23:42:41
べつにExporterなんかいらないだろ
全部plファイルにしてrequireでつなげろ
168:nobodyさん
07/09/28 23:57:57
おれだったらOOPが楽かな
169:nobodyさん
07/09/29 00:02:00
>>167
すげえまじで感動したw
つか、require '....pl' ってperl4時代のモンだと思って使ってもなかったよ。
これからも使わんけどw
もちろんstorableとか使用するときには必須>require
170:nobodyさん
07/09/29 00:04:52
があ、Data::Dumper の読み込み時だ。require 使うのorz...
171:nobodyさん
07/09/29 00:51:07 2KPMiuug
>>167
え?
明日試してみます。
172:nobodyさん
07/09/29 02:58:11
みんなrequire つかわないのかw
おらぁ使いまくりだ
メインCGI一個に 汎用サブルーチンplに処理ブロックごとにpl分割
これが楽でいい。
173:164
07/09/29 06:51:46 2KPMiuug
>>167
できないんですけど・・・・
s.plのpackage s;にサブルーチンを移しました。
で、
print check(1,2,3,4,5);
でエラーでました。メインパッケージにそんな関数ないと。
もちろん
print s::check(1,2,3,4,5);
なら動作します。
どういうことですか?
ウソ付きましたか?
174:nobodyさん
07/09/29 07:14:33
3時間の出来事をシミュレーションするプログラムを書いています。
一応完成したのですが、時間の捉え方が「残り時間」というものになっています。
これを例えば、9時~12時の間とかで捉えたいのです。
今は内部の処理が進むにつれて「残り時間」の変数を減算して、「残り時間」変数が0になったら処理おしまいというものです。
これを開始時刻と終了時刻を初めに決めて、+10秒とか命令出しながら実際に時間が進んでるかのような感じに
「今何時?」と聞けるくらいの感じに変えてみたいのです。
使えそうなモジュールがあったら教えてください。
175:nobodyさん
07/09/29 07:57:19
>>173
>package s; に移しました。
何故移す?
176:nobodyさん
07/09/29 12:27:00
変数名を参照することって出来ますか?
$test = 'abc';
という変数があるとして、$testの'test'の部分を知りたいのです。
例えば、@a = ($test, $boo, $hoge);
という配列があるとして、
これを それぞれ変数名 => 値 というハッシュに変換したいのです。
$h{'test'} => 'abc'
のように。
177:nobodyさん
07/09/29 13:07:39
>>176
> @a = ($test, $boo, $hoge);
この時点で $a[0] には $test が持つ値 'abc' そのものがコピーされて入る。
よって代入後に @a 内の各値からコピー元の変数名を辿る事はできない。
178:nobodyさん
07/09/29 21:46:18 m5gmrcyE
文字コードをUTF-8に変換したいのですが
use Jcode;
$str = "あああ";
print Jcode->new($str)->utf8;
とすると
Undefined subroutine &Jcode::_Classic::euc_utf8 called at パス/Jcode/_Classic.pm line 255.
というエラーが発生してしまいます。
ちょっと調べたらJcodeのバージョンを下げれとありましたがそれは無理なので何か他に方法はないでしょうか。
179:nobodyさん
07/09/30 02:32:26
未だにJcodeが使われるのは子飼弾がちゃんとEncodeの使い方を解説しないからなのか・・・
180:nobodyさん
07/09/30 04:35:03
>>178
使っているPerlのバージョンは?
Jcodeはどのようにインストールしたもの?
>>179
Web関連のムックで書いてなかったか? >Enocdeの使い方
181:164
07/09/30 08:09:20 9pVP3h63
>>175
そりゃ中身なにもないものをrequireしてもしょうがないからですよ。
一体何が間違ってるというんですか?
メインパッケージにないものをrequireを使えば
routin(1,2,3);
で呼べるというのは本当なんですか?ウソなんですか?
182:nobodyさん
07/09/30 08:18:04
ほらね、strictとwarningsを無理に使うと本末転倒になるでしょ。
183:nobodyさん
07/09/30 08:34:17
>>181
誰もウソなんかついちゃいない。
お前が全然理解できてないだけ。
184:164
07/09/30 08:40:27 9pVP3h63
>>183
だから何をどうしろというんですか?
最小コードを教えてください。
185:nobodyさん
07/09/30 08:49:27
>>182
181の事を示して言ってるならwarningsもstrictも無関係にエラー出るぞ。
176はそう言う次元のお話しではないし、
178は、my宣言してないからwarningsとか宣言してないと見るが?
別にstrict,warningsを嫌うのは勝手だけど、事象は切り分けてくれ。
ここは初心者スレで勝手に脳内変換して>>182を信じてしまう人が
いる可能性もあるんだから。
186:nobodyさん
07/09/30 08:59:25
>>184
うざいなあ、ここで文句垂れてる間にググればとっくに exporter の使い方も
習得出来てるだろうに
% cat foo.pl
sub foo{ 1 ; }
1;
% perl -le 'require q{foo.pl} ; print foo()'
1
187:nobodyさん
07/09/30 09:40:39
>>185
ああごめん。mod_perlと混同して勘違いしてた。
Perlが初めての方なら尚更strict/warningsは
ややこしくなるから不必要だと思うけど。
188:164
07/09/30 10:10:19 9pVP3h63
>>186
突っ込みが下手すぎ。
package使うなって言って欲しかった。
189:nobodyさん
07/09/30 10:12:50
>>188
くだらない質問でもど偉そうに聞いていいスレ
スレリンク(php板)
190:164
07/09/30 11:09:19 9pVP3h63
もしもお前に部下がいるなら可哀想だ。
まだ使う側でないというなら、今のうちに間違いを指摘してきた相手が目下だと反省のできない上司にならないよう気をつけておけ。
191:nobodyさん
07/09/30 12:11:48
>>188
「最小コードを書け」
って言われたから書いたまでだが?
>>175で package に関する点は指摘されてるだろ
>>187
mod_perl の mod の字も出てないのに…
192:nobodyさん
07/09/30 12:51:11
自分の読解力、理解力の無さを棚に
上げて回答者を批判する男の人って…
193:164
07/09/30 14:35:18 9pVP3h63
>>191
>>175のどこがpackageに関する点の指摘なのよ。
あれじゃサブルーチンを別ファイルに移した事の指摘だろ。
>>192
女ならいいのか?クソフェミニストめ。
194:nobodyさん
07/09/30 15:37:17
質問してもよろしいでしょうか?
すみませんが宜しくお願いいたします。
特定の契機を迎えたとき?
@_や$_には値が自動でセットされるようになっていますよね?
その契機の一覧みたいなものが知りたいのですが、膨大ですか?
うまくまとめてるサイトあれば教えてください。
195:nobodyさん
07/09/30 15:38:11
やはり読解力の欠片も無いな
196:nobodyさん
07/09/30 15:44:41
>>194
URLリンク(search.cpan.org)
URLリンク(perldoc.jp)
ラクダ本
197:nobodyさん
07/09/30 16:14:26
>>179
5.005とか5.6と互換を取るのに便利だったりする。
(5.005は古いバージョン使ってたり、変換規則が違ったりするけど。)
それはともかく、チュートリアルをpodで欲しいとか思うよね。
unicodeのチュートリアルとか、あっちこっちにドキュメントが散らばってて、
しかも、翻訳も無かったりして、初心者にはきついと思う。
198:nobodyさん
07/09/30 23:01:50
コーディングではないけれどPerl関連(Windows関連?)ということでお願いします。
PerlのパスをUNIX風に設定しておくことってできますか?(usr/bin/perl)
今は5.8なんですが、前に5.6の頃、実際のパスがc:\perlだとしても
この書き方(パス)で動いてた気がするんだけど・・・
199:nobodyさん
07/10/01 00:24:00
5.8でも動く件
200:198
07/10/01 01:04:55
>>199
すんません、ブラウザでCGIとして起動した場合はどうですか?
関連に気づかなくて書かなかったんですが、
こちらでもプロンプトでは動くんだけど、ブラウザではアウトです。
201:nobodyさん
07/10/01 01:27:53
普通にpath通せばいいんじゃね?
202:nobodyさん
07/10/01 02:12:06
それはPerlじゃなく各々のhttpdの管轄
なので他の適切なスレを当たって下さい
203:198
07/10/01 02:14:31
>>201
ありトゥース!・・・が、しかし。。
恥をしのんでお尋ねしますが、パス通すって・・?
Windowsの環境変数にusr/bin/perlを追記するってことではないですよね。
い、いかように・・・
204:nobodyさん
07/10/01 07:19:52
関連付けでおk。
205:nobodyさん
07/10/01 09:49:39 4GodVsb7
>>180
レス遅くなってすみません。
JcodeやめてEnocdeで対応させました。
perlのバージョンは5.8、Jcodeは最初サーバーには入っていなかったので
自前で自分のディレクトリにインストールして使ってました。
それで問題なかったのですが最近サーバの方が用意してくれたらしく
そっちを読み込むようになってました。
そのサーバにインストールされた新しいJcodeで問題が発生していたと言う次第でした。
しかし新しいJcodeはなんであんなとんでもないバグを持ってるんだろうか。
UTF-8変換できなきゃJCodeの存在意義が無くなるのに。
206:nobodyさん
07/10/01 10:32:27
>>203
環境変数にperl.exeのパスを通せばいい。
もしくは出来るならhttpdの方で指定するとか。
207:nobodyさん
07/10/02 00:21:38
>>203
かなり無理やりな解決方法。
C:\直下にusrを作って、そこへC:\Perl\bin\(Enter連打でinstした場合)をフォルダごとコピー。
でC:\Perl\lib\とC:\Perl\site\もフォルダごとコピー。
これでC:\usr\直下に、binとlibとsiteができる。
それでcgiファイルの頭に
#!/usr/bin/perlでOK。
でも、ppmや、自前でモジュールインストールする度に、本来のC:\Perl\以下よりlibやsiteをコピー
しなければならないし、UpgradeやUninstallの時も当然ながら消してはくれません。
普通の人にはお勧めできない。
実を言うと、C:\直下にusrやtmpやvarなんかを作ってると、perlスクリプトの中からフルパスで
/var/tmp/~とかやってファイル操作したりするのに、Unix環境といちいち書き換えなくて済むっちゅう
横着ができたりします。
208:nobodyさん
07/10/02 00:40:37
activeperlで>207の方法をやるなら、perldoc reloc_perlを見ると幸せになれるかもしれない。
209:nobodyさん
07/10/02 01:54:23
質問です。
LWP::UserAgentとCrypt::SSLeayを利用して、SSLでサーバと通信を行っています。
相手先の証明書が、期限切れなど信頼できない場合は、以降の処理を打ち切りたいのですが、
それを判別するにはどうすればよいですか?
210:nobodyさん
07/10/02 02:05:01
LWP::Protocol::httpsにヒントがあるかもね
211:180
07/10/02 02:34:16
>>205
ん、別に少し間が開いたくらいは気にせんからいいよ。
ただ、サーバー管理者が入れたのがおかしいってのは変だね。
症状からすると、(わざわざ)pure perl のコードを選択したときのバグっぽいけど
これって fix されたんじゃなかったっけか?
それにPerl本体が 5.8なら Encodeを利用する形でJcodeは入るはずだしなあ。
212:nobodyさん
07/10/02 06:25:36 SbhRpQr+
レン鯖に特定のモジュールがインスコされてるかどうか
テストするのに良い方法はないでしょうか?
213:nobodyさん
07/10/02 07:23:13
@INCを総当たり
214:nobodyさん
07/10/02 08:34:43
>>211
原因を特定できないのなら黙っておけ。
215:nobodyさん
07/10/02 09:25:29
>>212
実際に use して調べるのが一番確実。
#!/usr/bin/perl -w
use strict qw(subs vars);
my $token = qr/[A-Z_a-z][0-9A-Z_a-z]*/;
my $module = ($ARGV[0] || '') =~ /^($token(?:::$token)*)\z/ ? $1 : '';
my $result = $module ? eval "use $module" : 'usage: URLリンク(...)';
$result ||= $@ || qq/$module ${"${module}::VERSION"}/;
print "Content-Type: text/plain\n\n$result";
__END__
216:nobodyさん
07/10/02 09:39:01
もう少し可読性を高める努力をしろよ。
217:nobodyさん
07/10/02 10:20:20
>>207
インストールしなおしでその構成になるようにしたほうがいいんじゃ・・・
218:nobodyさん
07/10/02 17:33:08
$^Oが取り得る値のリストってどこかにない?
219:nobodyさん
07/10/02 19:19:35
>>218
URLリンク(search.cpan.org)
220:nobodyさん
07/10/02 20:12:26
>>215
コードまで書いていただいてありがとうございました。
use <モジュール名> をevalして戻り値を確かめるわけですね。
どうもevalは使うのに躊躇してしまうんですが、こういうときは便利ですね。
>>213
@INCの中を覗くという発想も考えたことがなかったので
やってみたいと思います。
221:nobodyさん
07/10/02 21:03:46 2QBdgnfp
日本語変換の問題について質問です。
コードをEUCで書いて、出力をShift_JISで行うのが目的です。
今はjcode.pl使っています。
activeperlのwinxp用でローカルチェックをしています。
JCODEというモジュールもあるそうですが、activeperlには初期状態でなかったりしますよね。
確か自分は入れた覚えもあるのですが。
オススメは何ですか?
確か他にも変換用のモジュール?はあったと思いますが。
euc,shift_jis,jisの3つだけでのオススメが知りたいです。
222:nobodyさん
07/10/02 21:47:16
>>221
万能解は無いので、Encode / Jcode / jcode.pl / Unicode::Japanese を
一通り使い込んでから、好みと用途に合ったものをお選びなさいな。
223:nobodyさん
07/10/02 23:24:50
いまさらjcode.pl薦めるなよ。
224:221
07/10/02 23:41:50 2QBdgnfp
jcode.plを除いて一番汎用的に使えるのはどれですか?
汎用的って言っても、サーバーやローカル環境で一番広く使えるものです。
一番広まってるモジュールといえばいいのですかね。
225:nobodyさん
07/10/03 00:23:34
リストをリストのままリストの個数を得るにはどうすればいいですか?
(1,2,3,4,5)
これを配列にいれずにってことです。
grepとかでもリストが作られますよね。
そういうときにわざわざ配列に入れてから要素数を知るのが面倒です。
scalar(@{[grep{$_>0}]})
っていうのも同じくなんかなぁと思います。
普通にないなら関数作ろうと思うのですが。
226:nobodyさん
07/10/03 00:41:53
scalar(@{[1,2,3,4,5]})
227:nobodyさん
07/10/03 00:41:53
はあ
228:nobodyさん
07/10/03 01:16:44
システムに依存する組み込み関数が使用できるかどうか
手っ取り早く調べる方法ってなにかな?
229:nobodyさん
07/10/03 01:49:55
>>224
インスコしてなかったら自分で読み込むようにすればいいよ。
use libつかうなり同階層に置いてuseするなり。
230:nobodyさん
07/10/03 01:58:30
>>224
Perl 5.8.x なら標準モジュールの Encode が一番広まっていると言えば
広まっている。
>>225
リストコンストラクタが幾つの要素を吐くかは、吐かせてみないと
分からない。吐かせた結果を保存しないのなら、目の前を流れていく
個数を数えるしかない。
sub count { scalar @_ } $num = count((1) x rand 10);
$num = scalar @{[ (1) x rand 10 ]};
$num = 0; ++$num for (1) x rand 10;
>>228
URLリンク(search.cpan.org)
に目を通した上で eval 内で実際に使用して確認。
231:225
07/10/04 00:46:59 kUiVRXqk
>>230
黒魔術みたいなコードはいけないってこのスレで教えてもらいました。
素人ながら納得しました。
ですからあなたもそういうコード書いていてはいけないと思います。
それも教える側でそれを使うと黒魔術が流行ってしまいます。
僕にはあなたのコードが何をしてるのかわかりません。
232:nobodyさん
07/10/04 00:52:08
++$num for (1) x rand 10;
こんな書き方はじめてみたw
7行プログラミングとかに出てきそうだな。
だれか解説というか一般的な形にしてクレクレ
233:nobodyさん
07/10/04 00:57:28
foreach((1) x rand(10)){
++$num;
}
234:nobodyさん
07/10/04 02:06:39
こんなの全然黒魔術じゃないと思うが・・・
235:nobodyさん
07/10/04 03:26:46
中身が1行のfor(もしくはforeach)なんて普通こう書かんか?
↑もう何年もforeachなんて書かずにforで済ませてるからスペル調べちまったw
236:nobodyさん
07/10/04 03:33:49
それは分かりづらい。括弧でくくった方がいいな。
++$num for ((1) x rand 10);
237:nobodyさん
07/10/04 06:44:51
これだからPerlのコードは気持ち悪いんだよな
238:225
07/10/04 07:08:27 kUiVRXqk
((1) x rand(10))
これの意味がわかりません。
1*10とどう違うんですか。
それとforに10とか与える意味も。
0..10ならわかるけど。
239:nobodyさん
07/10/04 08:10:41
このスレは精神障害者ばかりですね。
240:nobodyさん
07/10/04 08:14:34
>>231
その程度の実力で関数を自作するってかw
241:nobodyさん
07/10/04 09:03:58
>>238
ひょっとして
>吐かせた結果を保存しないのなら、目の前を流れていく
>個数を数えるしかない。
の意味がわかってないのか?
お前が一定の個数で決め打ちしたいなら最初からそうすればいいだけ。
242:nobodyさん
07/10/04 09:42:16
>> grepとかでもリストが作られますよね。
>> そういうときにわざわざ配列に入れてから要素数を知るのが面倒です。
grepに限って言えばスカラーコンテキストでは条件が真になる要素数を返すわけだが。
% perl -e 'print scalar(grep { $_ > 0 } 0,1,1,0,1)'
3
243:nobodyさん
07/10/04 09:43:48
x 10ならわかるけどなんでrand(10)なん?
それがいまいちわからんぽ
244:nobodyさん
07/10/04 10:10:16
いつも10だと面白くないと思って乱数にしただけで特に意味はないだろう。
そんなこと気にしてるとハゲるぞ。
245:nobodyさん
07/10/04 10:20:27
>>238
URLリンク(perldoc.jp)
「Multiplicative Operators operator, multiplicative」の項
rand EXPR は 0 以上 EXPR 未満の値を返すので、整数値が欲しい際は
通常 int() を通す。但し perl が整数値を欲しがっている箇所に小数値が
与えられた場合は、自動で整数値に丸められる。
$str = substr('abcd', 0, rand 5); # '', 'a', 'ab', 'abc', 'abcd'
$var = $array[ rand @array ]; # @array 中の要素からランダム選出
x 演算子の右辺は「個数」という整数値を要求しているので、(1) x rand 5
という式は (), (1), (1,1), (1,1,1), (1,1,1,1) のいずれかになる。
>>243
>>241 が指摘してくれているように、最初から個数が分かっているなら
「リストをリストのままリストの個数を得る」必要はなく、$num = 10;
等と書いておけば済む。(1) x rand 10 という式には「要素数が不定で」
「コピペですぐ動作確認できる」リストのサンプルという以上の意味は無い。
246:nobodyさん
07/10/04 17:45:56
これ何?
$|++;
247:nobodyさん
07/10/04 18:42:58
出力バッファの自動フラッシュを抑制
248:nobodyさん
07/10/04 18:43:28
ハニーフラッシュ!
249:nobodyさん
07/10/04 18:44:27
抑制じゃねえ間違えた まあいいや
250:nobodyさん
07/10/04 19:48:49
プログラミングPerlのパッケージ、オブジェクトの章を読んでも意味が
さっぱりわからなかったのですがどうすればいいですか?
みなさんはあそこに書いてあること、あっさりわかりました?
251:nobodyさん
07/10/04 20:48:51
>>250
ラクダ本だけでは実感が掴みにくいような。
URLリンク(www.rfs.jp)
でも解説されてる。
同じ説明でもいろんな説明を見ると分かってくるような。
252:nobodyさん
07/10/04 21:37:38
>>250
URLリンク(fleur.hio.jp)
253:nobodyさん
07/10/05 09:42:06
OOP 勉強したいなら Plagger に入門すればいいよ!
254:nobodyさん
07/10/05 12:41:48
>>251
これは本当に超初心者向けといった感じですね。
>>252
これはわかりやすい!
>>253
こんな面白いものがあったんだ
255:nobodyさん
07/10/06 12:48:34 PfM+S4yJ
foreach(){}
↑フォーイーチみたいな発音でいいですよね・・・?
256:255
07/10/06 13:03:13 PfM+S4yJ
追加お願いします。
use strict;
my %hash = qw/2 5 s 2 d 3/;
print map{"$_ " , 1}keys %hash;
>Execution of C:\test.pl aborted due to compilation errors.
これ何がいけないんですか?
print map{$_ ," ", 1}keys %hash;
こう書き換えるとエラーになりません。
activeperl5.8.1のwinxp稼動です。
257:255
07/10/06 13:23:18 PfM+S4yJ
ぐるせいや。ぐるせいや。
258:nobodyさん
07/10/06 13:30:22
>>256
perldoc map見れば分かる
259:255
07/10/06 15:01:35 PfM+S4yJ
>>258
すいません。わからないです。
教えてください。
260:nobodyさん
07/10/06 15:40:28
> perldoc map見れば分かる
> map - An utility to map texts from and to unicode
ねーよwww
261:255
07/10/06 17:19:29 PfM+S4yJ
どなたか>>255-256の回答お願いできませんでしょうかm(__)m
262:nobodyさん
07/10/06 17:33:12
print map{("$_ ", 1)} keys %hash;
263:nobodyさん
07/10/06 17:33:28
読み方なんてどーでもいいじゃん
スクールでも始める気か?
264:nobodyさん
07/10/06 17:44:55
>>255
URLリンク(dictionary.goo.ne.jp)
URLリンク(dictionary.goo.ne.jp)
これぐらいは辞書引いたらどうよ。
>>256
URLリンク(perldoc.jp)
> { はハッシュリファレンスとブロックの両方の開始文字なので、
> map { ... は map BLOCK LIST の場合と map EXPR, LIST の場合があります。
> perl は終了文字の } を先読みしないので、{ の直後の文字を見て
> どちらとして扱うかを推測します。通常この推測は正しいですが、
> もし間違った場合は、} まで読み込んでカンマが足りない(または多い)ことが
> わかるまで、何かがおかしいことに気付きません。 } の近くで文法エラーが出ますが、
> perl を助けるために単項の + を使うというように、{ の近くの何かを変更する必要が
> あります。
perlの構文解析までは知らん。
265:nobodyさん
07/10/06 17:49:40
>>260
-fを入れることも自分で分からないようではいかんだろって意味であえて書かなかった
266:255
07/10/06 19:25:29 PfM+S4yJ
>>264
ありがとうございます。
それでフォーイーチでいいのですか?
用語なんで普通の読み方で本当にいいのかという意味の質問だったのですが。
mapの方ですが、
my $hash = {"A "=>"5" , "s"=>"2" , "d"=>"3"};
これでエラーが出ないんです。"A "でエラーが出ないのに、どうして
print map{"$_ " , 1}keys %hash;
でエラーが出て
print map{$_ ," ", 1}keys %hash;
でエラーが出ないのか。
よくわからないのですが、ハッシュリファレンスとしてエラーが出そうなのは後者だと思うんです。
カンマが足りないってことで。
そして前者はブロックとしても式としても何も問題がないと思うのです。
my $test = 1;
if("$test " , 1){
print "ok";
}
これを走らせてもエラーでないですし。
そこらへんどういうことなのかわかりますでしょうか?
267:255
07/10/06 19:28:03 PfM+S4yJ
>>265
-fってなんですか?
URLリンク(perl.misty.ne.jp)
ここには載ってないですが。
268:nobodyさん
07/10/06 19:31:23
>>266
>それでフォーイーチでいいのですか?
関数名の読み方に正解なんてないから好きに呼べよ。
余程狂ってなきゃ誰も笑ったりしないよ。
で、結局何が問題なんだ?
結論は既に出てるし、perlの仕様について文句言われても困る。
269:nobodyさん
07/10/06 19:32:40
釣りなのか読解力がないのか単なる馬鹿なのか
270:nobodyさん
07/10/06 20:11:35
>>267
perldocを嫁
271:nobodyさん
07/10/06 20:42:22
>>267
それはperlのオプション。
あんたが必要なのはperldocのオプションだから、
コマンドラインからperldoc perldocで確認すべし。
272:255
07/10/06 20:43:43 PfM+S4yJ
>>268
何故エラーが出るのかわからないのです。>>266にあるとおりです。
>>264さんのところの話ではつじつまが合わないのです。
>map { ... は map BLOCK LIST の場合と map EXPR, LIST の場合があります。
どちらとして評価しても
print map{"$_ " , 1}keys %hash;
これでエラーが出る説明になりません。
273:255
07/10/06 20:47:23 PfM+S4yJ
>>271
なるほどつまり-fの意味は
perldoc -f map
で、mapの仕様を確認しろって事なんですね。
274:nobodyさん
07/10/06 20:59:58
>>272
{"$_ " , 1}をEXPRとして、keys %hashをLISTと解釈すると、コンマが足らない。
275:255
07/10/06 22:39:59 PfM+S4yJ
>>274
ん・・・
map EXPR, LIST
↑これかーー!
納得です。ずっと{}の中のコンマばかりに注目してました。{}とLISTの間のコンマのあるなしが問題だたのですね。
276:nobodyさん
07/10/06 23:23:20
フォーイーチでいいんじゃないの?
277:nobodyさん
07/10/06 23:29:56
perldoc に -f をつけるだけで上場できるインターネッツはここですか?
278:nobodyさん
07/10/07 13:10:36
むしろ英単語の for と each をくっつけただけのものを
他になんて読めるのか知りたい
279:nobodyさん
07/10/07 15:12:27
>>278
仏単語の fo と 英単語の reach をくっつけたものという可能性も検討すべきでは?
280:nobodyさん
07/10/07 18:18:02 LZD6O2BK
フォーチだろ。
281:nobodyさん
07/10/07 21:49:16 lRWvT8wN
ソケット使ってホームページを取得するプログラムを書いてます。
HTTP/1.1 200 OKが返ってきて、Content-lengthもある程度あるのに、
フッタが何もないことがあるのですがどうしてでしょうか。
正常に見れるサイトもあります。
use Socket;
use FileHandle;
$host = "www.ftnet.or.jp";
$path = "/FTtuusin/index.html";
$port = 80;
$ip = inet_aton($host) || &error("host($host) not found.\n");
$SOCKADDR = pack_sockaddr_in($port, $ip);
$res = &connect($host,$path,$port);
print $res;
exit;
282:nobodyさん
07/10/07 21:51:37 lRWvT8wN
sub connect {
my ($res, $host, $path, $port);
$res = "";
$host = $_[0];
$path = $_[1];
$port = $_[2];
# ソケットの生成
socket(SOCKET, PF_INET, SOCK_STREAM, 0) || return -1;
# ソケットの接続
connect(SOCKET, $SOCKADDR) || return -2;
autoflush SOCKET (1);
print SOCKET "GET $path HTTP/1.1\n";
print SOCKET "Referer: $url\n";
print SOCKET "Host: $host:$port\n";
print SOCKET "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\n";
print SOCKET "Connection: close\n";
print SOCKET "\n";
foreach (<SOCKET>) {
$res .= $_;
}
close SOCKET;
return $res;
}
283:nobodyさん
07/10/07 21:53:04 lRWvT8wN
レスポンスは
HTTP/1.1 200 OK
Date: Sun, 07 Oct 2007 11:31:44 GMT
Server: Apache/2.0.52 (CentOS)
Last-Modified: Fri, 16 Jun 2006 05:41:38 GMT
ETag: "4474a-daf-deccc880"
Accept-Ranges: bytes
Content-Length: 3503
Connection: close
Content-Type: text/html
284:nobodyさん
07/10/07 23:54:11
フッタって何の事言ってる?
285:281
07/10/08 00:21:06
すまん、確かにフッタって言葉は違う気がしてきた。
本文の部分です。htmlが書かれてる部分。
286:nobodyさん
07/10/08 02:57:53
>>281
「何もない」状態を確実に再現できる例を
用意してくれないと、デバッグの手伝いはできないよ。
少なくとも手元の環境だと>>281-282のコードとサイトは
一応動くし全部取得できている。
287:nobodyさん
07/10/08 03:06:09
HTTPは正確には\nではなく\r\nでそ
288:nobodyさん
07/10/08 03:32:19
HTTP/1.0にしたら解決しましたって答えは無しな。
わざわざ作るなら1.1を使う物を作ろうよ。
289:nobodyさん
07/10/08 03:33:54
答えじゃないな。解決法だなorz
290:nobodyさん
07/10/08 06:54:42
ちょっとここでいいのかどうかわかりませんが、質問です。
HTML-Parser-3.56を、cpan2rpmで.rpmにリビルドしようとしてたんですが、
make testの段でエラーになります。
(略・・・
t/unbroken-text......ok
t/unicode-bom........
# Failed test in t/unicode-bom.t at line 43.
# got: 'Parsing of undecoded UTF-8 will give garbage when decoding entities at t/unicode-bom.t line 24.
# Parsing of undecoded UTF-8 will give garbage when decoding entities at t/unicode-bom.t line 28.
# Parsing of undecoded UTF-16 at t/unicode-bom.t line 31.
# Parsing of undecoded UTF-16 at t/unicode-bom.t line 34.
# Parsing of undecoded UTF-32 at t/unicode-bom.t line 37.
# Parsing of undecoded UTF-32 at t/unicode-bom.t line 40.
・・・・(略)
t/unicode............ok
t/xml-mode...........ok
Failed Test Stat Wstat Total Fail Failed List of Failed
-------------------------------------------------------------------------------
t/unicode-bom.t 1 256 2 1 50.00% 1
1 test and 1 subtest skipped.
Failed 1/48 test scripts, 97.92% okay. 1/430 subtests failed, 99.77% okay.
291:つづき
07/10/08 06:55:12
で自前で、tar xzf HTML-Pasrer-3.56
perl Makefile.PL
make
make test
したときは、ビルドエラーにならず、
(略...
t/xml-mode...........ok
All tests successful, 1 test and 1 subtest skipped.
Files=48, Tests=430, 5 wallclock secs ( 3.03 cusr + 1.62 csys = 4.65 CPU)
と、ちゃんと通ります。
そこで、途中経過のspecファイルと、自前make時の出力を見比べてみると、
1:cd HTML-Parser-3.56
2:grep -rsl '^#!.*perl' . |
3:grep -v '.bak$' |
4:xargs --no-run-if-empty /usr/bin/perl -MExtUtils::MakeMaker -e 'MY->fixin(@ARGV)'
5:/usr/bin/perl -MExtUtils::MakeMaker -e ' print qq|PREFIX=/var/tmp/perl-HTML-Parser-3.56-root/usr| if $ExtUtils::MakeMaker::VERSION =~ /5\.9[1-6]|6\.0[0-5]/ ' |
6:/usr/bin/perl Makefile.PL
と、cd HTML-Parser-3.56 から /usr/bin/perl Makefile.PLまでの間になにか挟まってます。(↑のはcpan2rpmで出来たspec)
多分、5行目は、仮インストールPREFIXを指定してるとこなので必要だとは思いますが、2,3,4行目でやってることの
意味がわかりません。
292:つづき2
07/10/08 06:56:35
ためしに自分で展開したHTML-Parserに、上の部分だけ(5行目以外)shスクリプトにコピペして実行してみると、
make testでエラーになりました。
さらに、2,3部分のみ実行すると、
./t/document.t ./t/marked-sect.t ./t/dtext.t ./t/msie-compat.t ./t/stack-realloc.t ./t/headparser.t ./t/crashme.t ./t/script.t
./t/filter-methods.t ./t/entities2.t ./t/unicode.t ./t/unicode-bom.t ./eg/hlc ./eg/hform ./eg/hstrip ./eg/htitle ./eg/htextsub
./eg/htext ./eg/hanchors ./eg/hdump ./eg/hrefsub ./mkpfunc ./mkhctype
と、こんな結果になるんですが、これをlist(@ARGV)として
perl -MExtUtils::MakeMaker -e 'MY->fixin(@ARGV)'に渡してるんだと思うんですが、
この'MY->fixin(@ARGV)'がなにをやってるのかがわかりません。
MakeMaker.pmやそこからuse,requireしてるモジュールから'fixin'関数を探しましたが見つからず、
また、ggってみても、cpan2rpmの途中経過を報告してるページにHITするだけで、これが何を意味してるかがわかりません。
specから、この2,3,4の部分を消してrpmbuildするとちゃんとビルドが通ることは通るんですが、
なにか重大な落とし穴があるような気がして、気持ち悪いです。
293:290
07/10/08 07:22:51
おっと、MM_Unixのマニュアルに’fixin’を発見。今までWin機にインストールされたマニュアルみても出てこんわけだ。
でも、説明の Inserts the sharpbang or equivalent magic number to a set of @files. で??
sharpbangってなんですか。
さらにUnix版のMakeMaker.pm内で検索かけても’fixin’で出てこない。
なおさら???です。
294:290
07/10/08 07:37:52
なんべんも連投すいません。
sharpbangってのはどうやらファイルの頭の
#!/usr/bin/perl ってのらしいですが、ますます訳がわかりません。
一晩寝てないんでもう頭がバグってきました。
もう寝ます。
295:nobodyさん
07/10/08 11:25:25
> 一晩寝てないんでもう頭がバグってきました。
徹夜なんかする奴はばかです。
296:281
07/10/08 12:47:24
>>286
>>281は余計と思われる部分を省いて、通信に関わる部分だけを書いたんですが
それを実際に自分で動かしてみたら正常に動きました。
htmlを取得したあとの文字列処理が原因だったようです。
ご迷惑おかけしました。サンクスです。
297:nobodyさん
07/10/08 15:03:02
>>290-294
そこまで辿れてるのならソース見れば?
URLリンク(search.cpan.org)
ザラっと読んだ限りでは shebang (sharpbang) 行を自分の環境に
合うものへ修正しているみたいだけど。
298:290
07/10/08 21:22:47
昼間寝てリフレッシュしたんで、追跡再開。
>>297のおっしゃる通り、’MY->fixin(@ARGV)’で、292のテストスクリプト一式の先頭行が、
#!perl -w から #!/usr/bin/perl -w に書き換えられてる模様。
でその下に3行ほど、
eval 'exec /usr/bin/perl -w -S $0 ${1+"$@"}'
if 0; # not running under some shell
ってゆうコードが追加されてます。
それ以下、use strict・・・からの実行部分は両者(自前makeとcpan2rpm)で一字一句違いなし。
(ここからはmake testでエラーの出る t/unicode-bom.tに絞って追っています)
なんで上の追加された3行が原因か?と調べてみると、ここの部分は、どうやら一部の/bin/shが頭の
#!/usr/bin/perl(sharpbang)を認識しない時用に直接shから起動させるためのコードの模様。
これが原因ではないっぽい。
う~んと思ってスクリプトを上から順になぞっていくと、
!!!!!っ! わかったーーー!!
このスクリプトの後半部分で、is(join("",@warn), <<EOT)以下で、warningのトラップをしてるんだけど、
うえの3行が追加されたことによって、当然実行部分の行数が3行づつ下がってるんだけど、
warningトラップの各対応行がもともとのまま(つまり実際の行数-3の)部分と比較しようとして
is()がこけてmake testがエラってたんです。
>>295
いや~~、やっとエラーの原因つかめてすっきりしました。これで今晩はゆっくり寝れます。
299:sage
07/10/09 19:35:34 oM/XiNAd
Net::Telnetモジュールについての質問です。
ルーターにログインし、$telnet->cmd("show running-config")にて現在のルーターの設定を取得したいのですが、
取得した設定の中に、現在のプロンプトを示す文字列(例えば'#'など)があった場合、そこの行でデータの取得が終わりになってしまいます。
$telnet->promptコマンドにてユーザープロンプトを設定したのですが、その文字列もルーターの設定の中にあった場合、そこで設定の取得が止まってしまいます。
以下に例を書きます。
use Net::Telnet;
use strict;
my $telnet = new Net::Telnet( Timeout => 10);
#ログイン、特権モードへ
$telnet->open(host_name);
$telnet->login(user_name,password);
$telnet->print("enable");#特権モードに
$telnet->waitfor("/Pass/i");
$telnet->print(priv_password);#特権パスワード
$telnet->waitfor('/#/'); #特権プロンプトで待つ
my @show_run = $telnet->print('show running-config');
$telnet->waitfor("hogehoge");
ここのhogehogeに設定した文字列がrunning-config内にある場合、
そこでrunning-configの取得が終了してしまいます。
なにかうまい回避方法があればご教授願います。
300:nobodyさん
07/10/09 20:11:15
>>299
URLリンク(search.cpan.org)
@show_run = $telnet->getlines; とか
push @show_run, $line while $line = $telnet->getline(Timeout => 1); で
なんとかならんか。Net::Telnet 使ったことないし試してないけど。
301:nobodyさん
07/10/09 22:13:34
正規表現でもっと詳細に指定してみるとか。
302:nobodyさん
07/10/09 22:14:34 gGNoM/Xe
Can't locate object method "new" via package "XML::RSS" (perhaps you forgot to load "XML::RSS"?) at XML/RSS.pm line 3.
って出たんですがこのエラーはなんですか?
303:nobodyさん
07/10/10 00:01:33
XML/RSS.pmの
ソースコードの3行目で
XML::RSSのロードを忘れたので
オブジェクトメソッドであるnewを
配置できなかった。
304:nobodyさん
07/10/10 01:09:25
>>299
$telnet->prompt('/user prompt $/');
305:nobodyさん
07/10/10 15:24:05
類似した関数を各ファイルにまとめて、それをuseして使っています。
しかし、それぞれのモジュールで、use CGI としているのですが、
これにより余計な負担がかかっているということはありますか?
306:nobodyさん
07/10/10 18:20:17
構造を見直すべきだと思うが、
%INCがちゃんとしてくれるから
重複されてロードされるとかはないはず
307:nobodyさん
07/10/11 16:13:57
キャッシュを貯めているフォルダが大きくなりすぎてFTPクライアントではアクセスできません
フォルダごと削除したいのですがスクリプトでどうにかできますか?
308:nobodyさん
07/10/11 17:28:34
system "rm -rf /";
309:307
07/10/11 17:56:32
>>308
消すことができました
ありがとうございます
310:nobodyさん
07/10/11 18:07:02
ちょwww
311:nobodyさん
07/10/11 18:38:41
ヤフーで検索した検索の秒数や検索されたURLの一覧を出すような事は
Perlで実現可能でしょうか?
例えば「リンゴ」で検索すると自身のサイトで
---------------------------------------
・約27,900,000件
・0.01秒
・ja.wikipedia.org/wiki/リンゴ
・www.kcsnet.ne.jp/kyoei
・www.kodomo-iin.com/HL/HL220.html
・www.hasp.tv
・www.yumeringo.com
(続く
---------------------------------------
このように表示させたいのです。
もし実現可能であれば、どのような仕組みを学べば良いでしょうか。
312:nobodyさん
07/10/11 19:19:28
ヤフーがAPI用意してればできるんじゃない?
313:nobodyさん
07/10/11 19:30:54
ヤフーAPIならとっくに公開してるぞ
314:nobodyさん
07/10/12 04:05:22 i4CjOo+I
XML::RSSについて質問です。
rssのバージョンが1.0の場合、以下のソースの#エラーが出るの部分で
Use of uninitialized value in concatenation (.) or string at rss line 21.
というエラーが出てしまいます。
他の<link>タグなどの場合は表示できるので
<dc:date>などの名前空間を使っているタグの場合に
上記のエラーが出てしまうみたいです。
どうすれば、名前空間のタグデータも表示できますか?
my $rss = new XML::RSS;
my $url = "URLリンク(hoge.con)
my $dat = get($url);
my $result = $rss->parse($dat);
foreach my $item ( @{$rss->{'items'}} ){
if($result =~ /1.0/){
print "@{$item_list}[0]->{'dc:date'}\n"; #エラーが出る
}elsif($result =~ /2.0/){
print "@{$item_list}[0]->{'pubDate'}\n";
}
}
315:nobodyさん
07/10/12 04:09:29
print @{$item_list}[0]->{'dc:date'} || '', "\n";
とか。
316:314
07/10/12 04:37:32
すいません。
ソースがおかしかったんで張りなおします。
my $rss = new XML::RSS;
my $url = 'URLリンク(hoge.com)';
my $dat = get($url);
my $result = $rss->parse($dat);
foreach my $item ( @{$rss->{'items'}} ){
if($result =~ /1.0/){
print "$item->{'dc:date'}\n"; #エラーが出る
}elsif($result =~ /2.0/){
print "$item->{'pubDate'}\n";
}
}
317:314
07/10/12 04:50:59
自己解決しました。
print "$item->{'dc'}->{'date'}\n";
という記述でうまくいきました。
お騒がせしました。
318:nobodyさん
07/10/12 22:46:03 w18ekEW+
ここにいる人は仕事でもPerlに問わずプログラミングをしてるのですか?
そういう仕事に就くにはやはり学校などを出てる必要があるのでしょうか?
いわゆる大卒みたいな最低条件というか。
前から一度経験してみたいなと思っていましたが、そういうアルバイトはないんでしょうか。
建設現場の日雇いみたいに気軽にやってみたいです。
本業はありますが、結構時間はあるほうなので。
この世界はどうなってるのでしょうか?
319:nobodyさん
07/10/12 22:50:35
仕事に関する大事なことを自分で調べず2chで聞いてる時点で・・・
320:nobodyさん
07/10/12 22:59:11
セックスアパートって会社で働くといいよ。
321:nobodyさん
07/10/12 23:23:59 w18ekEW+
2ちゃんをバカにしてる利用者ほどその利用方法はひどいって法則誰かが言ってましたね。
322:nobodyさん
07/10/13 00:20:58
プログラマーなんて趣味の延長だろ
24時間PCの前でカタカタやるのが楽しくなきゃやってられない
323:nobodyさん
07/10/13 00:22:01
「CGI Perl 実務経験なし 初心者OK」で求人サイト検索すりゃいいべ。
324:nobodyさん
07/10/13 00:26:24
>>321
その手の切り返しパターンもう飽きた
325:nobodyさん
07/10/13 00:41:31
多分しっかりやらないとプログラムは楽しくない。
326:nobodyさん
07/10/13 02:59:15
プログラマーは3桁残業にも耐えられる精神力+体力が必要。
年取ったら高確率で禿げそう。
327:nobodyさん
07/10/13 15:06:53 iKtPwiMH
$a = 0000010
この文字列を数字に変える($ = 10)
簡単な表記はありますでしょうか?
sprintf使ってみたのですが上手くいきません
328:nobodyさん
07/10/13 15:10:02
それは文字列じゃなくて8進数じゃ?
もし$a= "0000010"; なら 関数int使えばいい
329:327
07/10/13 15:13:51
すみません
自己解決しました
%dで
330:318
07/10/13 16:40:37 5Vuk1MtC
この雰囲気からすると日雇いなんかなさそうですね。
しかしこういう雰囲気からすると日雇いなんかありませんよね。
ちょっと待って日雇いなんかありませんよ。
実際いきなりそれを本職とするのは厳しい。
どういう雰囲気なのか味わいたいだけと考えるとそういう会社で働いてる人脈を作るのがよさそうですね。
ここの本職の方は会社と自宅以外にどこに行きますか?
明日とかきっと休日だと思いますけど、街へ行ったりするんですか?
家族持ちだとどうしても接点を取っても仲良くはなれなさそうだから。
独身がいい。女を紹介とかすればそれなりに仲良くなれる気がするんですが。
どうですかね。女は嫌いですか?
331:nobodyさん
07/10/13 18:43:45
コーディング初心者質問スレであって、IT 土方向けの仕事斡旋スレではないんだよなぁ。
332:318
07/10/13 19:19:29 5Vuk1MtC
なるほど。
やはり頭は固いと。
333:nobodyさん
07/10/13 21:12:30
釣りにしては程度が低すぎるんだが、これは素で言ってるのか?w
だとしたらやばすぎる。
334:nobodyさん
07/10/13 21:40:38
スルーしとけよ
335:nobodyさん
07/10/13 21:48:34
スレ違いという自分のミスを指摘され
馬鹿にされ悔しさのあまり慢心で書き
出した文章がこれ
336:nobodyさん
07/10/13 21:53:08 fl6REYk4
IPアドレスから携帯かPCかを判断したいんですがどうやればいいんですか?
337: ◆TWARamEjuA
07/10/13 22:06:27
ここで宣う前に「調べる」ことをお勧めいたします。
338:336
07/10/13 22:23:53
ググっても分からなかったので教えてもらえませんか
339:nobodyさん
07/10/13 22:31:44
どうググったのですか
340: ◆TWARamEjuA
07/10/13 22:35:33
(´-`).。oO(ググる≠調べる ググる=さがす ・・・と思うけれども。。。)
341:336
07/10/13 22:58:35
perl IPアドレス 携帯か 判断
とかで検索したけど出てきませんでした
342:nobodyさん
07/10/13 23:16:28
俺なら
perl 携帯 判定
でぐぐるな。
343:nobodyさん
07/10/13 23:43:01
cpanでmobile ipとかで調べたらいいんじゃね?
344:nobodyさん
07/10/13 23:50:32
>>342
それだとUA判定が多いんじゃ?
携帯 IPアドレス wiki で検索かけたらあったぞ
345:336
07/10/13 23:56:59
UAで判定できるなんて知らなかった。
IPアドレスより楽みたいですね。
346:342
07/10/14 00:01:08
>>344
そうだった。IPで判定したいんだったな。これは失礼。
347:336
07/10/14 00:06:15
UAで判定したら携帯ブラウザエミュだと携帯で判定されるのか。
IPアドレスの方が確実ってことかな?
348:336
07/10/14 00:16:57
携帯ってIPアドレスの種類どんどん増えてってたのか・・・
諦めてUAで判定します。
349:nobodyさん
07/10/14 03:31:42
CPANにモジュールあるよ。
350:nobodyさん
07/10/14 06:50:16
フォームって別ドメインのCGIスクリプトにも送信できたっけ?
351:nobodyさん
07/10/14 07:54:33
>>349
それって DIS るのが生きがいの人のだっけ?
352:nobodyさん
07/10/14 07:54:34
open関数で開けるファイルって同じサーバーにある必要がありますよね?
別サーバーにあるファイルの情報を参照する方法はあるのでしょうか?
あるのでしたら方法をお教え下さいますようお願いします。
353:318
07/10/14 08:50:07 a8OZDemC
>>333-335
別にバカにしてるわけでもないのに、どうしてすぐそうムキになるかね。
逆に聞きたいが、自分は頭が固くないとでも思ってるのかい?
354:nobodyさん
07/10/14 09:23:55
おまい自分が雇う側の立場になって考えてみな
日雇いで次の日に来るかどうか解らない奴を雇う?
スキルレベルも解らずに雇う?
つか、銭もらえるだけのスキルはあるのか?
355:318
07/10/14 12:02:37 a8OZDemC
>>354
>日雇いで次の日に来るかどうか解らない奴を雇う?
もしかして日雇い知らない?
プログラミングに関わらずどんな仕事でも適当なやつはいらないし雇わないよ。
>スキルレベルも解らずに雇う?
どんな職業でも同じ。
君は雇う側になったことがなさそうだ。
356:nobodyさん
07/10/14 12:10:23
もう頭のおかしいヤツ相手にすんなよ
ま、いちばん悪いのは病院に連れて行かない親なわけだが
357:nobodyさん
07/10/14 13:05:35 9kSbwdFL
画像付きのBBSに、アクセスログ記録を付けて使っています
ところが、特定の人だけ同時に3回記録されています
WindowsNT5.1 ブラウザが「Sleipnir」
たぶんブラウザのせいだと思いますが、
1回のアクセスでサーバに3回の動作をさせている事になります
一体どういう事なのでしょう? perlの書き方のせいでしょうか?
358:nobodyさん
07/10/14 13:19:59
実際一番ムキになってるのは君じゃん(w
359:nobodyさん
07/10/14 17:32:02
>>357
とだけ言われてもなぁ、多重コネクションで画像DLなんてよくある話だし。
で、どうしたいのさ?
360:nobodyさん
07/10/14 18:22:36 9kSbwdFL
>>359
画像付きといってもファイルをたまにアップするだけで
ほとんどの利用はテキストの書き込みと、BBSの読み込みです
会員制サイトなのでアクセスの数は少ないです
サイトの関連ログが飛ぶトラブルがあって原因の一つと思います
まず、なぜこの環境の人がアクセスすると、同時刻に3回CGIが動作して
しまうのか、その原因を知りたいです
BBSのスクリプトでは、@の配列に入れたものをforeachで展開しながら
html表示します、アクセスログはこのプロセスに入れ込んでます
361:nobodyさん
07/10/14 19:25:16
当人じゃないからわからんが、Javascriptで読み込みなおしするような
なんかをしてるんじゃね?
本人に聞いたらいいよ。
362:nobodyさん
07/10/14 19:59:35 RGItsPbe
質問です。
CPANモジュールまとめサイトってないですかね?
いろいろググったけどそれらしきものがなかったので。
363:nobodyさん
07/10/14 20:01:11 RGItsPbe
>>362
追記
日本語モジュール解説 まとめサイトです