トップページ⇒php
988コメント342KB

CGIに依存しないPerlの話題一般

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2001/05/31(木) 21:49ID:bKRSBFew
・コマンドラインからのPerl活用
・モジュール、オブジェクト指向プログラミング
・Perl6や.NET対応など
・各種GUIツールキット(Perl/Tk, Gtk-Perlなど)
・他言語による拡張(Inline::*, XS, Swigなど)

についてマターリと語り合うスレッドです。

#CGI関連の話題は、なるべく専用スレッドで。
0421名無しさん@お腹いっぱい。01/11/15 16:56ID:???
not 419だが

恥ずかしながら>>420のおかげで>>370がやっとわかった。
3Dってあるだろうがヴォケが!>俺
0422名無しさん@お腹いっぱい。01/11/15 18:59ID:???
Perlのハッシュについての情報きぼんぬ
0423名無しさん@お腹いっぱい。01/11/15 19:16ID:???
ハッシュの何を?
0424名無しさん@お腹いっぱい。01/11/15 22:15ID:???
naibukouzou!!!!!!!!
0425名無しさん@お腹いっぱい。01/11/15 22:34ID:???
>>2
0426名無しさん@お腹いっぱい。01/11/15 23:07ID:???
baka desuka?
0427名無しさん@お腹いっぱい。01/11/15 23:16ID:???
このスレッドには、内部構造についての知識を持った人は居ません。いじょ
0428名無しさん@お腹いっぱい。01/11/15 23:38ID:???
内部構造内部構造って女のパンツの中みたいに思ってんだな  ワラ
リンクリスト繋いでるだけだろ?
0429名無しさん@お腹いっぱい。01/11/15 23:45ID:???
例えが人格の卑しさを露わにしてますね(プ
0430名無しさん@お腹いっぱい。01/11/15 23:50ID:???
>>428
そんなこと誰でも知ってるだろ。(爆笑)
0431名無しさん@お腹いっぱい。01/11/15 23:58ID:???
PERL上級者くんは内部構造が大好きなんだね   ケラケラ(^∀^)
0432名無しさん@お腹いっぱい。01/11/16 01:29ID:wuoKPRpJ
>>431
うん、じゃないと万年ヘタレどまりだからね。
0433名無しさん@お腹いっぱい。 01/11/16 02:38ID:???
Effectiveあたりに載ってるので気に入らないなら
ソース読めとしか言えないなぁ・・・・
Perlは言語だけど、それ自体はCで書かれてるツールみたいなもん
だからね。
ドライバー(Perl書き)に求められるのは上手な車の運転
(常識的なコーディング作法)で、それはPerlに限った事じゃないだろ?
メカ(低レベルな内部構造)が知りたいならメカニック(C屋、asm屋)に
なってソース読むのが一番だよ
0434名無しさん@お腹いっぱい。01/11/16 05:12ID:???
まあ、マターリ行きまひょ。ム板みたいに荒れると嫌だし。
0435名無しさん@お腹いっぱい。01/11/16 17:16ID:???
>>433
激しく同意
0436名無しさん@お腹いっぱい。01/11/17 17:28ID:hx+Z154t
そんな事よりちょいと聞いてくれよ。
先日、OSの再インストールしたんです。WindowsME。
そしたら何故かSOSが使えなくなってるんです。
で、よく見たらなんかそ err 02 とか出力してるんです。
もうね、アホかと。馬鹿かと。
お前な、再インストール如きでエラー吐いてんじゃねーよてんじゃねーよ、ボケが。
再インストールだよ、再インストール。
なんかバックアップし忘れたファイルとかあるし。一家4人で再設定か。これは関係ねーや。
よーしCygwinフルインストールだー、とか言ってるの。これも無関係だな。
お前な、頼むから動いてくれと。
SOSはな、今まで何の問題も無く動いてたんだよ。
ActivePerlのpl2batがいつ捨てられてもおかしくない、
IOリダイレクトは出来るわパイプは繋がるわ、そんな便利さがいいんじゃねーか。バッチファイルはすっこんでろ。
で、再度ダウンロードをしてきたところ、どうやら"#command /c perl ..."だと動くんです。
そこでまたぶち切れですよ。
あのな、command /cなんてきょうび流行んねーんだよ。ボケが。
得意げな顔して何が、command /c だ。
お前は本当にcommand /cが必要なのかと問いたい。問い詰めたい。小一時間問い詰めたい。
俺、何か設定し忘れてるだけとちゃうんかと。

ダレカタスケテ...
0437名無しさん@お腹いっぱい。01/11/17 18:05ID:???
あう、省略されていた。

上のような現象に困ってます。
識者の方助けてくだされ…
0438名無しさん@お腹いっぱい。01/11/19 09:51ID:???
perl.comって頻繁に記事が追加されてるじゃないですか。
日本語でそういうことをやってるサイトってないんですか?
0439名無しさん@お腹いっぱい。01/11/22 14:39ID:5zsxNECC
age
0440名無しさん@お腹いっぱい。01/11/23 00:18ID:Xjh4pQJe
Windows上でActive Perl使ってるんですが、
Perlからドライブのボリュームラベルを取得する方法ってありますか?
今のところsystemでdirさせて得てるからダサいんでなんとかしたいっす。
0441名無しさん@お腹いっぱい。01/11/23 00:53ID:???
>437
ワラタ
最後の一行が大事ですな。
漏れはわからんです。。。
0442名無しさん@お腹いっぱい。01/11/24 06:28ID:???
>>440
Win32API
0443名無しさん@お腹いっぱい。 01/11/25 18:41ID:???
>>440
Win32API::File
044443601/11/25 22:50ID:???
うう、今だ解決の兆しなし…;-(
0445名無しさん@お腹いっぱい。01/11/25 23:09ID:???
>>442-443
お〜、ありがとっすー
モジュール、便利なんですねぇ
0446檀那さん、名無しです01/11/30 11:16ID:???
新しいモジュールを書きましたが、根性も勇気もないのでCPANに登録できません。
誰かレビューしていただけないでしょうか。
レビューしていただける方がいらっしゃったら改めてここにURLを貼り付けます。
0447名無しさん01/11/30 19:23ID:???
>446
誰もオメーに根性も勇気も期待してねぇーよ。CPANに
登録しねぇーならウゼェーから消えな。
0448名無しさん@お腹いっぱい。01/11/30 21:22ID:???
>>447 ウザイ。お前こそ消えろ。
口先だけのヘタレが大きな口をきくなカスが。

>>446 例えどんな物でも、公開してフィードバックを得ようとするのは有益だと思われ。
ただ2chはどうかな...と思わないでもない。
0449名無しさん@お腹いっぱい。01/11/30 21:32ID:???
>>446
*.pmとかmod_perl MLとかperlMLのがいいんじゃない?
0450名無しさん@お腹いっぱい。01/11/30 21:59ID:???
普通はcomp.lang.perl.modulesと思うよ。
ただ、似たようなモジュールがないかよーく確認してね。

ここに張っても誰かレビューしてくれるとは思うよ。
0451/名無しさん[1-30].jpg01/12/01 21:19ID:???
>>450様ほかの厚意に甘えてうpしました。
http://home.att.ne.jp/wind/love_cats/Time-JapanHolidays-0.03.tar.gz
0452名無しさん@お腹いっぱい。01/12/03 08:25ID:ttBTmnrV
age
0453名無しさん@お腹いっぱい。01/12/03 10:21ID:???
Perl5.5ってPerl5.005のこと?
0454名無しさん@お腹いっぱい。01/12/03 10:25ID:Jpx3osh/
あ。質問なのにsageちゃった。
ずっと疑問だったんで、誰か教えてください>>453
0455むぎ茶01/12/03 12:31ID:???
>>451
スキル低いので細かいところしか指定できんです(_ _)
@ISA は use base のがかっちょいいかと。
@EXPORT よりは @EXPORT_OK のほうがいいのでは?
名前空間分かれてるほうがいいって人多いと思う
0456むぎ茶01/12/03 12:34ID:???
>>451
read_holiday_list だけど
use Time::JapanHolidays(holidaysList => "myHolidays.list");
ってして IMPORT で呼んどいてくれるとうれしいかも。
0457むぎ茶01/12/03 12:39ID:???
>>451
デフォルトのデータは日本の祝日だけど中身はそうじゃないんで
Time::Holidays.pm のほうがよいのでは?
あと Holiday だけじゃなく MemorialDay もはいってるから
そういう名前もいいかも

あとね日付のデータだけど デフォルトにマージする仕掛けも欲しいです
身近な記念日とかマージして登録できるとうれしい
0458むぎ茶01/12/03 12:43ID:???
>>451
計算を必要とする祝日がべた書きなのがちと悲しい
ここもカスタマイズできるとうれしいなと。
0459名無しさん@お腹いっぱい。01/12/05 03:02ID:???
451はやる気なし。
0460名無しさん@お腹いっぱい。01/12/05 20:13ID:vhbZliPL
perlでグラフを書きたくて今月号のCマガのperlの連載にのってたGDGraphを
いれようと思ったのですが、ppmでinstall GDGraph としてyesを選んでも
Error installing package 'GDGraph': Could not locate a PPD file for package GDGr
aph
というエラーが出ます。
どうすればいいんですか?
0461名無しさん@お腹いっぱい。01/12/05 23:40ID:???
>>460
http://www.geocities.co.jp/Bookend-Soseki/6187/xiaxiu/pg/5.html
046246001/12/06 03:51ID:???
>>461
perlのバージョン上げたらいけました。
0463名無しさん@お腹いっぱい。01/12/12 06:28ID:???
ところで、451はどこいった?
0464名無しさん@お腹いっぱい。01/12/12 11:45ID:fZlaima3
LWP::UserAgent\?\?\???\????§????´?????
credentials\?\?\?\????????????°????????????????????????????????????´?°??????????±????????????????¶??¨??????????

?????¨??
\???\?192.168.0.1??admin????????\???\¶????root??\?\?\???\?pass??
credentials('192.168.0.1', 'admin', 'root', 'pass');
??\???\?????????\?\?\¨\?\???????????????
401 Unauthorized?????????????????±??????????

\?\???\?\?\???v5.6.0 built for i586-linux
0465すいません01/12/12 11:57ID:fZlaima3
LWP::UserAgentモジュールの認証に関する
credentialsメソッドがちゃんと動いていないみたいなんです。(使い方を間違ってるだけかもしれないので教えて下さい)

たとえば
サーバ192.168.0.1のadmin権限に、ユーザー名root、パスワードpassに
credentials('192.168.0.1', 'admin', 'root', 'pass');
をコールしてからリクエストを実行しても、
401 Unauthorizedしか返ってくるだけなんです。

ヴァージョンはv5.6.0 built for i586-linuxです。
0466名無しさん@お腹いっぱい。01/12/12 15:19ID:I43ox8JP
マニュアルを見る限りそーいう使い方はしないぞ。
perldoc LWP::UserAgent
/credentials

$ua->credentials($netloc, $realm, $uname, $pass)
Set the user name and password to be used for a realm. It is often
more useful to specialize the get_basic_credentials() method
instead.
0467すいません01/12/13 00:54ID:GtMIZEFM
credentials('192.168.0.1:80', 'admin', 'root', 'pass');
というふうに、第一引数に"ホスト名:ポート"と指定したらできました。
0468名無しさん@お腹いっぱい。01/12/19 05:09ID:???
詳しい人話題振って欲しいなage
0469あぼーんNGNG
あぼーん
0470名無しさん@お腹いっぱい。01/12/20 20:30ID:???
436の人どうだった? age
0471名無しさん@お腹いっぱい。01/12/23 10:56ID:DF8u6Gm1
こんなことしてもいいんでしょうか?

sub a {
my @i = (1, 2,3,3,3,3,3,3,3,3,3,33,3,3,3,3,3,334);
return \@i;
}

my $i = &a;
print $_ foreach ( @{$i} );

一応ちゃんと動くみたいですが、
my変数と
C言語の自動変数とは全然意味が違うんでしょうか?
0472名無しさん@お腹いっぱい。01/12/23 11:26ID:???
ok! 何の問題もなし。参照がある限り破壊されることはないよん。
0473デフォルトの名無しさん01/12/23 11:30ID:gQHYl0sG
動くね
何でだろ?リファレンスが有効だとスクラッチパッドって開放されないのかな・・・・
Perlのうんちくは全然分からないや。
個人的には凄く嫌だ(w

どなたか解説キボン
0474デフォルトの名無しさん01/12/23 11:32ID:???
あ、有難う>472 (^^
でも気持ち悪いなぁ・・・・
0475名無しさん@お腹いっぱい。01/12/23 13:35ID:???
ポインタを返しても変数は死んでるっていうほうが変だと思うけどねぇ……。
呼び出し元で使いたいからリファレンスを返すんでしょ。
使いたいものを返せばそれは使える、というのがPerl的なの。

>>473
>>472 がすでに全て解説している。
0476名無しさん@お腹いっぱい。02/01/01 18:04ID:???
age
0477名無しさん@お腹いっぱい。02/01/02 00:03ID:0AIkB5pj
ぬぬ。bcc32でなんとかXSモジュールをビルド出来ないものかと
二時間ほど粘ってみたがダメだった。無念じゃ…。
0478 02/01/02 10:03ID:XJ6nVU2M
>>477
どのモジュール?
mingw32とかはだめ?
あと、bcc32付属のmake使わずに、gnu makeつかえば、bcc32でもいけるかもね
0479名無しさん@お腹いっぱい。02/01/02 13:19ID:???
makeは付属のmakeだと明らかにダメなのでMake.pm(pmake)使ってます。
問題はperl.hとperlvars.hがコンパイルエラー。

エラー E2257 C:\perl5.6.1\lib\CORE\perl.h 1755: , が必要
エラー E2257 C:\perl5.6.1\lib\CORE\perl.h 1756: , が必要
エラー E2257 C:\perl5.6.1\lib\CORE\perl.h 1757: , が必要
エラー E2257 C:\perl5.6.1\lib\CORE\perl.h 1758: , が必要
エラー E2141 C:\perl5.6.1\lib\CORE\perlvars.h 22: 宣言の構文エラー
エラー E2141 C:\perl5.6.1\lib\CORE\perlvars.h 39: 宣言の構文エラー
エラー E2141 C:\perl5.6.1\lib\CORE\perlvars.h 22: 宣言の構文エラー
エラー E2141 C:\perl5.6.1\lib\CORE\perlvars.h 39: 宣言の構文エラー

因みに

#line 1755 perl.h
typedef pthread_t perl_os_thread;

です。
他のtypedefは引っかからないのに…お手上げです。

mingw32はよくわかりません。
0480名無しさん@お腹いっぱい。02/01/02 16:05ID:???
477,479です。

mingwはヘッダファイルのコンパイルは通りますが、
Makefileが全然ダメですね。
Config.pmのcc/ld/cppを分かる範囲で書き換えてもまだダメです。
mingwでコンパイルしたPerlがあればいいのかも…。
0481名無しさん@お腹いっぱい。02/01/02 20:46ID:???
ふと思ったんだがPerl6の"is"演算子ってPerl5の":"演算子みたいなものなんだろうか?
0482デフォルトの名無しさん02/01/03 02:15ID:???
>>480
bcc32は独自拡張、独自縮小が甚だしいから(GCCもだけど ^^ )
素直にCygwin入れてgcc使った方が良いような。。。。
「,」引っ掛かりなんていかにもbccが原因っぽい
0483_gunzip@ブラウザ変ですよん02/01/03 05:20ID:???
>>477, 479-480

うちの(久しぶりに立ち上げた)Windows環境の場合、
Borland C++ Compiler D:/bcc55
ActivePerl5.6.1 D:/Perl
なんだけど、

1. cp, mv, rm, mkdir等の基本的なコマンドが揃っていること確認。

2. d:/bcc55/bin/coff2omf で D:/Perl/lib/CORE にある perl56.libを
perl56-omf.lib(仮称) に変換。(元のファイルは変更されない)
$ coff2omf perl56.lib perl56-omf.lib

3. D:/Perl/lib/Config.pmを以下のように修正する。(必ずバックアップをとる)

34,35c34,35
< cc='cl'
< ccflags='-nologo -O1 -MD -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DPERL_MSVCRT_READFIX'
---
> cc='bcc32'
> ccflags='-O2 -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS '

43c43
< libs=' oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib'
---
> libs='import32.lib cw32i.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib odbc32.lib'
0484_gunzip@ブラウザ変ですよん02/01/03 05:21ID:???
593,595c593,595
< ld='link'
< lddlflags='-dll -nologo -nodefaultlib -release -libpath:"D:\Perl\lib\CORE" -machine:x86'
< ldflags='-nologo -nodefaultlib -release -libpath:"D:\Perl\lib\CORE" -machine:x86'
---
> ld='ilink32'
> lddlflags='-L"D:\Perl\lib\CORE" -c -x -Gn -ap -Tpd -machine:x86'
> ldflags='-L"D:\Perl\lib\CORE" -c -x -Gn -ap -Tpd -machine:x86'

601c601
< libperl='perl56.lib'
---
> libperl='perl56-omf.lib'

668c668
< optimize='-O1 -MD -DNDEBUG'
---
> optimize='-O1 -DNDEBUG'

4. テスト用のXSを書いてみる。
$ h2xs -A -n MyTest
$ cd MyTest

---- MyTest.xs ----
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

MODULE = MyTest PACKAGE = MyTest

void
hello()
    CODE:
        printf("Hello XS World!\n");
-------------------
0485_gunzip@ブラウザ変ですよん02/01/03 05:23ID:???
$ perl Makefile.PL
# "コマンドが見つからない"云々と文句を言われるかもしれないが、何の問題も無い

出来たMakefileを少し修正する。

774行目からのpm_to_blibの辺りで何故かエラーになるので (なぜだぁ)
pm_to_blib: $(TO_INST_PM)
    echo "ahyahya"
-- 以降、ファイル終端まで削除 --
とでもしておく。(取りあえず重要な個所ではないので)

408 行目辺りの(見つからなかったら"subst"で検索)
$(LD) $(LDDLFLAGS) $(OTHERLDFLAGS) $(LDFROM),$@,,$(subst /,\,$(PERL_ARCHIVE)) $(subs 408 t /,\,$(LDLOADLIBS)) $(subst /,\,$(MYEXTLIB)),$(subst /,\,$(EXPORT_LIST)),$(RESFILES)

の部分を

$(LD) $(LDDLFLAGS) $(OTHERLDFLAGS) $(LDFROM),$@,,$(PERL_ARCHIVE) $(LDLOADLIBS) $(MYEXTLIB),$(EXPORT_LIST),$(RESFILES)

と変更。(substってなんだべさ)

$ make
makeはBorland C++に付属のものを利用する。
Mksymlists.pmでuse strictが原因で失敗した場合、strictをコメントアウト(おい)

....これで正常にビルドできるはず。(うちでは出来た)

make後は、test.plに MyTest::hello(); を追加して
$ make test
1..1
Hello XS World!
ok
....でめでたしめでたし。内部APIの利用も問題無かった。
0486_gunzip02/01/03 05:29ID:???
普段Windowsを使っていないせいもあって、かなりいい加減な説明なのはお許しを。
何かの参考になれば、ということで。

#書き込める時と書けない時があるなぁ
0487名無しさん@お腹いっぱい。02/01/03 14:59ID:???
ヤター!
簡単なテストは成功しました。
substはWindowsのコマンドみたいです。
Makefileは特に変更なしでもオッケーでした(何故?)
_gunzipさんありがとうございます!

…が!試しにCPANからWant-0.5を取って来てビルドしようとしたんですが…
リンクが失敗してしまいます。ガクッ。

> Error: 外部シンボル '_Perl_pop_return' が未解決(D:\PERLARC\WANT-0.05\WANT.OBJ
が参照)

ちなみにWindows ME・ActivePerl5.6.1-630です。(Win9xだからかな…)
助けて_gunzipさん!
0488 02/01/03 16:02ID:???
gudでperlのデバッグができると聞いてさっそく M-x perldb とやってみて、なるほど
動いているのですが、C-x SPとかで ブレークポイントが設定できなかったり、
スタックさかのぼれなかったりしているんですがそんなもんなんですか?
0489_gunzip02/01/03 23:03ID:???
>>487
むむ..ActivePerlの perl56.lib には Perl_pop_return()が無いのか...。
(他にも無いAPIがあるのかなぁ...。cygwinのlibperl5_6_1.dllにはあるのだが)

代替策としては、Perl_pop_return()の役割から考えて、
Want.xsの564行目の pop_return();を
if (PL_retstack_ix > 0)
    --PL_retstack_ix;
と変更すればよい。
Linux, cygwinでは、これで全てうまく行った。("make test"も全て ok)
(もっとも、修正無しでも正常にビルド、テストを通るのだが)

....ただ、ActivePerl5.6.1-629 + Windows98 + bcc32では、
make test段階で「不正な処理」で強制終了になるみたい。
んー取りあえず試してみて欲しいです。

>Makefileは特に変更なしでもオッケーでした(何故?)
pmakeってMakeモジュールに付いてくるコマンドだったのか。
これを使えば>485の修正は不要ですね。
0490名無しさん@お腹いっぱい。02/01/04 11:47ID:???
やったーー!
Want.pmは成功です!
make testも問題なく通り無事インストールできました。
他、Storable・NKFも成功。(他にも色々インストールしてみたかったはずだがイザとなると思い出せず…)
ありがとうございましたっ!

いや〜、WinでXSなんてVC++がなければ出来ないものと正直諦めていました。
_gunzipさんホントに感謝します。
0491名無しさん@お腹いっぱい。02/01/05 15:39ID:DL1rkDyE
ActivePerl build 631 age

コレのパッチかな。
http://homepage2.nifty.com/kipp/perl/build630bug/index.html
0492名無しさん@お腹いっぱい。02/01/06 16:34ID:2f+STVY+
>>436です。
諦めてcommand /cを通じて使っていたのですが、
ふと思いついたことがあって試したら当たりでした。
どうやらSOSはロングファイルネームは受け付けないみたいですね。
OSの再インストールをする際、PerlのパスをC:\PerlからC:\Perl5.6.1に変更したのが原因でした。
皆さんも気をつけてください。
0493名無しさん@お腹いっぱい。02/01/07 23:43ID:BNEoib8d
すいません,ファイルハンドルを関数に渡す場合について質問です。

open FILE, '+< data.txt' or die $!;
func(*FILE{IO});
sub func {
 my $fh = shift;
 print <$fh>,"\n";
 seek $fh, 0, 0 or die $!;
 truncate $fh, 0 or die $!;
 print $fh "AAA$$\n";
}

以上のようにやると truncate で No such file or directory を吐いてしまうんですが
func(*FILE{IO}); を func(\*FILE); に変えると問題なく動きました。
なんででしょう? いろいろ調べたけど,さっぱり分かりませんでした。
教えて!!偉い人!
0494名無しさん@お腹いっぱい。02/01/08 00:30ID:???
truncateにはファイル名を渡せるので
$fhをファイル名と判断しちゃってる感じ。
IO::Handleへのリファレンスをファイルハンドルと
判断しないっぽいですね。
truncate *$fh, 0 or die $!;
でいちおう回避。
049549302/01/08 00:37ID:???
>494
そうでしたか。また一つ賢くなれました。
ありがとうございました。
0496 02/01/08 14:47ID:???
perlのエラーメッセージってファイル名(行数)な形じゃないから
タグジャンプが使えなくていやだなあ。
0497名無しさん@お腹いっぱい。02/01/09 17:11ID:???
>>496
じゃあそういうモジュール作って〜。
0498名無しさん@お腹いっぱい。02/01/10 12:46ID:???
http://sawayaka.msweb.jp/service/shopping/saba/index.html
これはどう?
0499名無しさん@お腹いっぱい。02/01/10 12:48ID:???
>>498 sine
0500500GET02/01/10 12:49ID:???
500GET
0501名無しさん@お腹いっぱい。02/01/11 09:42ID:IHYyu2/p
sigtrapの使い方がいまいち分からない。
Ctrl+Cでファイルをクローズして終了したくて、
use sigtrap qw(die normal-signals);
END{close FH;}
のようにしてるけど、アプリケーションエラーになってしまう。(Win2K)

どうすればいいんだ。
0502名無しさん@お腹いっぱい。02/01/13 10:01ID:???
あげ。 
0503名無しさん@お腹いっぱい。02/01/13 12:29ID:???
>>501
perldoc sigtrapしてみた?まさにそのまんまの例が載ってるけど(w、
>Die on HUP, INT, PIPE or TERM:
>  use sigtrap qw(die normal-signals);
これはdieしたいときの設定。

501がやろうとしているシグナル受信時のハンドラ設定はこんな感じ:
sub my_handler { print "Caught a signal! FH is being closed..."; close FH }
use sigtrap qw(handler my_handler normal-signals);

ちなみに、ハンドラの再設定は、$SIG{...} = \&my_handlerでOK!
終了すべき状況なら、my_hanlderでexit()。
あと、ハンドラ内での再設定も時に有用。(e.g. ALRM)
050450302/01/13 12:47ID:???
>>503
ああ、>>501が言いたかったのは、
「dieでアプリケーションエラーになってしまう。(Win2K)」
ということか、、、逝ってくる。
050550102/01/13 15:34ID:???
>>503-504
いえいえ、レスありがとです。
そっちの方もやってみたんですけど、 my_handler() の中で exit() するとやっぱり
アプリケーションエラーになってしまうんですよね。まあファイルクローズまでは
逝くので問題ないと言えばないのですが。
う〜ん、とりあえず我慢してこのまま使います^^;

ところでWinではキーボード入力待ちってできないのかなぁ? 他の環境用には
そういうモジュールがあったと思うけど…
0506名無しさん@お腹いっぱい。02/01/13 20:13ID:???
>>505
あるような気がするよ。
perl -MCPAN -e shell
でモジュール入れるときに、テストで入力待ちになるじゃん?
0507名無しさん@お腹いっぱい。02/01/13 20:23ID:???
>>265-267 を応用して出来ないかな
0508名無しさん@お腹いっぱい。02/01/17 01:21ID:???
あげとこっと
0509名無しさん@お腹いっぱい。02/01/17 02:31ID:???
1は責任持って盛り上げるべし
0510プ02/01/17 20:33ID:6zEN00QH
func1();
sub func1()
{
  my $ret = func2();
  print "return code -> $ret \n";

}
sub func2()
{
  eval {
    return 1;
  };
#  if($@){} # <==
}

これさあ、コメント外すと返却値が無くなんだけど
分かる人居ます?  
0511名無しさん@お腹いっぱい。02/01/17 20:44ID:???
そのまんま、 if($@){} が何も値を返さないからでしょ。
0512名無しさん@お腹いっぱい。02/01/17 20:59ID:???
もしかして、return 1; で func2 から抜けているつもりなのかな?
eval内のreturnはevalから抜けるだけだよ。
でreturnした値はevalの返り値になる。
0513プ02/01/17 21:00ID:6zEN00QH
ん、ちょっと意味不明系
if($@){return 100;}
だとどうなの
0514名無しさん@お腹いっぱい。02/01/17 21:41ID:???
>>513
なにがどうなの?
$@に何も入ってないんだから変わらないよ。
たぶんあなたの望んでいる動作は、
sub func2()
{
  my $ret = eval {
    return 1;
  };
  return $ret if $ret;
  if($@){}
}
こういうことでしょ?

ところで、検証してて思ったけど、
if って評価した値が偽、かつelseがないと評価した値が返るのね。
sub func { if(0){} }
だと 0 が返る。どうでもいいけど。
0515heno02/01/17 23:08ID:oR04RU/Z
 「ファイルグロブが可能なmake」のような効果をPerlで実装して
みたいのですが、ファイルの変更時刻を得るにはどのようにすれば
良いのでしょうか?
0516名無しさん@お腹いっぱい。02/01/17 23:33ID:???
-M
051751502/01/17 23:33ID:???
(自力解決) stat/lstatで逝けるとわかりました。
051851502/01/17 23:35ID:???
>>516
-M だと日数比較だそうで、makeのような秒単位で比較する
効果が期待できないと思われます。
コメントありがとうございます。
0519名無しさん@お腹いっぱい。02/01/18 03:40ID:Z2zR15g4
Perlでプロセスを跨いでディスクリプタパッシングさせたいんですけど、どっかにサンプル転がってないっすかね。
0520名無しさん@お腹いっぱい。02/01/18 04:03ID:???
俺用語は辞めようねボク

http://www.google.com/search?q=descriptorpassing&hl=ja
http://www.google.com/search?sourceid=navclient&q=%83f%83B%83X%83N%83%8A%83v%83%5E%83p%83b%83V%83%93%83O
■ このスレッドは過去ログ倉庫に格納されています