Perlコーディング初心者質問スレ Part 56at PHP
Perlコーディング初心者質問スレ Part 56 - 暇つぶし2ch175: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
追記
日本語モジュール解説 まとめサイトです

364:nobodyさん
07/10/14 20:37:02
perldoc.jp

365:nobodyさん
07/10/14 20:42:54
basic認証が必要な自サイトのアクセスログからある部分だけ抽出して表示させたい
のですがまずcgiでアクセスするにはどうすればいいでしょうか?

366:nobodyさん
07/10/14 20:49:09 RGItsPbe
>>364
そこで全部見れるんだ。
ありがとー
結構数すくないっすね

ありがっつ

367:nobodyさん
07/10/14 22:03:04 5YQaKvWD
ブログのページからソースを取ってきてテキスト部分だけを取り出したいんですが

use LWP::Simple;
$buff = get("URLリンク(www....."));
print $buff; 
 
これでとりあえずソースだけは取ってこれたのですが、テキスト(記事)の部分だけ取り出す方法がわかりません。
よろしくお願いします

368:nobodyさん
07/10/14 22:05:45 RGItsPbe
>>367
正規表現でちょちょいのどんじゃないですかね?
一度調べてみることをおすすめします。


369:nobodyさん
07/10/14 22:15:05 9kSbwdFL
>>361
なるほど
当方MacなのでParallelsのWinに「Sleipnir」入れてみましたが、
プラグインかなにかなんでしょうね
有り難うございました

370:nobodyさん
07/10/15 00:22:13
>>367
最近はこういうのが流行みたいです

Web::Scraper
URLリンク(search.cpan.org)

371:nobodyさん
07/10/15 00:43:20
>>369
ぐぐればトップに出てくるだろうに

372:nobodyさん
07/10/15 00:44:21
ごめん、371は勘違い

373:nobodyさん
07/10/15 01:06:24
nikonikoにもScraperネタある。
URLリンク(www.nicovideo.jp)


374:nobodyさん
07/10/15 03:46:48
Web::Scraper が重いんだけど、どうにかならないの?

375:nobodyさん
07/10/15 05:35:56
不満は作者に直接言う
改善案を出す
パッチ送る

376:nobodyさん
07/10/15 12:15:17
男は黙って正規表現一択
scrAPIは女の様な軟弱者が使う物

377:nobodyさん
07/10/15 14:20:07
youtubeに上げなおしてくれ。
ニコニコ垢なんかもってないし使いたくも無い。

378:nobodyさん
07/10/15 21:15:14
カレンダーを作りたいと思っているんですが、ライブラリはありませんか?

379:nobodyさん
07/10/15 22:05:51
>>378
URLリンク(search.cpan.org)

380:nobodyさん
07/10/15 23:41:31
処理の進捗状況を表示する一番よい方法は何ですか?
一定期間ごとにファイルに書き込むことしか思い付きません。



381:nobodyさん
07/10/15 23:43:46
>>380
それでいいんじゃねーの
一番簡単だし

382:nobodyさん
07/10/16 06:05:03
$| = 1;
って何かいいことあるの?

383:nobodyさん
07/10/16 08:47:04
意味をわかった上で言ってるのか?
それとも意味を聞いてるのか?
とりあえず「perl コマンドバッファリング」あたりでググれ。

384:nobodyさん
07/10/16 10:56:39
自分が使ってるサーバーがLWPが使えないようなので、socketで別サーバーのファイル内容を拾って展開させようとしたんですが、
ローカルではちゃんと動くのにサーバーにアップすると凍ってしまいます。

リストにある複数のブログのrss取得して最新のブログ3件の記事表示、みたいなのがやりたいんですが、
サーバーがLWPの許可してないと難しいですか?
なにかいいやり方あったらお教えください。

385:nobodyさん
07/10/16 11:11:22
fpingの出力値の数字だけを抜き出すプログラムを作りたいのですが、うまくできません。

input.txtという名前に下のようなfpingの出力を入れ
www.yahoo.co.jp:[0], 84 bytes, 18.1 ms (18.1 avg, 0% loss)
www.yahoo.co.jp:[1], 84 bytes, 23.2 ms (20.7 avg, 0% loss)


18.1
23.2と出力したいです。


