Perlについての質問箱 38箱目at TECH
Perlについての質問箱 38箱目 - 暇つぶし2ch175:デフォルトの名無しさん
08/10/10 20:27:16
プログラミングPerlって2000年発行でちょっと古い気がするのですが、それでも買いですか?

176:デフォルトの名無しさん
08/10/10 20:55:28
即答かコード一行書いて終わりみたいな質問なら答えやすいよね。

>>175
買って損はない

177:デフォルトの名無しさん
08/10/10 20:58:11
>>176
サンクス
買ってみます

178:デフォルトの名無しさん
08/10/10 21:16:28
>>177
バージョン5.6がベースだからunicodeとスレッド関係は要注意。
この2つは5.8以降で互換性が無くなってるからあくまで参考に留めるべし。
5.8以降のunicodeの扱いはwebで検索した方が良い。

179:デフォルトの名無しさん
08/10/10 21:27:50
>>178
了解しました

180:デフォルトの名無しさん
08/10/10 21:50:48
175の人は「perldocがあるからラクダ要らない」説もあることを頭に入れとくといいかもしれないよ。

自分は2002年にラクダ和訳が出てすぐ「欲しかったから」買ったんだけど
純粋に実用面だけを考えたら、他人に「買って損はない」とまでは言えないな。

181:デフォルトの名無しさん
08/10/11 00:07:45
2ちゃんねるがあればマニュアル本を買う必要は無いだろ

182:デフォルトの名無しさん
08/10/11 01:53:16
>>180のオススメのPerlの本は何?

183:デフォルトの名無しさん
08/10/11 02:01:32
本は要らない

184:デフォルトの名無しさん
08/10/11 09:06:11
プログラミングPerlよりPerlクックブックの方が役に立つと思う。

185:デフォルトの名無しさん
08/10/11 09:17:50
今プログラミングPerl久しぶりに開いてみたら・・・

訳出作業に使用した作業環境
IBM ThinkPad 535(Pen120MHz 40MB HDD2GB)
FreeBSD2.2.1+PAO Mule2.3


186:デフォルトの名無しさん
08/10/11 09:23:21
元々料理本はラクダの一部じゃん。
だから、説明に欠落がある。

187:デフォルトの名無しさん
08/10/11 15:46:11
>>137
ソフトウェアってのはハードウエアではないあらゆるものを指すわけで、あなたが飽きてきたっていう
「CGIプログラム」だってソフトウエアです。家電のプリント基板に入っている組み込み系もソフト
ウエアですし。だからみんな「ソフトウエアがやりたい」って、何がやりたいの? と訊いてる訳です。
…てなことは説明しなくてもわかって欲しいのですが。
Windows上で動くGUIなプログラムのことなんですかね…。perlでも書けなくもないですね。
でも結局WinAPIをいじるから、そっちの知識がないと書けないですし。VBやVCという言語がある
ってことくらいは知っててもいいと思います。なでしこってのもあるよ。
そもそも、プログラムの形態とか言語についてあれこれいう前に、作ったプログラムで何がやりたいか、
を具体的にイメージできないと、モチベーションを維持するのは難しいと思います。私の経験上
そうです。何か作りたいものがあって取り組むのが一番上達が早いです。
私はCGI屋なんで、その立場から言わせてもらうと、CGIだっていつまでも奥が深くて、飽きるなんて
ことはないですよ。できることはたくさんあるし、やりたいことも尽きません。


188:デフォルトの名無しさん
08/10/11 16:29:55
ネタに亀レス(w

189:デフォルトの名無しさん
08/10/11 17:31:11
なんだこの珍問答

190:デフォルトの名無しさん
08/10/11 17:48:10
どうかおめこ干しを

191:デフォルトの名無しさん
08/10/12 22:15:11
>>187
ということはプログラムのほとんど、またはすべてはソフトウェア
プログラミングということでしょうか?もしそうなら皆さんごめんなさい。
確かにそれなら自分の質問に答える前につっこまれるのが普通だと思います。
それとCGIですごい大きいものを作ったわけでもないのに飽きたと言ったのは偉そうに
言い過ぎました。すみません。
自分が言っているソフトウェアプログラミングはメモ帳やエクセルなどの
デスクトップアプリケーションのことです。
自分がまだプログラムを始めたての頃、作りたかったのがCGIというかチャットや掲示板だったんです。
プログラムを始めた時は頭が今よりも悪く(今もよくないですが)学校が忙しいのもありましたが
意味不明なことをしていて結局CGIに取り掛かるのに1年かかってしまいました。
ただ作ってみたら結構簡単だし同じような処理が多いので楽しいよりめんどくさい
の気持ちが強くなってしまい他の作ってみたいなという気持ちが出てきたので
前の質問に至りました。
ただ自分はパソコン歴自体長くなく知らないことも多いので
もしかしたらすごい楽しいCGIのプログラミングがあるのかもしれませんね。
検索サイトやデータベースはあまり興味ないですが。
長々とすみません。

192:デフォルトの名無しさん
08/10/12 22:25:09
アルファがベータをカッパらったらイプシロンした

まで読んだ。

193:デフォルトの名無しさん
08/10/13 06:14:15
>>191
まず周囲の空気を読む事から覚えろw

194:デフォルトの名無しさん
08/10/13 08:27:19
>191
用語や用法のミスはあまり問題ではない。
まずは相手に伝える努力をしろよ。

195:デフォルトの名無しさん
08/10/13 09:33:28
>>194
> 用語や用法のミスはあまり問題ではない。

用語や用法の決めつけをあらゆるレベルでやっているのを見て、
みんな真面目に対応するのをやめたのだと思う。



196:デフォルトの名無しさん
08/10/13 10:59:33
入門書くらい読め

197:デフォルトの名無しさん
08/10/13 12:32:51
>>196
結局それに尽きる


198:デフォルトの名無しさん
08/10/13 15:09:20
>>193 >>195
まったくそのとおりです。
>>196
確かに前に読んだ本に書いてあったような気がします。

199:デフォルトの名無しさん
08/10/13 18:03:06
>>175
いわゆるラクダ本はPerlを基軸言語にしたいというやつ以外、不要。
内容的に古いし、プログラミングの基本が学べるわけでもない。
そんなもんに金と時間使うなら、自分本来の得意分野を伸ばすことに時間を使え。

どうしてもってなら下巻だけ買っとけ。

200:デフォルトの名無しさん
08/10/13 20:41:17
リャマ本と続リャマ(動物の名前忘れた)は、単純に読み物として楽しめた。

201:デフォルトの名無しさん
08/10/13 21:33:58
>>200
アルパカな
>単純に読み物として楽しめた。
たしかにそうだが正直なところ
ああいう欧米系ジョークを交える書き方は
日本人には難しそうだ

202:デフォルトの名無しさん
08/10/13 22:20:19
>>201
確かに。

-------------------------
C++をを設計したストラウストラップの教本
  ↓
smalltalkの「メッセージ」を真似して「std::cout << "Hello, world!" 」なんて書けるようにしました。てへ。
  ↓
<< がCのビット演算子とかぶってるって?
しかも厳密な意味では演算子オーバロードですら無いって?
知ったこっちゃないね。重要なのは「メッセージ」だって言ってるだろ!
  ↓
最初の10数ページ以降「メッセージ」の概念が無くなってるって?
あーいいのいいの。これオブジェクト指向とやらを無理矢理実装した俺様仕様だからさ。気にすんなって。
-------------------------

おいらがC++を見限ったのは、このお笑いのツボが理解できなかったからだとさ。

203:デフォルトの名無しさん
08/10/13 22:24:33
リャマ本の第5版って翻訳されないのかな?

204:デフォルトの名無しさん
08/10/14 04:10:35
最近データーベースの勉強をしてるんだが、
perlのソースコードを一行一行、一行づつ全部
データーベースに格納したら面白いかな?
と考えたんだが、どうだろうか?

205:デフォルトの名無しさん
08/10/14 05:27:51
>>204
ストラウストラップ教本 の方がまだ面白い

206:デフォルトの名無しさん
08/10/14 06:11:35
google code search以上の物が出来るとは到底思えない

207:デフォルトの名無しさん
08/10/14 09:55:11
>>204
インクリメンタルに検索できるやつにしてね。


208:164
08/10/14 13:48:50
>>166>>167
レス、ありがとうございます。
モジュール名を聞くとド真ん中な感じですが、
自分では見つけられませんでした。。。

Net::InterfaceモジュールをCPANからダウンロード
して試してみました。

常用しているActivePerl5.8@Winにインストール
しようとしたところ、残念ながらうまくいきませんでした。
ちょっとソース(siteconf)を覗いたんですが、どうやら
UNIX系専用のようですね。超残念。

別環境として、Perl5.6@UNIX系もありましたので、
そこでインストールしてみると、ちゃんとインストール
できました。
スクリプトを書いて動作確認したところ、たしかに
期待どおりの情報(IP、Subnet Mask、MACアドレス)を
取得することができました。

本稼働はUNIX系で行うつもりだったので、これで
充分ではあるのですが、できればWindows環境でも
実行したいです。

Windows環境で同様の情報を取得する方法は
ないでしょうか?




209:デフォルトの名無しさん
08/10/14 14:01:48
Net::Ifconfig::Wrapper - provides a unified way to configure network interfaces on FreeBSD, OpenBSD, Solaris, Linux, OS X, and WinNT (from Win2K).

はどうかな。説明文を読む限りでは使えそうだが試したことはない。

210:デフォルトの名無しさん
08/10/14 22:25:58
XMLをあつかいたくて

use XML::Tidy;
my $tidy = XML::Tidy->new($_);

とやっております。
このとき、不完全なXMLのときは、mismatchエラーが発生しますが、
これを無視して、可能な限りXMLを解釈して読み込むことはできないのでしょうか?

バージョンは
perl : v5.8.8
XML::Parser : 2.34
XML::Tidy : 1.2.54HJnFa
です。


211:デフォルトの名無しさん
08/10/14 22:41:55
XML::Tidyじゃなくなるけど、
XML::Liberal+XML::LibXMLなんて組み合わせは?

212:デフォルトの名無しさん
08/10/14 23:18:27
>>211
ありがとうございます。
試してみます。

213:デフォルトの名無しさん
08/10/15 12:54:22
古いPerlのコードで
&jcode'convert(*title,'jis');
というコードがあったんですが、これってどういう意味ですか。
&jcodeのあとの「'」がわかりません。

214:デフォルトの名無しさん
08/10/15 12:59:01
>>213
URLリンク(www.kt.rim.or.jp)

> 古いパッケージ区切り子はシングルクォートでしたが、
> 現在はダブルコロンを使うのが推奨されています。

> 古い構文も互換性のためにまだサポートされているので、
> "This is $owner's house"のようにすることもできます。
> これは$owner::sをアクセスします。

215:デフォルトの名無しさん
08/10/15 15:14:35
>>210
それがDOMを構築しようとするものなら、
エラーが出るのはどうしようもないのでは。

かわりにSAX系のパーサーを使えば?
XML::Parserとか。
それなりにめんどくなりそうだけど。

216:デフォルトの名無しさん
08/10/15 16:47:01
スレリンク(prog板:168番)
この人小学生からperlやってるってよ

217:デフォルトの名無しさん
08/10/15 18:05:05
>>214
さんくす
Perlの古い書き方だったんですね

218:デフォルトの名無しさん
08/10/15 20:12:37
Perlに古いも新しいもない。

219:デフォルトの名無しさん
08/10/15 21:21:12
そうですね。
>>217で書いてるのはPerlの書き方が古いか新しいかですけどね。

220:デフォルトの名無しさん
08/10/16 00:57:28
律儀な人ね

221:デフォルトの名無しさん
08/10/17 01:04:15
クロージャーって意味がわからんな
カンタンに説明してくれないか?

222:デフォルトの名無しさん
08/10/17 03:29:24
自分で調べようともしないお前に誰が教えるもんか!

223:デフォルトの名無しさん
08/10/17 03:41:29
無名の関数ですね^^

224:デフォルトの名無しさん
08/10/17 12:54:52
>>221
エロ画像フォルダで実感しろ。…普通に object 指向で書く方が楽だ罠。
use File::Find ;
use Data::Dumper ;
use Cwd ;
my $outer = sub{ return 1 if !( -d and /.[.][^.]*?$/) ; $File::Find::prune = 1 ; return ; } ;
my %hash ; my %hash2 ;
my $inner = sub{ return if ! m{\.(?:jpg|bmp|png|gif)$} ; $hash{$File::Find::name} = -s $_ ; } ;
my $inner2 = sub{ push @{$hash2{ uc unpack q{A7}, $_ }}, $File::Find::name ; } ;
my $code = sub {
 my $outer = shift ;
 sub { # コレが closure
  my $inner = shift ;
  sub { return if ! $outer->() ; $inner->() ; }
 }
};
my $base = $code->( $outer ) ;
find $base->($inner), getcwd ;
find $base->($inner2), getcwd ;
print Dumper \%hash, \%hash2 ;

225:デフォルトの名無しさん
08/10/17 12:55:36
>>223
違うとマジレス。

ちゃんとした説明はなかなか大変だよなー。

226:デフォルトの名無しさん
08/10/17 14:09:39
>>221
URLリンク(www.kt.rim.or.jp)

227:デフォルトの名無しさん
08/10/17 19:05:02
スカラー変数の中身の種類(文字列とか、配列のリファレンスとか)を
調べるにはどうしたらいいですか?

228:デフォルトの名無しさん
08/10/17 19:11:14
ref

229:デフォルトの名無しさん
08/10/17 19:13:16
>>227
ref

230:デフォルトの名無しさん
08/10/17 19:22:50
>>228-229
サンクス

231:デフォルトの名無しさん
08/10/17 21:30:11
モジュールのバージョンをまとめて上げたら
MechanizeでBASIC認証がなぜか出来なくなった…
UserAgentオーバーライドしてもcredentialsでもだめ
URLリンク(id:pass@hoge.com)とかやると繋がるけど…
何が悪いんだろう…
同じような人が居たらヒントでもいいんで教えてもらえると有難いです。。

232:デフォルトの名無しさん
08/10/17 21:36:23
>>231
デバッグフラグ立てて動作トレース

233:デフォルトの名無しさん
08/10/17 21:48:51
>>232
ありがとうございます。
やってみます。m(_ _)m

234:231
08/10/18 00:02:44
Basic.pmで初期化されていない値云々というメッセージがでるので
LWP/Authen/Basic.pmのauth_headerにある「$user, $pass」に
試しに値を入れてみたら問題なく繋がった
LWPでauthorization_basicを試してみたら此方も問題なく成功
Mechanizeでもauthorization_basicを呼び出すようにしたら此方も成功

吊ってきます…

235:デフォルトの名無しさん
08/10/18 11:04:50
Linux 上で MS word の *.doc ファイルを読み出したいんですが、何かいい方法はありますか。
Spreadsheet::ParseExcel みたいなのがないかと CPAN を探したのですが、見当たりません。

236:デフォルトの名無しさん
08/10/18 11:39:28
『LinuxでWord文書をテキストファイルに変換するには』
URLリンク(www.atmarkit.co.jp)

Antiword is a free MS Word reader
URLリンク(www.winfield.demon.nl)

OpenOffice.org
URLリンク(ja.openoffice.org)

237:デフォルトの名無しさん
08/10/19 06:50:02
>>236
有難うございます。やはり、perl から呼べるものはないようですね。
文書全体の読み出しだけでなく、「XXページにXXX があったら、XX+n ページに対応するXXXXがあるかチェックする」といった処理もできれば、
と思っていたのですが。それにしても Spreadsheet::ParseExcel は偉大だ…

238:デフォルトの名無しさん
08/10/19 07:26:47
ハッシュが詰まった配列から、一つずつ取り出して各々に処理をしたいんですがforeachじゃ出来ませんでした。
何か良い方法ありますか?

239:デフォルトの名無しさん
08/10/19 12:05:47
while each

240:デフォルトの名無しさん
08/10/19 12:11:04
foreachで出来るだろ?

241:デフォルトの名無しさん
08/10/19 12:27:00
>>238
そういう意味じゃないんです…

>>240
foreach %hoge (@fuga)としたら、syntax error at Z:\script\test.pl line 9, near "foreach %hogeって言われました

242:デフォルトの名無しさん
08/10/19 12:36:10
foreach $hash_ref (@foo) {
$hash_ref->{bar}
}

243:デフォルトの名無しさん
08/10/19 12:40:57
それは…リファレンスですか?
試してみたら通りました。回答ありがとうございました

244:デフォルトの名無しさん
08/10/19 12:43:16
そもそも「ハッシュが詰まった配列」と君が呼んでいるものの正体が
「ハッシュのリファレンスが詰まった配列」だから。
foreachで一つ一つ取り出す時も、当然それをリファレンスとして扱わなきゃダメ。

245:デフォルトの名無しさん
08/10/19 12:50:50
……難しいorz
適当に入門サイト眺めただけだとやっぱり駄目ですね、今度らくだ本買ってじっくり読むことにします

246:質問
08/10/19 16:56:31
ファイルに書き込まれている特定の文字列(ABC数字)を抽出するにあたってよい方法はありますか?

・取得したい文字列の例は、ABC+数字で構成される たとえばABC11やABC2543など
・ファイルによっては行数が異なる。
・各行に取得したい文字列は0個以上ある。
・各行で、取得したい文字列が位置する場所はさまざま。(先頭にあったり、途中にあったり、)



247:デフォルトの名無しさん
08/10/19 17:00:19
>>245
本も良いがまずは perldoc に当たる習慣を付けた方がいい。
メジャーなドキュメントなら和訳も web を探せばある。

URLリンク(perldoc.jp)

URLリンク(fleur.hio.jp)

URLリンク(homepage3.nifty.com)


248:デフォルトの名無しさん
08/10/19 17:10:30
>>246
ふつうに1行ずつ読んでパターンマッチして切り出していけばいいだけ。

249:質問
08/10/19 17:20:17
>>248
各行に0~数個(決まりはないけど最大10程度)あるので・・
if($_=~/ABC(\d+))/)
なら1つは取得できても、その他の文字列をどうやって取得すればいいのか・・

ファイルの例)
マツダ スバル
ABC111 ABC23 トヨタ
日産 本田 ABC2222


↑ここからABCxxxの文字列だけ抽出したい

250:デフォルトの名無しさん
08/10/19 17:26:11
>>249
マニュアル見れ

251:デフォルトの名無しさん
08/10/19 17:27:06
>>249
必要な数だけパターンマッチして切り出していけばいいだけ。

252:デフォルトの名無しさん
08/10/19 18:32:45
マニュアル読まないヤツ大杉

>>241
>foreach %hoge (@fuga)
こんな無茶な構文あり得ないだろ

>>249
パターンマッチのオプションを調べれ

253:デフォルトの名無しさん
08/10/19 20:46:49
>>249
# 一行ヒント野郎
perl -nle "$, = ' '; print $., /ABC\d+/g" < ファイル名

254:デフォルトの名無しさん
08/10/21 23:09:08
いくつか教えてください。
Perlでブログ(RSSつき)みたいな機能って作れますか?
あと家計簿なんかも作れますか?

今勉強中なんですが、目標が無いと挫折しそうなんです(^^;)

255:デフォルトの名無しさん
08/10/21 23:10:53
>>254
おまえならやれる。

256:デフォルトの名無しさん
08/10/21 23:29:51
Perl単体じゃあ家計簿は無理じゃない?
Perl/Tk使うのかな。

257:デフォルトの名無しさん
08/10/21 23:56:14
>>256
っ[Web]

258:デフォルトの名無しさん
08/10/22 00:32:22
PerlMagickを使って画像を編集したいのですが、
$image_dataに画像データが入っていて、それを読み込み/編集/書き込みたい場合はどうやったらいいのでしょうか?
$image->Read($image_data);
$image->Flip;
$image->Write($image_data);
のようなことです。


259:258
08/10/22 00:53:16
↓で出来ました。スレ汚しすいませんでした。
my $image = Image::Magick->new(magick=>'gif');
$image->BlobToImage($image_data);
$image->Flip();
$image_data = $image->ImageToBlob();


260:デフォルトの名無しさん
08/10/22 13:06:56
家計簿なんてExcelでいいじゃん

261:デフォルトの名無しさん
08/10/23 00:28:09
>>256
> Perl単体じゃあ家計簿は無理じゃない?

確かにそうだな。まともなシェルが必要だ。

262:デフォルトの名無しさん
08/10/23 01:44:57
>>260
俺も最初そう思ったんだが、Excelは結局馬鹿だし、Excel用アドイン作ってる連中も馬鹿だから以下のようにした。

・入力はExcel
・Perl+Spreadsheet::ParseExceでウハウハ
・Perlで計算
・Perl+LaTeX系モジュールで帳票自動生成&改ページ自動編集&印刷

これで8年くらい確定申告の提出書類を作成してる。
いまだに国税庁のマルサは来ない。
まー奴らは俺みたいな貧乏人はスルーしてるだけだがw

263:デフォルトの名無しさん
08/10/23 20:36:56
URLリンク(www.google.com)

pythonにも負けてる(藁

264:デフォルトの名無しさん
08/10/24 14:43:04
PerlでCのプリプロセッサのように#ifdefでコンパイルするコードを切り替えたりとかってできませんか?

265:デフォルトの名無しさん
08/10/24 14:50:59
>>264
できる


266:デフォルトの名無しさん
08/10/24 14:58:18
>>264
つ-Pオプション

でもいろいろ問題あるから使わないほうがいいよ。
最終的に何をしたいのかわからないが、たいてい
使わないでできるもっといい方法がある。

267:デフォルトの名無しさん
08/10/24 23:33:04
perlでアパッチのアクセスログを振り分けるってできる?

268:デフォルトの名無しさん
08/10/24 23:35:36
きみの能力しだい。

269:デフォルトの名無しさん
08/10/24 23:38:16
>>267
もちろんできる。できない理由はない。


270:デフォルトの名無しさん
08/10/24 23:45:05
おまえらにやらせようと思ったんだけど、コード書く?

271:デフォルトの名無しさん
08/10/25 01:24:17
>>270
そういうときは、報酬も書いておくと話が早く進むぞ。


272:デフォルトの名無しさん
08/10/25 01:59:01
じゃあ1円

273:デフォルトの名無しさん
08/10/25 07:03:27
進まねぇよ

274:デフォルトの名無しさん
08/10/25 14:56:52
Perlで線形リストのようなデータの持ち方をしたいのですが、
どうすればいいでしょうか?
a->b,c a->b->d,e a->c->f,g
のような感じです

275:デフォルトの名無しさん
08/10/25 16:02:27
リファレンス使えばいいのでは?

276:デフォルトの名無しさん
08/10/25 16:17:22
あるいは古式ゆかしく配列を使うか


277:デフォルトの名無しさん
08/10/25 22:40:17
UNIXマシンからとある機器arielに対してtelnetセッション
をはりっぱにし、arielから吐かれるメッセージをローカル
のディスクにロギングしたいとです。。。

arielの仕様では、無通信時間5分でtimeoutになるので
5分毎に"\n"を送信しようと思います。

自分の頭では以下の様に、whileループでarielからのデータ
を待ち続けるロジックしか思いつかず、これでは5分毎の
"\n"送信をどうして行えばよいのか解りませんとです。

エロい方、なんとか教えてください。。。

open (OUTLOG,">>./ariel.log");

$socket = IO::Socket::INET->new(
  PeerAddr => 'ariel',
  PeerPort => '23',
  Proto  => 'tcp',
);

if ( ! $socket ){ die }

while(1){
  $buf = <$socket>;
  print OUTLOG $buf\n";
}

278:デフォルトの名無しさん
08/10/25 23:08:28
>>277
とりあえずNet::Telnet使えば?

279: ◆TWARamEjuA
08/10/25 23:10:30
cronで5分ごとに\nを送信してあげる別プロセスを作っておく。

280:デフォルトの名無しさん
08/10/25 23:49:42
レスあんがあちょです

>>278
Net::telnetは

 @result = $telnet->cmd("ls -l");

の様な使用例しか無いので、>>277のケースではどうかなーって思って

>>279
別プロセスでなく、同一セッション中で"\n"送らないとダメな気がします
って、んん?別プロから何かシグナルをこのプロセスに対して5分間隔
送ればいいのかぁーー!? そんなのできるんかな、調べてみよう

281:デフォルトの名無しさん
08/10/25 23:56:55
>>280
シグナルハンドリングを知っているなら、alarmで起こせばいいだろ。

282:デフォルトの名無しさん
08/10/26 00:29:26
>>281
おおっ!何と言うことでしょう。
なんだか出来そうな予感がしてまいりました。
月曜に会社行くのが楽しみになってきたw
ヒントあんがちょ。多謝です。

こんなカンジかな?

略~

$SIG{ALRM} = \&timeout; # timeout時の¥に実行する関数
alarm 280;       # 5分=300秒より小さい値でアラーム

while(1){
  $buf = <$socket>;
  print OUTLOG $buf\n";
}

sub timeout {
  print <$socket> "\n"; # 待望の"\n"送信!!
  alarm 280;      # アラーム再設定
}



283:デフォルトの名無しさん
08/10/26 15:29:24
手元のIMAP鯖からGMailにメールを引っ越すスクリプトを書いてます。

Mail::IMAPClientベースで書いていたのですが、

$from->migrate($to, "ALL", "OUTBOX") or die "Could not migrate: $@ \n";
この行で手元サーバからGMailへメールを移行しようとしても、移行できていないようです。
$from は 手元サーバ, $to はGMailです。GMailへの接続login自体はうまくいっているようです。
OUTBOXラベルはGMail側で作って、IMAPから見えるように設定済みです。

アドバイスいただけますでしょうか?

284:デフォルトの名無しさん
08/10/26 16:12:50
>>283
自己解決。migrateを使うのを諦めて、appendとfetchで処理しました。
お騒がせスマソ。

285:デフォルトの名無しさん
08/10/26 17:43:20
通常、文字列の頭から適用される正規表現を後ろから見る方法はないでしょうか?

例えば、以下のように行った場合、
---------------------
my $str = 'a b c d';
$str =~ s/ //;
---------------------
a直後のスペースが消えますが、cの後ろのスペースを消すような正規表現は出来ないでしょうか?
abcdといった文字列は可変です。
事前に文字列を反転させるしか思い浮かばないのですが他に方法はあるのでしょうか?

宜しくお願いします。


286:デフォルトの名無しさん
08/10/26 17:45:23
$str =~ s/(.*) /\1/;

287:デフォルトの名無しさん
08/10/26 20:37:58
>>286
ありがとうございます!!

288:デフォルトの名無しさん
08/10/27 15:12:37
Perl のオブジェクト指向がなんだか無理矢理って感じで、
直感的じゃなくて困っています。Pythonにしとけばよかた。

289:デフォルトの名無しさん
08/10/27 15:30:10
>>288
うん、とっととPerlのことを忘れてPythonに移れ。

290:デフォルトの名無しさん
08/10/27 15:37:36
おれなら、
$str=~/ ([^ ]*?)$/$1/;

どっちでもいいんだけど、>>286と比較したら
どっちの効率がいいんだろう?

291:デフォルトの名無しさん
08/10/27 16:00:31
A.cgiにAformからアクセスしたときと、Bformからアクセスしたときで処理内容を変えるようなプログラムにするにはどうしたらいいですか?
Aから来たときはロケーション無し、Bからなら有り のような感じにしたいのですが

292:デフォルトの名無しさん
08/10/27 16:06:30
リファラー見るとかhiddenで何か持たせるとかボタン名変えるとか

293:デフォルトの名無しさん
08/10/27 16:28:05
>>291
次のどっちかで区別できる。
環境変数HTTP_REFERER
INPUT(TYPE=HIDDEN)要素


でもこれ、Perlの質問じゃないのでスレ違い。
Web系のとこにいけ。

294:デフォルトの名無しさん
08/10/27 17:06:45
>>292-293
ありがとう、試してみます
そして、移動してログよんできます
ごめん

295:デフォルトの名無しさん
08/10/27 22:05:58
$str =~ s/ (?=[^ ]*$)//;
とか

296:デフォルトの名無しさん
08/10/28 09:09:50
>>295
先読みアサーションか。そういえばあったなー。
新しいせいか慣れないせいか、オレはどうしても忘れがち。

297:デフォルトの名無しさん
08/10/28 16:53:15
質問です。
クラスA
クラスB
それぞれのオブジェクト指向モジュールがあったとします。
なかでの処理には変数が英数をチェックしたり文字数チェックしたりでエラーを
だすようにしるとします。

で、問題は英数や文字数をチェックするルーチンはどう実装するのが理想でしょうか?
簡単なルーチンだからそれぞれのクラスにサブルーチンとして最後の行にでも書いておけ!
っていうことでもいいでしょうか?

298:デフォルトの名無しさん
08/10/28 17:56:07
日本語で

299:デフォルトの名無しさん
08/10/28 20:45:57
>>297
URLリンク(fleur.hio.jp)
URLリンク(perldoc.jp)
URLリンク(perldoc.jp)
>>2

300:デフォルトの名無しさん
08/10/28 23:19:11
Tripletailを使用しています。
下記のように前のページからPOSTデータを取得してTemplateに書き出したいのですが、うまく行きません。
どう修正すればよいでしょうか?

#! /usr/bin/perl

use strict;
use warnings;
use Tripletail qw(/dev/null);
use CGI;

$TL->startCgi(
-main => \&main,
);

sub main {
my $t = $TL->newTemplate('template.html');
my $cgi = CGI::new();

#前ページからPOSTデータの取得
$a = $cgi->param('a');
$b = $cgi->param('b');

$t->expand(
STR => $a,
NUM => $b,
);
$t->flush;
}



301:デフォルトの名無しさん
08/10/28 23:39:13
TripletaiLは使ったことないが、「うまく行きません」とやらの詳細を書くべきだな。

302:デフォルトの名無しさん
08/10/28 23:45:21
>>301
ああ、ごめんなさい。

通常、Tripletailを使用せずにPOSTデータを取得する場合、
use CGI;
$cgi = CGI::new();
$data1 = $cgi->param('p_data1');

これで取得はできますが、
上記の sub mainの中で取得しようとすると、
取得できないようです。

まだわかりにくい説明かもしれませんが、お願いします。

303:デフォルトの名無しさん
08/10/29 00:40:51
webprog池

304:デフォルトの名無しさん
08/10/29 01:18:30
>>299
ありがとうございました。そのものずばりの参考ページのようです。
がんばって吸収したいと思います。

305:デフォルトの名無しさん
08/10/29 02:18:09
>>304
> ありがとうございました。そのものずばりの参考ページのようです。

Perlの添付ドキュメントだけどな。おまえのPCにも入っているはず。


306:デフォルトの名無しさん
08/10/29 17:52:59
use strict しているコードで $a $b を未宣言で使おうとしてもエラーにならないんだけど、どうして?

307:デフォルトの名無しさん
08/10/29 18:02:12
$a $bはsortブロックで使われる定義済みの特殊変数だから。

308:デフォルトの名無しさん
08/10/31 23:43:20
utf8で保存できるエディタで、使いやすいものがありましたら、
教えてくれると、大変助かります。

309:デフォルトの名無しさん
08/10/31 23:55:58
>>308
emacs または meadow


310:デフォルトの名無しさん
08/10/31 23:56:23
OSは?

311:デフォルトの名無しさん
08/11/01 00:07:23
板違いすぎるだろ…

312:デフォルトの名無しさん
08/11/01 15:06:35
>>308
Notepad++

313:デフォルトの名無しさん
08/11/02 13:55:18
質問です。まだイブジェクト指向は新米なんですが、

継承とかの説明をみるに、継承のスパゲッティになりそうな 気がするんですが
その辺はエキスパートの実際ってどうなんでしょうか?




314:デフォルトの名無しさん
08/11/02 14:00:30
>>313
質問してないでソースコード読め。

315:デフォルトの名無しさん
08/11/02 18:17:25
イブジェクト指向

316:デフォルトの名無しさん
08/11/02 18:21:46
英語でいうと、 ibject oriented

317:デフォルトの名無しさん
08/11/02 19:05:20
イブジェマスジー?

318:デフォルトの名無しさん
08/11/02 19:45:14
オブイェークト指向

319:デフォルトの名無しさん
08/11/02 23:19:24
学校に

「CGI/Perl リファレンス」

こういう本があるんですがこの2つって同じようなもんなんですか?
CGI=掲示板 Perl=通信 ってイメージがあるんですが

320:デフォルトの名無しさん
08/11/02 23:28:09
>>319
URLリンク(ja.wikipedia.org)
URLリンク(ja.wikipedia.org)

321:デフォルトの名無しさん
08/11/02 23:47:14
perlで指定したURLのファイルをダウンロードするにはどうすればいいんですか?

system関数を使わないで実現したいです

322:デフォルトの名無しさん
08/11/02 23:57:19
LWP::UserAgent

323:デフォルトの名無しさん
08/11/03 00:27:35
>>321
URI::Fetch

324:デフォルトの名無しさん
08/11/03 02:02:59
>>306
なぜエラーにならなければならないの?

325:デフォルトの名無しさん
08/11/03 02:04:53
>>313
他言語同様、継承はなるべく使わない方向で。
他言語での経験があるなら無問題。

326:デフォルトの名無しさん
08/11/03 02:07:45
>>319
CGIがPerlで書かれたものとは限らない
ていうかCGIとPerlじゃ比べる次元が違う
とりあえずページめくれよ

327:デフォルトの名無しさん
08/11/03 02:08:47
>>321
CPAN LWP::Simple検索してサンプル試してみ

328:デフォルトの名無しさん
08/11/03 23:12:57
ActivePerl 5.8.8を使ってます。PPMはGUIになったやつです。

PPMでリポジトリを追加したら、フリーズして、そのまま動かなくなりました。
追加したリポジトリは URLリンク(ppm.tcool.org) です。
何度起動しても、起動時にフリーズします。
多分追加したリポジトリを読みに行ってる時に固まってるんだと思います。
どうやったらこのリポジトリを削除できるでしょうか。
C:\Perlの中のどこかにリポジトリのURLが保存されてて、それを消したら良いんじゃないかと考えたんですが
フォルダ内をGREPしてもURLは見つかりませんでした・・・。



329:デフォルトの名無しさん
08/11/04 00:38:30
C:\Documents and Settings\(user)\Local Settings\Application Data\ActiveState\ActivePerl\(build version)\
以下の、ppm~なんちゃら.dbファイルを消す。

ってか、DOS窓からコマンドライン用のppmでやればいい。C:\Perl\htmlにマニュアルもあることだし。

330:デフォルトの名無しさん
08/11/04 01:36:33
>>392
ありがとうございます。
言われて気づいてみたら、ppm-shellってのがあるんですね。
最近のActivePerlはGUI版PPMしか無いのかと思ってました。


331:デフォルトの名無しさん
08/11/07 18:37:21
ActivePerlをインストールし、perlを採用したプログラミング入門書を見ながらやっているのですが、
ファイルを開くと一応コマンドプロンプトが起動し、実行されるのですが一瞬で消えてしまいます。

最初は、
print"やあ世界!\n;"

exit;
としか書いてなくて、一瞬で終わっちゃうからだなと思い(一瞬ですがやあ世界という表示はされてました)、
入門書の例文にあった
print"名前を入力してください。\n";
$onamae=<STDIN>;
chop $onamae;
print"\n";
print"あなたのお名前は$onamaeさんです。\n;
print"$onamaeさんこんにちは。";
exit;
という内容のファイルを作ってみました。
しかし、名前を打ち込むスキもなく終了してしまいます。

エスパーにしか答えようがない質問かもしれませんが宜しくお願いします。
OSはXPで、入門書は2000年頃の古いものです。

332:デフォルトの名無しさん
08/11/07 18:48:53
>>331
まさかファイルをエクスプローラ上でクリックして動かしてる?
それじゃダメだ
まずコマンドプロンプトを起動してそこで

C:\> perl [ ファイル名 ] [ RETURN ]

で実行しないと

333:デフォルトの名無しさん
08/11/07 18:55:09
>>331
定番の入門書リャマ本
URLリンク(www.oreilly.co.jp)


334:デフォルトの名無しさん
08/11/07 18:55:48
>>332
ありがとうございます。
さきほどURLリンク(www.site-cooler.com)を読んでやってみたら色々できました。
さっきの二番目の例文はなにかミスってるみたいでエラーがなんとかって英文で返されてしまいましたが。

なんだこの本・・・大事なことが書いてない。

335:デフォルトの名無しさん
08/11/07 18:57:34
>>333
ありがとうございます。
また何かつっかえたら買い換えますw

336:デフォルトの名無しさん
08/11/07 19:11:31
今は21世紀だぜ?なんでまた20世紀の古い本を・・・

337:デフォルトの名無しさん
08/11/07 21:14:29
>>336
じゃあ、2008年6月発売のを

URLリンク(oreilly.com)

338:デフォルトの名無しさん
08/11/08 01:45:17
>>331
>print"あなたのお名前は$onamaeさんです。\n;
文字列を閉じてない。「\n」の後に「"」が必要。

ところで、文字列のクォートにはqq{}もおすすめ。

339:デフォルトの名無しさん
08/11/08 17:11:08
質問です。

my %hash = @arr;
$hash{'SendTE'} = 0;
@arr = %hash;

ハッシュのように扱われてる特殊な配列に
重複しないキーを与えるには上記のように
書いていました。
これを一発で書くにはどう書けばいいでしょうか?
(配列をハッシュのように扱いたい。)

340:デフォルトの名無しさん
08/11/09 00:51:07
for(my i=0; i<@arr;i+=2){ $arr[$i+1] = 0 if $arr[$i] eq 'SendTE' }

341:デフォルトの名無しさん
08/11/09 08:02:11
>>339
普通に
my %hash = ( @arr, 'SendTE' => 0 ) ;
じゃダメなのか?サブルーチンとかでの常套手段だけど?

sub hoge {
 my %hash= ( foo => 'bar', @_ ) ;
 return $hash{foo} ;
}
printf "%s\n", hoge( foo => 'foo' ) ;

342:デフォルトの名無しさん
08/11/09 08:37:45
ハッシュにリストを代入するときキーに相当するところに同じ値が複数あると
どれが優先されるかは決まってたっけ?

%h = (a => 1, a=> 2);
print $h{a}

試せば今の処理系でどっちかはわかるけど、仕様としてマニュアル等に明記
されているかどうかを知りたい。


343:デフォルトの名無しさん
08/11/09 10:27:31
マニュアル代読サービスに頼めよ

344:デフォルトの名無しさん
08/11/09 10:46:01
>>342
programing perl のhashの説明、冒頭にそのまんまの記載があるじゃん。
my %h = ( a => 1, a=> 2 ) ;
は、以下のコードと同じ効果がある。
my %h = () ;
${a} = 1;
${a} = 2;
同じキーだと通用しないとでも思うのはあなたの勝手。



345:デフォルトの名無しさん
08/11/09 16:54:02
>>342
上書きされるってことになるんだから()内がどっち向きに処理されるか考えりゃ良い

346:デフォルトの名無しさん
08/11/09 18:03:31
いや、少なくとも考えて分かる類のものじゃないでしょ。

347:デフォルトの名無しさん
08/11/09 18:34:34
@arrには、$arr[0] = 0 しか実行されないような気がするのですが、何故以下のような結果に
なるのでしょうか?

use Data::Dumper;

$i = 0;
$arr[$i] = $i++;

print Dumper \@arr; #=> [undef, 0]

348:デフォルトの名無しさん
08/11/09 19:20:11
むかしPerlクイズで結城さんも混乱してたな。
俺のイメージでは、
= (代入するよー)
$i (右辺の$iは0だなー)
++($iをインクリメントするよー)
$arr[$i] ($arr[$i]に0代入するんだなー。$iはなんだろなー。1だなー)
ってことで、$arr[1]が0になる。

349:デフォルトの名無しさん
08/11/09 19:37:55
俺なんかの説明じゃあれなので、Perlクイズの該当箇所のバックナンバー
URLリンク(archive.mag2.com)

350:デフォルトの名無しさん
08/11/09 19:45:50
>>348-349


351:デフォルトの名無しさん
08/11/09 20:03:53
なるほどねぇ。クイズとしては面白けど、
そんなクソなコードは間違っても書かないから、どうでもいい。
まったく何の役にも立たないし、他の言語への応用も利かないムダ知識やん。

352:デフォルトの名無しさん
08/11/09 20:31:38
>>344
perldataあたりざっと見てそれらしい記述を見つけられなかったのですが、
ラクダに書いてあるんなら仕様だと思っていいのかな。ありがとう。


353:デフォルトの名無しさん
08/11/09 20:37:06
そもそも「ハッシュ」の意味が分かってないだろ?
分かってたらそんな疑問は持たないはず。

354:デフォルトの名無しさん
08/11/09 20:38:34
>>351
クイズのリンク先を読むと仕様ではっきり決まってないってあたりまで
説明されてるのでそういうコードは書いちゃいけないというところまで
理解すれば無駄ではないと思うよ。

355:デフォルトの名無しさん
08/11/09 20:42:51
更に考えると、そもそも重複したキーを配列に持つときにどれを優先したいか、って話だな。
だから実際には問題になることがない問題なのだ。

356:デフォルトの名無しさん
08/11/09 20:46:12
>>353
リストを連想配列に変換するときにどれを優先するかなんて必ずしも自明じゃないだろ。

ごく自然な仕様として、
* 前を優先する
* 優先順位は決めない
の二つがある。

357:デフォルトの名無しさん
08/11/09 21:07:04
自明だよ。
* 最後を優先する
に決まってるだろ。
右辺側は順序を保持するリストなんだから。
これはLISPでも、Cのカンマ演算子でも同じ、「最終評価値」の概念。

お前さんは以下のような仕様だと嬉しいにか?
$a = 1;
$a = 2; # $aの値は 1 のまま

358:デフォルトの名無しさん
08/11/09 21:21:07
バッドノウハウ地獄

359:デフォルトの名無しさん
08/11/09 21:23:45
だがperlは常に信用できない。気持ち的に。

360:デフォルトの名無しさん
08/11/09 21:33:28
そして今日もPythonやRubyの入門サイトをチラ見するけど本腰を入れることはない……

361:デフォルトの名無しさん
08/11/09 21:36:45
>>357
後者はそのとおりだが。前者は全く自明じゃない。
変な思い込みをする癖は直した方がいいよ。

362:デフォルトの名無しさん
08/11/10 00:13:56
>>361
( )の処理が右から左だと思う根拠は?

363:デフォルトの名無しさん
08/11/10 00:20:23
日本語が通じないらしい

364:デフォルトの名無しさん
08/11/10 00:36:38
左から右だという根拠を私は残念ながら知らないので勝手にそう思い込むのは危険
という主張です。根拠があるのなら示してもらえばそうでしたかで済みます。

もちろん右から左だという根拠も同じぐらいありません。



365:デフォルトの名無しさん
08/11/10 01:15:32
つーか %hash = @rray ってときに、何か例外があるんじゃないかという畏れ。

366:デフォルトの名無しさん
08/11/10 01:22:58
本来ならリストから連想配列への変換関数を使わないといけないところを、
ただの代入文で済ませてしまえる言語仕様が、諸悪の根源な気がする。

367:デフォルトの名無しさん
08/11/10 01:55:02
諸悪の根源は、

「Perlはもうそろそろ終わり。Perlの経験を踏まえたあたらしいスクリプト言語へ
シフトしましょう……って、え? CGIってなに? あ、使うな!」

となってしまったこと。

368:デフォルトの名無しさん
08/11/10 02:02:16
正論側の根拠なんぞ簡単だろ。ほれ。
----
%a = (1,2,3,4,1,'a',2,'b',3,'c',4,'d');
print %a;
----
結果→4d1a3c2b # ハッシュだから順不同。
これ即ち (1=>'a' , 2=>'b' , 3=>'c' , 4=>'d')

馬鹿側が根拠を示すのも簡単だ。上記以外の結果を示せば良い。
馬鹿には無理だろうがな。

369:デフォルトの名無しさん
08/11/10 03:06:03
いや、言語仕様と実装の話だよ。

370:デフォルトの名無しさん
08/11/10 06:31:49
>>368
自尊心だけは十分育ってるようだから、次は知能と知識だね。
頑張って!

371:デフォルトの名無しさん
08/11/10 08:55:32 BE:141505128-PLT(54321)
ネタだろ…

372:デフォルトの名無しさん
08/11/10 10:20:20
まぁそういうことにしたいよな。

373:デフォルトの名無しさん
08/11/10 12:47:06
__END__リテラルを含むfoo.plからexecを使うと
execしたプロセスが全部終了するまで
foo.plはロックされるものなのだろうか

374:デフォルトの名無しさん
08/11/10 13:34:04
>>373
関係ないと思うよ

375:デフォルトの名無しさん
08/11/10 17:10:32
>>349
現在の結城さんだったら把握してそうだけど。
>私が調べた限りでは、代入演算子の右と左でどちらを先に評価するかは、
>Perlの本には言及されていませんでした。
perltrap にばっちり記載されてる。
右辺を先に評価。
# perl の 5.005_02/ 1998-Aug-08 でも。

LHS vs. RHS of any assignment operator

LHS vs. RHS of any assignment operator. LHS is evaluated first in
perl4, second in perl5; this can affect the relationship between
side-effects in sub-expressions.

@arr = ( 'left', 'right' );
$a{shift @arr} = shift @arr;
print join( ' ', keys %a );

# perl4 prints: left
# perl5 prints: right

376:デフォルトの名無しさん
08/11/10 19:20:54
>>374
__END__リテラルって意味わからんので、__DATA__セクションのことなんじゃないだろうか?

ただ、プロセス寿命の話なら、ちゃんとした仕様は
たぶんなくて、実装次第+環境次第だろと思う。
だいたい、UNIXとWindowsでかなり違うよな。

377:デフォルトの名無しさん
08/11/10 19:31:32
>>376
ごめんリテラルじゃないね、セクションかトークンと言うべきだった。
うちの環境はWindows XP SP3 + ActivePerl v5.8.8 built for MSWin32-x86-multi-thread
Binary build 817 [257965] Built Mar 20 2006 17:54:25
らしい。

execしたプログラムが走ってる状態のままスクリプトを上書き修正しようとしたら
拒否されて不便だったんだけど、__END__削ったら上書きできた。
なにゆえなのか、よくわからない…

378:デフォルトの名無しさん
08/11/10 20:46:37
>>375
初心者ですが、これは襲撃でした。
自然な思考法なら、perl4の結果を期待するのではないでしょうか?
(それは、初心者だけか)

379:デフォルトの名無しさん
08/11/10 20:47:15
>>378
襲撃でなく、衝撃です。

380:デフォルトの名無しさん
08/11/10 21:09:12 BE:212256083-PLT(54321)
襲撃wwww

381:デフォルトの名無しさん
08/11/10 21:35:40
常識で判断しないのがperlプログラマーだ。
perlの全てを知ってるのが訓練されたperlプログラマーだ。

ほんとperlは地獄だぜ。HAHAHAHAHA

382:デフォルトの名無しさん
08/11/10 22:06:11
perl -le '$i=0;$arr[$i++]=$i;print $arr[0]'
これは1なんだな。わけわかんね。

383:デフォルトの名無しさん
08/11/11 01:36:13
perl = CGI

CGI = perl

384:デフォルトの名無しさん
08/11/11 07:33:41
>>382 モチツケ


385:デフォルトの名無しさん
08/11/11 07:40:28
初心者ですが、どこかのスレでperlの進化型が
ruby,pythonと言う説を見かけました。
これは本当と言えますか?

386:デフォルトの名無しさん
08/11/11 07:59:06
もしそうなら引っ越す

387:デフォルトの名無しさん
08/11/11 08:46:36
>>385
言える

388:デフォルトの名無しさん
08/11/11 09:10:17
>>385
きれいなPerl=Ruby
Perlを捨てて0からシンプルかつ強力に作ったもの=Python

389:デフォルトの名無しさん
08/11/11 09:24:08
>>385
解釈による。

オレ的には認めない。
「進化」ではないだろ。

390:デフォルトの名無しさん
08/11/11 09:31:33
>>377
>__END__削ったら上書きできた。
もう一度落ち着いて、__END__セクションを追加してから
動作を確認するべき。


391:デフォルトの名無しさん
08/11/11 10:12:12
つまり、
サルが進化したものが人間。
perl が進化したものがruby/python
そゆこと?

392:デフォルトの名無しさん
08/11/11 10:16:25
>>391
> サルが進化したものが人間。
> perl が進化したものがruby/python

スクリプト言語/インタプリタ言語の後発のものだということだから、
「perlが進化した」というように、単一の系列に押し込めるのは明らかな間違いだろう。

393:デフォルトの名無しさん
08/11/11 10:19:04
>>386-389
レス有難うございます。
仮に、この三つを全然知らない場合、どれを会得しようと思いますか?


394:デフォルトの名無しさん
08/11/11 10:52:56
>>393
初心者はPythonがお勧め。

395:デフォルトの名無しさん
08/11/11 11:12:48
>>393
Python

396:デフォルトの名無しさん
08/11/11 11:42:20
% perl -le '$i=0;$arr[$i++]=$i++;print $arr[1]'


ますますわけわかめ

397:デフォルトの名無しさん
08/11/11 12:21:43
>>396 モチツケ



398:デフォルトの名無しさん
08/11/11 12:56:02
>>396
それはええやろw

399:デフォルトの名無しさん
08/11/11 13:00:42
>>393
Perl。

念のために言っとくが、ここはPerlスレだからな!w

400:デフォルトの名無しさん
08/11/11 13:55:08
いまからPerlをやるって人って自虐者?

401:デフォルトの名無しさん
08/11/11 13:58:02
>>382
これ左辺から評価してる?

402:デフォルトの名無しさん
08/11/11 14:39:45
>>398
ちがうよ!全然ちがうよ!
>>382>>396を見比べるとすごく気持ちわるいんだよ!


403:デフォルトの名無しさん
08/11/11 15:21:21
>>402
$i=0; $arr[++$i]=++$i; print $arr[2]

404:デフォルトの名無しさん
08/11/11 15:49:19
馬鹿すぎて死にたい。

演算子の優先順位
左結合 項 リスト演算子 (左方向に対して)
左結合 ->
非結合 ++ --

ずーっと下に

右結合 = += -= *= などの代入演算子

405:デフォルトの名無しさん
08/11/11 18:34:59
>>377
環境依存の可能性が高いので、Activeperl 5.8 + WinXP 限定の話として...
perlは__END__(又は__DATA__)を見つけると、ソースファイルをcloseせずに処理を開始する。
そしてexecしたプロセスに開いたファイルが引き継がれる。

ただしperlは単にファイルをリードオープンしているだけであり、何もロックしていないので、
ファイルの中身を書き換える事は可能。
Winでは開かれたファイルのリネームや削除が失敗するので、それに引っかかっているのでは?


>>382,396
perlの中では参照渡しだし、ポストインクリメント演算子は元の値を保持するための一時変数を作る。
配列用の代入処理部へは \配列,\要素番号,\値 が渡される
前者(382)では \@arr,\${古い$iの値(0)を保持している一時変数},\$i を渡すのに対して、
後者(396)だと \@arr,\${古い$iの値(1)を保持している一時変数},\${古い$iの値(0)を保持している一時変数}
を渡すという違い。

406:デフォルトの名無しさん
08/11/11 18:55:14
質問です。
Storableを使ってハッシュをバイナリデータに書き出す際、
上書きではなく追加書き込みで保存する方法はあるのでしょうか。


test.pl
---
use strict;
use Storable qw(nstore);

%hash = (
"a" => '1',
"b" => '2',
);

nstore [%hash], "hash.dat";
----

test.plを一度実行し、hash.dat生成

407:デフォルトの名無しさん
08/11/11 18:55:47
(続き)
その後test.pl内の%hashを

----
%hash = (
"c" => '3',
"d" => '4',
);
----

に書き換えて保存、再度test.plを実行

…するとhash.dat内には
c=>3 と d=>4 のペアしか存在していません。
つまり上書き保存されていることになります。
自分は追加保存の形にしたいのですが、
何かいい案がありましたらご教授ください。
よろしくお願いします。

408:デフォルトの名無しさん
08/11/11 19:11:12
>>407
まず元のを読んでから要素を追加して書けばいいと思うよ

409:デフォルトの名無しさん
08/11/11 21:56:02
質問です
外部プログラムを起動して、そのプログラムの実行中にperlから値を渡すといったことはできないでしょうか
あるCのプログラムを実行しscanfで入力待ちになり、そこへ値を渡すといった感じなのですが

410:デフォルトの名無しさん
08/11/11 21:56:41
ソケット使えばできる。

411:デフォルトの名無しさん
08/11/12 23:35:47
大学の宿題誰かおながいします・・・
>>>>>>>>>>>>>>>>>>>>>>>>>>>
配列,2次元配列を用いて, santaku.pl を以下のようにグレードアップせよ.
○ 3択の問題を4題出題し,正解数を最後に表示.
$mondai を @mondai にして配列化
@sentakuを 2次元配列化 $santaku[A][B]の形
$kotaeを @kotaeにして,配列化

これを santaku2.pl という名前で保存して動かす

412:デフォルトの名無しさん
08/11/12 23:36:52
santaku.plっってのはこれです
# santaku.pl
# 問題
$mondai="東京ディズニーリゾートがあるのは次の内,どこか?";
# 選択肢
$sentaku[1]="東京県";
$sentaku[2]="千葉県";
$sentaku[3]="神奈川県";
# 答え
$kotae=2;
#
$user=0;
printf ("%s\n", $mondai); # 問題の表示
for ($i=1; $i<=3; $i++) { # 選択肢の表示
printf ("[%d] %s\n", $i, $sentaku[$i]);
}
printf ("答えを1~3から選んでください ");
$user=<>;
if ($user==$kotae) {
printf ("正解\n");
} else {
printf ("不正解\n");
}
exit;

よろしくお願いします(;へ;)


413:デフォルトの名無しさん
08/11/12 23:47:42
どこまで考えて、どこが分からないの?

414:デフォルトの名無しさん
08/11/12 23:55:39
最初からわかりません・・・
1つずつやったら面倒だから二次元配列にするというのはなんとなくわかるのですが
どこから手をつけていいのか;;;

forを2重でつかったりもするんでしょうか・・・頭が痛いです;

415:デフォルトの名無しさん
08/11/13 00:04:41
0番使えよ……

416:デフォルトの名無しさん
08/11/13 00:16:04
$[=1;

417:デフォルトの名無しさん
08/11/13 00:29:28
大学の教養でそういう講義があるのかな?

とりあえず、問題と答えを4問分2次元配列にして、
正解数をカウントする変数をつくればできると思う

418:デフォルトの名無しさん
08/11/13 01:05:45
printf ……

419:デフォルトの名無しさん
08/11/13 01:11:16
そうです、情報機器の操作っていう講義です

どうですか??正解数をカウントする変数はさっぱりです><
# =================== データ部分 ==========================
# 問題
$mondai[1]="東京ディズニーリゾートがあるのは次の内,どこか?";
$mondai[2]="東京大学があるのは次の内,どこか?";
$mondai[3]="横浜があるのは次の内,どこか?" ;
# 選択肢
$sentaku[1]="東京県"; $sentaku[2]="千葉県"; $sentaku[3]="神奈川県";
# 答え
$kotae[1]=2;
$kotae[2]=1;
$kotae[3]=3;
# =========================================================
#
# =================== 手続き部分 ==========================
#
$user=0;
printf ("%s\n", $mondai); # 問題の表示
for ($i=1; $i<=3; $i++) { # 選択肢の表示
printf ("[%d] %s\n", $i, $sentaku[$i]);
}
printf ("答えを1~3から選んでください ");
$user=<>;
if ($user==$kotae) {
printf ("正解\n");
} else {
printf ("不正解\n");
}
exit;


420:デフォルトの名無しさん
08/11/13 01:36:31
情報機器の操作とやら でperlなんだね

どちらかというとアバウトな言語だと、教える方も大変だろうに。

rubyとかpythonの方がよさそうだが


421:デフォルトの名無しさん
08/11/13 01:39:28
>rubyとかpython
さっぱりです><
basic c javaなら講義中に名前を見ましたが。。
その教授はperlが使いやすいといっていたので、、よくわかりませんが


どなたかよろしくお願いします;明日の朝提出なので><

422:デフォルトの名無しさん
08/11/13 01:58:02
明日の朝提出なのになんで今頃もってくるんだか。。。
毎日わかったところまでをここで聞いていればよかったのに。

printfだけなおして友達のを写した方が早いよ




423:デフォルトの名無しさん
08/11/13 02:11:29
この程度のがわからないのならあきらめた方が良いんじゃね?

424:デフォルトの名無しさん
08/11/13 02:27:03
明日の朝なら、まだ30時間くらいあるじゃない。

425:デフォルトの名無しさん
08/11/13 08:04:28
# =================== データ部分 ==========================
# 問題
my @mondai=();
$mondai[0]="東京ディズニーリゾートがあるのは次の内,どこか?";
$mondai[1]="東京大学があるのは次の内,どこか?";
$mondai[2]="横浜があるのは次の内,どこか?";
# 選択肢
my @sentaku=();
$sentaku[0][0]="東京県"; $sentaku[0][1]="千葉県"; $sentaku[0][2]="神奈川県";
$sentaku[1][0]="東京県"; $sentaku[1][1]="千葉県"; $sentaku[1][2]="神奈川県";
$sentaku[2][0]="東京県"; $sentaku[2][1]="千葉県"; $sentaku[2][2]="神奈川県";
# 答え
my @kotae=(2,1,3);
# =================== 手続き部分 ==========================

my @input=();
for(my $cnt=0;$cnt<scalar(@mondai);$cnt++){
printf("%s\n", $mondai[$cnt] ); # 問題の表示
for(my $cnt2=0;$cnt2<3;$cnt2++) { # 選択肢の表示
printf("[%d] %s\n",$cnt2,$sentaku[$cnt][$cnt2] );
}
printf("答えを1~3から選んでください");
my $user=<>;
push @input,$user;
}
exit;

とりあえず、問題表示部分だけ。正誤判定は自分で考えてください。
…ところで、「@sentakuを 2次元配列化 $santaku[A][B]の形」が嫌だなぁ。
リファレンス($santaku->[A][B])使っちゃ駄目なのかな?

426:デフォルトの名無しさん
08/11/13 08:13:52
# =================== データ部分 ==========================
# 問題
my @mondai=("東京ディズニーリゾートがあるのは次の内,どこか?",
"東京大学があるのは次の内,どこか?","横浜があるのは次の内,どこか?");
# 選択肢
my @sentaku=(["東京県","千葉県","神奈川県"],["東京県","千葉県",
"神奈川県"],["東京県","千葉県","神奈川県"]);
# 答え
my @kotae=(2,1,3);
# =================== 手続き部分 ==========================
my @input=();
for(my $cnt1=0;$cnt1<scalar(@mondai);$cnt1++){
 printf("%s\n", $mondai[$cnt1] ); # 問題の表示
 for(my $cnt2=0;$cnt2<scalar(@{$sentaku[$cnt1]});$cnt2++) { # 選択肢の表示
  printf("[%d] %s\n",$cnt2,$sentaku[$cnt1][$cnt2] );
 }
 printf("答えを1~3から選んでください");
 my $user=<>;
 push @input,$user;
}
exit;

この方がスッキリしてて良いかな?

427:デフォルトの名無しさん
08/11/13 09:22:27
みんな、なんでいつものゴルフバージョンを作らないの?

428:デフォルトの名無しさん
08/11/13 09:35:48
>>427
おまえが率先して作らないからだろ。司令官どの。

429:デフォルトの名無しさん
08/11/13 10:50:48
419は「2次元配列」の意味がわかってない

430:デフォルトの名無しさん
08/11/13 10:52:18
>…ところで、「@sentakuを 2次元配列化 $santaku[A][B]の形」が嫌だなぁ。
>リファレンス($santaku->[A][B])使っちゃ駄目なのかな?

よく、質問を質問で返す人がいるよね。
しかも、「・・・じゃダメなの?」という言い方する人が結構多い。
なんか頭悪そう。

431:デフォルトの名無しさん
08/11/13 10:57:07
自信が無いから、質問を質問で返すのかな。とにかく頭悪そうに見える。

432:デフォルトの名無しさん
08/11/13 11:05:00
頭の悪さ判定師が集結中のスレはここですか?

433:デフォルトの名無しさん
08/11/13 11:27:51
課題にレスしちゃうところがなんか頭悪そう。

434:デフォルトの名無しさん
08/11/13 11:28:49
配列変数で添え字が0から始まるのに、1、2、3…と使うのは気持ち悪い。
$[ = 1 とすればいいが、そんなの私は実際に使ったことない(使う必要ない)。
それに、問題、選択肢、回答と別々の配列変数に入れて、添え字でくくるのも
気持ち悪い。私なら無名ハッシュの配列を作るが。
my @mondai = (
"東京ディズニーリゾートがあるのは次の内,どこか?",
"東京大学があるのは次の内,どこか?",
"横浜があるのは次の内,どこか?",
);
my @sentaku = (
["東京県","千葉県","神奈川県"],
["東京県","千葉県","神奈川県"],
["東京県","千葉県","神奈川県"],
);
my @kotae = (2,1,3);
for my $q(0..@mondai-1) {
print $mondai[$q], "\n";
for my $i(1..@{$sentaku[$q]}) {
printf("[%d]%s\n", $i, $sentaku[$q][$i-1]);
}
my $input;
while (1) {
printf "答えを1~3から選んでください: ";
chomp($input = <STDIN>);
last if $input =~ /^[1-3]$/;
}
print $input == $kotae[$q] ? "○正解" : "×不正解";
print "\n\n";
}
print "終わり\n";

435:デフォルトの名無しさん
08/11/13 11:29:04
「東京県」に誰も突っ込まないのは頭悪すぎ

436:434
08/11/13 11:30:21
>>435
しまったorz

437:デフォルトの名無しさん
08/11/13 11:31:14
東京大学は東京都にも千葉県にも神奈川県にもあるのに頭悪すぎ

438:デフォルトの名無しさん
08/11/13 11:33:41
埼玉都ですね。わかります。

439:デフォルトの名無しさん
08/11/13 11:34:14
URLリンク(www.campuscity.jp)
神戸県ですね、わかります。

440:デフォルトの名無しさん
08/11/13 11:38:27
本質的な部分での発言ができないので
コメントや文字列リテラルの中のスペルミスやtypoに
突っ込まざるを得ない人たちが集まるスレはここですか?

441:デフォルトの名無しさん
08/11/13 11:41:17
>>430
そういう言い方しちゃダメなの?

442:デフォルトの名無しさん
08/11/13 11:43:21
ここで本質とは何を指していますか?
頭が悪いので教えてください。



443:デフォルトの名無しさん
08/11/13 11:45:36
>>440
「本質的」とか言い出すあたり、すごく頭悪そう。

444:デフォルトの名無しさん
08/11/13 11:47:23
ここは乗っかっとくとこだろw

445:デフォルトの名無しさん
08/11/13 11:47:32
>>442
議題は横浜がどこにあるか です

446:デフォルトの名無しさん
08/11/13 11:47:43
顔真っ赤だよw
そんなに恥ずかしかった?

447:デフォルトの名無しさん
08/11/13 12:06:20
["東京県(都?)","千葉県","神奈川県"] が重複してるのがなんか嫌だね。

my @sentaku = (["東京県","千葉県","神奈川県"])x3;

とか短くできんのかな?

448:デフォルトの名無しさん
08/11/13 12:11:53
>>447

449:デフォルトの名無しさん
08/11/13 12:16:13
選択肢は広がる可能性があるからそれぞれ指定できるようにしておいたほうがいいと思う。
俺なら47都道府県を別配列で持っておいて、インデックスの配列で指定する。
my $sentaku = [
[1,2,3],
[1,2,3],
[1,2,3],
];

450:デフォルトの名無しさん
08/11/13 12:16:17
>>441
「質問に質問で返す」ことはなぜよくないこととされているのでしょうか。
URLリンク(q.hatena.ne.jp)



451:デフォルトの名無しさん
08/11/13 12:26:58
これさ、問題つくってるヤツアホだよな。


452:デフォルトの名無しさん
08/11/13 12:32:45
?が付いただけで質問返しと認識するってどうよ…
って430までで唯一「・・・じゃダメなの?」を使ったオレが
顔を真っ赤にしてカキコ。

>>447
my @arr = ( ([1,2 ]) x 2 ) ;


453:デフォルトの名無しさん
08/11/13 12:34:56
>>439
埼玉都はネタだけど、神戸県は明治初期に実在した。

454:デフォルトの名無しさん
08/11/13 12:35:15
あ、問題見てなかった
リファレンス使わない2次元配列なんて、逆にわからんわ

455:デフォルトの名無しさん
08/11/13 12:43:29
>>447
2問目の選択肢が変更になったらどうするのかねアンダーソン君

456:デフォルトの名無しさん
08/11/13 13:00:06

リファレンス使わない2次元配列なんてない、
てことはリファレンスは使っていいのか、
となると2次元配列じゃない方がやりやすくね?

ってなるんだが。


457:デフォルトの名無しさん
08/11/13 13:11:47
↑ こいつ最高に頭悪い

458:デフォルトの名無しさん
08/11/13 13:35:50
>>2-458
すごく頭悪そう。

459:デフォルトの名無しさん
08/11/13 15:09:10
>>458 チョトワロタ


460:デフォルトの名無しさん
08/11/13 16:20:56
ヒマだったんで二次元配列縛りなしでやってみた。

my $ok = 0;
TEST: for ( @qz ) {
print $_->{'質問'} . "\n";
print "\t$_\n" for ( @{$_->{'選択肢'}} );
while (1) {
print '正しい選択肢の番号を入力してください(中止:q): ';
chomp ( my $c = <STDIN> );
last TEST if $c =~ /q/i;
if ( $c =~ /^\d+$/ && 1 <= $c && $c <= @qz ) {
$c == $_->{'答'} ? ( print "正解" and $ok++ ) : print "不正解";
last;
}
}
print "。\n\n";
}
print "$ok 問正解しました。\n";


461:407
08/11/13 16:33:58
>>408
レスありがとうございます。
規制に巻き込まれてしまい、返事が遅くなってしまいました

やはり一度読み込み直すしかありませんか…
外部データが増えるとそれだけ読み込み・追加・書き出しに時間がかかってしまうので
何とか追加だけでやりくり出来ないかと考えていたのです。
アドバイスと合わせ、色々模索してみたいと思います

462:460
08/11/13 16:48:31
誤 $c <= @qz
正 $c <= @{$_->{'選択肢'}}

余計なことするといつも恥をかく...orz




463:デフォルトの名無しさん
08/11/13 18:20:36
>>461
> やはり一度読み込み直すしかありませんか…

いや。
普通、DBM類を使う。

464:デフォルトの名無しさん
08/11/13 19:39:19
>>461
全ての面倒を読み込み側に押し付けるって手もある。
保存用フォルダに "${^T}.${$}" 等のファイル名で書き出すとか。

465:デフォルトの名無しさん
08/11/13 20:08:32
この度、WindowsサーバーのPerlを5.6.1から5.8.8にバージョンアップ
する事になりました。
バーチャルサーバーを立ててWEBチームにテストしてもらっていたのですが、
動かない部分がいくつかある模様です。
WEBチームからPerlのバージョンアップによって
命令がどう変わったか等を調べて欲しいと頼まれたのですが、
どのようにして調べれば良いのでしょうか?

ご教授お願いいたします。


466:デフォルトの名無しさん
08/11/13 20:21:12
>>465
URLリンク(perldoc.perl.org)

467:デフォルトの名無しさん
08/11/13 20:47:19
「質問を質問で返すな」って、そんな場面は、結構あると思うし、
そもそも(発端になった)>>435は質問に、まったく答えてない訳でも
無いのに…。

「夕飯何にしようか?」
「肉が良いなぁ。焼肉としゃぶしゃぶどっちが良い?」
「質問を質問で返すなm9(^Д^)プギャー」

とか言っちゃうのかな?(w

468:デフォルトの名無しさん
08/11/13 20:51:27
いうだろ

469:デフォルトの名無しさん
08/11/13 21:00:57
これがゆとり大学生の実態である。

470:デフォルトの名無しさん
08/11/13 21:03:53
>>465
>命令がどう変わったか
「命令」は変わってないよな。w

マジレスすると、変更内容を調べるよりも、
ダメなところを特定して調整するほうがきっとマシ。
それがイヤなら、Perlのバージョンを戻せ。

つか、両方インストールして使いわけろよ。ふぁ。

471:デフォルトの名無しさん
08/11/13 21:12:38
>>461
キーの重複はかまわないのか?

☆かまわない
別のファイルに出力してから、もとのファイルに
くっつければいいんじゃね。

☆ダメ
前のファイルを読み込まずに、重複を調べる
方法を教えろ。
続きはそれからだ。

472:デフォルトの名無しさん
08/11/13 21:51:49
× 続きはそれからだ。
○ 続きはよそでやれ。

473:デフォルトの名無しさん
08/11/13 21:56:22
「夕飯何にしようか?」
「普通に焼肉じゃいけないの?」


474:デフォルトの名無しさん
08/11/13 21:56:52
「夕飯何にしようか?」
「普通にしゃぶしゃぶじゃいけないの?」

475:デフォルトの名無しさん
08/11/13 21:57:56
「夕飯何にしようか?」
「普通にカレーじゃいけないの?」

476:デフォルトの名無しさん
08/11/13 21:59:48
「夕飯何にしようか?」
「ラーメンじゃダメなの?」

477:デフォルトの名無しさん
08/11/13 22:32:54
「夕飯何にしようか?」
「俺が決めていいの?」

478:デフォルトの名無しさん
08/11/14 01:30:11
夫「今日の夕飯なに?」
妻「何が食べたいの?」
夫「質問に質問で返すなっ!!」

……これが>>430の結婚生活(もしあったとして)


479:デフォルトの名無しさん
08/11/14 05:35:27
「夕飯何にしようか?」
「晩飯じゃないの?」

480:デフォルトの名無しさん
08/11/14 06:10:57
単一ファイル内で複数packageを定義した場合、
継承がうまく動かないのですが、どうすれば良いでしょうか。

$foo = Foo->new(); # OK
$bar = Bar->new(); # NG

package Foo;
sub new { bless {}; }

package Bar;
@ISA = qw(Foo);


これだと Bar->new() が失敗します。
package Bar 部分を Bar.pm というファイルにして、ファイル先頭で use Bar すると
問題ないのですが、単一ファイル内で継承させる場合はどう書けば良いのでしょうか。

481:デフォルトの名無しさん
08/11/14 06:42:23
{package Foo;
sub new { bless {}; } }
{package Bar;
@ISA = qw(Foo);}

$foo = Foo->new(); # OK
$bar = Bar->new(); # OK

482:480
08/11/14 07:00:38
>>481
おおお。助かりました。thanks!

483:デフォルトの名無しさん
08/11/14 08:40:19
package Foo;
sub new { bless {}; }

package Bar;
@ISA = qw(Foo);

package main;
$foo = Foo->new(); # OK
$bar = Bar->new(); # OK

じゃねえの

484:デフォルトの名無しさん
08/11/14 14:24:45
夫「今日の夕飯なに?」
妻「スキヤキじゃダメなの?」
夫「・・・」

485:デフォルトの名無しさん
08/11/14 14:26:27
夫「赤ちゃん産まれた?男の子?女の子?」
妻「男じゃダメなの?」
夫「・・・」

486:デフォルトの名無しさん
08/11/14 19:10:29
>>485
その流れはヤバい!w
もう離婚するしかないな。

487:デフォルトの名無しさん
08/11/14 20:42:25
ゴメン理解できない
童貞の俺にも分かるように詳しく

488:デフォルトの名無しさん
08/11/14 20:53:25
童貞じゃないけど、俺もわからん!

489:デフォルトの名無しさん
08/11/14 21:03:13
女だったら、夫がロリコンでいたずらすると思ったんだろう。

490:デフォルトの名無しさん
08/11/14 21:50:28
な~る

491:デフォルトの名無しさん
08/11/14 21:58:27
深読みしすぎてた
トン

492:デフォルトの名無しさん
08/11/14 22:46:06
>>489
それは俺も考えたけど、
それだとスキヤキが説明できない。

493:デフォルトの名無しさん
08/11/15 05:16:10
>>485
もう嫁ケンカうってるじゃんw

494:デフォルトの名無しさん
08/11/15 09:03:03
ツンなだけだろw

495:デフォルトの名無しさん
08/11/15 10:19:13
生まれる段階に至っても性別を知らなかった夫

496:デフォルトの名無しさん
08/11/15 19:02:17
産まれた?って訊いてる時点でダメだろ

497:デフォルトの名無しさん
08/11/15 19:58:51
後のオブジェクト指向である

498:デフォルトの名無しさん
08/11/16 02:32:11
同じ文字列を使ってもDigest::MD5で得られる16進とmd5sumの結果が違うのはなぜでしょうか

499:498
08/11/16 02:36:14
自己解決しました。
一方には改行コードが含まれていないだけでした。

500:デフォルトの名無しさん
08/11/16 10:31:38
perlのマッチ演算子で変数が使えますけど
$pat = "foo"; $str =~ /$pat/; # この場合 /foo/ と同じ
変数に含まれる文字を全て普通の文字としてマッチさせるにはどうしたらいいでしょうか。

たとえば $pat = "foo[0]"; だと、/$pat/では[0]の部分を文字クラスとして処理するよう
ですが、単純に "foo[0]" という文字にマッチしてほしいのです。

501:デフォルトの名無しさん
08/11/16 10:36:15
/\Q$unko\E/

502:デフォルトの名無しさん
08/11/16 13:14:45
dmain.cpp
Note: including file: d:/projects/game/include\common.h
Note: including file: d:/projects/game/include\product.h
Note: including file: d:/projects/etc/psdk/include\WindowsX.h
Note: including file: d:/projects/etc/psdk/include\windows.h

こういうファイルを

dmain.obj: \
/cygdrive/d/projects/game/include/common.h \
/cygdrive/d/projects/game/include/product.h \
/cygdrive/d/projects/etc/psdk/include/WindowsX.h \
/cygdrive/d/projects/etc/psdk/include/windows.h \
dmain.cpp

こんな風にするスクリプトってどうやるの?


503:デフォルトの名無しさん
08/11/16 13:57:44
perl -ple 's/$/\\/; s/cpp/obj/; s/Note: including file: d:/\/cygdrive\/d/; END{ print "dmain.cpp";} '

504:デフォルトの名無しさん
08/11/17 20:02:29
質問です。掲示板のプログラムなのですが、データファイル(1行1投稿内容のテキストファイル)
を掲示板のCGIのサーバーとは異なるサーバーに置きたいのですが、その場合どのように
すればよいでしょうか? できればmySQLサーバーはインジェクションの関係で使いたくあり
ません。

サーバー1 掲示板cgiや画像データなどを担当
サーバー2 掲示板テキストデータ(掲示板cgiから読み書きされる)

なにかアドバイスをお願いします。

505:デフォルトの名無しさん
08/11/17 20:11:26
>>504
NFSマウント。とネタレス。
WebProg行け。とマジレス。
その質問だとperl無関係だから、いきなりperlのスレに行くなよ…。

506:デフォルトの名無しさん
08/11/18 19:27:48
URLリンク(www.drk7.jp)
に記載されている通りにやったのですが、
C:\strawberry\cpan\build\DB_File-1.817-XRfyBQ>perl Makefile.pl
Parsing config.in...
Looks Good.
Note (probably harmless): No library found for -llibdb
Writing Makefile for DB_File

C:\strawberry\cpan\build\DB_File-1.817-XRfyBQ>dmake
cp DB_File.pm blib\lib\DB_File.pm
AutoSplitting blib\lib\DB_File.pm (blib\lib\auto\DB_File)
gcc -c -I/usr/local/BerkeleyDB/include -s -O2 -DWIN32 -DHAVE_DES_FCRYPT
-DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-aliasing -DPERL_MSVCRT_
READFIX -s -O2 -DVERSION=\"1.817\" -DXS_VERSION=\"1.817\" "-IC:\strawberry
\perl\lib\CORE" -D_NOT_CORE -DmDB_Prefix_t=size_t -DmDB_Hash_t=u_int32_t versi
on.c
version.c:30:16: db.h: No such file or directory
dmake: Error code 129, while making 'version.o'

と出てしまい、DB_Fileが結局インストールされません。
INCLUDEもLIBも自分の環境に沿って変えているのですが出来ません。

どなたかよろしくお願いします。

507:デフォルトの名無しさん
08/11/18 20:14:56
長文すみません
以下のjavaを

// 平均パケット到着レートの算出&ヒストグラム構成
if (preTimeList.size() >= pktNumForCalcRateAverage) {
sampleAveRate = pktNumForCalcRateAverage / (nowTime - preTimeList.remove(0));
int point = (int)(sampleAveRate / gap);
histgram[point] += 1;
total += sampleAveRate;
lineNum += 1;
}

をperlに書き変えたいのですが

# 平均パケット到着レートの算出&ヒストグラム構成
if ($preTimeList.size() >= $pktNumForCalcRateAverage) {
$sampleAveRate = $pktNumForCalcRateAverage / ($nowTime - $preTimeList.remove(0));
    $point = ($sampleAveRate / $gap);
    $histgram[$point] += 1;
    $total += $sampleAveRate;
    $lineNum += 1;
  } 

ではエラーが出てしまいうまくいきません。
nowTimeが間違っているのでしょうか?
どなたかアドバイスお願いします。

508:デフォルトの名無しさん
08/11/18 21:14:27
エラーメッセージは?

509:デフォルトの名無しさん
08/11/18 21:56:41
それ以前の問題だろ…

javaの文章に適当に$つけりゃperlになるとでも思ってんのかねえ?

510:デフォルトの名無しさん
08/11/18 21:58:07
Perl 6で動かしてるとか

511:デフォルトの名無しさん
08/11/18 22:36:19
  エラーメッセージを読む。

そういうクセをつけてあげないと、本人のために良くないだろ。

512:デフォルトの名無しさん
08/11/18 22:57:13
すげえ正論っぽいし、事実>>507に対するレスじゃなきゃ
完全同意なんだけどねえ。
車を運転しようとしてる9歳児に「交通規則は守れるか?」
って問うくらいには見当違いだと思う。


513:デフォルトの名無しさん
08/11/18 23:17:55
まあまあ、推測に推測を重ねていないで、ここは本人のレスポンスを
待とうじゃないか。

514:デフォルトの名無しさん
08/11/19 00:13:09
>>505
ありがとうございます。別にきいてみようとおもいます。

515:デフォルトの名無しさん
08/11/19 00:44:16
>>507
- java の . と perl の . の違い
- int の意味
- java の size メソッドと perl の scalar @arr で何が得られるか
- java の remove メソッドと perl の shift ( or splice )
- 更には各変数と配列に何が入っててどういう状態なのか
- 前後にどういう処理が行なわれているか
これが直に答えられないなら移植なんか考えない方が良いよ。


516:506
08/11/19 03:43:41
No library found for -llibdb じゃなくて
No library found for -ldb でした…。
どなたかよろしくお願いします…。

517:デフォルトの名無しさん
08/11/19 07:47:34
>>516
dbは正常にインストールされているのか

518:デフォルトの名無しさん
08/11/19 19:35:21
>>512
じゃあ何と言うべきなの?
キミにはまだ早い、オトナになるまで待ちなさい、とでも?

519:デフォルトの名無しさん
08/11/19 19:45:50
ゆとり乙

でおk

520:506
08/11/20 00:21:04
>>517さん
dbというとちょっと分からないのですが、
Berkeley DB 4.6.21 をインストールして、
URLリンク(www.drk7.jp)
に書いてある通りに全ての手順を踏んだのですが、
No library found for -ldb
となって出来ないんです…。


521:デフォルトの名無しさん
08/11/20 04:46:40
ぜんぜん詳しくないけど、あてずっぽうで・・・

gcc -c -I/usr/local/BerkeleyDB/include -s -O2 -DWIN32 -DHAVE_DES_FCRYPT
-DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-aliasing -DPERL_MSVCRT_
READFIX -s -O2 -DVERSION=\"1.817\" -DXS_VERSION=\"1.817\" "-IC:\strawberry
\perl\lib\CORE" -D_NOT_CORE -DmDB_Prefix_t=size_t -DmDB_Hash_t=u_int32_t versi
on.c

-L オプションが見当たらないけど、なんで?
-IC:\strawberry\perl\lib\CORE" って正しいのかな?lib のディレクトリを -I で指定してるけど。
  lib ディレクトリにヘッダファイルが入ってるの??
-ldb が無い、って言ってるんだから、ほんとうに無いのか、あるのか、自分の目で確かめたかな?
-ldb と省略せずに、\hoge\hage\libdb.l みたいにフルパスで指定してみてはどうか?


522:デフォルトの名無しさん
08/11/20 20:16:22
require 'ファイル名';
とするときに、1つ前のディレクトリにあるファイルを指定したいのですが、どうすればいいでしょうか?
require '../ファイル名';
だとエラーがでてしまい、できません。

523:デフォルトの名無しさん
08/11/20 21:40:27
>>522
1つ前の前に現在地がどこかを考えるんだ
../ や ~/ はシェルの機能なんだ


524:デフォルトの名無しさん
08/11/21 02:09:21
>>522
スクリプト保存場所と実行場所が同じならそれで動く。
(多分このケースだろうけど)違って場所固定ならスクリプトに
use FindBin;
require "$FindBin::Bin/../hoge.pl" ;
但し、FindBin はケースによってスクリプト保存場所を
示さない場合があるので、そんな場合には FindBin::Real
だか CPAN から引っ張って来て使う。

(蛇足)スクリプト内でカレントディレクトリに動的変化があり、
require する対象も連動変化があるなら、
use Cwd ;
しといて
require getcwd . q{/../hoge.pl}しなきゃならん。

525:デフォルトの名無しさん
08/11/21 02:16:40
あ。説明一行目正確じゃねえな。
「保存場所に関係無く、実行場所の ../ にあるならそれで動く。」
に訂正。

526:デフォルトの名無しさん
08/11/21 03:33:20
まぁたいてい、マウスでクリックして動作させるだろうから
カレントディレクトリをスクリプトのあるディレクトリに移動させておく、とか
そういう処理が必要だろうな。

527:デフォルトの名無しさん
08/11/21 06:37:05
>>522 エラーメッセージは?




528:506
08/11/21 13:19:05
>>521さん
返信ありがとうございます。
libdb.a
というのは前述したURLに書いてある通りに作成しました。
-Lオプションに関してはわかりません…。
確認したところ
\strawberry\perl\lib\CORE
にヘッダファイルがたくさん入ってました。
-ldbに関しては検索しているのですが、どうしてもわからないんですよね。
やはりWindowsでperl環境は無茶があるのでしょうか。

529:デフォルトの名無しさん
08/11/21 17:18:30
>>528
なんか>>506のエラーは
エラー情報(version.cないよ、コンパイルエラーみたいな)っていうのは、
そのページの「CPAN で DB_File をインストール → 必ず失敗する。」のところだから
そのまま次の「config.in を修正して DB_File を手動で dmake してインストール」
にいけばいいんじゃないの? そこでLIBパス設定してるし

530:506
08/11/22 01:11:58
>>529さん
返信ありがとうございます。
修正して、dmakeしたところ
C:C:\strawberry\cpan\build\DB_File-1.817-aAwZC0>dmake
dlltool --def DB_File.def --output-exp dll.exp
g++ -o blib\arch\auto\DB_File\DB_File.dll -Wl,--base-file -Wl,dll.base -mdll -s
-L"C:\strawberry\perl\lib\CORE" -L"C:\strawberry\c\lib" version.o DB_File.o -Wl,
--image-base,0x2d2e0000 C:\strawberry\perl\lib\CORE\libperl510.a \strawberry\c\
lib\libmsvcrt.a \strawberry\c\lib\libmoldname.a \strawberry\c\lib\libkernel32.a
\strawberry\c\lib\libuser32.a \strawberry\c\lib\libgdi32.a \strawberry\c\lib\lib
winspool.a \strawberry\c\lib\libcomdlg32.a \strawberry\c\lib\libadvapi32.a \stra
wberry\c\lib\libshell32.a \strawberry\c\lib\libole32.a \strawberry\c\lib\libolea
ut32.a \strawberry\c\lib\libnetapi32.a \strawberry\c\lib\libuuid.a \strawberry\c
\lib\libws2_32.a \strawberry\c\lib\libmpr.a \strawberry\c\lib\libwinmm.a \strawb
erry\c\lib\libversion.a \strawberry\c\lib\libodbc32.a \strawberry\c\lib\libodbcc
p32.a dll.exp
version.o:version.c:(.text+0x7a): undefined reference to `db_version'
DB_File.o:DB_File.c:(.text+0x10d5): undefined reference to `db_create'
collect2: ld returned 1 exit status
dmake: Error code 129, while making 'blib\arch\auto\DB_File\DB_File.dll'
となりました…。
blib\arch\auto\DB_File\
には.existsファイルしかありませんでした。

531:デフォルトの名無しさん
08/11/22 21:00:21
>>530
libdb.a はちゃんと C:\strawberry\c\lib\ にあるのかい?ってのと
↑には libdb.a という文字が登場しないなってのがあやしいかと。

532:デフォルトの名無しさん
08/11/22 22:41:13
さくらインターネットの環境のせいかどうかわからないのですが、LWP::UserAgent mirrprの挙動がおかしいってことはありますか?
mirror呼ぶと$tmpfile作るみたいなのだけど、そのstatのrdeb, size, blocksが0になって以下のエラーがでます。
Transfer truncated: only 0 out of 9446 bytes received

何かわかれば教えてもらえますか?

LWP::UserAgent 5.819
FreeBSD 6.1-RELEASE-p23
This is perl, v5.8.8 built for i386-freebsd-64int

533:デフォルトの名無しさん
08/11/22 23:43:51
x64のppmリポジトリってまだないのね。
リポジトリ追加してもパッケージ数が0で何かと思ったらそういうことか…。

534:506
08/11/23 01:56:00
>>531さん
解決しました!
531さんに指摘されて、libdb.aという文字が出ないのかを考えたところ、
ファイル名だけ変えていて、拡張子が変わっていませんでした。
要はlibdb.a.libというファイルでした。
なので拡張子変換ソフトを使ったところ上手くいきました!
本当ありがとうございます!

535:デフォルトの名無しさん
08/11/24 01:41:41
ちょっと前に、WWW::Mechanizeを1.34から1.50にupしたんですが、この1.50の挙動についての質問です。

1.50になってから、$mech->get('URLリンク(example.com)')なんかでgetsしてきたページの内容を
$mech->content()で書き出すと、utf8フラグ付の文字列に自動でdecodeされたものが出力されます。
($mech->response->contentでは、そのまま変換なしで返ってきます。)
さらにこの状態で、$mech->find_linksやfind_images,$mech->form->inputsなどの戻り値オブジェクトから
$_->textや$_->valueなども、utf8_decodeされたものが返ってくるようになりました。

これはこれで、戻り値を正規表現等で検知するのに便利になった部分もあるのですが、
今少しばかり困ったことになっております。

実は、とあるサイトをクロールしていて、そのページ自体はsjisで書いてあるのですが、
ページのheaderに、<meta http-equiv="content-type" content="EUC-JP">とかの記述があって、
どうもこの記述を鵜呑みにして、元の文字列をEUC-JPとしてdecodeをしてしまって、化けバケになりました。

536:535
08/11/24 01:42:13
そこで、$mech->get()した時に、自動でutf8デコードさせないようなオプションやメソッドを
探したんですが、それが見当たりません。

ドキュメントやソースファイルを読んでみて、Mechanize.pm内部で、$content = $res->decoded_content()
が呼ばれているようで、それではとHTTP::MessageやHTTP::Headerにある、Encodingヘッダーやcontent_encoding
あたりで制御するのかなと色々やって見ましたが、やっぱりutf8デコードされてしまいます。
(と言うか、イマイチこれらの使い方が合ってるのかよくわかりません。)

どなたかこれらの制御方法をご存知の方はおりませんか?

現在のところ、WWW::Mechanizeを1.34以下に戻すか、実行スクリプトの中で
*HTTP::Message::decoded_content = sub { shift->content };
と書く、などで回避しておりますが、もっとスマートな方法がないのかなと思っております。

537:デフォルトの名無しさん
08/11/24 17:23:57
Perl 5.8.6なんですが
sysopen(TPL, $file, O_RDONLY)
のとこで
Argument "O_RDONLY" isn't numeric in sysopen
というerrorを毎回吐きます。

動作は見たところ正常ですが、Apacheのerror_logにたまるのが気持ち悪くて…。
どこのサンプルにもマニュアルにも上の通りにかいてありますが、
O_RDONLYじゃいかんのですか?

538:デフォルトの名無しさん
08/11/24 17:33:00
O_RDONLY が定義されてないからじゃないの?
>どこのサンプルにもマニュアルにも上の通りにかいてありますが、
いったい、どこのサンプルやマニュアルを見たんだい?

おぢさんがひとつ、いいことを教えよう。
google 「perl O_RDONLY」
パソコンを買ったら、まず最初に google を覚えよう。

539:537
08/11/24 19:46:17
レスありがたふ
そのキーワードで何度もぐぐったんですが
URLリンク(perldoc.jp)
URLリンク(perldoc.jp)
こんなんや、他の個人ブログやチュートリアルサイトでも
sysopen(HANDLE, path, O_RDONLY); の例が出てくるんですよね

540:537
08/11/24 19:49:25
自己解決しました
改めてよく読んだらperldoc.jpに「標準モジュール Fcntl 経由で」って書いてありましたね
use Fcntlで解決しました
>>537 ありがとうございました

541:デフォルトの名無しさん
08/11/24 21:43:42
3×3のクロスワードを作ろうと思います。
3文字の辞書ファイルは既にあって
3×3の真ん中には「か」という文字列が入っています。
このとき、3×3のクロスワードを作成するにはどうすればよいでしょうか。



542:デフォルトの名無しさん
08/11/24 21:55:33
ここって宿題の依頼もありだっけ?


543:デフォルトの名無しさん
08/11/24 21:57:31
Perlにカスってもいねえし

544:デフォルトの名無しさん
08/11/24 22:06:30
ゆとりは宿題はやってもらうものと考えてるからな。

545:デフォルトの名無しさん
08/11/24 23:26:48
学業も仕事も他人に任せてゆとりの時間を楽しむのがゆとりの正しい姿
宿題をやる仕事を貧しい人達から奪うほど情が無いわけではありません

546:デフォルトの名無しさん
08/11/25 00:33:23
やってくれって言ってないじゃん!

547:デフォルトの名無しさん
08/11/25 01:34:49
メール鯖からパイプで渡された標準入力を
上手い事いじらせてくれるモジュールってあったっけ?
Net::POP3~MIME::Parserなら分かるんだが
標準入力しか触れないの扱わんとならんorz
テキストをチマチマと拾ってくしかないのか・・・?

548:デフォルトの名無しさん
08/11/25 02:15:47
日本語でおk

549:デフォルトの名無しさん
08/11/25 05:36:06
>>535
WWW::Mechanizeはよく知らないんだけど
$res->decoded_content(charset => 'none');
この辺りヒントになるかも

550:532
08/11/25 13:39:13
mirrorじゃなくてそもそもrequest($url, $file)で$fileに取得できてないってことに気づいた。
おかげでCPANコマンドでも
Transfer truncated: only 0 out of 149396 bytes received
が出て死んでしまう。
ググっても他に同じような人出てこないし何いじってこうなったんだろう。。

551:535
08/11/25 13:39:41
>>549
レスありがとうございます。
確かに、LWP::UserAgentからは、$res->decoded_content(charset=>'none')で
decodeされないcontentsが返って来るのを確認しました。

しかしながら、Mechanize.pm内では、このdecoded_contentに引数を渡す方法がなく、
またソース内のコメントに、
"Do we need to expose the options there?"
みたいなことが書いてありますので、現状では必ずdecoded_content()が呼ばれてしまうみたいです。

そのため、リクエストのレスポンスヘッダやページ内の<meta>タグに、charset指定がある場合は、
それに従った Encode::decode($charset,$html) が返って来ます。
(このdecodeがコケた場合は、変換なしの元々のbyte文字列が返ってきます)

URLリンク(code.google.com) に要望でも出したら対応してくるのかな。

552:デフォルトの名無しさん
08/11/25 14:22:15
ヘッダの情報に合わせて自分で変換してしまう

553:デフォルトの名無しさん
08/11/25 17:05:16
>>551
ああ、なるほど。
deflate対応と文字コード変換がセットになってるのがややこしいんですよね。
decoded_content自体に罪は無いけど世の中のページはstrictじゃないページも沢山あるので
デフォルトオフか最低でも設定でオフに(WWW::Mechanizeから)出来るように考慮されてるべきだと思います。
>"Do we need to expose the options there?"
もちろん! というか主要な部分の挙動変えるなよって感じですが。
こういうPHP的なハマり方は耐えられません。

554:デフォルトの名無しさん
08/11/27 02:04:29
>>535
WWW::Mechanizeなんてサブクラス化して使うのが当たり前だから
サブクラスで好きなように自分好みのcontentメソッド再実装したらいいよ
最近Perl使ってないので的外れなこといってるかもしれないけど
少し前まではMechanizeはそういう使い方が当たり前だった

生のWWW::Mechanizeを使うという考えを発想転換したら?

555:535
08/11/27 18:19:54
>>552
その発想は..(ry
でも確かに、元ページのcharsetが既知ならば、それもありかもです。

>>553
そうなんです。decompress絡みとcharset変換が同じメソッド内で
同時に処理されてるのがなんだかなあと言う気もします。

まあ同意も得られたことですので、>>551のレポートフォームに
要望でも出そうかと思ってるんですが、ascii文字主体の言語圏の人々に
いかにしてこの思いを伝えようかと苦慮しているところです。
(その前に、英語も全然得意でないので、結構ビビッているんですが)

556:535
08/11/27 18:22:05
>>554
>WWW::Mechanizeなんてサブクラス化して使うのが当たり前だから
うーん、そんなもんなのですか?

自分はあんまり継承とかサブクラス化を使わないので、こちらこそ的外れな
意見かもしれませんが、私の個人的な認識(印象?)では、クラスを継承したり
サブクラス化するってことは、そのベースクラスの機能を最大限利用しつつ、
それプラス自分なりのメンバ(?)やメソッドを追加したり加工したり
するために使うものかと思うのです。
(もしくは、イベント駆動型のmoduleにハンドラを追加する時など)

ひょっとして>>536,551での書き方か悪かったのかもしれませんが、
今私が不便だと感じているのは、$mech->contentの動作自体ではなく、
$mech->get()した時点で、そこから連鎖的に内部のメソッドが実行され、
linkやformなどの$mech絡みのオブジェクトが、自動でutf8フラグ付に
decodeされてしまったものがセットされる、とういうもです。
で、これを抑制したい、回避できないか、と。

557:535
08/11/27 18:22:37
つづきです。

確かに仰るとおり、気に入らない動作や挙動の関数なら、自前の関数でも
書いて上書きでもしてしまえっ、という考えは自分にもありますので、
どれを上書きすべきかと探索し、decoded_content()に行き着きました。
そこで>>536の一行を追加し、とりあえずその場しのぎをしたんですが、
他の制御方法(mechの外からメソッドや、オプションを渡すなどで)
をご存知の方がおられないかと思い、書き込みさせて頂きました。

ちなみに今回の例を、クラスメソッドを再定義して対処するとなると、
_update_page()と言う事になりますが、このメソッド全体をコピペして、
対象の一行だけ削除なりコメントアウトなりすれば目的は達成できますが、
ベースとなるクラスメソッドを再利用しないで一から再定義するような
やり方が、mech使いの方には一般的なのでしょうか。

(自分的には、この_update_pageに伴って生成されるlinkやformオブジェクト
は大変重宝しており、出来ればそのまま利用したいです。ですが今回の場合、
元の動作の一部をスキップするのが目的のため、$self->SUPER::(base_method)
が利用できないので、あまり継承する意味が無いような気がするのですが)

長文、連投になってしまい、どうもすいません。

558:デフォルトの名無しさん
08/11/27 19:13:28
今入ってるレンタルサーバでmod_perlが使えると知り、
バージョンを調べたら1.9916となっていました。
この番号はどう読めばいいんでしょうか。
バージョン1にパッチ9916があてられている・・・のかな?

自宅の制作環境(Win)にも近いバージョンのものを入れたいのですが
そのものズバリは見つかってなくて、どう選んだものか迷っています。
アドバイスよろしくお願いします。


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