bytes,より前を切り取り、ms ( も切り取ろうとして

$fping = "./input.txt";
open(A,"$fping")|| die "Can not open file";
@b = <A>;
close (A);

foreach $c(@b){
$c = grep(/(.*?)bytes, (\d{1,4}\.\d{1,2} ms) \(/,$c);
}

foreach $c(@b){

print "$c\n";

}

というプログラムを作ったんですが、うまくいきません。
どこを直せばいいでしょうか?

386:nobodyさん
07/10/16 11:26:03
>>385
$c =~ /bytes, (.*?) ms/;
$c = $1;

じゃだめなん?

387:385
07/10/16 12:33:21
>>386
レス遅れてすいません。
できました!
ありがとうございます!!
助かりました、ホントありがとうございます!!!

388:nobodyさん
07/10/16 12:40:52
>>385
出遅れた…。
perl -lne "print /(?<=bytes, )(.+?)(?= ms)/" input.txt

389:nobodyさん
07/10/16 13:22:24
>>384
どこの鯖使ってるか知らんが、LWP使えないようにしてるってことは
FWでoutboundが遮断されてる可能性が高く、だとすればどうしようもない

390:nobodyさん
07/10/17 00:29:17 7VxwUF8E
SNSサイトにperlを使って接続って無理?

391:nobodyさん
07/10/17 00:37:06
日本語でOK

392:nobodyさん
07/10/17 01:05:09
>>390
WWW::Mixi
WWW::Myspace


393:nobodyさん
07/10/17 08:03:38 BedUMdjt
おはようございます。

下のような流れのcgiで
複数のクライアントから接続された場合
変数$gHogeはクライアント毎に保たれますか?
それとも上書きされちゃいますか?

my $gHoge = ""; #クライアントからポストされた値が入る。
~$gHogeを扱う長めの処理が続く。



394:nobodyさん
07/10/17 08:36:36
>>393
実行される度にプロセスが作られるから上書きなんてされない

395:393
07/10/17 09:01:24
>>394
そうですか。期待通りの結果でよかったです。
朝早くからありがとうございました。

396:nobodyさん
07/10/17 23:05:49 7VxwUF8E
>>392???
わからないので要望スレに逝ってきますorz

397:nobodyさん
07/10/18 00:34:50
>>396
ググることもできないのか

398:nobodyさん
07/10/18 01:48:20
モジュールがわからなくてSNSに接続しようとは・・・

399:バターズ
07/10/18 22:40:14
コロンが二つならんでいるのは
ダブルコロンって言うんだよ

400:nobodyさん
07/10/20 00:37:33 Ja84SJeF
Location ではtargetが指定できませんが、呼び出したときの
属性は生きるってどこかに書いてありました
どういうことでしょう

ssiのhtmlファイルの中に書いた、iframeのCGIまたは#exec cgiで
クッキー認証できなかったら全画面を再認証画面に飛ばしたいのですが、
やはり無理でしょうか?

401:nobodyさん
07/10/20 05:18:19 VLTga6QI
print <<EOM;
<a href="hoge.html">hoge</a>
EOM

と、

print "<a href=\"hoge.html\">hoge</a>\n";

ではどちらの方が実行速度が速いですか?


402:nobodyさん
07/10/20 06:50:46
>>401
ほぼ同じ。
URLリンク(boobar.hp.infoseek.co.jp)

403:nobodyさん
07/10/20 07:40:43 VLTga6QI
>>402さん、ありがとうございます。
大変参考になりました。


404:nobodyさん
07/10/20 07:47:37 x+Q9ulv4
おはようございます。
以下のスクリプトについて質問です。
outフォルダ内の.txtファイル全てに対して
ある作業をするというスクリプトなんですが、
ファイルオープンのところでそんなファイルはないから
開けないというエラーが出力されます。

例:hoge.txtがある場合
OPEN ./out/hoge.txt file: No such file or directory at check line 22.

どこが間違ってるか教えてください。お願いします。
OSはWindowsXPです。

my @directories_to_search = ('./out/'); #対象のフォルダ
find(\&wanted, @directories_to_search);
sub wanted{
my $filePath = $File::Find::name;
my $find = index( $filePath, ".txt" ); #.txtを対象
unless ($find >= 0) {
return 1;
}
open FH_READ, "<$filePath"
or die "OPEN $filePath file: $!";
#ある作業をする。
close FH_READ;
}

405:nobodyさん
07/10/20 08:21:11
>>404
22行目ってホントにopen文の所か?

406:404
07/10/20 08:33:09
>>405
え?open文のor dieのエラーメッセージが出力されているから
open文でエラーが発生していると思うんですが・・・

407:nobodyさん
07/10/20 10:42:05
読んで字の如しとしか。
まさかmod_perlじゃないよな?

408:nobodyさん
07/10/20 10:55:56
>>404
openに渡すのは「$filePath」じゃなくて「$_」
File::Findの解説ちゃんと読め

409:半角全角が混在する行が一定の文字数を超えたら折り返すようにしたい
07/10/20 14:21:49 g/E6yd0f
メールフォームを作っています。同マシン上のsendmailを使って送るものです。

送信するメールの本文において、半角全角が混在する行の文字数を数え、
一定の文字数(例えば半角72文字、全角36文字)を超えた行だけを
強制的に折り返したいと考えています。

どのようにするのがよいでしょうか?

lengthはバイト数を返す関数なので、
全角文字の真ん中で折り返されると困ることになると考えてます。

もしかすると、長い行はsendmail側が自動で折り返してくれたりするのでしょうか?
それとも、何かほかの関数で簡単に数えたりできるのでしょうか?

なお、カスタマイズの自由度を考えて自作しているので、
「どこそこのメールフォームを使え」というのは勘弁してください。

以上、よろしくお願いします。

410:nobodyさん
07/10/20 14:28:07 o1wAy6B9
eval ($hoge); の実行した値を変数に入れるにはどうしたらいいでしょうか?

$@ だと、evalでのエラーの値が入る
でも、実行値は...?

お願いします。



411:nobodyさん
07/10/20 14:37:23
>>410
$result = eval($hoge);

じゃダメなん?($resultに実行結果、$@にエラーメッセージ)

参考
URLリンク(www.tohoho-web.com)

412:nobodyさん
07/10/20 14:55:48 o1wAy6B9
>>411 その通り!ありがとう。
短い$hogeだと関数が成功した1しか返さないことがあるようでアレ違うわと思っていました。

>>409
ちょっと離れるので投げっぱなしになってしまいそうだけど
解答してくれる人が現れる間に考えていました


use utf8;
use Encode;

$str = '
eval ($hoge); の実行した値を変数に入れるにはどうしたらいいでしょうか?
$@ だと、evalでのエラーの値が入る
でも、実行値は...?

お願いします。
';

@stream = split(/\n/,$str); #最初に渡された文字列を 改行 を区切りとして @stream に配列として読み込んだ
map{ s{(.......)}{$1\n}g } @stream; #”8文字”単位で改行を入れてる
map{print encode(sjis,$_)}@stream; #各行を出力するときにsjisに変換してる

とか、なかんじでどうよ?
ただし1バイト文字の扱いがなんか変。

*たぶんutf8でけつまずいてるかんじ。


413:nobodyさん
07/10/20 16:08:12
>>409
jcode.plかJcode.pmにjfoldってなかったっけ?

414:409
07/10/20 17:45:16
>>413
これです。こういう機能がほしかったんです。

jcode.plにはありませんでしたが、Jcode.pmにはありました。

これまで使っていたのがjcode.plだったのでが、
MIMEヘッダの機能も強化されているようなので、Jcode.pmに乗り換えようと思います。

どうもありがとうございました。

415:nobodyさん
07/10/20 18:24:36
いいかげんにEncode使い方覚えろよ

416:nobodyさん
07/10/20 19:12:39
>>415
じゃ、Encode.pmを使って折り返す方法を書いてあげれば?

417:nobodyさん
07/10/20 19:44:36
Encode::decodeしてlengthでカウントしてみろよ

418:nobodyさん
07/10/20 20:12:44
文字コードわかってんなら正規表現で簡単にできることだろ

419:nobodyさん
07/10/23 05:26:38
全部正規表現でやるのは重そうだな。

420:nobodyさん
07/10/23 14:21:34
正規表現で解決するならEncode要らんがな。

421:nobodyさん
07/10/23 15:27:18
Perlのテキスト処理で質問させてください。
UTF8な日本語テキストの半角カナを全角にしたいと思ってEncode::JP::H2Zを使おうと思いました。
しかし、一部の文字(~など)がEUCに変換する段階で?に変換されてしまい、困ってしまいました。
とりあえず、コードポイントにフォールバックできることがわかったので、
以下のように書いてその場をしのぎましたが、コードポイントを検索して文字に置換するという
作業が入ってしまい(しかも無駄に複雑)、どうもしっくりきません。
もっと簡単にする方法はありますか?

$text = encode("eucjp", $text, Encode::FB_PERLQQ); # EUCに変換
Encode::JP::H2Z::h2z(\$text); # 全角変換
$text = decode("eucjp", $text);
$text =~ s/\\x\{([0-9A-Fa-f]+)\}/pack("U*", hex($1))/eg; # コードポイントを文字に

422:nobodyさん
07/10/23 17:42:25
>>421
#!/usr/local/bin/perl -w
use strict;
use Encode qw(from_to);
use Encode::JP::H2Z;

my $text = 'このファイルはUTF-8で~半角カナ混じりの文字列';

from_to($text, utf8 => 'cp932');
from_to($text, shiftjis => 'euc-jp');
Encode::JP::H2Z::h2z(\$text);
print $text;
__END__

別解。
use Unicode::Japanese qw(unijp);
print unijp($text)->h2zKana->euc;

423:421
07/10/23 20:32:44
>>422
ありがとうございます。その変換法で化けなくなりました。
後学のためお聞きしますが、Encodeではutf8を直接EUCにマップできないのでしょうか。
SJISを経由するのはわかるのですが、cp932をshiftjisに読み替えるなど、
トリッキーなことをやっていますね。
機種依存文字(①など)がある場合もそうですが、utf8とEUCの変換法は
どうもよくわからないです。
機種依存文字とか、どうやってEUCに変換するんでしょうか

424:nobodyさん
07/10/23 22:43:56
「よくわからない」のは、EUC-JPとCP51932の関係じゃないのかな。

URLリンク(search.cpan.org)

425:nobodyさん
07/10/24 01:04:04
暗号化関連の質問です

メールフォームを使っててブラウザとサーバの間はSSLで暗号化してます
でもサーバからsendmailで送信するメールも暗号化してないと意味ないですよね?

Perlでどうやってやってます?S/MIMEかPGPが使えるの?(´・ω・`)

426:nobodyさん
07/10/24 01:05:27
そもそもメールを飛ばさないという選択肢を検討すべきではないか

427:421
07/10/24 02:01:47
>>424
なるほど、ぐぐってみてわかりました。
EncodeーEUCJPMSでcp51932も使えるようになるんですね。
標準のEncodeになんで実装しないんだろ、これ。


428:nobodyさん
07/10/24 06:10:09
>>425
URLリンク(search.cpan.org)
URLリンク(search.cpan.org)

求められる安全度、対象ユーザのITリテラシ、かけられるコスト
等を検討すると、暗号化メールの使えるシチュエーションは
かなり限られてそうだ。金融機関やNSPだと大抵郵送だな。

429:nobodyさん
07/10/25 16:41:10
スペースは or に変換するが、クォートにかこまれたスペースは変換しない。
これの実装がうまくいきません。
例えば
tenis ball は tenis or ball に変換するけど
'tenis ball' はそのままっていうのはなんとか出来たんですが、
'tenis ball' 'base ball' のときは
'tenis ball' or 'base ball' にするのがどうしても出来ません。
orを入れたい場所もクォートに囲まれてると判断されてしまうのです。
どなたか助けてください。

430:nobodyさん
07/10/25 17:03:22
>>429
my @list = (
  q{tenis ball},
  q{'tenis ball'},
  q{'tenis ball' 'base ball'},
) ;

for my $line ( @list ){
  print join ' or ',
     map{ /'/ ? $_ : split /\s+/, $_ }
     split /\s+(?=')/, $line ;
  print qq{\n} ;
}


431:nobodyさん
07/10/26 05:03:54
foreach(@list){
my @token = m/('[\w\s]*'|\w+)(?:\s+|$)/g;
print join (' or ', @token), "\n";
}

432:429
07/10/26 15:02:18
>>430
すみません、できるだけワードは固定してない方がいいのですが・・・うまく動きませんでした。

>>431
おぉ、なんかうまく動きそうです。
でも、クォートの部分を除外して配列に納めたいのですが、どうしたらいいのでしょうか?


433:nobodyさん
07/10/26 23:17:20
>>432
430は全角文字(スペースも含め)を半角に変換してもダメか?
それと「クォートの部分を除外」って意味が分らん。単に
クォートを削除したいだけなら、そのぐらいは自力で考えてみたら?

434:nobodyさん
07/10/27 10:01:02
Encode::JP::H2Z
ってなんでeucjpの糞使用なの?
ユニコードのまま渡せて処理出来ればいいのに。

435:nobodyさん
07/10/27 11:34:06
>434
そういうことはdankogaiに直接文句つけて来い

436:nobodyさん
07/10/27 13:36:03
>434
じゃあお前さんがそういうの作れば?

437:nobodyさん
07/10/27 16:43:19
>>434
Jcode::H2Z (Jcode.pm のサブモジュール) そのままだから。

438:nobodyさん
07/10/27 18:53:28
utf8もページからフォームを入力して送信させると、
「~」の文字だけがなぜか正常に送信されないのですが、なぜでしょうか?


439:nobodyさん
07/10/27 22:19:08 jIrqvOa/
return +{};
という記述の意味を教えて下さい
空ハッシュを返すという事でしょうか?

440:nobodyさん
07/10/27 22:50:14
>>438
何を以て「正常に送信されない」と判断したのか。
URLリンク(ja.wikipedia.org)
URLリンク(euc.jp)
URLリンク(www.asahi-net.or.jp)

>>439
URLリンク(perldoc.jp)
> 単項演算子の "+" は、たとえ文字列に対して用いられた場合にも、
> 何もしません。関数名に続けて括弧付きの式を書く場合に、関数の
> 引数リストと解釈されないようにするために用いることができます。

441:nobodyさん
07/10/27 23:21:31 jIrqvOa/
>>440
ありがとうございます、単項演算子についてはわかったのですが
とあるCPANモジュールのコードで
return +{} unless $data;
というコードがあったのですがこれを
return {} unless $data;
と書かずに単項演算子の+をつけるのは
何か意図があるのでしょうか
戻り値自体はどちらでも同じような気がするのですが、、


442:nobodyさん
07/10/28 00:49:00
ブロックとして解釈される場合があるんじゃね

443:nobodyさん
07/10/28 04:52:46
+{ } :無名ハッシュでコンパイル
{; } :コードブロックでコンパイル

444:nobodyさん
07/10/28 08:38:20
URLリンク(www.nicovideo.jp)
Perlで予約語プログラミング

445:nobodyさん
07/10/28 08:48:47
URLリンク(www.nicovideo.jp)
Perl Programming: Web::Scraperモジュールの利用

↑これ何やってるの?

446:nobodyさん
07/10/28 08:54:29
URLリンク(www.nicovideo.jp)
Perl Catalyst Programming (入門編)

↑これも何をやっているのか、
さっぱりわからんよ

447:nobodyさん
07/10/28 09:22:22
まぁプログラミングを動画で見てもわからんよなw

448:nobodyさん
07/10/28 09:30:40
そうか?

この動画だけは「何をやろうとしてるか」だけは伝わるぞ
URLリンク(www.youtube.com)

449:nobodyさん
07/10/28 11:24:36
>>448
Aho da...orz


450:nobodyさん
07/10/29 02:42:49
>>446 にある動画はなんかおかしいと思う。

451:nobodyさん
07/10/29 11:17:19
質問させてください。
指定した文字が何回続いたかを取得したいのですがどうしたらいいですか?

例)この場合指定した文字は1です。
$a = '1111222';
$b = '1111136';

$aは4
$bは5

よろしくお願いします。

452:nobodyさん
07/10/29 11:56:14
$a='1111222';$i='1';($r)=($a=~m/($i{2,})/);print length $r
全角はシラネ

453:nobodyさん
07/10/29 11:59:30
$a = '1111222';
$c= 1;
$n= length(($a=~/((?:\Q$c\E)+)/)[0])/length($c);

454:nobodyさん
07/10/29 12:31:05
perlは色んなやり方があって面白いね

$a = '111111222';
$n = '1';

$count = length(($a =~ /($n+)/)[0]);

455:nobodyさん
07/10/29 13:04:18
>>451
$test_str = '111234111111';
$char = '1';

こういう場合は後半気にせず、まず見つけた連続の 3 でいいの?それとも、より長い連続の 6?
「はい、6 が得られるようにしたいんです」だと上に回答を書いた皆さんが優しくキレるかも。

あと、例なんだろうけど $a や $b は地雷踏むことがあるから気をつけてね。

456:nobodyさん
07/10/29 13:25:31
use strict;
use warnings;
test('1111222' => 1 );
test('1111222' => 2 );
test('111122211' => 1 );
test('111122211' => 1 , 1);
test('1111136' => 1 );
sub test {printf "%s:%s:%s\n",$_[0],$_[1],_test(@_)}
sub _test {
local($a,$b);
(sort {$b<=>$a} map {length($_)} ($_[0] =~ m{($_[1]+)}g) )[ $_[2] ? -1 : 0 ];
}


457:nobodyさん
07/10/29 17:04:12
my $i = '1' ;
print +( length ) . qq{\n} for split /[^$i]+/ ,$a ;


458:456
07/10/29 19:24:03
見直したらgdgdだったので修正しとく
sub _test { ( sort map length,$_[0] =~ /(${_[1]}{2,})/g )[$_[2] ? 0 : -1] }



459:nobodyさん
07/10/30 23:38:44
一つのファイルで処理がたくさん書いてあって分岐させる時に、
例えば
$mode = $cgi->param('mode');
というデータを受け取って、処理の場合わけをする場合どういう書き方がエレガントなんでしょうか?

現状は
if ($mode eq 'post') { &post}
elsif ($mode eq 'edit') { &edit;}
elsif ($mode eq 'delete') { &delete}
else { &error}

こんな感じなのですが、それは初心者の書き方だって馬鹿にされました。
悔しいのでもっと効率的な方法があったら教えてください。

460:JAPU ◆lVJAPUTeX.
07/10/30 23:52:20
>>459

エレガントかは分からないけど、分岐がある程度多い場合はこんな書き方だとすっきり書けるかと。

%actions = (post => \&post,
edit => \&edit,
delete => \&delete);

if(exists $actions{$mode}) {
$actions{$mode}->();
} else {
error();
}

数個程度なら if で分岐されちゃってもいいと思いますし、実際そうしています。


461:nobodyさん
07/10/30 23:58:03
>>459
それでいいんじゃね?
各サブルーチンに戻り値があるなら「三項演算子」って手もあるし、
以下の様なやり方もあるけど、普通に書いてメンテ出来るものならば
バカにされても放置しとけば?

my %hash = (
  post => sub { 1 } , # &post の内容を書く
  edit => sub { 2 }, # &edit の内容
  delete => sub { 3 }, # &delete の内容
) ;
print $hash{'edit'}->() || q{error} ; #q{error} には&error あたりを、、、

ソース全体を見たら綺麗な書き方があるかもしれんが、
それに関しては情報不足。

462:nobodyさん
07/10/30 23:59:04
ああ、丸かぶりだorz...

463:nobodyさん
07/10/31 00:10:35
せめて、CGI::Applicationくらい使っとけって話なんじゃ。
if文分岐も分かりやすいと思うが、へたに小細工するとますますへたっぴに見える。

464:nobodyさん
07/10/31 12:11:23
三項演算子ってタマに見かけるけど読みづらいんだよな。
使いたくない書き方No1かも。

465:nobodyさん
07/10/31 13:29:29
 $expr1 ? $expr2
: $expr3 ? $expr4
: $expr5 ? $expr6
:      $expr7
;

書き方か頭が悪いんだろ

466:至急
07/10/31 15:17:23
CGIを自宅出張でサポートしてくれる方募集します。
CGIに詳しく都内に来れる方であれば可能
一日日払い即金で払います。
詳細はメール下さい。


467:nobodyさん
07/10/31 15:47:41
>>459
エレガントかしらないけどこんなパッケージ作ってる。
(不要箇所削ったのでそのまま動くか不明)
package Local::Base;
use strict;
use warnings;
our $DEBUG = 0;
sub class {ref$_[0]||$_[0]||__PACKAGE__}
sub new {(bless {} => class( shift() ))->init(@_)}
sub mode :method {shift->param('mode',@_)}
sub method_name :method {shift->{method_name}->{ shift() }}
sub default_method :method {die('不正なmodeを受け取りました')}
sub init :method {
my $self = shift;
my %param = @_;
$self->{method_name} = $param{method_name} || {};
return $self->run_method( $self->mode , @_ );
}
sub run_method :method {
my $self = shift;
my $method = $self->method_name( shift );
$method = 'default_method' unless $method && $self->can( $method );
return $self->$method(@_);
}
1;


468:nobodyさん
07/10/31 17:36:51
>>467
外部からinitとか呼ばれちゃわない?

469:nobodyさん
07/10/31 19:51:49
>>467 method_nameチェックしてるから大丈夫

使い方も書いたつもりだったんだけど書けてなかった。
#!/usr/bin/perl
use strict;
use warnings;
use base qw(Local::Base);
my $r = eval{
__PACKAGE__->new(
method_name => {
edit => 'edit',
post => 'post'
}
)
} || $@;
print CGI->header,$r,"\n" unless ref $r;
######################################################################
# editの動作を定義
sub edit :method {
my $self = shift;
print $self->header;
print "EDITモード";
return $self;
}
1;


470:nobodyさん
07/10/31 20:11:48
sub edit :method {
この :method って何の意味だっけ
perlsub見ても載ってないや
変数にも付けれた気がしたが

471:nobodyさん
07/10/31 21:09:19
perlsub に載ってるし、perldoc attributesすれば詳細分る(perl5.8.1)。
perl attributes でググれば日本語のサイトも沢山出る。
変数に付けられるのは 5.8系

472:nobodyさん
07/11/01 01:06:18
実際、CGI::Applicationとか使うと効率的になるの?
自分でゴチャゴチャ作るよりも。使ってる人いる?

473:nobodyさん
07/11/01 02:26:10
CGI.pmで書くには複雑だけど、Catalystとかのフレームワーク持ち出すまでもないときには使える

474:nobodyさん
07/11/01 10:48:57
> CGI.pmで書くには複雑だけど、Catalystとかのフレームワーク持ち出すまでもないときには使える

CGI::Application もフレームワークじゃないの?


475:nobodyさん
07/11/01 17:27:41
>>470
:methodは組み込みのattribute
Attribute::Handlers使うと自作のattributeも作れる。
…がいつ仕様が定まってなくて変更があるかもってどっかで読んだ気がする。

>>474
・自分しかいじらない
・少人数で知識の共有が容易
・マニュアルが整っている
のどれかなら自作のフレームワークの方が慣れてるだろうし開発効率いいんじゃないかな?
フレームワーク自体のメンテナンスが(出来る|しなきゃいけない)のはデメリットか?

既製のフレームワーク使うのは
・他の人と知識の共有しやすい
・ドキュメントがある/(第3者も使ってるので)ノウハウが検索しやすい
・フレームワーク自身のメンテナンスを(あまり)しなくていい
ってとこかな?


476:nobodyさん
07/11/01 18:07:59
>>475
???

477:nobodyさん
07/11/02 11:22:36
/public_html/test/log.txt を、UTF8→SJISに変換して、
別名で保存するにはどうすればいいでしょうか

Perl 5.8.8なのでuse Encode;を利用する、読み取り専用で1行ずつ変換処理する
あたりまでは勉強しました。スマートな方法よろしく御教示おねがいします

478:nobodyさん
07/11/02 13:22:56
ログをShift_JISに変換ではなく、表示する時にsjisに返還して表示するようにして、
データはutf-8のままのほうがよくないかな。

479:nobodyさん
07/11/02 13:29:46
>>477
まずは自分で書いた糞コード晒すのが先じゃね?

480:nobodyさん
07/11/02 14:01:12
>>477
おまえさんの「スマート」の基準が判らんのだが、
Encodeで何か不足でもあったのか?

481:nobodyさん
07/11/02 16:43:20
nkf -s log.txt > log.sjis.txt

482:nobodyさん
07/11/02 17:17:33
>>481
すげー!、シェルスクリプトですよね?

sshができない場合はこんな感じで利用すればいいのかな
system("nkf -s log.txt > log.sjis.txt");

1つ気になるのがjcode.plなど元の文字コードを指定するのがあると思うのですが、
&jcode::convert(\$_, 'sjis' ,'utf8');
nkfでは気にしなくても自動判別完璧なのでしょうか?

483:nobodyさん
07/11/02 17:34:58
もはやPerlに何の関係もない

484:nobodyさん
07/11/02 17:51:47
>>477
use Perl6::Slurp;
use Jcode;
$c = slurp "log.txt";
Jcode::convert(\$c, "sjis", "utf8");
open($fh, ">", "log.sjis.txt");
print $fh $c;

>>482
jcode, Jcode, nkfは、判別できる場合は判別してくれる。

485:nobodyさん
07/11/02 22:18:35
>>484
頭足りてないのは理解した。

486:nobodyさん
07/11/05 07:24:22
gethostbynameについての質問です。
コマンドプロンプトだとnslookup -> set type=***
UNIXならhost -t ***
でクエリタイプを設定できるんですけど、PERLの場合はどうやるのでしょうか。


487:nobodyさん
07/11/05 10:55:44
>>486
URLリンク(search.cpan.org)

488:nobodyさん
07/11/05 11:20:15 6nXAnQ+n
ファイルのオープンでエラーになります。
open(FILE,">".$workFname) or die "Cannot Output File: ";

あらかじめファイルを持たせておいて、書き込み権限を与えておけば
成功しますが、新規にファイルを作成できません。
どうすればいいのでしょうか。


489:nobodyさん
07/11/05 12:21:09
ディレクトリのパーミッションかな

490:nobodyさん
07/11/05 13:05:21
>>489
解決しました、ありがとうございます。

491:nobodyさん
07/11/05 13:19:35
die するときに $! も含めるべき。

492:nobodyさん
07/11/05 13:22:45
 自分の環境では、相対パスではエラーになるので、絶対パスに書き換えてます。
できれば相対パスのままで動くようにしたいです。どうすれば解決できるか分かる
方はおられませんか。まあ、あまり解決策が複雑なら、とりあえずあきらめてこの
ままにしておくつもりですが。

493:nobodyさん
07/11/05 14:36:06
>>492
まず「何を」相対パスにしようとしているのかくらい書こうぜ。
あと「自分の環境」は書かなきゃ誰にも伝わらない。

494:nobodyさん
07/11/07 09:25:24 R3XG8Srf
Perlで関数の引数に二次元配列を渡すのは無理ですか。

495:nobodyさん
07/11/07 09:32:37
>>494
ヒント:リファレンス

496:nobodyさん
07/11/07 11:46:06 R3XG8Srf
次のソースのsub kansuのforeachの行は何と書けば正しく動きますか
#!perl/bin/perl
use strict;

sub kansu{
my $ref1 = shift;
my $value1;

foreach $value1($$ref1) {
print $value1 . "\n";
}
}

sub main{
my @databox1 = (13,1,6,3,9,8);
my $ref1 = \@databox1;
usort_kansu(@databox1);
}

main();


497:nobodyさん
07/11/07 11:47:42
誤: usort_kansu(@databox1);
正: kansu(@databox1);

498:nobodyさん
07/11/07 12:36:16
>>496
「言語的意味で」正しく挙動させるには
foreach $value1($ref1) {

(多分)あなたの望んだ挙動にするには
ソースの殆どに手を入れる必要がある。

∴ 本読んでからどうしても分らんかったら
 質問し直せ

499:nobodyさん
07/11/07 14:24:36
>>496-498
#!perl/bin/perl -w
use strict;

sub kansu {
  my $ref1 = shift;
  # my $value1;

  foreach my $value1 (@$ref1) {
    print $value1 . "\n";
  }
}

sub main {
  my @databox1 = (13,1,6,3,9,8);
  my $ref1 = \@databox1;
  kansu($ref1);
}

main();

500:nobodyさん
07/11/07 15:22:14 vLJSXT0R
コーディングじゃないのですが該当スレが見当たらず、新規スレにするような質問でもないと思いこちらに質問します。

.qmailからperlスクリプトを呼び出しているのですが、その場合エラーログを取るにはどうしたらよいのでしょうか?
不正終了しているようなのですが、原因がつかめません。



501:nobodyさん
07/11/07 15:43:21
eval { require スクリプト; };
if ($@) {
open(LOG, ">>/path/to/ログファイル名") or die;
print LOG "WARNING: $@";
close(LOG);
}

こういうスクリプトをqmailから呼び出せばどーよ

>499
forearch行を書き換える条件だからforearch my $value (@_){ って書いて欲しかったのかと・・

502:501
07/11/07 15:59:10
foreach $value1($ref1,@_) {

こうか

503:500
07/11/07 16:13:30
>>501
ありがとうございます。
試してみます

504:nobodyさん
07/11/07 18:20:14
STDERRに吐いた文字はqmailのログにのこるでしょ?
ログが見えないならプログラムを置くべきではないと思う。

505:nobodyさん
07/11/07 18:46:18
>>504に同意だけど、
とりあえず、STDERRをファイルにでもリダイレクトすればどうなん?

506:500
07/11/07 19:59:45
>>504
qmailのログとはmaillogでしょうか?
スクリプトからは何もログを吐いていないんです。

sudoでapache権限で実行してるからログ吐かないのかな。

507:nobodyさん
07/11/07 20:05:11
|/path/to/script.pl >> /path/to/error.log 2>&1

508:500
07/11/07 20:13:46
>>507
ありがとうございます。
.qmailでもログ指定しないといけないんですね。



509:nobodyさん
07/11/07 21:32:38
>>500
何かとんでもない設定でqmail動かして無いか?

510:500
07/11/07 22:29:30
>>509
いえ。
.qmail内でperlのみsudoしてapache権限で動かしてます。
qmailはvpopmail権限で動かしてますよ。

>>507さんでログ取れました。m(__)m

511:nobodyさん
07/11/09 15:33:58
UTF-8でperlを書きたいのですが、文字コードをperlにどのように知らせればよいのでしょうか?

512:nobodyさん
07/11/09 15:47:46
>>511
plagger のソース読むといいよ!

513:nobodyさん
07/11/09 17:28:52
>>512
それ無理に流行らそうとしなくていいよ

514:nobodyさん
07/11/09 17:49:37
tokuhirom自重

515:nobodyさん
07/11/09 18:08:33
Perl死んじゃうん?

516:nobodyさん
07/11/09 18:57:53
(・∀・)ニヤニヤ

517:JAPU ◆lVJAPUTeX.
07/11/09 18:59:46
>>511

use utf8;


518:nobodyさん
07/11/09 19:09:09 8S2oyKnm
>511
use dan;
で解決するよ。

519:nobodyさん
07/11/09 19:26:50
tokuhirom の直近の発言をコピペすることによりスレを荒らす tokuhacks.

520:nobodyさん
07/11/09 21:31:54
plaggerのソース読めって言ってるやつのほとんどはplaggerのソースが読めない

521:nobodyさん
07/11/09 22:28:46
コード解説読めってならともかくコード読ませたってしょうがないだろ。Perlなんだから

522:nobodyさん
07/11/09 23:35:40 8S2oyKnm
tokuhiromのソース読めって言ってるやつのほとんどはtokuhiromのソースが読めない


523:nobodyさん
07/11/09 23:39:07
プラガー(笑)

524:nobodyさん
07/11/10 10:49:28 Z9OcedPC
web上の圧縮ファイル(.lzh)をダウンロードして保存、
さらにその圧縮ファイルを解凍するスクリプトを作りたいです。

例えば、LWP::Simpleを使った場合
my $dat = get('URLリンク(hoge.com)');
の後はどう処理していけばいいでしょうか?


525:nobodyさん
07/11/10 11:02:39
> の後はどう処理していけばいいでしょうか?

lha 書庫を解凍する処理を行えばよい。

526:nobodyさん
07/11/10 11:03:28
>>524
はい。
URLリンク(www.google.co.jp)

527:nobodyさん
07/11/11 02:16:45
2chみたいに携帯から固有のIDを作りたいんですが
どうすればいいんでしょうか。

528:nobodyさん
07/11/11 07:14:50
>>527
i-mode:UTN
EZweb:HTTP_X_UP_SUBNO
Y!:UA

529:nobodyさん
07/11/11 14:32:10 4iiY3aOI
正規表現について質問です。
urlからファイル名だけを取り出したいです。
例えば、$urlという変数に下の3つのurlがあった場合は
hoge1.html, hoge2.html, hoge3.htmlを取り出したいです。

URLリンク(localhost)
URLリンク(localhost)
URLリンク(localhost)

下のように自分でやってみたのですが、localhostの前の/から取得してしまいます。
if( $url =~ /\/(.*\.html)$/ ){
print $1 . "\n";
}

どうすればやりたい事ができますか?
教えてください、お願いします。

530:nobodyさん
07/11/11 14:35:11
ワイルドカードにすべき部分は「全ての文字」じゃない、「/を除いた全ての文字」だ。

あ、とりあえず ?xxx=hoge とかの引数は考えなくていいよね?


531:529
07/11/11 14:47:19
>>530
レス有難うございます。

>ワイルドカードにすべき部分は「全ての文字」じゃない、「/を除いた全ての文字」だ。
なるほど。でも頭では理解できてもそれをコーディングするとなると・・・
.*の部分を弄ればいいのかなぁ。

>あ、とりあえず ?xxx=hoge とかの引数は考えなくていいよね?
はい、このパターンは今回ありえないっす。

532:529
07/11/11 14:58:10
条件文を下のコーディングに変更したらできました。
if( $url =~ /\/([^\/]*\.lzh)$/ ){

正規表現すげー
>>530さんアドバイスありがとうございました。

533:nobodyさん
07/11/12 08:03:25
.*?も覚えたらいいとおも

534:nobodyさん
07/11/12 16:33:29 XNEEDQVz
そのファイルがバイナリなのかテキスト(shift-jis,euc,utf8)なのかを判断するにはどのようにしたら良いのでしょうか?

最初、linuxの fileコマンドを使用していたのですが誤認識がよくあり使えません。
バイナリなのかテキストなのかだけ分かればいいのですがperlでそれを行うにはどのようにしたら良いのでしょうか?

535:nobodyさん
07/11/12 16:42:39
ファイルテスト演算子

536:nobodyさん
07/11/12 18:17:28 XNEEDQVz
>>535
有難う御座います。
試してみましたが、EUCだったり10文字程度のcp932などの場合に誤認識するようです。

537:nobodyさん
07/11/12 18:33:52
\0が含まれてればバイナリでいいんでないの
それ以外だと各文字コードの仕様を調べて
全データがそれに矛盾してないか判断するしかないと思

538:nobodyさん
07/11/12 18:39:12
正規表現使えばいいじゃない

539:nobody
07/11/13 03:52:36 fKqfq45H
URLリンク(www.jpopfan.co.jp)
上のサイトのようなゲームをperlで作りたいと思っています。
htmlのみでも十分なゲームだとは思いますが、あえてCGIゲームとして作りたいです。
(学校の授業の自由課題であるので・・・)

一応以下のようにhtmlは作ってみました。

<html>
 省略
<body>
<h1>オーケストラ楽器別診断</h1>
<p>次の質問にお答えください♪</p>
<form action="/nussknac/cgi-bin/kadai.cgi" method="post">
<dl><dt>お名前</dt>
<dd><input type="text" name="name" value=""></dd><br>
<dt>Q1. あなたはプライドが高いほうですか?</dt>
<dd><ul>
<li><input type="radio" name="answer1" value="Yes" checked>Yes</li>
<li><input type="radio" name="answer1" value="No">No</li>
</ul></dd></dl>
<p><input type="submit" name="send1" value="送信"><br></p>
</form></body></html>

540:nobody
07/11/13 03:57:04 fKqfq45H
539の続きです。
HTMLのフォームから情報をCGIに送り、最初の質問に対してYesならAの質問、NoならBの質問・・・というように
答えによって質問を分岐させるように作りたいです。
if文でひたすら分岐するというイメージはありますが、どうすれば、送信ボタンを押した時に次の質問ページにリンクさせる事ができるかが分かりません。
質問ページは一つ一つ作りたいです。
よろしくお願いします。

541:nobodyさん
07/11/13 04:18:50
そういうアルゴリズムも含めて課題になってるんじゃねーのか・・・まぁいいけどさ。
で、htmlはともかくどこまでperl書いたのよ。まさか1行も書かずに相談しにきてるわけじゃあるまい?

542:nobodyさん
07/11/13 06:54:14
何日か前に別のスレでも見たけど、ここで聞いてて課題間に合うの?

543:nobodyさん
07/11/13 08:58:39
あみだくじでいいのか、選択によってポイントがたまってその結果で振り分けられるのか。
色々ロジックはあると思うけど、そこら辺はどうするのかな

544:nobodyさん
07/11/13 09:17:32
>542
提出日まで1~2週間とかなら大丈夫じゃない?

その昔、C言語の授業があって、その授業終了直後に提出したら怒られたことがあったなあ(笑)
ごめん、確かに授業聞いてませんでした。

545:nobodyさん
07/11/13 09:19:51
あみだくじでいいなら、
<li><input type="radio" name="answer" value="Aの質問のURL" checked>Yes</li>
<li><input type="radio" name="answer" value="Bの質問のURL">No</li>
ってして、
print "Location: answerの値\n\n";
でリダイレクトさせていけばいいだけでは?

546:nobodyさん
07/11/13 10:36:02
HTMLでおk

547:nobodyさん
07/11/13 11:10:10
リンク元のURLに%??%??~が含まれてる場合に、その文字をデコードしてUTF-8として表示しようとしています。
元の文字コードがUTF-8のときは問題なく表示できるのですが、
文字コードの判別を含めてやる場合どうやったらいいのでしょうか?
Perlのバージョンは5ですが、プロバイダ(@nifty)のサーバーのため標準モジュールを使用できません。
いきなり変換が難しいならUTF-8か否かを判別できれば、
UTF-8の場合→直デコード
UTF-8でない場合→直デコード→jcode.plで変換
でいいのかもと考えているのですが、UTF-8か否かの判別法がわかりません。
よろしくお願いします。


548:nobodyさん
07/11/13 15:19:48 lcS1D/Cp
539です。
一応perlでは以下のように作りました。
#!/usr/local/bin/perl

use CGI;
$query = new CGI;

$q1 = $query->param('answer1');
if ($q1 eq Yes) {
open(F, ">>q2.html");
} else {
open(F, ">>q3.html");
}

でもこれだとエラーが出てしまいます。
どのように直せばいいでしょうか。
リンクのさせ方など教えて下さい。
課題提出は12月までです。
違うスレには書いていないので私ではないです。

549:nobodyさん
07/11/13 15:34:47
use constant Yes => 'Yes';


550:nobodyさん
07/11/13 15:56:31
課題は自分でやれwww

551:nobodyさん
07/11/13 16:29:42
>>54
こんな感じはどうよ。適当に書いたからちゃんと動くかどうか知らんけど。
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use FileHandle;
use File::Spec;

my $cgi = CGI->new;
my $fh = FileHandle->new;
my $html_dir = '/path/to/html/dir';
my $output = $cgi->header( -type => 'text/html' );
my $fn = q{};

if ( $cgi->param('answer1') eq 'Yes' ) {
    $fn = 'q2.html';
}
else {
    $fn = 'q3.html';
}

$fh->open( File::Spec->catfile( $html_dir, 'q2.html' ) '<');
my $data = do { local $/; <$fh> };
$fh->close;
$output .= $data;

print $output;


552:nobodyさん
07/11/13 16:30:23
レス番ミスった。
>>54
>>548

553:nobodyさん
07/11/13 16:31:27
さらに訂正。
誤 $fh->open( File::Spec->catfile( $html_dir, 'q2.html' ) '<');
正 $fh->open( File::Spec->catfile( $html_dir, $fn ) '<');

554:nobodyさん
07/11/17 14:33:33 GlJQ98hk
URLリンク(oshiete.new-akiba.com)
ここを見ながらコマンドプロンプトを操作しているのですが
ダウンロードされる段階まで行っても
Can't locate strict.pm in @INC (@INC contents: .) at C:\Program Files \warrick\warrick.pl line8.
BEGIN failed--compilairion aborted at C:\Program Files \warrick\warrick.pl line8.
と出ます。

意味もそもそも分からないのですが、解決方法教えてください

555:nobodyさん
07/11/17 15:24:40
>>554
エラーの原因は@INCが空になってるから。なんでそうなってるのかは知らん。
ActivePerlを入れ直してみたら?

あとここはコーディングスレだからスレ違いだと思わなくもない。

556:nobodyさん
07/11/17 20:14:46
>>555
最新版入れてみたけど同じでした
質問スレいってきます

557:nobodyさん
07/11/17 20:58:37
>>にアンカを3つだけつけたいんだけど、これだと同じとこにリンクをかけてしまいます。
どうすればいいんでしょうか。
for($i=0;$i<3;$i++)
{
$str=~s/>>[0-9]{0,10}[-]{0,1}[0-9]{0,10}/<a href="$_[1]p=$&">$&<\/a>/;
$str=~s/p=>>/p=/;
}

558:nobodyさん
07/11/17 22:00:49
$i = 0; $buf =~ s/(>>\d+)/$i++ < 3 ? "LINK:$+" : $+/egs;

559:556
07/11/17 22:23:56
>>558
ありがとうございます。
そんな書き方知りませんでした。

560:557
07/11/17 22:26:54
>>559
556じゃなくて557でした

561:nobodyさん
07/11/18 19:50:49
自作モジュールをロードするときに、BEGINブロックで@INCに追加してからBEGINの外でuseするのは外道


562:561
07/11/18 19:51:25

「ですか?」が抜けた。
すまぬ

563:nobodyさん
07/11/18 20:25:36
>>561-562
外道かどうか知らんが、普通は use lib でしょ。

564:nobodyさん
07/11/19 06:13:08 s0DcKkZM
これからプログラムをやりたいと思ってます。
いまからやるならperlは覚えたほうがいいですか?

565:nobodyさん
07/11/19 06:19:02
PHPでいいよ

566:561
07/11/19 08:54:57
>>563
ありがt

567:nobodyさん
07/11/20 11:38:30 PLctc9ni
多重起動の禁止はできたが、解放がうまくいかない。
どこが悪いか教えてください。

#登録&多重起動禁止
use Win32::API;
use Win32::Mutex;
my $mutex = Win32::API->new("kernel32","CreateMutex",["N", "N", "P"], "N");
die "二重起動" if(Win32::Mutex->open('TestProgram123'));
$mutex=Win32::Mutex->new(1, 'TestProgram123');


#解放
my $releacemutex = Win32::API->new("kernel32","ReleaseMutex",["N"], "N");
$releacemutex->call($mutex);



次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch