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

このエントリーをはてなブックマークに追加
1名無しさん@お腹いっぱい。
・コマンドラインからのPerl活用
・モジュール、オブジェクト指向プログラミング
・Perl6や.NET対応など
・各種GUIツールキット(Perl/Tk, Gtk-Perlなど)
・他言語による拡張(Inline::*, XS, Swigなど)

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

#CGI関連の話題は、なるべく専用スレッドで。
2_gunzip:2001/05/31(木) 22:19 ID:???
-----------------------------
Perl5.7.1(devel)ではハッシュ関数(hv.h内のマクロPERL_HASH)が
変更されているようですね。

/* hv.h 49-62 */

#define PERL_HASH(hash,str,len) \
  STMT_START { \
 register const char *s_PeRlHaSh = str; \
 register I32 i_PeRlHaSh = len; \
 register U32 hash_PeRlHaSh = 0; \
 while (i_PeRlHaSh--) { \
  hash_PeRlHaSh += *s_PeRlHaSh++; \
  hash_PeRlHaSh += (hash_PeRlHaSh << 10); \
  hash_PeRlHaSh ^= (hash_PeRlHaSh >> 6); \
 } \
 hash_PeRlHaSh += (hash_PeRlHaSh << 3); \
 hash_PeRlHaSh ^= (hash_PeRlHaSh >> 11); \
 (hash) = (hash_PeRlHaSh + (hash_PeRlHaSh << 15)); \
 } STMT_END

詳細は↓ここに記載されています。
http://burtleburtle.net/bob/hash/doobs.html
-----------------------------
・・・とか、こういった話題でいいのかな?
えと、とにかく初めのうちは積極的に寝たふりをお願いします。

#「俺はPerlをこんな風に活用している」とか、誰でも取り付きやすい話題があると賑わうのかな。
3_gunzip:2001/05/31(木) 22:23 ID:???
誤>積極的に寝たふりをお願いします。
正>積極的にネタ振りをお願いします。
森首相じゃあるまいし....
4名無しさん@お腹いっぱい。:2001/06/01(金) 00:02 ID:???
Perlのソースの話題…ですか
うう…レベルが違う(汗
5名無しさん@お腹いっぱい。:2001/06/01(金) 01:07 ID:???
がいしゅつだろうけど、Perl6の話。
http://bulknews.net/lib/doc-ja/exegesis2.ja.html

%hash{value} @array[0] ... なんか気持ち悪いなぁ(笑)

しかも

$hash_ref = %hash; # %hashのリファレンスを取得
$hash_ref{value}; # %hash{value}と同じ事

ってことも出来るらしい…。
ワケ分からなくなりそう(笑)
6(・ε・:2001/06/01(金) 02:17 ID:NgAAv9OY
いきなり厨房書き込みなんですけど、DOSのバッチでファイル名を
一括変換したり、秀のマクロで文字列変換するような作業を、スクリプト
でやってみようと思っています。

それで、Linuxのシェルスクリプトかperlを学ぼうを思ってるんです
が、貧乏なんで本が一冊しか買えません(^_^;)
bashで初めるシェルスクリプトか、オライリーさんのラマ本、、、、、
ん〜、どっちを買うべきだろう、、、、、、貧乏はいやだ〜
7(・ε・:2001/06/01(金) 02:23 ID:???
うっ、何か場違いな感じ、、皆さんで話しあって立てたスレなんですね。
消えますー。
8名無しさん@お腹いっぱい。:2001/06/01(金) 03:13 ID:A0sV3i8w
>>6
「CGIに依存しないPerlの話題一般」にはあてはまるんでない?
俺としてはPerlのほうをお勧めするよ。普及率で言えば
シェル >> Perl
だけれど、Perlのほうができることが多いし、DOSのバッチ的な用途にも
Perlはすごく向いている。
9_gunzip:2001/06/01(金) 06:46 ID:???
>>4
あう、ソースを眺めていたらたまたま気づいただけです.....。
気軽に逝きませう。

>>5
確かに訳分からなくなりそうだ.....。
今までの$foo->[$n] が $foo[$n] (or $foo.[$n])で、$foo{bar} が %foo{bar} か.......。
うう.......慣れるまでの辛抱か。
ところでis演算子っていい感じ....(この辺りは意見が分かれるのかな)
サブルーチンの名前付きパラメータも有り難い。

>>6-7
bashシェルプログラミングと、Perlが共に学べる(らしい)
http://www.amazon.co.jp/exec/obidos/ASIN/4886485243/249-4475496-7314707
のような本もありますよ。
(自分は持っていないので、薦めて良いのかちょっと自信がありませんが)

ちなみに、Shellモジュールを利用すれば、シェルスクリプトを書く感覚で
Perlスクリプトを書くことが出来ます。
#でもやっぱりシェルスクリプトも書けた方がいいです。(はい)
10_gunzip:2001/06/01(金) 07:03 ID:???
シェルで思い出したのですが、
Perl Power Tools: The Unix Reconstruction Project
http://language.perl.com/ppt/index.html
こんなのもあります。
Perlで書かれたcp,ls,diffコマンドなど色々揃っていますので、学習用にでも。
11あげ:2001/06/01(金) 15:35 ID:???
Perl/Tkの話題も欲しいあげ
12(・ε・:2001/06/01(金) 19:29 ID:NgAAv9OY
8さん、gunzipさん有難うございます。
8さんのおっしゃる様に取り合えずシェルはmanと睨めっこして
perlの本を買おうかな、、と思ったら、、、

>bashシェルプログラミングと、Perlが共に学べる(らしい)
良いッス、欲しいッス、直撃です(^ ^ )、同じ処理をbashとpealで
並べてくれてたりしたらいいなー、明日早速探しに行って見ます。

>Perl Power Tools: The Unix Reconstruction Project
こっちも凄いですね、厨房的には"perlって凄い"としか言えませんが (^^;;
しかも、かなりのコマンドがサポートされてるんですね。
頂いて、見てみます。

とても役立つご意見でした、有難う御座いました。
やっぱり聞いてよかったー
13名無しさん@お腹いっぱい。:2001/06/07(木) 04:54 ID:G2lWQh7I
256バイトで何ができるか。
http://backno.mag2.com/reader/BackBody?id=200106032250000000015670000

256バイトの掲示板とか、無理か。

ARGVをevalするのは、インチキのような……>ライフゲーム
14名無しさん@お腹いっぱい。:2001/06/07(木) 10:08 ID:???
>>13
256バイトは少ないよなぁ。
せめて7行は欲しいところ。

ARGVをevalするのは反則。
IO::Socketをuseするのも反則。
15名無しさん@お腹いっぱい。:2001/06/08(金) 15:39 ID:???
warningプラグマって凄くメモリ食いそう(大きなハッシュを保持)
なんだけど、どうなの?
16名無しさん@お腹いっぱい。:2001/06/08(金) 17:17 ID:???
>>14
7行あれば DVD のデコードができるもんね(w
17名無しさん@お腹いっぱい。:2001/06/08(金) 20:49 ID:???
>>16
それしたの十六歳の少年だっけ?
18名無しさん@お腹いっぱい。:2001/06/08(金) 21:13 ID:???
プログラム技術板で、船渡し問題を解いてたよね。
19.pl:2001/06/09(土) 00:05 ID:LnGQ.bng
むむ、なんだこりゃ?
今日初めて気がついた…
#!/usr/bin/perl
use strict;
&set_foo;
my $foo;
print $foo;
sub set_foo{
$foo = 'bar';
}
__END__

うーん…変なの(++
20名無しさん@お腹いっぱい。:2001/06/09(土) 18:55 ID:edu.PDfo
>>19
どうあるべきなの?
21名無しさん@お腹いっぱい。:2001/06/09(土) 19:05 ID:G7GneXHo
ん〜、
#!/usr/local/bin/perl
use strict;
$foo = "bar";
my $foo;
print $foo;
__END__
ってやってみるとわかるよ。
やってることは同じように見えるけど実行結果が違う。
これの use strict をはずした奴もやってみると吉。
22名無しさん@お腹いっぱい。:2001/06/09(土) 23:05 ID:???
http://www.iijnet.or.jp/cao/kantei/jp/comment_m.html
特殊文字って何?
\/*$%#&"!とか?(m
23名無しさん@お腹いっぱい。:2001/06/09(土) 23:13 ID:???
正直言って、ろくな話題がでないな。
24名無しさん@お腹いっぱい。:2001/06/10(日) 00:30 ID:???
>特殊文字って何?
>\/*$%#&"!とか?(m

スレお間違えですか?ここは
「CGIに依存しないPerlの話題一般」
です。
25enhydra:2001/06/10(日) 18:01 ID:5nh0OkNc
>> 15
大丈夫、100Kbyte前後しか増えないから。
26名無しさん@お腹いっぱい。:2001/06/10(日) 18:33 ID:???
>>25
CGIスクリプトとして動作させる場合はかなりやばいんじゃ…。
…と、思ったが、CGI.pmは+700kb近いな…warnings程度は余裕か。
27(-_-;;):2001/06/10(日) 21:37 ID:wIreiASQ
みんなはGUIのperlデバッガは何を使用してるの?
俺はhttp://world.std.com/~aep/ptkdb/を使用してます
28名無しさん@お腹いっぱい。:2001/06/10(日) 21:41 ID:???
すいませんGUIデバッガが必要なスクリプト書いたこと無いです(;´Д`)
29名無しさん@お腹いっぱい。:2001/06/10(日) 23:20 ID:???
すいませんGUIなんて書いた事ないです。
30名無しさん@お腹いっぱい。:2001/06/10(日) 23:59 ID:???
>>25-26
どうやったらメモリ使用量ってわかるの?
31名無しさん@お腹いっぱい。:2001/06/11(月) 00:00 ID:???
GUIってなに?
Giants Uzeeeeeeeeeee Itteyoshi!!! の略?
32名無しさん@お腹いっぱい。:2001/06/11(月) 00:15 ID:ozjTMEXg
コテハン一言スレに誤爆した37です。
なんだかわからないままWin2000でPerl/TKのmake中。。。
33名無しさん@お腹いっぱい。:2001/06/11(月) 00:20 ID:???
>>32
Tcl/Tkは知らんから比べられないが、別に知らなくても良いんじゃないの?

…Perl/Tk使って何かした事は無いけどね(´∀`)

# Perl/Tk本はあるけどGUIプログラムを配布しようと思った事無いからね…
# 自分だけが使うツールにわざわざGUI付けるのもアホらしいし
34enhydra:2001/06/11(月) 00:41 ID:g88SXDIU
>> 30
topとかlsこまんどのマニュアルをまんこまんどで見よ。です。

strictもwarningsもスピードなり消費リソースが気になるなら、コードをきれいにした後コメントアウトすれば済むし。おいら
は気にならないけど。
あとCGI.pm とか巨大なやつをWebアプリで使う時もmod_perlで親httpdにロードさせとけば子httpdで共有されるから実質的に
リソース(めもり)くわなくなるっすよね。
# おっとCGIよりなお話(汗)
3532:2001/06/11(月) 00:42 ID:???
>>33
さんきゅ! どこかでPerl/TK本見てくるよ!
ていうかmake失敗したんでこれから原因チェックせんと。
36enhydra:2001/06/11(月) 00:48 ID:g88SXDIU
>> 34
いかん lsこまんどじゃ調べらんない(汁)
psコマンドのマニュアルをマンコマンドで見よ。の誤りっす。
37名無しさん@お腹いっぱい。:2001/06/11(月) 00:51 ID:???
>>35
WIn2000ってぇとActivePerl?
ならPPMで一発じゃん?<Tk.pm
3835:2001/06/11(月) 01:50 ID:???
>>37
うぞ!? PPMに? あった〜 => http://www.ActiveState.com/packages/
ありがとー。
39_gunzip:2001/06/11(月) 01:52 ID:???
Perl5.7.1-devel(with -DDEBUGGING,-DDEBUGGING_MSTATS,-D_REENTRANT)
-------------
sbrk()要求サイズ(PERL_DEBUG_MSTATS=1)

#(do nothing)
58392 bytes(6)

#use warnings;
284672 bytes(46)

#use CGI;
1232896 bytes(90)
40_gunzip:2001/06/11(月) 03:15 ID:???
#↑書き込んだらNetscapeがgnome巻き込んで落ちた...。

>>13
256と言えば....Ascii256倍シリーズのPerl版でないかなあ....。
あれのC版(10年前?)は良かったし。

>>15
↑も参考に。
-DDEBUGGING,-DDEBUGGING_MSTATSスイッチを付けてコンパイルしたPerlで
環境変数PERL_DEBUG_MSTATSを1以上に設定してスクリプトを走らせると、
Perlインタプリタが利用するメモリに関する情報がいろいろ取得できます。

>>27-
殆ど話を聞かないけれど、VisualPerlってどんな感じなのかな?
たしかVisual Studio.NET Betaを持っている人は落とせた筈だけれど......。

自分の場合、GUIベースのデバッガと言えばDDDとかを偶に使う程度で、
大抵の場合 perl -d でケリが付きます。
41_gunzip:2001/06/11(月) 03:28 ID:???
42名無しさん@お腹いっぱい。:2001/06/11(月) 19:09 ID:???
>>41
Gtk-Perlって、Windows版はないよねぇ。
Gtkは移植されているんだから期待してるんだけど。

Perl/Tkなら、WindowsでもXでもちゃんと動くんで気持ちいい。
これでMac版があったらなぁ。
43名無しさん@お腹いっぱい。:2001/06/11(月) 23:15 ID:???
>>41
んじゃ、自分でサイト立ててれば一挙解決ではでは?
44名無しさん@お腹いっぱい。:2001/06/12(火) 20:24 ID:???
perl\site\lib 以下って何MBぐらいありますか?
45名無しさん@お腹いっぱい。:2001/06/12(火) 20:26 ID:???
10MBくらい
46_gunzip:2001/06/12(火) 20:41 ID:???
>>41
そこが残念なところだなあ.....。

ちなみに Gtk-Perl では、ちゃんとset_locale()呼んでおけば
日本語表示/編集共に問題なしです。

>>43
今作ってる所だょ。ヽ( ´ー`)ノ

>>44
34.1MBもあるが........。
47_gunzip:2001/06/12(火) 20:42 ID:???
>>41 -> >>42
鬱だ。
48rubbish_lister:2001/06/12(火) 20:46 ID:???
GTkなんてWindows使いの私には関係ないのさぁ(;;
49名無しさん@お腹いっぱい。:2001/06/14(木) 22:55 ID:???
生のファイルハンドルリファレンスをselectすると挙動がぁゃιぃ…。
select(*STDOUT{IO});
print STDOUT select(), "\n";
50名無しさん@お腹いっぱい。:2001/06/15(金) 00:34 ID:???
>>49
?なにがおかしい?
51名無しさん@お腹いっぱい。:2001/06/15(金) 10:29 ID:xtaBOgm2
こんな大事なスレに気づかなかった。鬱だ。

>>18
船渡し問題のURLきぼーん。

正規表現のバックトラックで解いたの?
「正規表現エンジンで論理プログラミング」の例ってどっかにないかな。

>>9
>今までの$foo->[$n] が $foo[$n] (or $foo.[$n])で、$foo{bar} が %foo{bar} か.......。
>うう.......慣れるまでの辛抱か。
Damian Conwayも「最初は変な感じがしたけど、慣れたらこっちの方が
イイ!」だそうです。
http://yetanother.org/damian/talks/Perl6.pdf
52名無しさん@お腹いっぱい。:2001/06/15(金) 11:11 ID:???
5352:2001/06/15(金) 11:12 ID:???
あー、>>51です。
54名無しさん@お腹いっぱい。:2001/06/15(金) 16:24 ID:???
>>52
見てきた。どういう家族だ。笑い。
55名無しさん@お腹いっぱい。:2001/06/19(火) 05:48 ID:???
http://slashdot.org/developers/01/05/16/0054243.shtml
暴れてますなヽ(´ー`)ノ
56名無しさん@お腹いっぱい。:2001/06/20(水) 00:58 ID:???
static が欲しいよう。

sub hoge{
  static my $count = 0;
 
57名無しさん@お腹いっぱい。:2001/06/20(水) 01:10 ID:???
>>56
どんなメリットが?
58名無しさん@お腹いっぱい。:2001/06/20(水) 01:32 ID:???
>>57
グローバル変数みたいのを使いたくないから。

my $static = 0;
sub hoge{
  if( .. ) $static++;

みたいのを良くやるので…。
何か良い方法あるのかな。(お手軽なやつで)
59_gunzip:2001/06/20(水) 01:58 ID:???
>>58
#違うかな?

#!/usr/bin/perl

use strict;

{
    # $countにはincr_count(),decr_count(),get_count()経由でのみアクセス可
    my $count = 0;
    sub incr_count{ $count++ }
    sub decr_count{ $count-- }
    sub get_count{ $count }
}

print get_count();
incr_count();
print get_count();
decr_count();
print get_count();
60rubbish_lister:2001/06/20(水) 02:16 ID:???
overloadを使えばstatic変数であるかのように振舞う変数を作成できるような気がする。
無理かな?
61名無しさん@お腹いっぱい。:2001/06/20(水) 02:32 ID:???
まずはやってみせることだ。
62rubbish_lister:2001/06/20(水) 02:51 ID:???
楽なtieにしてしまった。

package Static;

use 5.6.0;
use strict;
use base 'Exporter';
our @EXPORT_OK = qw/ static /;

sub TIESCALAR{
my $class = ref($_[0]) ? ref(shift) : shift;
my $self = [];
return bless $self, $class;
}
sub FETCH{
my $self = shift;
my $callline = (caller(1))[2];
return $self->[ $callline ];
}
sub STORE{
my $self = shift;
my $value = shift;
my $callline = (caller(1))[2];
$self->[ $callline ] = $value;
}

sub static($) : lvalue{
no strict 'vars';
local *staticvar = \$_[0];
tie $staticvar, __PACKAGE__;
$staticvar;
}
1;
__END__
63rubbish_lister:2001/06/20(水) 02:52 ID:???
ある一定の条件の下でstaticに見える変数を宣言可能。

#!/usr/bin/perl
use Static qw/ static /;

static my $i = 0;

foreach (0 .. 10){
print count1(), "\n";
}
foreach (0 .. 10){
print count2(), "\n";
}
sub count1{ return $i++;}
sub count2{ return $i--;}
__END__


但し…ネタにしかならない。
64rubbish_lister:2001/06/20(水) 17:18 ID:???
# static.pm
package Static;
use base 'Exporter';
@EXPORT_OK = qw/ static /;

use strict;
sub TIESCALAR{
    my $class = ref($_[0]) || $_[0];
    my $self  = \do{ $_[1] };
    return bless $self, $class;
}
my @values;
sub FETCH{    $values[ ${ $_[0] } ];}
sub STORE{    $values[ ${ $_[0] } ] = $_[1];}
my @vars;
sub static($) : lvalue{
    no strict 'vars';
    local *staticvar = \$_[0];
    my($cline) = (caller(0))[2];
    tie $staticvar, __PACKAGE__, $cline;
    my $dumy;

    $vars[ $cline ]++
        ? $dumy
        : $staticvar;
}
1;
__END__

=head1 SYNOPSIS

    use Static qw/ static /;
    sub countup(){ static my $i = 0; return $i++ }
    print countup, "\n" for(0 .. 10);

=cut

一連の駄レススマソ。
65名無しさん@お腹いっぱい。:2001/06/20(水) 20:30 ID:???
>>62-64
なるほど。出現行数で変数を識別するのかー。
面白いっす。これってオリジナルのアイデア?
66rubbish_lister:2001/06/20(水) 21:06 ID:???
オリジナルです。
>>62は思いついてすぐ作ったのでイマイチかな。
>>63は低速である事を覗けば実用化可能かな?
行番号で識別しているので"#line"などで行番号をいじると妙なことになりますが。

lvalueとtieを使うといろいろ遊べて楽しいですね。
67_gunzip:2001/06/21(木) 22:44 ID:???
>>51
http://dev.perl.org/rfc/22.html
組み込みswitch-case文も導入(たぶん)ですね。
......とにかくC,C++,Javaみたいな"fall-through"がデフォルトでは無いようなので一安心。
# C# ではbreak,goto必須だし。
68名無しさん@お腹いっぱい。:2001/06/22(金) 06:21 ID:???
print文の成功した場合の戻り値1って数値1?文字列"1"?
69_gunzip:2001/06/22(金) 06:45 ID:???
>>68
Perlのbool値はPL_sv_yes, PL_sv_noで表される。
/* perlvars.h */
PERLVARIC(GYes, char *, "1")
PERLVARIC(GNo, char *, "")

文字列リテラルさね。
70名無しさん@お腹いっぱい。:2001/06/22(金) 21:10 ID:???
>>56

perldoc -q static
71名無しさん@お腹いっぱい。:2001/06/25(月) 17:13 ID:???
Perlの資格試験ってある?
72名無しさん@お腹いっぱい。:2001/06/25(月) 18:06 ID:..juuP4w
無いんじゃないかなヽ(´ー`)ノ
73名無しさん@お腹いっぱい。:2001/06/25(月) 23:28 ID:???
>>71-72
と、いうことは。。。
いまPerlの資格試験を新設したら受験料で大儲けかも?
いや、家元制度+段位制でもいいな。
Perl3級とか、Perl初段とかの免状を発行して大儲け。
74名無しさん@お腹いっぱい。:2001/06/26(火) 00:11 ID:???
>>73
なんで世界規模のものを日本規模の制度にするんだよ(w

つーかネタか。
75名無しさん@お腹いっぱい。:2001/06/26(火) 00:13 ID:???
黒帯きぼーん(藁
76名無しさん@お腹いっぱい。:2001/06/27(水) 16:13 ID:Mv0nn73w
>>1にも書いてあるInline.pmがプログラム技術板で話題になってるよ。
http://piza.2ch.net/test/read.cgi?bbs=tech&key=991994996&st=161

あっちの板の人は基本的にマルチリンガルだから、こういうの大好きなんだねえ。
おれとしては・・・面白そうだけど使わない、つーか使うテクがないなあ。
77名無しさん@お腹いっぱい。:2001/06/27(水) 19:14 ID:???
マルチリンガルって.....というかPerl一筋の人間は
殆んどいないと思うが...
78名無しさん@お腹いっぱい。:2001/06/27(水) 19:51 ID:???
みんなどんな言語使ってる?
79名無しさん@お腹いっぱい。:2001/06/27(水) 22:18 ID:???
C,C++,Perlとか。アマチュアよん。
80rubbish_lister:2001/06/27(水) 23:54 ID:???
Perlしか知らないPerl厨房でーすヽ(´ー`)ノ
81名無しさん@お腹いっぱい。:2001/06/28(木) 00:23 ID:???
Perlの他には、VC++(MFC)を少々たしなむ程度。STLってなに?
82名無しさん@お腹いっぱい。:2001/06/28(木) 12:17 ID:???
>>81
STLはPerl使いにはうれしい機能(連想配列モドキとか)がいろいろついてるのでぜひ覚えておくことをお勧めする。
83_gunzip:2001/06/28(木) 16:15 ID:???
自分も趣味だなー
取りあえず使えるのは C,Perl,Java,C# とか。(C++は知らない)
その前はsed,awk(gawk)とかやってたけど、Perl憶えて以来不要になった。

---------
Perl for .NETって、Perlで書かれたコードを一度C#コードに変換してから
cscでコンパイルして実行モジュール、DLLを作るみたいだね。
84名無しさん@お腹いっぱい。:2001/06/28(木) 16:49 ID:???
趣味でやってます。
# 社内用にチョコチョコ作らされるけど

Perl・・・・厨房程度
PHP・・・・同上
VB・・・・同上
Ruby・・・・厨房以下



Mind・・・・挫折(ワラ
N88-Basic・・・・プロ級(ウソ

初めて作ったプログラムは FamilyBasic用ゲームプログラム。
85S:2001/06/28(木) 18:18 ID:???
C++ … 厨房
C … 消防
Prolog … 園児

って感じです。
86名無しさん@お腹いっぱい。:2001/06/28(木) 20:34 ID:???
>>54
っていうかこの条件って誰か別の人が作ったゲームのヤツだ…
俺が見たやつはクリアするとアレなイベントが起きるっていうヤツだったけど。

#アレって何よってのは察してくれ…

…パクリ?
87名無しさん@お腹いっぱい。:2001/06/28(木) 22:00 ID:DSCSsXU2
>>73
某所で長らく話題にのぼりながら、一向に実現されないやつだな。
本因坊は決まっているのになあ。
88名無しさん@お腹いっぱい。:2001/06/28(木) 22:05 ID:???
某所?
89名無しさん@お腹いっぱい。:2001/06/28(木) 22:06 ID:DSCSsXU2
>>86
え、そんな新しいものだったのか。
土人と宣教師みたいなトラディショナルなやつかと思ってたよ。

プログラミングの教科書にのってるわけじゃないの?
90_gunzip:2001/06/28(木) 22:09 ID:???
光栄の大航海時代4に出てきたな・・・
提督 + 副官 + 謎の老人 + その友人 の4人バージョン

もしかしてそれのこと?
91名無しさん@お腹いっぱい。:2001/06/28(木) 22:10 ID:???
>>89
|母がいないと父は娘に手を出す
|父がいないと母は息子に手を出す
|執事がいないと犬は家族を食い殺す
こんな問題のってる教科書があるかよ!
92名無しさん@お腹いっぱい。:2001/06/28(木) 22:50 ID:???
>>91
いや、おいらが最初に見たやつは、砂漠を行く話で、
「父」:=「王」
「母」:=「女王」
「息子」:=「皇子」
「娘」:=「皇女」
「執事」:=「猛獣使い」
「犬」:=「猛獣」
「手を出す」:=「殺す」
だった。

王位継承問題がこじれて……ってな設定をすれば、
十分教科書に出せると思うが。

ちょっとsearch spaceとかprologとか
missionaries and cannibalsとかで
サーチしてみたけど出てこなかったなあ。
93名無しさん@お腹いっぱい。:2001/06/29(金) 02:28 ID:???
>>92
中学校の数学サイトで発見!
http://www.edu-c.pref.kumamoto.jp/ws/kcmathws/zibunde/kawa2/kawa2.html
その「アレなイベントが起きる」とかいう問題を
中学教師がパクって無難な設定に変えた可能性も高いが。
94名無しさん@お腹いっぱい。:2001/06/29(金) 12:11 ID:???
>>89
いや、大元のネタはその辺りだと思うんだが。
手を出す食い殺すってのは、半年以上前(多分)に既に使われてるネタだってことだ。

#つーかすれ違いスマソ
95名無しさん@お腹いっぱい。:2001/06/29(金) 15:40 ID:???
「トラやライオンが船をこぐ」設定→うそくせー
「手を出す食い殺す」設定→あるあるー
と思ってしまう俺はなにかに毒されているでしょうか。
96名無しさん@お腹いっぱい。:2001/07/02(月) 17:48 ID:cRPRYcUw
Perl6について語ろう!
97なな:2001/07/02(月) 20:18 ID:???
日本語の「〜なら○○」を正規表現しようと書き始めたら泥沼だった。

/(だった|で((御座|ござ)(い|居)ま)?した|であ(っ|りまし)た)(な)?ら(ば)?
|であれば|(である)?なら(ば)?/

…氏にそう。おれに日本語を教えてくれ。いやマジで。
98Name_Not_Found:2001/07/02(月) 20:54 ID:???
>>97
ワラタ
99名無しさん@お腹いっぱい。:2001/07/02(月) 21:17 ID:???
100_gunzip:2001/07/03(火) 01:08 ID:???
http://www.perl.com/
デザインが変わったね。
101名無しさん@お腹いっぱい。:2001/07/03(火) 12:24 ID:fLxGSuZs
>>100
use Perl;でも話題になってた。
Perlのメインサイトがオライリーっぽくなりすぎで興ざめだってさ。
102rubbish_lister:2001/07/03(火) 17:26 ID:???
そういえばPerl6では文字列連結演算子はどうなるんでしょ。
矢印演算子?まさかね…。
103名無しさん@お腹いっぱい。:2001/07/03(火) 21:19 ID:fLxGSuZs
>>102
ああ、それperl6-languageとperl6-internalsで話題になってたなあ。
Simon Cozensが「~」を提案して論争になってた。
どう終結したんだろう。

……(メールアーカイブを検索中)……

うむー、どうにもなってないなー。
Larryが反応するまで決まらなさそうだ。

興味のある人は "The Perl6 Emulator" から続く話をどうぞ。
http://archive.develooper.com/perl6-language%40perl.org/msg07598.html
104名無しさん@お腹いっぱい。:2001/07/04(水) 13:12 ID:???
>>103 最初から素直に "+" にしとけば問題なかったものを…。
"100" + "100" が 200 になるっつうのがそもそもの間違い。
105rubbish_lister:2001/07/04(水) 16:20 ID:???
>>103
"~" ですか…。
$str = $str ~ $str; $str ~= $str;
うーん…なにか間違っているような気が(汗

素直に参照/メソッド起動はアロー演算子、文字列結合はドット演算子としておけばいいのに。
106名無しさん@お腹いっぱい。:2001/07/04(水) 20:52 ID:dDBXzh2.
>>104
文字列連結と数値的加算という、意味も動作もまったく違うものに
同じ演算子を使うのは混乱の元だと思う。

演算子オーバーロードに関してはLarryが
 数学記号は数学的意味を表わす場合のみにしましょうね
という指針を示している。「+」を使っていいのは複素数とか行列みたいな、
交換法則と結合法則を満たすもののみに限定されるべきという話。

確かに文字列の連結って可換じゃないし、
逆演算を「-」で無理矢理定義してもピンと来ない。

文字列の連結に「+」を使うというのを最初に考えついた人って誰?
その人が素直じゃなかったんだと思う。Smalltalkのころ?
「末尾への連結」に「<<」を使うことを考えついた人もえらい。
常人の発想ではない。狂っている。

ストリームへの出力と配列へのpushを、
「末尾への連結と見れば同じ」と考えてかどうか知らないが、
「<<」という同じ記号っていうのも発想がすごい。
「>>」はきっとその逆演算なのだろうと予想できるが、
popなのかunshiftなのか、はたしてどっち?

Perl6のswitch文(仮名)もこの話と同類の気狂い仕様な気がするな。
これがRubyだと「メソッド===で比較」って言い方になって、
polymorphismというカプセルに入った結果、
同じ気狂い仕様なのに美しく見えるのは不思議だ。
107名無しさん@お腹いっぱい。:2001/07/04(水) 22:11 ID:???
    うぐぅ〜!意味わかんないよぉ〜!
   \____          ____/
               ̄ ̄ ̄∨ ̄ ̄ ̄
            〃┏━━ 、
            |  ノノソハ)))
       (\リリ;´Д⊂#ヽ
       (ニ⊂[#~~'∞"_ノ
         /__∞_|
          し'(_f)
108Perl好き:2001/07/04(水) 22:54 ID:???
Perl6、なんかすげえ嫌なものになりそう。
今までRuby信者に汚いと罵られようと、感覚的にとても解りやすい言語だと思ってたが、
アロー廃止、$@%の意味変更は滅茶苦茶な愚行だ。

でももう決定事項なんだろうな。ああ鬱。
マジでRubyに移ろうかしら。
109名無しさん@お腹いっぱい。:2001/07/05(木) 02:33 ID:NIXF4Exg
Perl6っていつリリースなんですか?
110名無しさん@お腹いっぱい。:2001/07/05(木) 03:07 ID:f2quMIhg
>>109
予想では再来年のPerl Conference合わせくらいじゃなかったっけ。
111名無しさん@お腹いっぱい。:2001/07/05(木) 06:48 ID:j7I9hWXA
>>108
全くもって同感
112shige:2001/07/05(木) 11:19 ID:???
Ruby最高!
イエイ!
113106:2001/07/05(木) 15:25 ID:???
Rubyはねえ、加算と文字列連結の他に、
配列の連結にも「+」を使うからねえ……。
そういえばCでもポインタの加算という意味のまったく
違う仕事を「+」と書いていたなあ。

「Perlは様々な組込関数のデフォルト挙動を、
たくさん覚えないと使えないからイヤ」って意見をよく聞くけど、
「OO言語は一見同じ記号でもクラスによって全然違う動作をするんで、
たくさん覚えないと使えないからイヤ」とはあまり聞かないね。
むしろ「全然違う動作でも意識せず同じ記号で使える」とか利点として
紹介されている。

でもRubyの言語仕様書とか見てると、
OO言語って演算子オーバーロードなしには、
言語仕様も定義できないのかな、と思ってしまう。

JavaはC++の反省からか演算子オーバーロードできないけど、
結果としてなにがしかの利便性は失われているみたいだ。

Perl6になるとARRAYの「+」は連結になったりするのかなあ。
Larryが防波堤になってくれると信じてるんだけど。

OOスレ逝った方がいいな。スレ違いスマソ。
114名無しさん@お腹いっぱい。:2001/07/05(木) 15:27 ID:???
>>108
ま、Perl6でもPerl5のコードが走るはずだし、それに期待するしか。
115名無しさん@お腹いっぱい。:2001/07/05(木) 16:32 ID:???
なんか暗くなったね。
116名無しさん@お腹いっぱい。:2001/07/05(木) 18:07 ID:???
確かにマンセーマンセーと騒ぐ気にはなれない…。
うーん……
117名無しさん@お腹いっぱい。:2001/07/06(金) 05:20 ID:dr/SZh9U
気分転換にPerl/Tk2chブラウザでも応援するか。

http://corn.2ch.net/test/read.cgi?bbs=php&key=991966646
118名無しさん@お腹いっぱい。:2001/07/06(金) 06:45 ID:???
マターリ
119名無しさん@お腹いっぱい。:2001/07/06(金) 10:18 ID:???
グターリ.
120名無しさん@お腹いっぱい。:2001/07/06(金) 22:49 ID:???
ゲソーリ
121名無しさん@お腹いっぱい。:2001/07/08(日) 22:16 ID:???
ゾヌーリ
122名無しさん@お腹いっぱい。:2001/07/09(月) 02:39 ID:???
ActivePerl v5.6.1.628
なにがかわったん?
123名無しさん@お腹いっぱい。:2001/07/09(月) 02:53 ID:???
>>122
知らん。
俺も知りたいYO!
124名無しさん@お腹いっぱい。:2001/07/09(月) 10:27 ID:???
perl6はやくでないかなー
125名無しさん@お腹いっぱい。:2001/07/09(月) 11:06 ID:nTmH2gQU
5.7.2ってもう出たっけ?
試してみた人いる?
126名無しさん@お腹いっぱい。:2001/07/15(日) 22:57 ID:3qwmQFts
age
127名無しさん@お腹いっぱい。:2001/07/16(月) 01:33 ID:OyRSiVOs
>>125
でてるよー。
http://search.cpan.org/search?dist=perl-5.7.2

僕はあえてdevelに挑戦するつもりないけど...。
128_gunzip:2001/07/16(月) 21:00 ID:???
Perl5.7.2、コンパイルしてXSデバッグ用ディレクトリに
入れてみたけれど、unicode周りが変更になった他は
大して変わっていないみたいだね。

最近CPAN2の存在を知った・・・
http://cpan2.org/
129名無しさん@お腹いっぱい。:2001/07/16(月) 21:32 ID:4EOT0rSw
ちょい質問良いですか。
#!/usr/bin/perl
BEGIN{
use overload '<<' => sub{
my($self, $str) = @_;
print {$self} $str;
return $self;
};
my $stdout = bless \*STDOUT;
*out = sub(){ $stdout };
}
exit;

out << "==========終了済み==========" << "\n";
__END__

このコードなんですが、実行するとexit()しているのも関わらず
"終了済み"と印字されます。
$stdoutがグローバル変数だったり
out()をsub out(){$stdout}で宣言すると何もせず終了します。
これはどういうことなんでしょうか。

環境:
WindowsMe ActivePerl 5.6.0.623
130_gunzip:2001/07/17(火) 05:56 ID:???
>>129
何故だろう?ちょっと調べてみる。
131_gunzip:2001/07/17(火) 06:47 ID:???
>>129
ふぅ。オプティマイザの副作用の気がするなあ。

Perlが与えられたスクリプトを実行する際、コンパイルと実行段階の間に
オプティマイズという段階があって、定数値の埋め込み、
余計なシンボルテーブル検索の削除等を行うことになっている。

例えば、
print 4 + 5;
は、始めのOPコードへのコンパイルの段階で
「4(const)と5(const)をスタックにプッシュ、次にスタックから二つ値を取り出し、
それらを加算(add)、その値をprintで標準出力に出力せよ」
というコードが生成されるのわけだけれど、
Perlのオプティマイザは4と5が数値定数であるから、これらを予め計算して
「9をprintで標準出力に出力せよ」
というコードに修正する。(Perlのオプティマイザの働きについては
他にも色々とあるので、詳しく知りたければop.cのpeep()でも眺めてくれ)
132_gunzip:2001/07/17(火) 06:48 ID:???
------------
で、今回の場合、問題の
out << "==========終了済み==========";
についてだけれど、(ちょいと端折った)
out はBEGINブロックのpadlist内に閉じこめられた$stdoutを常に返す
*プロトタイプが空の*サブルーチンなので、オプティマイザによって
その返す値 $stdout に置き換えられる。
(サブルーチン呼び出しに伴う負荷を押さえるために、プロトタイプが空であり、
かつ定数値を返すものはその値に置き換えられることになっている。
constantプラグマなどがその良い例。)
(但しこれは正確ではない。&をつけて呼び出されたものは置き換えられない事に注意。)

で、次
「$stdout (blessed "main")」<< "==========終了済み==========";
シフト演算子"<<"(Perl内部の"left-shift"コード)の子は
何れも定数であるため、オプティマイザは(上でも見たように)
これを予め実行した結果に置き換えようとし、その結果、オーバーライドされた
メソッド(3-7行目)が呼び出され、「"==========終了済み=========="」が出力される、
というわけ。

これらは全て**実行段階前**に行われるので、exit()やdie()の順序は意味を持たない。

試しに、
*out = sub(){ $stdout };
の()を外したり、後ろのout呼び出しに&プレフィックスをつけると、
表示されなくなることを確かめてみればいい。

#いつもながら、間違っている箇所があれば訂正してくれると嬉しい。
133名無しさん@お腹いっぱい。:2001/07/17(火) 07:07 ID:???
_gunzipたん萌え
134名無しさん@お腹いっぱい。:2001/07/17(火) 07:34 ID:???
>>_gunzip
あなたマジすげえ。
135129:2001/07/17(火) 14:56 ID:???
なるほど!
コンパイル時に実行される計算だったわけですか。
確かに-cスイッチの元で実行しても"終了済み"と印字されました。

しかし、"*out = sub(){...}"を"sub out(){...}"に変更すると
そのような置き換えは発生しないのですが、これは何故なんでしょうか。
お手数かけますが、教えてください。


>>133-134
激しく同意っす。
136_gunzip:2001/07/17(火) 17:43 ID:???
>>135
>しかし、"*out = sub(){...}"を"sub out(){...}"に変更すると
ちょっと確認するけれど、これは
-----------------------------------
#!/usr/bin/perl
BEGIN{
    use overload '<<' => sub{
        my($self, $str) = @_;
        print {$self} $str;
        return $self;
    };
    my $stdout = bless \*STDOUT;
}
sub out(){ $stdout };
exit;
out << "==========終了済み==========" << "\n";
------------------------------------
のようにoutの宣言をBEGINブロックから外に出した場合だよね?
137_gunzip:2001/07/17(火) 18:02 ID:???
-----------------------------------
#!/usr/bin/perl
BEGIN{
    use overload '<<' => sub{
        my($self, $str) = @_;
        print {$self} $str;
        return $self;
    };
    my $stdout = bless \*STDOUT;
    sub out(){ $stdout };
}
exit;
out << "==========終了済み==========" << "\n";
------------------------------------
ならOKだが....。
サブルーチンがインライン化されて定数値に置き換えられるためには
そのサブルーチンのプロトタイプが空であり、かつ、その返す値が
単なる定数値(4とか"hello"とか)であるか、又は、
**レキシカルスコープを持ち、かつ他から一切参照されない**
(この場合の$stdoutがそう)スカラー値でなくてはならない。
138129:2001/07/17(火) 18:16 ID:???
あれ?
ぬぬ、>>137のつもりでしたが確かに>>137ならOKでした。
勘違いだったらしいです。スミマセソ。
139名無しさん@お腹いっぱい。:2001/07/18(水) 07:51 ID:???
お、今search.cpan.orgをみるとTie::Staticなるモジュールが。
基本的な考え方は>>64と変わらないものの、
IDに安全な値を使っているのでTie::Staticの方がマトモか…。
しかし見ていて飽きないですね、CPAN。
140_gunzip:2001/07/18(水) 23:41 ID:???
日本人でCPAN登録者って居るのかな....?
(Jcode.pm以外見たことがない)
141名無しさん@お腹いっぱい。:2001/07/18(水) 23:49 ID:???
perl に付いては凄いがメール欄は凄くない(・∀・)
142名無しさん@お腹いっぱい。:2001/07/18(水) 23:58 ID:???
>>140
CGIメーリングリストの人に何人かいなかった?
143名無しさん@お腹いっぱい。:2001/07/19(木) 00:00 ID:???
SpreadSheet::ParseExcelも日本人
144名無しさん@お腹いっぱい。:2001/07/19(木) 00:01 ID:???
>>140
DBI MLのかわいさん (例のエクセルのやつとか、バーコードのやつ)とか
perl-ooのみやがわさん(macバイナリカッターとか)とか
20人ぐらいはいると思う。

# どうでもいいけど、梅田紀伊国屋コンピュータ書コーナー配置換え。
#もともとおかしかったけど、さらに逝って良しな書店になった。
#場所は便利なのになあ。
145名無しさん@お腹いっぱい。:2001/07/19(木) 00:05 ID:???
日本人いますよ。
といってもこのJcode.pm含めて3人しか知りませんが。
…しかも全部文字コード関係だし(^^;
http://search.cpan.org/search?dist=CGI-ConvertParam
http://search.cpan.org/search?dist=ShiftJIS-Regexp
http://search.cpan.org/search?dist=Jcode
ガンバレ日本人!

ところでcpan2とsearch.cpanって何処が違うんでしょ。
付加分散の為?
146JAPU:2001/07/19(木) 00:30 ID:???
こんなのもあるぞ。
http://search.cpan.org/search?dist=Roman
147_gunzip:2001/07/19(木) 05:57 ID:???
>>142 いや、 CGIメーリングリストには入っていないので....。
>>143 あ、ど忘れしてました。川合氏ですね。(バーコードも)
>>144
macバイナリカッターの方は初耳だった....。
梅田紀伊国屋といえば、何時行っても人が多い
&& コンピュータ書コーナーは隅っこで本も少な目という印象があるな...。
京橋紀伊国屋が出来てからは、大抵そこで済ますようになったし、
無ければ新地のジュンク堂に行けばいいということもあって、梅田の方には最近殆ど行かない。

>>145
いろいろ教えてくれてありがとう。
search.cpan2.orgもあるみたい.。(中身は何もないけれど)
http://search.cpan2.org/
やはり負荷削減のためか.....。
http://take23.org/news/2001/01/26/cpan2.xml

>>146 ありがとうございます。探せば色々と有るものですね。

# 自分も何か貢献出来るようなネタがあるかな...と思ったが....
# CPANを探せば大抵は揃っているようですね。
Cの構造体みたいな書き方で
$s = new A();
$s->foo = "hoge";
$s->bar *= 50;
(foo, barはメンバ)
みたいな書き方は出来ますか?
トリッキーなのでもイイです。
149_gunzip:2001/07/19(木) 06:47 ID:???
>>148
lvalue属性を使えば簡単に実現出来るよ。
詳しくはperldoc perlsubの"lvalue subroutine"セクションや、
attributeプラグマのマニュアルを読んでくれ。

#!/usr/bin/perl -w

package Point;

use strict;
use overload q{""} => sub { sprintf("(%d,%d)", $_[0]->x, $_[0]->y) };

sub new
{
    my $class = shift;
    return bless { x => $_[0], y => $_[1] }, $class;
}

sub x :lvalue method
{
    shift->{ x };
}

sub y :lvalue method
{
    shift->{ y };
}

package main;

our $p = new Point(1, 15);
print "\$p = $p\n";

#X座標を5倍、Y座標に20代入
$p->x *= 5;
$p->y = 20;
print "\$p = $p\n";
150名無しさん:2001/07/19(木) 07:42 ID:???
http://hp.vector.co.jp/authors/VA017578/software.html
ここのShellExtCtrlってソフト
結構使いやすい
Windowsで.plファイルが.batみたいに使えるようになる
151名無しさん@お腹いっぱい。:2001/07/19(木) 10:32 ID:mCZ55RKw
>> 150

ActivePerl付属の pl2bat じゃだめなの?
ドロップすれば @ARGVにファイル名が入るのは一緒だし。
152名無しさん@お腹いっぱい。:2001/07/19(木) 19:00 ID:???
pl2batよりはSOSを奨励したい。
パイプ繋がるから。
153148:2001/07/19(木) 23:16 ID:???
>>149
Thanks!
154わ、:2001/07/20(金) 03:51 ID:O.8zSDuM
sa
155名無しさん@お腹いっぱい。:2001/07/20(金) 06:56 ID:C8dQMlbs
こんな質問、いいのかな・・・。

最近perlを憶えたのですが、自分で色々課題を出して解こうとしています。
しかし記念すべき第一号の課題から躓いてしまっています・・・。

あるディレクトリ内にファイル名に全く統一性のないファイルが複数あるとします。
そのファイルのどれだか分からない一部のファイル群に『HOGEHOGE』という文字
があり、それを『FUGAFUGA』という文字に変更するにはどうすれば良いのでしょう
?HOGEHOGEという文字は一つのファイルに一度しか出てきません。

スクリプトを作ろうとしたのですがうまく行かず、結局ここの方に頼ることに・・・。
また、この作業をperlを使ってコマンドラインから実行する方法も是非。
156名無しさん@お腹いっぱい。:2001/07/20(金) 07:39 ID:???
>>155
どちらかと言うとPerl初心者コーナーの方が適当だと思いますが。

とりあえずヒントだけ。
rename($oldfile => $newfile); # 名前変更
use IO::Dir;
@files = IO::Dir->new($dir)->read; # ディレクトリ$dirにあるファイル名全てを得る
157名無しさん@お腹いっぱい。:2001/07/20(金) 12:26 ID:???
perl -e"for(<*HOGEHOGE*>) {$old=$_;s/HOGEHOGE/FUGAFUGA/;rename($old,$_);}"

カレントディレクトリ(サブディレクトリは除外)限定の場合
158155:2001/07/20(金) 18:30 ID:69JZH5Is
>>156
>>157
すみません。訊き方方が悪かったです。
HOGEHOGEはファイル名ではなく、ファイルの中に書いてある内容です。
159名無しさん@お腹いっぱい。:2001/07/20(金) 20:27 ID:???
>>155
まずうまく逝かなかったスクリプトを上げるべきだと思うのだが、
いかがかな?

それが無いようであれば、「教えて君」と見なし、以後放置するよ。
160155:2001/07/20(金) 23:36 ID:8VNGZ9tA
ごめんなさい。
【Perl 】初心者コーナーPart5に移動しました。
161名無しさん@お腹いっぱい。:2001/07/23(月) 23:33 ID:D.yGMh3Q
誰かASのVisualPerlのβ版使ってる?感想キボンヌ。
162_gunzip:2001/07/25(水) 20:21 ID:???
http://aspn.activestate.com/ASPN/Downloads/PerlNET/
Perl.NETはbeta3になっているけれど、試した人いるかな?
(今のところWindows2000,NTでしか動作しないそうなので試せない。)

Perl.NETで、MS Windows上でもPerlで単体実行ファイル(PEじゃないが)や、
DLLを作り、それを C#, C++,JScriptから呼び出したり、逆にC#, C++のクラスライブラリを
Perlから簡単に利用できるようになるらしいな。(実際は知らんが)
163名無しさん@お腹いっぱい。 :2001/08/05(日) 06:15 ID:???
use strict;;;foreach(ord(
pack(chr(++$*+$*+++$**$*.
$*),$=))+--$* .. ord(pack
(chr($*+$*+++$**$*.$*),$=
))+--$*+$*++-(($*-$***$*)
)+$*+++$***$*-$*---$**$*,
$***$***$**$*){push@_,$_}
;foreach($***$**$*+$*/$*,
$***$**$**$*+$**$*,$***$*
*$**$*+$*,$***$**$**$*+$*
*$*-$*/$*,$**$**$**$**$*-
$**$**$*+$*,$*-$*,$**$***
$**$*-$*-$*/$*,$**$***$**
$*-$*,$***$***$*+$**$*-$*
/$*,$**$**$*-$*/$*,$**$*,
$***$***$*+$*/$*,$**$**$*
*$**$*-$**$**$*+$*,$***$*
**$*-$*/$*,$**$*,$***$***
$*+$*/$*,$***$**$*+$*+$*/
$*,$***$**$**$**$*-$**$**
$*+$*,$***$**$*-$*/$*,$*-
$*,$*,$***$**$*+$*,$**$*,
$***$**$**$*+$*/$*){print
pack(chr$**$**$**$**$**$*
+$**$*+$*/$*-$*,$_[$_]);}

こんなことして遊んでいる方とかいますか?
いたら是非あなたの作品を見せてください。
164名無しさん@お腹いっぱい。:2001/08/06(月) 00:10 ID:oWP36vTo
プログラミングPerlの初版って赤色?
改訂(日本語)は青だよね?
165名無しさん@お腹いっぱい。:2001/08/06(月) 00:11 ID:???
ごめんなさい。
参考書スレッドがありました。
そっちにコピペします。
166名無しさん@お腹いっぱい。:2001/08/06(月) 12:33 ID:???
>>163
うーん、その手の話題はプログラム板とかのほうが食いつきがいいんでは?
回文プログラムとかトリッキーなプログラムとかのスレあるし。
167名無しさん@お腹いっぱい。:2001/08/09(木) 03:07 ID:bI3E6lI.
cpan2 どうなっちゃってるのかな。
http://www.cpan2.org
http://www.cpan2.com
168名無しさん@お腹いっぱい。:2001/08/13(月) 14:23 ID:???
2chのdatとかの<>区切りのデータを切り分けるときって、
my ($name, $mail, $date, $contents) = split /<>/, $line;
ってやるよりも
$line =~ /(.*?)<>(.*?)<>(.*?)<>(.*?)/;
my ($name, $mail, $date, $contents) = ($1, $2, $3, $4);
ってやったほうが速いんですね。
見やすい、書きやすい以外のsplitを使う理由があれば教えてください。
また、もっと速い方法があるならばそちらも教えていただけませんか?
169名無しさん@お腹いっぱい。:2001/08/13(月) 15:27 ID:???
>168
嘘はいけません。
my ($name, $mail, $date, $contents) = split /<>/, $line;
こっちの方が圧倒的に早い。
データ量によっては、
my @data = split /<>/,$line;
の方が早い。
my は付けない方が早い。

ちなみにスレ違い。このような話題は初心者コーナーへ。
170名無しさん@お腹いっぱい。:2001/08/13(月) 17:00 ID:???
>>169
別に嘘を言いたかったわけではなくて、
use Benchmark;
my $line = "name<>mail<>date<>contents";
timethese(100000, {
foo => sub { my ($name, $mail, $date, $contents) = split /<>/, $line },
bar => sub { $line =~ /(.*?)<>(.*?)<>(.*?)<>(.*?)/;
my ($name, $mail, $date, $contents)= ($1, $2, $3, $4); }
});
ってやったときに、barの方が速いという結果が出たから質問したんですが・・・・
これは何故ですか?

あと、どこまでが初心者コーナー行きかの線引きがわかりません。
私としては、初心者コーナーはリファレンスを引けばわかるようなことを
やるところだと思っていたのですが。
171名無しさん@お腹いっぱい。:2001/08/13(月) 17:38 ID:???
>>168 >>170
use Benchmark;
my $line = "name<>mail<>date<>contents";
timethese(100000, {
bar => sub { my ($name, $mail, $date, $contents) = split /<>/, $line },
foo => sub { $line =~ /(.*?)<>(.*?)<>(.*?)<>(.*?)/;
my ($name, $mail, $date, $contents)= ($1, $2, $3, $4); }
});
ってやったときに、barの方が速いという結果が出るのですが、
何故だか分かりますか?(>>170 のfooとbarを入れ替えている)

>>初心者コーナーはリファレンスを引けばわかるようなこと
まさしく貴方は初心者コーナーへどうぞ。
172名無しさん@お腹いっぱい。:2001/08/13(月) 19:51 ID:???
foo => sub {
my ($name, $mail, $date, $contents) = split /<>/, $line
},

bar => sub {
$line =~ /(.*?)<>(.*?)<>(.*?)<>(.*?)/;
my ($name, $mail, $date, $contents)= ($1, $2, $3, $4)
}
#-----------------------#
Benchmark: timing 100000 iterations of bar, foo...
bar: 12 wallclock secs (10.19 usr + 0.00 sys = 10.19 CPU) @ 9817.40/s (n
=100000)
foo: 7 wallclock secs ( 5.93 usr + 0.00 sys = 5.93 CPU) @ 16866.25/s (
n=100000)
173名無しさん@お腹いっぱい。:2001/08/15(水) 00:30 ID:???
# なんの役に立つかは知らんけど、SelectSaverのopen版
# どうでっしゃろ。
package OpenSaver;

use strict;
use Carp;
use Symbol;

use constant SAVE_FH    => 0;
use constant ARG_FH    => 1;
use constant OPEN_MODE    => 2;

my $pkg = __PACKAGE__;
sub new{
    
    my $class = ref($_[0]) ? ref(shift) : shift;
    @_ or croak("$pkg: usage $pkg->new(opned-FileHandle, file[, mode]");

    my($fh, $file, $mode) = @_;

    $mode ||= do{ $file =~ s/^([+<>]+)//; $1 || '<'};
    my $self  = bless [
            gensym(),
            qualify_to_ref($fh, caller),
            _open_mode_string($mode)
        ], $class;

    open $self->[SAVE_FH], "$self->[OPEN_MODE]&" . fileno($fh) or croak("$pkg: open error:$!");
    open $self->[ARG_FH],  "$mode$file" or croak("$pkg: open error:$!");

    return $self;
}
sub DESTROY{
    my $self = shift;
    open $self->[ARG_FH], "$self->[OPEN_MODE]&" . fileno($self->[SAVE_FH]);
}

sub _open_mode_string {
    my ($mode) = @_;
    $mode =~ /^\+?(<|>>?)$/
      or $mode =~ s/^r(\+?)$/$1</
      or $mode =~ s/^w(\+?)$/$1>/
      or $mode =~ s/^a(\+?)$/$1>>/
      or croak "$pkg: bad open mode: $mode";
    return $mode;
}
1;
__END__
#usage
use OpenSaver;
{
my $opensaver = new OpenSaver(STDOUT, 'test.txt', 'w') or die $!;
print "This is test.txt\n";
}
print "This is display\n";
174名無しさん@お腹いっぱい。:2001/08/16(木) 00:03 ID:???
今過去ログ読み漁ってたんだけど>>10のって面白いね。
自分でも色んなコマンドもどき書いてるんだけど全然違います(-▽-;
モジュールの使い方とか参考になるなぁこれ、
175恥ずかしながら:2001/08/17(金) 01:35 ID:???
正直、自分はPerl本に赤ラクダしか持ってないのであります。
それ故、オブジェクト指向的な書き方が未だに分からないのであります。
自分の書くコードはPerl4とPerl5がイビツに混じっているのであります。

逝ってよしでありますか?
176名無しさん@お腹いっぱい。:2001/08/17(金) 10:43 ID:xrVq7k..
>>175
日本のPerlを書く人(というかCGIを書くのにPerlを使ってるヒトか)の9割方(感覚値)がそんな感じだろうから気にしないでいいよ。
裾野が広いから色々在るのは当然。んでもそのままだと、恥ずかしい思いをすることも在るので Effective Perlや perldoc perlstylを一読することを激しくお勧め。

http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
http://www.kt.rim.or.jp/~kbk/perl5.005/perlstyle.html
177名無しさん@お腹いっぱい。:2001/08/19(日) 02:16 ID:i6ZuuVgY
PerlOSってどうなったんデシか?
178名無しさん@お腹いっぱい。:2001/08/19(日) 02:36 ID:???
いや流石にPerlでOSは…(ワラ
コンパイル可能(?)なPerl6でなら…誰かやるのかねぇ。
179名無しさん@お腹いっぱい。:2001/08/19(日) 02:43 ID:???
>>178
カーネルとPerl処理系のみで、システムは全てPerlで書くとか。
ダメかなぁ。知識0厨房でスマソ。
でもこれだったらスゴック小さい&軽いOSができそうだけどなぁ。
180名無しさん@お腹いっぱい。:2001/08/19(日) 03:54 ID:???
>>179
軽くはないでしょう・・
181sage:2001/08/19(日) 16:15 ID:i6ZuuVgY
182恥ずかしながら175:2001/08/20(月) 04:52 ID:???
>>176
ありがとうであります。
新しい書き方も取り入れて行こうと思う次第であります。
183111:01/08/27 09:56 ID:gtVoupko
>>111
すみません、誤爆です。
逝ってきます。
184183:01/08/27 10:08 ID:cCFTKgE6
>>183
すみません、誤爆の謝罪を誤爆してしまいました。
申し訳ない。
185名無しさん@お腹いっぱい。:01/09/05 16:01 ID:8Hg/qZ8I
プロンプト表示して逐次処理するのってどうするんでしょうか
Cのgetchar みたいなんすけど、、ARGV??
つーかプリント文が流れて逝くだけだし、、、俺ってあほですか?
186名無しさん@お腹いっぱい。:01/09/05 16:09 ID:dfrFd246
>>185
うん。

#!perl
use constant PROMPT => '( ´∀`)>';
print PROMPT;
while (<>) {
    chomp;
    system $_;
    print PROMPT;
}
__END__
187名無しさん@お腹いっぱい。:01/09/05 17:09 ID:jg.i3l1M
ぐはあ、STDINだたのか  (痴
逝って来ます    アホだ。。。
188名無しさん@お腹いっぱい。:01/09/06 20:41 ID:???
File::statとかTime::localtimeとかFile::chdirみたいに
組み込み関数をかなり違う動作をする関数でオーバーライドするのってどうよ?

$s = new File::Stat('foo);
$t = new Time::Localtime(time);
$c = new ChdirSaver ('..');

などの方が読みやすく安全だと思うのだが。
189名無しさん@お腹いっぱい。:01/09/07 11:56 ID:.xfvPVkw
>>188
同感。普通のコード書く時はそうですよね。
ただワンライナーを書く時はオーバーライドしてくれた方が便利という背景もある。
@EXPORT じゃなくて @EXPORT_OK に書いてくれてれば良いのにね。
190名無しさん@お腹いっぱい。:01/09/07 14:36 ID:BHawRKfc
別にオーバーライドさせたくなければできますよ。
use File::Stat ();
@EXPORT に入ってるのはあくまで「デフォルト」でEXPORTするだけです。
空リストをuseに渡せばOK。
$st = File::stat($file);
191188:01/09/07 18:42 ID:???
>>190
そりゃそうだが、デフォルトでエクスポートするのが気に入らん、って事。
だからどうしたと言われりゃそれまでだが。
192名無しさん@お腹いっぱい。:01/09/08 00:16 ID:TqV0GOBs
なるほど。
組み込み関数の名前をオーバーライドするってのは、
こんな使えない組み込み関数は捨てちまえ!俺のモジュール使え!という
モジュール作成者の自信をあらわすものだったりして。
193名無しさん@お腹いっぱい。:01/09/08 23:45 ID:UUPZ4HXg
TERM:capの使い方教えれ。
194名無しさん@お腹いっぱい。:01/09/09 16:18 ID:???
今コマンドみたいなのを色々書いてるんですが、入力の受け取りで困ってます

cp ./tmp/hoge './tmp/h u" g a' "./tmp/target'dir"
こう言う入力がSTDINから有ったとして、これを上手に

@argment = ('./tmp/hoge','./tmp/h u" g a','./tmp/target'dir');
つまりShellに与えた時の引数の解釈と同じ動作がしたいのです。

正規表現で削ってみたりと苦戦してみたのですが、引数の数は不定な事も
有って完全にShellと同じ動きをするのは不可能な気がしています。
今は1byteづつ積み上げて解釈するしかないのかなと思ってます。
参考になるソースなんかは無いでしょうか。出来ればperlなら感激なんですが
よろしくお願いします。
195194:01/09/09 16:31 ID:???
ちょっと説明が変ですね、perlshell.plを起動するとそこから
処理モードに入るんです、各コマンドのサブルーチンは大体出来ていて
例えば、
$./perlshell.pl cp ./tmp/hoge './tmp/h u" g a' "./tmp/target'dir"
こんな感じなら上手く行くのです(シェルが綺麗に@ARGVに収めてくれるので)
ところが$./perlshell.pl として起動して
perlshell$←入力待ち
cp ./tmp/hoge './tmp/h u" g a' "./tmp/target'dir"
とした時の<STDIN>からの入力の処理が出来ないのです。
ここに
196名無しさん@お腹いっぱい。:01/09/09 16:40 ID:???
>>194
もう少しマトモかつ具体的な例を頼む。
197194:01/09/09 17:08 ID:???
すいません、>196
つまりShellをエミュレートしたいのだと思います。
tcshから、./perlshell.pl とタイプすると
perlshell$ こう言うプロンプトが出ます。
そこに
cp "dist1" "dist2" "dist3" "target" と入力した時の
<STDIN>からの入力を上手に配列(上なら("dist1","dist2","dist3","target"))
に収めたいのです。
今bashのソースを拾ってきたのですが、何故か心が重いです・・・
198名無しさん@お腹いっぱい。:01/09/09 18:08 ID:???
それなら><|等の処理もした方が良くないか?
と思いつつ少し考えてみる。

とりあえず
http://www.din.or.jp/~ohzaki/perl.htm#Tag_Remove
でも読みながら考えていろ。
199194:01/09/09 21:46 ID:???
ありがとう御座います、>198
シェルのソース見てみたんですが、Cが殆ど読めないので良く分かりません
でした、ただそれらしきループが有ったんでやはり1byteづつ切り出してる
んだと思います。

取り合えずsubstrで1byteづつ切り出してるんですが、難しいです。
フラグだらけで訳が分からなくなってきた。
まずは ' の中では " が使える、" の中では ' が使える。
これを目指して頑張ってます。
パイプとリダイレクトはどうしようかなぁ、何か無理っぽいです。
200名無しさん@お腹いっぱい。:01/09/09 21:53 ID:NKqI5UNo
$cmd = <SHIFT>;
print `$cmd`;


$ perlshell rm -rf /

じゃだめなの?
201198:01/09/09 22:18 ID:???
ダメだな。折れ力じゃ無理らしい(鬱
逝ってきます。
#!perl
my $command = q{cmd>foo.txt "double quote" '/single quote/' "cmd>foo.txt"};

print Dumper [parseline($command)];

sub parseline{
my $str = shift;
my $quoted_str = qr{(?:[^"' ]|"[^"]*"|'[^']*')*};
my $i = 0;
return grep{ $i++ % 2 }(split /($quoted_str)/o, $str);

}
__END__
こうしとけ。(笑)

$arg = q/Sakura "Moe" "\"puni\"" 'hanya-n'/;
@arg = split /\0/, `perl -e 'print join "\\0", \@ARGV' $arg`;
print "$_\n" foreach @arg;
203>>JAPUさん:01/09/09 22:53 ID:???
ご丁寧にバナーまでモノクロにしてある(笑
でもあまり暗いのは好きじゃないですね。鬱になりそう。
204名無しさん@お腹いっぱい。:01/09/09 23:32 ID:???
>>194
psh (Perl Shell) っていうのがあるらしいんだが、参考にはなるか?

ttp://sourceforge.net/projects/psh/
205194:01/09/10 01:25 ID:???
わわ、JAPUさんまで、感謝です>みなさん
>>200 それはちょっと・・(笑

>>201
いえいえ、凄く参考になります。自分では何も思いつかないレベルなので

>>202
凄いトリックですね、こんなの絶対考えつかないです。
今回は、勉強がてらなるべくシステムを呼ばない前提なので、
最後の手段に保存させてもらいました。

>>204
大感謝です、これは凄い。
入れてみてビックリしました、完全にShellの動作をしてます
グロビングまで自前でやってる様です、きっとこの人は偏執狂だ(笑
同じ名前で情けないので dameshell に改名しました。
今、該当部分を探している所です。段々流れがつかめて来た気がします。
今日は寝るので、ある程度形になったらまた報告させてもらいます。

多謝です>みなさん
206 :01/09/10 07:13 ID:???
while( $arg ){
$arg =~ s/^\s*//;

if( $arg =~ /^"/ ){
if( $arg =~ s/^"((\\.|[^"])*)"// ){ push @args, &parse_meta( $1 ) }
else{ die "unmatched" }
}
elsif( $arg =~ /^'/ ){
if( $arg =~ s/^'([^']*)'// ){ push @args, $1 }
else{ die "unmatched" }
}
elsif( $arg =~ /^`/ ){
if( $arg =~ s/^`((\\.|[^`])*)`// ){ push @args, &parse_command( $1 ) }
else{ die "unmatched" }
}
elsif( $arg =~ s/^(\S+)// ){
push @args, &parse_meta( $1 );
}
else{
last;
}
}

うーん。この位なら正規表現一発で綺麗に書けそうだけど…
リダイレクトやパイプがないんじゃシェルとは…
207名無しさん@お腹いっぱい。:01/09/10 10:19 ID:7tqUQO.2
んー shellと同じように分割したいなら標準モジュールの Text::ParseWords つかえば良いのに。

#!perl
use Text::ParseWords;
@args = shellwords($strings);
__END__
208194:01/09/10 15:53 ID:???
#**********************************
use strict;

&Main_block;
sub Main_block{
    my ($input,@output,$count);
    print "ひき数をいれてください\n";
    $input = <STDIN>;
    @output = &Parse_arg($input);
    $count = 0;
        foreach (@output){
            print '$ARGV'."[$count]\t$_\n";
            $count++;
        }
    exit;
}
209194:01/09/10 15:54 ID:2zI8oYIY

#***** 引数を解釈して配列に入れる
sub Parse_arg{
    my ($input,$charnum,$char,$argpart,$count,$quot_flag,@out);
    $input = shift;
    chomp ($input);
    $charnum = length ($input);
        while ($count < $charnum){
            $char = substr ($input,$count,1);
            if (($char eq ' ')&&(!$quot_flag)){
                $char = '';
                    if ($argpart){push (@out,&Unquote($argpart))};
                $argpart = '';
            }
            elsif ((($char eq '\'')||($char eq '"'))&&(!$quot_flag)){
                $quot_flag = "$char";
            }
            elsif (($char eq $quot_flag)&&($quot_flag)){
                $quot_flag = '';
            }
            if ($count == (${charnum}-1)){
                $argpart .= $char;
                if (&Unquote($argpart)){push (@out,&Unquote($argpart));}
            }
            $argpart .= $char;
            $count++;
        }
    return (@out);
}
#***** クオートを取り去る
sub Unquote{
    $_ = shift;
    $_ =~ s/^\'([^\']*)\'$/$1/;
    $_ =~ s/^\"([^\"]*)\"$/$1/;
    return $_;
}
#**********************************
210194:01/09/10 15:57 ID:???
こんにちは、またまた有難うございます、勉強になります

>>206
いえいえ、**完全に**とか言ってしまいましたが、本当は
It's my dir と言うディレクトリを開けなかったのと不定な
引数の数に対応出来なかっただけなのです。 " の中では ' が
使える、逆もOK、"と' の中ではスペースが使える、区切り文字の
スペースは幾つでも良い。これ位が目標だったので
リダイレクトは本物の動作がよく理解出来てない厨房っぷりなので
今後の課題にしようと思います。

>>207
知らなかったです、>>204さんに教えて頂いたpshもそうでしたが
細かく機能別のサブルーチンに分けて、そこに投げて行くんですね。
今、sub parse_lineとにらめっこしてます。実は、モジュールはrootに
有るの位しか使った事が無いのです(汗)

恥かしいコードですが結果、上の様になりました。
本物のふるまいが理解出来てないので今一つですが、
一応目的は達しました。ループしてるのは効率的じゃないかも、、
まだ比較演算子の優劣が分からないのでカッコだらけですが
ご勘弁ください、変な所有ったら指摘してもらえたら嬉しいです。
ありがとうございました>みなさん。 ホント勉強になる!
この板は2chじゃないですよね 笑)
211名無しさん:01/09/10 18:00 ID:???
プライオリティも解らんのにこんなの書けるのかよ(´Д`;)
212超上級者:01/09/13 05:28 ID:???
あるファイルシステムがマウントされているかどうかをPerlから知るにはどうすればいいのかね?
それと、実行されている環境のバイトオーダーを知る方法は?

知ってる人はココに書きなさいね。
213_gunzip:01/09/13 05:59 ID:???
#!/usr/bin/perl -w

use Inline C;

our @filesystems = ("/dev/sda1", "/dev/fd0", "/dev/cdrom");

foreach my $fs (@filesystems){
    print "$fs: ", is_mounted($fs) ? "mounted\n" : "not mounted\n";
}

__END__
__C__
#include <mntent.h>

#define TABLE_FILE "/etc/mtab"

int is_mounted(char *fsname)
{
    FILE *fp;
    struct mntent *ent;

    if((fp = setmntent(TABLE_FILE, "r")) == NULL)
        return -1; /* error */

     while((ent = getmntent(fp)) != NULL){
        if( !strcmp(ent->mnt_fsname, fsname) )
             return 1; /* found */
     }

    endmntent(fp);
    return 0; /* not found */
}
214_gunzip:01/09/13 06:03 ID:???
#!/usr/bin/perl

use Inline C;

sub is_little_endian2()
{
    return pack("I", 1) eq pack("V", 1);
}

sub is_little_endian3()
{
    return vec(pack("I", 1), 0, 1);
}

__END__
__C__

int is_little_endian1()
{
    union {
        int val;
        char byte[sizeof(int)];
    } u;
    u.val = 1;
    return u.byte[0] == 1;
}
215超初心者:01/09/13 06:04 ID:???
-eでいいんじゃねーの?

unpack('s', pack('n',1));
戻り値で判断
216_gunzip:01/09/13 06:13 ID:???
せっかくなのでInlineモジュール使ってみました。

#このスレッドに書き込むのも久しぶりな気がする...。
#いつの間にか書き込み200を越えていて嬉しひ。
217名無しさん@お腹いっぱい。:01/09/13 09:16 ID:FCaipOx6
NFSかどうかを知るにはどうすればいいんですか?
flockが使えないなら、自動的に他のロックを使いたいのです。
218名無しさん@お腹いっぱい。:01/09/13 12:59 ID:skA46.9M
>>217
/etc/mtabの中をみて、マウントタイプ判断すればいいんじゃない?
うちの環境になぜか入っていた Quota モジュールを使う手も。

use Quota;
print is_nfs(/home2/john/path) ? 'Danger!' : 'Safe';

sub is_nfs {
  my $path = shift;
  my $is_nfs = 0;
  Quota::setmntent();
  while (my @mntent=Quota::getmntent()) {
    if( $path ~= /^$mntent[1]/ and $mntent[2] eq 'nfs'){
      $is_nfs = 1;
      last;
    }
  }
  Quota::endmntent();
  return $is_nfs;
}

flockが使えないファイルシステムは他にもあるでしょうから、
もっと調べないとダメだと思いますけどね。
CfgTie::TieMTab っていうモジュール使うと便利かも。
219218:01/09/13 13:03 ID:???
あ、is_nfs('/home2/john/path') ね、言うまでもないけど。
220_gunzip:01/09/13 15:42 ID:???
お、Quotaという便利なモジュールがあるんですね。勉強になります。

ちなみに、マウントされたファイルシステムのタイプ(nfs, ext2, msdos, etc...)を取得するには
mntent構造体のmnt_typeメンバを調べるだけでおっけいです。

--> getmntent(3), fstab(5)
#213のは、見つかった場合endmntent(FILE *)を呼ぶのを忘れてる...。
221名無しさん@お腹いっぱい。:01/09/13 16:18 ID:???
>>217 eval使って返値でチェックしたら?
222JAPU@会社作ったにょ:01/09/13 16:47 ID:???
NFSでも、flockは成功するにょ。
ただ、NFS だとうまくロック出来ない場合がある... らしい。

# 何種類佳乃組合わせでためしたけど、全部成功したので "らしい" としか...
223217:01/09/14 13:09 ID:???
みなさんどうも。

eval { flock(STDIN) };
if ($@) {
 # my_flock
}
elsif (is_nfs("mypath/mylockfile") {
 # my_flock
}
else {
 # flock
}

てな具合でいきたいと思います。

>>222
># 何種類佳乃組合わせでためしたけど、全部成功したので "らしい" としか...
成功したっていうのは吐いた制御がちゃんとできているってことですか?
# 自分も実験できる環境がないので "らしい" でしかないんですよね。
224名無しさん@お腹いっぱい。:01/09/14 13:22 ID:???
flock(STDIN)は常にdieすると思うのだがどうかな?
225名無しさん@お腹いっぱい。:01/09/14 13:27 ID:???
218の is_nfs に相対パスを渡しても、うまくいかないと思う。
226名無しさん@お腹いっぱい。:01/09/14 17:56 ID:???
あたりまえ。
227226:01/09/14 18:07 ID:???
すまん。マジ誤爆。
228名無しさん@お腹いっぱい。:01/09/14 23:38 ID:???
>>222
美凪組み合わせだとどうですか?
229217:01/09/15 01:07 ID:???
修行のためCPANのLock関連のモジュールあさってたけど、
NFSの自動判別とかしないでユーザに指定させるか、
flockは完全に無視して独自ロックだけをつかう方法が多かった
前者がLockFile::Simple、後者がFile::FlockDir、File::NFSLock

厨房は厨房らしく自動判別はやめて、ぬるく逝こうと思う。
230PerlHacker:01/09/19 05:33 ID:???
ここにはすごそうな人が多そうなのでここで聞きます。
ページを見ている人のパソコンのCD-ROMを排出させる方法をCGIでやるやり方を教えてください!!!!
ネットを探しまわったのですが見つかりませんでした。
231名無しさん@お腹いっぱい。:01/09/19 05:45 ID:???
>>230
そいつの家まで逝って、手動で開けてやれ。
232_gunzip:01/09/19 05:52 ID:???
>>230
いやはや迷惑な話で...。
233_gunzip:01/09/19 06:07 ID:???
真面目な話、PerlからCD-ROMをイジェクトさせるには(Linuxの場合)
まず/dev/cdromをアンマウントし、(面倒くさければsystem("umount /mnt/cdrom")とか。)
<linux/cdrom.h>で定義されているCDROMEJECTをioctl(2)に渡してやれば良い。

use Fcntl;
require 'linux/cdrom.ph';
sysopen(CDROM, "/dev/cdrom", O_RDONLY|O_NONBLOCK);
$status = ioctl(CDROM, CDROMEJECT);

のような感じ。(無論、これでは動かないが)

#'linux/cdrom.ph'は<linux/cdrom.h>をh2phで変換
234_gunzip@Scheme初心者:01/09/19 06:23 ID:???
/dev/audioサウンドデバイスにmu-Lawで書き出して音を鳴らすとか、Perlで無茶をすることは十分可能だろうけど、実験する時間がないなあ。
235PerlHacker:01/09/19 07:05 ID:???
全然分かりません!!!!!
教えてください!!!!!
236PerlHacker:01/09/19 07:08 ID:???
優しい方DOSプロンプトの使い方も教えてください!!!
237名無しさん@お腹いっぱい。:01/09/19 07:09 ID:???
CGIじゃ出来ません!!!!!!
Activeでも勉強して下さい!!!!!
ついでに首括って芯で下さい!!!!!!!!!!
238PerlHacker:01/09/19 07:12 ID:???
Activeって何ですか!!!!
239PerlHacker:01/09/19 07:13 ID:???
帰ってくるまでに教えてくださいね。
よろしくお願いします!!!
240名無しさん@お腹いっぱい。:01/09/19 07:14 ID:???
http://www.microsoft.com/japan/developer/VSTUDIO/download/sp/full.htm
これを全部落してインストールする

リモートデバイスマネージャ(RDM)のヘルプを良く読む

RDMサンプルスクリプトが付いてるからそれを試してみる

(゚Д゚)ウマー
241名無しさん@お腹いっぱい。:01/09/19 08:53 ID:???
馬鹿の相手するなよ・・・。
242名無しさん@お腹いっぱい。:01/09/19 14:11 ID:???
というわけで話題提供でもしてみる。

誰かXML::RSS使ってる人いますかね?
自分のサイトでRSS使って更新情報吐き出そうと思っているのですが。
使い方教えれってんじゃないよ(w
243名無しさん@お腹いっぱい。:01/09/19 17:33 ID:???
Perlとcurses使った簡単なキャラクタベースのプログラム作ってるけど、
窓のサイズを途中で変更されると表示が変になったり、全く何も描画されなくなったり。
そこで質問なのだが、窓のサイズが変更されたことを知るにはどうすればいい?
244243:01/09/19 17:35 ID:???
なるべく、変更されてすぐがいいな...。
245_gunzip@Scheme初心者:01/09/19 17:52 ID:???
>>243-244
UNIX BSD4.3,SVR4から追加されたシグナルSIGWINCHを使えばいい。
端末サイズの変更の際にカーネルから送られてくるから、適切なハンドラでもって応えてやればいい。(デフォルトでは'IGNORE'になっている)
246_gunzip:01/09/19 18:21 ID:???
247243:01/09/19 20:06 ID:???
>>245
Thanks!
248名無しさん@お腹いっぱい。:01/09/20 22:53 ID:BGTtPH/k
ディレクトリ内のすべてのファイル中の\r\nを\nにしたくて

#!/bin/sh
OLD=$1
NEW=$2
shift ; shift
for file in $*
do
sed "s/$OLD/$NEW/g ${file} > ${file}.tmp
mv ${file}.tmp ${file}
done

をhage.shとして
$ ./hage.sh \r\n \n *
を実行したのですが、\r\nのままです。どこが変なのでしょうか?
249名無しさん@お腹いっぱい。:01/09/20 23:01 ID:???
なぜPerlスレにこんな話題が出るのか分からない。
>>248いい子だからUNIX板に池。
250248:01/09/20 23:04 ID:BGTtPH/k
しかられたので少し訂正します

#!/bin/sh
OLD=$1
NEW=$2
shift ; shift
for file in $*
do
perl -pe "s/$OLD/$NEW/g" ${file} > ${file}.tmp
mv ${file}.tmp ${file}
done

をhage.shとして
$ ./hage.sh \r\n \n *
を実行したのですが、\r\nのままです。どこが変なのでしょうか?

これならここでいいでしょ?
251名無しさん@お腹いっぱい。:01/09/20 23:22 ID:???
何故
perl -i.bak -pe s/\r\n/\n/ *
ではイカンのか。
252_gunzip:01/09/20 23:23 ID:???
\r\n \n -> \\r\\n \\n
253名無しさん@お腹いっぱい。:01/09/20 23:23 ID:???
>>250
echo "\r\n"
254>250:01/09/21 03:00 ID:???
255名無しさん@お腹いっぱい。:01/09/21 08:12 ID:???
XML::RSSはXMLスレに書いたほうが良かったかね。
256名無しさん@お腹いっぱい。:01/09/21 10:27 ID:eCUa7iH.
>>255
オレ使ってるよ。とか言ったとしてどうなるのよ?
257名無しさん@お腹いっぱい。:01/09/21 10:49 ID:???
>>256
そこから話が盛り上がる可能性に期待して、とか?
258_gunzip:01/09/25 04:46 ID:???
C++で書かれたGUIツールキットwxWindowsのPerlインターフェイスがリリースされていますね。
http://www.perl.com/pub/a/2001/09/12/wxtutorial1.html

wxWindows
http://www.wxwindows.org/

wxWindows-Perl
http://wxperl.sourceforge.net/
2591:01/09/25 05:00 ID:7Zufx8jA
これカキコしてる奴誰だよ!↓
http://members.tripod.co.jp/bingo852/
260_gunzip:01/09/25 05:35 ID:???
手元のVineLinux2.1.5に wxWindows 2.2.7 for GTK+と Wx-Perlをsource rpmからビルドしてインストールし、幾つかテストスクリプトを走らせてみましたが、特に問題なく快適に動いてますね。
また、特に何も手を加えずに日本語の表示も可能ですね。

Windows用バイナリPPMパッケージも用意されていますから、Windows環境でActivePerlを利用している人も簡単にインストールできると思うので試して欲しいなあ、と思ふ。(wxWindowsを入れる必要があるかも。)

------
wxGTKWindows
    http://prdownloads.sourceforge.net/wxwindows/wxGTK-2.2.7-0.src.rpm

wxWindows-Perl
    http://prdownloads.sourceforge.net/wxperl/perl-Wx-0.07-1.src.rpm
------
wxWindows for MS Windows
    http://www.wxwindows.org/dl_msw2.htm

    wxPerl for ActivePerlhttp://prdownloads.sourceforge.net/wxperl/Wx-0.07-win32.zip
261Perlあまちゅあ:01/09/27 15:04 ID:n78xCnwc
すいません、コマンドラインで<STDIN>時に「キーボードから入力する文字数」を制限するのは、
どうすれば良いのでしょう?

(例えば、コマンドラインで、パスワードを入力するときに、8文字なら8文字と決まっていて、
9文字目は入力しても、画面には表示されない。)

OS非依存が良いのですが、依存せざるを得ないのであれば、Win依存でお願いします。
(キーが押されたってことを検出できれば、それをループでまわせるとは思うんですが、
 C言語のgetche や kbhitに相当するPerl関数がわからないんです。。とほほ。。。。)

厨な質問ですみません。(板違いなら、さらにごめんなさい)
262名無しさん@お腹いっぱい。:01/09/27 15:46 ID:WzgjwwkM
>>260
以前、Windows ActivePerl に入れてみたら日本語が表示できなくて
いろいろ情報探したら、「マルチバイトに対応する予定はない」って
いうMLの記事を見つけたんであきらめたんですけど、表示できるのかぁ。
またちょっと試してみようかな。
263名無しさん@お腹いっぱい。:01/09/27 20:08 ID:OLVunqio
>>261
ないんじゃないか?
俺が知らないだけかも。
でもgetcheもkbhitもDOSやWindowsプラットホーム固有の関数だから
マルチプラットホームなPerlには実装されてないんじゃないかと思われ
264[perl:2228]:01/09/27 21:41 ID:???
Windows2000,Perl6を使用。

<STDIN>を使ってコマンドプロトコルから
入力した値をスカラー変数代入する処理で
プロトコルからの入力で、
何バイトまでしか入力ができない・・
っという風にしたいのですが、可能なのでしょうか?

もし可能であれば教えて頂きたいのですが。
265_gunzip:01/09/27 21:46 ID:???
>>261

1.Term::ReadKeyモジュールのReadKey()関数を利用する。
2.Cursesライブラリのgetnstr()を使って入力文字数を制限するか、
またはgetch()で必要なだけ読み込む。
の二つの方法があります。例を挙げるなら、

---readkey.pl----

#!/usr/bin/perl -w

use strict;
use Term::ReadKey;
use constant PASSWD_MAX => 8;

ReadMode 4;

our $input = "";

foreach(1..PASSWD_MAX){
my $ch;
1 while (!defined($ch = ReadKey(-1)));
last if $ch eq "\n";
$input .= $ch;
}

ReadMode 0;

print "your password is $input\n";
266_gunzip:01/09/27 21:50 ID:???
お、インデントが...。
--- curses.pl ----

#!/usr/bin/perl -w

use strict;
use Curses;
use constant TRUE => 1 == 1;
use constant FALSE => !TRUE;
use constant MAX_PASSWD => 8;

sub app_init()
{
     initscr();
     keypad(stdscr, TRUE);
     cbreak();
     noecho();
}

sub app_exit()
{
     echo();
     nocbreak();
     keypad(stdscr, FALSE);
     endwin();
     exit(0);
}

sub read_passwd2()
{
     my $input = "";

     getnstr($input, MAX_PASSWD);
     printw "your password is $input\n";
     refresh();
}
267_gunzip:01/09/27 21:51 ID:???
sub read_passwd()
{
     my $count = 0;
     my $ch = "";
     my $input = "";

     while (($ch = getch()) ne "\n") {
     last if ++$count >= MAX_PASSWD;
     $input .= $ch;
     }
     printw "your password is $input\n"; # 確認。
     refresh();
}

#main

BEGIN{ app_init() }
END{ app_exit() }

read_passwd(); #read_passwd2();

sleep(2); # 確かめる暇もなく終わらないように。
268_gunzip:01/09/27 21:52 ID:???
>>264
ありゃりゃ。とんだ無駄足だったな。
いや、俺はROMだけど
良いモジュールの紹介あんがと>>_gunzip
コマンドプロトルコイイ(・∀・)!
270_gunzip:01/09/27 22:29 ID:???
>>262
まだサンプルをいじって遊んでいる程度ですが、Perl/Tk, GTK-Perlで書いたものより軽快でなかなか気に入っています。

また、ラベル、テキスト、リストボックス等の日本語表示、
kinput2経由での日本語入力についても問題ありません。
自分としては、結構使えそうだ..という感触を持っています。

もし暇があればWindows上ではどうなのか試して欲しいですー。
#今Windowsパーティションが逝っているので試せない...。
>>269
どうもです。Curses使うならCurses::Form, Curses::Widget,Cdkも入れておくと、驚くほどいろんなことができますよー。
(ついてくるサンプルをいじるだけでもいろいろ楽しめるはず)
今は亡き啓学出版からCurses本(for C)も出てますし。
271 :01/09/28 01:17 ID:???
>>270
漏れもROMだが、勉強になった。Thanx
272261:01/09/28 03:35 ID:???
>>265-267
_gunzipさん、ありがとうございます。
(_gunzipさんの投稿は良くROMさせてもらっています。大変勉強になります)

264 の方は、もしかしたら私のところに質問投稿された方かも。。。
(Windows2000 Perl6っていう「印象的な」環境が同一なので。。。)

ありがとうございました。
273!!!!!:01/09/28 05:18 ID:???
ファイルテスト演算子ですが、あるディレクトリが存在することを確かめるには -d "directory name"と書くのと、-e "directory name" and -d "directory name" のどちらがいいですか!
あと、Perlの-Tは信頼性が低いというのは本当ですか!!
教えて下さい!!!
274?????:01/09/28 06:25 ID:???
どっちでも委員じゃないですか!opendirとかでもイイ鴨!
>本当ですか!! ←ハイ!!!
僕も厨房なんです!ゴメンナサイ!!!
275JAPU:01/09/28 07:56 ID:???
ファイルテスト演算子の -T のことかな?
Shift_JIS とか EUC-JP で書かれていると判定に失敗することも多いです。あまり当てにしない方がよいかも。
276名無しさん@お腹いっぱい。:01/09/28 14:51 ID:9NVAEcd.
tieの使い方を勉強してたらバグ(?)発見!

package AutoCount;
sub TIESCALAR { my $val = 0; bless \$val; }
sub FETCH { ${$_[0]}++; }

tie my $foo, 'AutoCount';
tie my $bar, 'AutoCount';
foreach (1..3) { print "$foo, $bar\n"; } # ←× $foo が2ずつ増加
foreach (1..3) { print " $foo, $bar\n"; } # ←○ 正常

「読み込むたびに1ずつ増える変数」を作ったつもりなんだけど、
その変数がダブルクォート文字列の先頭にあると、
なぜか2回評価されてしまうよー。文字列の先頭以外なら大丈夫。

使ってるバージョンは
This is perl, v5.6.1 built for MSWin32-x86-multi-thread
です。
277名無しさん@お腹いっぱい。:01/09/28 15:04 ID:xYFJBzyw
>>276
v5.6.0 built for i686-linux
version 5.005_03 built for i386-linux
では再現しませんでした。
v5.6.1 built for MSWin32-x86-multi-thread (ActivePerl build628)
で再現。
278名無しさん@お腹いっぱい。:01/09/28 15:22 ID:8UXDD7TM
ボイスチャットのようなものを作りたいと思っているのですが、
恐らく探し方が悪いのだとは思いますが、cpanで探しても、
良さそうなモジュールが見つかりませんでした。

・チャットサーバー
・チャットクライアント
の両方を作りたいと思っています。
マイクから音声を入力して、
サーバーを通してクライアントソフトを立ち上げている方々に
リアルタイムで音声を送れるようなものです。

・マイクからの入力を受け取る方法。
・音声をネットを通して送信する方法。
・受け取った音声を再生する方法。
などが知りたいです。
279278:01/09/28 15:25 ID:8UXDD7TM
どなたか上記の事を出来る方法やモジュールなどを教えてください。
280276:01/09/28 16:25 ID:???
>>277
検証どもども。うちは同じWin版のver5.6.1のbuild626でした。
ActivePerlのバグか、5.6.0=>5.6.1でエンバグしたか。

さっきActiveState.comのサイトにいって
バグレポート出そうかと思ったんだけど、このバグが既知かどうか
確認できなかった。英語に弱いのよね俺。。。
281名無しさん@お腹いっぱい。:01/09/28 17:01 ID:aDO6qmS2
>>280
既知か否かは知らないけど、ActivePerl固有の問題ではなくて5.6.1全般の問題みたいよ。
Solaris2.6でmakeした5.6.1でも同じ挙動
282_gunzip:01/09/28 17:56 ID:???
Perl5.7.2(開発バージョン)では正常に動作しますよい。
283_gunzip:01/09/28 18:24 ID:???
>273を見て思い出したけれど、ファイルテスト演算子のうち、
stat(2)を内部で利用するものは三種類の値を返します。

PL_sv_yes ("1"\0): テストが成功の場合
PL_sv_no (""\0): テストが失敗の場合
PL_sv_undef(SV): stat(2)システムコールがエラー(-1)を返した場合

ですから、
-------ftest.pl----------
#!/usr/bin/perl

use strict;

test(q| -d "/etc/passwd" |);
test(q| -d "/etc/file_not_exists" |);
test(q| -d "/usr/local" |);

sub test
{
    my $test = shift;
     my $result = eval $test;

     if($result){
         print "$test: true\n";
     }elsif(defined($result)){
         print "$test: false, but defined\n";
     }else{
         print "$test: false, not defined\n";
     }
}
284_gunzip:01/09/28 18:31 ID:???
結果は、
-d "/etc/passwd" : false, but defined
-d "/etc/file_not_exists" : false, not defined
-d "/usr/local" : true
となります。(....まあ、細かい話だけど)
>>273
>Perlの-Tは信頼性が低いというのは本当ですか!!
ファイルテスト-Tは、指定されたファイルから最大512バイト読み込み、制御文字などの出現数をカウントし、それらが全体の1/3にとどまっていればテキストファイルと判断します。
ですから、日本語のファイルに対して誤判定することは十分あり得ます。(utf8は考慮するようですが)
285age:01/09/28 21:17 ID:???
age
286名無しさん@お腹いっぱい。:01/09/28 23:09 ID:vu/QVpKY
>>284
日本語ファイル食わせるときには、euc-jpにしておいたら
いいのでは?
287名無しさん@お腹いっぱい。:01/09/28 23:25 ID:???
>>286
EUC-JPのファイルはたいていバイナリと判定されたぞ。経験上。
JISコード(iso-2022-jp)のほうがテキストと判定されやすいような。
WASPにとっては2バイト文字なんてバイナリと一緒だからそれで良いのです (泣
289名無しさん@お腹いっぱい。:01/09/29 01:05 ID:???
>>283
そゆのって、どこに載ってるの?
290名無しさん@お腹いっぱい。:01/09/29 06:04 ID:n1e2AO4Y
最初の512バイトを見て
* MSBが立っている (文字コードが 0x80 以上) バイト数
* 文字コードが 0x20 未満 かつ "\r\n\b\t\f\e" 以外
の合計文字数が全体の 1/3 を越えたらバイナリと判定されますにゃ。
ただし、途中で \0 (NUL) が見つかったらバイナリ扱い。
というわけで、ISO-2022-JP だと安全です。

>>289 具体的には pp_sys.c を見てください。
マニュアルに載っていたかもしれないけど、探すの面倒。B-)
291JAPU:01/09/29 07:09 ID:???
あ、しまった。サーバ変わっていたから名無しになってしまった。

> >>289 具体的には pp_sys.c を見てください。
は誤爆です。失礼。
292名無しさん@お腹いっぱい。:01/09/29 10:26 ID:???
??????????????????????????????
?どれくらいの事ができたら「脱初心者」といえるのでしょうか?
??????????????????????????????
293名無しさん@お腹いっぱい。:01/09/29 10:42 ID:???
黙ってコード書きなさい。
294名無しさん@お腹いっぱい。:01/09/29 10:43 ID:???
??????????????????????????
?どれくらいの事ができたら「脱初心者」といえるのでしょうか?
??????????????????????????
295るいるいるい:01/09/29 12:45 ID:???
マジレスお願いします!!!!!!!!!!!!!!!!!!!!!!!!!!1
296ああああああああああああ:01/09/29 13:23 ID:???
初心者ばっかりですかココは?
??????????????????????????
?どれくらいの事ができたら「上級者」といえるのでしょうか?
??????????????????????????
298名無しさん@お腹いっぱい。:01/09/29 14:18 ID:???
教えて!
299名無しさん@お腹いっぱい。:01/09/29 15:23 ID:???
>>お馬鹿さん
あのねぇ、この板は人少ないから何か書いたからって2.3分でガリガリレス
付かないの、何回も同じ事書かないでくれるかな?
Perlコミュニティーに貢献出来ればもう初心者では無いでしょう、それはモジュールの
提供とかでも良いし、BBSで誰かの質問に答えてあげる事でも良い、
質問する側であったとしても、その問題の展開と結果を書くことが出来れば
それは後に続く人にとって役立つかも知れない。
「ああ、ネットが有るから助かってるなー、本だけじゃもっと手間取ってただろな・・」
こんな風に感じる時がきっとある筈、
つまり、
「ちょうだい!!!」「おしえて!!!」「はやくしてください!!!」
「??????」
こう言う人と正反対の行動をとれば良いんです。 解りやすいですね?
300  :01/09/29 18:57 ID:???
マジレスすんな、アホは放置しようぜ。
結局まともに文章かけないんだよこの手の輩は
301Perlあまちゅあ:01/09/29 20:23 ID:9wErUD8Y
ちょとカテゴリ違いか(プログラム版の画像処理系のほうが良い?)とも
思ったのですが、こちらの方に質問させてもらいます。

文章でいうよりも、見ていただいたほうが話が早いと思うのですが、
例えば、「とほほ」氏のページをGOOで検索しますと、

http://search.goo.ne.jp/search/search.jsp?MT=%A4%C8%A4%DB%A4%DB&SM=MC&DC=10&FR=1&IM=1&BOPE=88&LEVEL=8

となります。ページをよくみると、それぞれのWEBの小さなスクリーンショットがあります。

ロボット自動巡回時(もしくは巡回で集めてきたサイト)を自動でスクリーン
ショットで撮っていると思うのですが、こういうのってどのようにやるのでしょう?

スクリプトで、URL を Netscape などに投げて、それをImageMagickで
加工すれば何とかなる気がするのですが、それでは、常時Xを立ち上げている
必要があり、WEB上で使うには今一つです。(というか普通ほとんどのサーバは
Xは立ち上がってないので。。。)

何か視点を切り替えて、Perlでこう言う風にすればああいうのが実現できるのでは?
というのがあれば、アドバイスいただきたいです。
よろしくお願いします。
302名無しさん@お腹いっぱい。:01/09/30 00:15 ID:???
>>301
wget で画像を DL したら Perl の ImageMagick モジュールか GD モジュールで縮小。
X 使わなくても全てスクリプトの中だけで済む。
303名無しさん@お腹いっぱい。:01/09/30 00:18 ID:???
>>302
ネタか?
304名無しさん@お腹いっぱい。:01/09/30 03:41 ID:???
>>301
mozillaのレイアウトエンジンでGeckoってのがあると聞いたけど
あれはPerlから呼び出したりできないのかなー。

#mozilla.orgのGeckoのページ見てみたけど全然わからず。
305_gunzip@寝よう:01/09/30 05:21 ID:???
ううん。不可能ではないだろうね。
ImageMagickの'convert'コマンドはHTMLファイルを読み込んで任意の画像フォーマットに
変換できる。その際サイズ指定でもしてやればいいのではないかな。
...とはいえ、かなり重たい処理ではあるね。しかもレイアウトは(?)
詳しくはman convertかな。
むかし、こんなソフトもあったなぁ。
http://www.vector.co.jp/magazine/softnews/990225/n9902255.html
-------
ちなみに、html2ps(HTML->PostScript/Perl)を介して変換するのもいいかな。
http://www.tdb.uu.se/~jan/html2ps.html

# ....ただ単にスクリーンショットを取るならxwd, ImageMagickのimportコマンド
# で十分なのだが。...Xを起動せずに、か。
306_gunzip:01/09/30 14:50 ID:???
Windows上ではwxWindows-Perl日本語表示無理っぽいね。

#...ていうか、SetFontFace()無視されてるような。
307名無しさん@お腹いっぱい。:01/09/30 14:53 ID:PUFRmjNw
Perlから直接システムコールの呼び出し方覚えて、猿のようにつかってる
syscall.ph をreqireして、引数をpackして、
SYS_hogehoge
とかやってるけど、凄く便利
Posixモジュールつかってもいいんだけど、それには存在しない
システムコールもあるんで、
Perlのプログラミングには必須だね
308名無しさん@お腹いっぱい。:01/09/30 15:14 ID:???
>>305
ImageMagickスゲー。そんな機能もあったんですか。
>...とはいえ、かなり重たい処理ではあるね。しかもレイアウトは(?)
この部分が気になるけど(w

でも実際、HTMLもXHTMLもJavaScriptも自力ですべて解釈して
ちゃんとレイアウトするってのは、もはや一大プロジェクトが
必要でしょうなあ。
305のベクタにあるやつはIEコンポーネント使ってんのかな?
309262:01/09/30 15:45 ID:FsOWX/IM
>>306
一応、メニューとかステータスバーは大丈夫なんだけど、
その他はダメっぽいですね。日本語さえ何とかなればすごく面白そうなのに・・・
http://lists.wxwindows.org/pipermail/wx-users/2000-June/002733.html
中心人物はほとんどマルチバイトに関する知識がないっぽいですね。
310301:01/09/30 16:56 ID:hjeInKdw
>>302-305 >>308

皆さんいろいろなご意見ありがとうございます。とても勉強になります。
302 さん、 305の_gunzip さんのご意見を参考にして、さらにトライ
してみようと思います。
 良い結果が出たらご報告させていただきます。

他にも何か良い案など、思いついたことなどありましたら、
随時、アドバイスを下さい。
311名無しさん@お腹いっぱい。:01/09/30 23:10 ID:???
「Perl中級コーナー」に比べて頑張るね。このスレ。
312_gunzip:01/10/02 17:23 ID:???
>>309
ありゃりゃ。残念。開発者側にマルチバイト対応を期待するのはちょっと無理なようですね。

ところで、今日立ち読みした「Linuxデベロッパーズバイブル」のPart3「Xプログラミング」で
60ページほど割いてGtk-Perlの利用例が解説されていますね。これを機に利用者が増えるといいのですが。

#そういえば、Gtk-Perlのチュートリアル/リファレンスの日本語訳途中までやってほったらかしにしてたな...。
313_gunzip:01/10/02 17:27 ID:???
wxWindows->C++ から思い出しましたが、C++からPerlライクな文字列操作を行うための
STLクラスPerlStringなんかも有りますよん。
http://www.youell.com/matt/perlstring/
314名無しさん@お腹いっぱい。:01/10/02 23:19 ID:???
>>313
標準stringクラスに軽くラッパかませただけじゃないすかー。
でも、To-Do Listに
- Regular Expression support.
と書いてますね。それやってくれたらまじ大喜びです。
#似たようなことやろうとしたけど知力気力不足で挫折
315_gunzip:01/10/03 01:39 ID:???
>>314
うわ、申し訳なひ。「こんなものがあるんだなー」って中身を見ずに張ってもた。
今度から気をつけます...。

ちなみに、自分がC言語から正規表現を扱うときは、
---------------------------------------------------
PCRE - Perl Compatible Regular Expressions
http://www.pcre.org/
---------------------------------------------------を使っていますよい。ちょっと例を挙げると、htmlファイルから<a href="...">のリンクを抽出したいな、というとき、Perlでは、

perl -ne "/<a[^>]+?href\s*=\s*[\"']?([^\"' >]+?)[\"']?>/ and print qq|\$1\n|" < hoge.html
のように書きますが、PCREを利用してC言語で書くと、
316_gunzip:01/10/03 01:41 ID:???
/* Galeonって書き込みにくいな...。*/

#include <stdio.h>
#include <stdlib.h>
#include <pcre.h>

#define BUFSIZE 1024 * 8

/*
* cc -Wall -ansi -o exturl exturl.c -lpcre
*/

static const char *pattern = "<a[^>]+?href\\s*=\\s*[\"']?([^\"' >]+?)[\"']?>";

int main(void)
{
    pcre *regex;
    int *ovec, ovec_size;
    int i;
    int rc;
    const char *error;
    int error_offset;
    char buf[BUFSIZE];

    if ((regex = pcre_compile(pattern,
                             PCRE_CASELESS,
                             &error,
317_gunzip:01/10/03 01:42 ID:???
                             &error_offset,
                             NULL )) == NULL) {
        fprintf(stderr, "regular expression %s\n"
                "compilation failed at offset %d: %s\n",
                pattern, error_offset, error);
        exit(EXIT_FAILURE);
    }
    pcre_fullinfo(regex, NULL, PCRE_INFO_CAPTURECOUNT, &ovec_size);
    ovec_size = (ovec_size + 1) * 3;

    while (fgets(buf, sizeof(buf), stdin) != NULL) {
        rc = pcre_exec(regex,
                     NULL,
                     buf,
318_gunzip:01/10/03 01:42 ID:???
/* 変なところで切れてるなあ */
                     strlen(buf),
                     0,
                     0,
                     ovec,
                     ovec_size);
        for (i = 1; i < rc; i++) { /* $1, $2 を表示 */
            const char *strptr;
            pcre_get_substring(buf, ovec, rc, i, &strptr);
            puts(strptr);
            pcre_free_substring(strptr);
        }
    }
    exit(EXIT_SUCCESS);
}
319名無しさん:01/10/03 01:49 ID:???
>>315-318
それって、c言語でも、ふつうに性器氷原ライブラリincludeするだけで
いいのでは?
unixだったらosについてくるし、なければ
bsd、lgpl/gpn、pdsとかであるライブラリ使えばいいだけだし
320_gunzip:01/10/03 01:57 ID:???
>>319
もちろん、<regex.h>(POSIX)をincludeしてregcomp, regexec等を利用する方法くらいは知ってますよい。他にもGPL rxとかありますし。
321名無しさん@お腹いっぱい。:01/10/03 02:26 ID:???
結局C/C++で正規表現使うにはどれが好みかって問題でしょうね。
自分もこれから勉強してみたいんだけど、
pcreとregexってどっちを最初に体験するのがいいんでしょ。
それと、上の2つは実行時に動的に正規表現を展開するようだけど、
flexみたいに正規表現をCのソースに変換するタイプも
いいかなと思ってたり。

#なんかPerlの話からずれまくりsage
322名無しさん@お腹いっぱい。:01/10/03 03:17 ID:wb1t8L8o
Perlをコマンドプロンプトから使う方法を教えて!
323名無しさん@お腹いっぱい。:01/10/03 03:25 ID:wb1t8L8o
沿い得て!
沿い得て!
沿い得て!
沿い得て!
沿い得て!
沿い得て!
沿い得て!
324名無しさん@お腹いっぱい。:01/10/03 03:32 ID:Vd5CqKFk
PERLに関係ないのだが、319のレスをかちゅーしゃで見て、
びっくりした。
325名無しさん@お腹いっぱい。:01/10/03 04:37 ID:???
Math::BitInt てやつを使ってみた。これ便利だねえ。
ためしに作った多倍長計算機↓

use strict;
use Math::BigInt(':constant');
my $a = "式を入力すると計算します";
while (1) {
print "$a\n> ";
eval '$a=' . scalar(<>);
if ($@) { ($a = $@) =~ s/ in use at.*//s }
}

同じようなことをMath::BigFloatでやるのは無理?
326名無しさん@お腹いっぱい。:01/10/03 05:13 ID:wb1t8L8o
おしえて!!!!!
327名無しさん@お腹いっぱい。:01/10/03 05:15 ID:wb1t8L8o
!!!!!!!!!!!!!!
3281:01/10/03 05:17 ID:7eUT1aME
329名無しさん@お腹いっぱい。:01/10/03 06:46 ID:wb1t8L8o
マジで教えて!!!!!!!!!!!
330名無しさん@お腹いっぱい。:01/10/03 06:46 ID:wb1t8L8o
お願いします!
331名無しさん@お腹いっぱい。:01/10/03 07:09 ID:wb1t8L8o
どうして教えてくれ何丘教えてください!!!!!
332名無しさん@お腹いっぱい。:01/10/03 07:41 ID:???
>wb1t8L8o
環境くらい書けや。
333名無しさん@お腹いっぱい。:01/10/03 11:37 ID:???
>>332
電波は放置でお願いします。
334>>319:01/10/07 18:14 ID:???
性器氷原。。。
まさか一発変換できたんじゃないだろうね・・・
335名無しさん:01/10/07 21:25 ID:???
>>334
うちは、一発目で、「生気氷原」になったよ
336名無しさん@お腹いっぱい。:01/10/08 02:29 ID:???
このスレッド終わったの?
337(´Д`):01/10/08 21:54 ID:m2.b6EVc
perlのスクリプトを実行形式にコンパイルして
cでいうscanfみたいの使いたいんですが、
どうやらそれに相当するのはperlには無いらしいのです。
そこでその役割を果たすものを実装するらしいのですが
わけわかりません。
どうすれば良いのでしょうか?
338名無しさん@お腹いっぱい。:01/10/08 22:22 ID:???
perl2exe
339(´Д`):01/10/08 22:42 ID:???
>338
いやすみません。文章が悪かったです。
perl2exe使って実行形式にして使ってるんですが
scanfみたいので変数に値をその時々で与えたいんです。
けどscanfみたい関数が無いらしいのです。
どすれば良いでしょうか?
340名無しさん@お腹いっぱい。:01/10/09 00:22 ID:???
$data = <STDIN>;
341名無しさん@お腹いっぱい。:01/10/09 00:35 ID:???
>>340
馬鹿ですか?
342名無しさん@お腹いっぱい。:01/10/09 02:02 ID:???
>339
print '名字を入力してください:';
chomp($name1 = <STDIN>);
print '名前を入力してください:';
chomp($name2 = <STDIN>);
print "こんにちは,$name1$name2さん";
これでいかない?
343(´Д`):01/10/09 02:34 ID:???
試したらできました!!
ありがとうございます。
scanfそのものに感じるけど
↓MLより引用
> scanfはパールではどのように記述するのでしょうか?
相当するものはありません。scanfのperl版を実装する必要があります。

これはどういう事だったんだろ?
344(´Д`):01/10/09 02:37 ID:???
追記です。
cgiとして実行したらどうなんのかな?
と思って試したらやっぱり500エラーになるんですね。
勉強になるです。
345名無しさん:01/10/09 02:52 ID:???
scanfは入力を指定した書式に則ったものとみなして読むので
そのものではないってことなんじゃないの。
printfの入力版見たいな感じのもので。
scanf自体殆ど使わないのでよくわからんけど。
346名無しさん@お腹いっぱい。:01/10/09 02:57 ID:???
sprintfとか使えば実装できそうだね。
347名無しさん@お腹いっぱい。:01/10/09 02:59 ID:???
難しい事言うから型決めたいのかと思ったー
その辺は関係ないのかな?
348名無しさん@Windowser:01/10/09 11:19 ID:???
CAPNにscanfを実装したモジュールがあった気がした。
goto search.cpan.org;
349名無しさん@お腹いっぱい。:01/10/09 12:01 ID:o6HwRMHE
search.cpan.orgは行けるんだけど
モジュール取ってこれない・・・。
www.cpan.orgのほう、いまサーバ落ちてます?
350名無しさん@お腹いっぱい。:01/10/09 13:06 ID:???
型ってなんでしょ?
351名無しさん@お腹いっぱい。:01/10/09 14:25 ID:???
>>350
他の言語触れ  w
352名無しさん@お腹いっぱい。:01/10/09 15:59 ID:???
最近www.cpan.orgはよく落ちてる気がするぞ。
353名無しさん@お腹いっぱい。:01/10/09 16:34 ID:???
require ってプログラム開始時に全部ファイルから読まれるの?
それとも、その地点まで実行されて初めて読まれるの?
354名無しさん@お腹いっぱい。:01/10/09 16:51 ID:???
>その地点まで実行されて初めて読まれるの?

たしかこっちが正解。
355名無しさん@MZ-2000:01/10/09 17:20 ID:khTqWun.
そそ。 だから

if ($expression) require 'jcode.pl';

とかもできる。
356名無しさん@お腹いっぱい。:01/10/09 17:34 ID:???
Dispmes('Jcode.plを入れてくださぃ') unless(require './jcode.pl');
何故かわざわざjcode捨てて設置する困ったちゃん対策
357名無しさん@お腹いっぱい。:01/10/09 17:40 ID:???
>>355-356
待て待て、二人ともそれじゃダメだって!

>>355
require 'jcode.pl' if $expression;

>>356
Dispmes('jcode.plを入れてください') unless eval{ require 'jcode.pl' };
358356 :01/10/09 17:50 ID:???
>>357
ほんとだぁ、真しかテストしてなかた   ハズカチィ(´Д`;) アヒャー
困ったちゃんは俺じゃん・・・・  
ありがとう>>357
359名無しさん@MZ-2000:01/10/09 18:22 ID:???
おーう。 ご指摘感謝
360名無しさん@お腹いっぱい。:01/10/12 08:48 ID:6IAcQL0k
Perl/TKをWindowsで使う場合、日本語対応パッチを当てたいのですが、
Win32版のパッチの当て方が分かりません。
UNIX版のパッチの当て方しか見当たらないのですが、もしかしてWin32では
日本語使用不可ですか?
361名無しさん@お腹いっぱい。:01/10/12 14:06 ID:3886ncd2
面白い話ハケン
http://www.mikeneko.ne.jp/~lab/perl/tuning/
こういう内部的なことを書いた日本語の文書ってあまり見ませんよね。
_gzipさんやJAPUさんあたり、暇な時に書いてくれないかなぁ。
自分も英語とCのソースが読めれば良いんだが…ドッチモダメナンデスヨ。
えーと誤解されているようですが、私はそんなに内部に詳しくありません。
たまに必要に迫られてソースを参照しますが、この手の解説は多分できません。

# JAPUTeX. ってトリップも捨てがたいな。
363名無しさん@お腹いっぱい。:01/10/12 17:34 ID:???
_gunzipたんカムバックきぼん
364名無しさん@お腹いっぱい。:01/10/12 21:49 ID:???
>>362
そうなんですか。失礼しました。
ヘタレの私には「ソースを参照できるレベル」の方々はみな同じに見えてしまうのです(笑
365名無しさん@お腹いっぱい。:01/10/14 07:12 ID:RJZp9XsP
やっと・・・、ベータながら5.6.1ベースのMacPerlがリリースされてます。
MacPerl 5.6.1b1
http://dev.macperl.org/
366365:01/10/14 08:57 ID:???
失礼、やっと・・・、ベータになりました。に修正。
367名無しさん@お腹いっぱい。:01/10/15 22:34 ID:???
>>361
gunzipさんが好きそうな話題ねん。
そいった蘊蓄聞きたい上げ。
368名無しさん@お腹いっぱい。:01/10/15 22:54 ID:???
Perl/Tk出来る人いる?
カスタムウィジェットの作り方知りたいのだけど。
369名無しさん@お腹いっぱい。:01/10/16 03:09 ID:4v7IUtKc
>>368
Perl/TKを使ったことのない俺が言うのもなんだが
Tk::UserGuideやTk::Widgetのドキュメントは読んだのか?
370名無しさん@お腹いっぱい。:01/10/18 12:51 ID:???
すげえ!
3-D Stereogram, Self replicating source.
http://www.perlmonks.org/index.pl?node_id=118799

変態すぎ。
371名無しさん@お腹いっぱい。:01/10/18 13:16 ID:???
>>370
何なのそれ。
372名無しさん@お腹いっぱい。:01/10/18 13:39 ID:???
ほんとビクーリしたよ。ステレオグラム。
それも自分のソース使って表示。
で、そのステレオグラムであるところのPerlソースもそのまま動く。
アホ過ぎ。
373名無しさん@お腹いっぱい。:01/10/18 13:41 ID:???
最後の4行で減点。
374名無しさん@お腹いっぱい。:01/10/19 01:06 ID:???
意味わかんねーよ。
375名無しさん@お腹いっぱい。:01/10/19 01:35 ID:JPPt49tb
>>370
すげー。すごすぎー。ソースそのままと実行後で
ステレオグラムのパターンが変わるでしょ?
それでもスクリプトがちゃんと動くのはなぜ?
セミコロンで調節してるんか?
もちろんコードを読む気はないが。
376名無しさん@お腹いっぱい。:01/10/19 01:59 ID:???
>>375
そんでもって、実行結果の出力を更に実行すると自分自身への写像になってる。
う〜む。
377名無しさん@お腹いっぱい。:01/10/19 02:12 ID:???
>>376
その2番目以降みたいな、いわゆる「不動点プログラム」なら、
まだわかるんですよー。
オリジナルと1回目の実行結果はパターンが違うけど
ソースコードはきっちり長方形に整形されてて、
それでも動作する。ほんと、よくやるよって感じ。
378名無しさん@お腹いっぱい。:01/10/19 03:15 ID:???
分かんないしソースも読めないよぅ....(+_+
monksの中彷徨ってれば何か面白いのあるかなぁ....
379名無しさん@お腹いっぱい。:01/10/24 14:12 ID:???
暇なので解析した。
意外とやってることは単純。
>>375 が言う、実行後でステレオグラムが変化するというのはどいうこと?

・実際のコードは各行の14文字目まで(15文字目は削除用の目印)
・16文字目以降は15文字目までのコピー
・DATAのステレオグラムを使ってコピーするときに少し変化を加えている
380名無しさん@お腹いっぱい。:01/10/24 14:14 ID:???
#!/usr/bin/perl
# Copyright (c) Marcus Post, <[email protected]>

use strict;

# 前準備
# 本来は DATA から読んでいるが書き換えたのでファイルから。
# という大人の理由からファイルポインタを__DATA__の次に移動しておく
open(MONKS, $ARGV[0]) or die "逝ってよし!";
1 until ($_ = <MONKS>) =~ /^_/;



# 以下、実際のコード
my(@dataAreaForWork, @codeArea, @charsOfCode);

# __DATA__以降を読み込む
my @dataArea = @dataAreaForWork = <MONKS>;

# コード部分を読みこむ
seek(MONKS, 0, 0);
@codeArea = <MONKS>;
# __DATA__以降を捨てる
until (($_ = pop(@codeArea)) =~ /^_/) {};

# '__DATA__'を追加
unshift(@dataArea, $_);

# 最初の3行(コピーライトとか)を出力
foreach (1 .. 3) {
  print shift(@codeArea);
}
381名無しさん@お腹いっぱい。:01/10/24 14:14 ID:???

foreach my $data (@dataAreaForWork) {

  my @charsOfData = split(//, $data);

  # 実際のコードは最初の14文字のみ
  # 15文字目は後で削除するときの目印 |zY!%xQ のどれか
  my $realCode = shift(@codeArea);
  $realCode =~ s/(.{15}).*/\1/;
  @charsOfCode = split(//, $realCode);

  # 最初の15文字を後ろにコピーする。
  # その際 DATA のステレオグラムを使ってちょっとランダマイズ
  # 本当は以下のようになっているので区切り文字の , を . に変換している
  #  q,コード,;
  #  # ごみの削除とか
  #  eval;
  my $i;
  foreach my $oneOrZero (@charsOfData) {
    $charsOfCode[$i + 15 - $oneOrZero] = (($charsOfCode[$i] eq ",") ? "." : $charsOfCode[$i]);
    $i++;
  }

  # 空文字はひとつ前の文字をコピー
  foreach my $i (1 .. 75) {
    if ($charsOfCode[$i] eq '') {
      $charsOfCode[$i] = $charsOfCode[$i - 1]
    }
  }

  print join("", @charsOfCode);
  print "\n";
}

print @dataArea;
382Perl上級者:01/10/26 16:02 ID:???
何でも聞け。
383名無しさん@お腹いっぱい。:01/10/26 16:28 ID:???
$fooRef = \$foo;

*fooGlob = *foo;
の違いを教えてちょ、上は$だけだ、とかじゃなくて
内部でどんな風にエイリアスされるのかが知り鯛DEATH
384名無しさん@お腹いっぱい。:01/10/26 16:30 ID:???
あ、コイツ !!!!!!!!!!連発猿じゃん  (鬱
吐き気して来た
死ね!!
385 != 382 :01/10/26 16:56 ID:???
連発猿?
386 != 384  :01/10/26 17:18 ID:???
教えてください!!!!!!!!!! ←こう言う奴だろ?
彼は、〜〜級者、と言うキーワードに酷く敏感な様子 (p   
387名無しさん@お腹いっぱい。:01/10/26 17:42 ID:???
むか〜し_gunzipさん(最近見かけないけど)が書いてた↓が参考になるかも。
http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html#825
388名無しさん@お腹いっぱい。:01/10/26 18:11 ID:???
CGI.pm使ってるのってどうなの?
389名無しさん@お腹いっぱい。:01/10/27 00:20 ID:e8mRTudG
ルーチンを関数にするののデメリットって何?
390名無しさん@お腹いっぱい。:01/10/27 01:58 ID:???
関数呼び出しは非常に時間がかかる。
391名無しさん@お腹いっぱい。:01/10/27 18:37 ID:???
ageageageage
392名無しさん@お腹いっぱい。:01/10/27 22:56 ID:???
移転age
393Perl上級車:01/10/28 18:00 ID:???
何でも聞け。
394名無しさん@お腹いっぱい。:01/10/28 18:57 ID:xDgqA1mb
タイムスタンプでソート
ってどうやってやるんですか?
395Perl上級社:01/10/28 19:03 ID:???
俺に相応しいことを聞け。
396仕様書無しさん:01/10/28 19:06 ID:???
my $name = 'tinko pinpin';
1)
if($name eq 'tinko pinpin') {
 cnt++;
}
--------と
2)
cnt++ if($name eq 'tinko pinpin');

をループさせて速度を測ったら
1)21 wallclock secs (20.95 usr + 0.01 sys = 20.96 CPU)
2)10 wallclock secs (10.23 usr + 0.00 sys = 10.23 CPU)
くらい違いますが、内部ではどのような処理の違いがあるんですか?
アホな私にも分かるように教えていただけませんでしょうか?
397Perl上級謝:01/10/28 19:09 ID:???
>>396
そんなことも分からんのか。とことん程度低いな(ワラ
398396:01/10/28 19:10 ID:???
教えて!!!!!!!!!!!!!!!!!!!!
399名無しさん@お腹いっぱい。:01/10/28 19:17 ID:???
まともなスレッドに戻れよ...。
??????????????????????????????
?どれくらいの事ができたら「脱初心者」といえるのでしょうか?
??????????????????????????????
401名無しさん@お腹いっぱい。:01/10/29 01:20 ID:???
>>396
どっかで見た質問。
402名無しさん@お腹いっぱい。:01/10/29 06:09 ID:???
面白いね
403あげ:01/10/29 16:56 ID:???
なにが?
404[:01/10/29 23:16 ID:???
なにが?
405名無しさん@お腹いっぱい。:01/10/30 17:20 ID:???
>>402
なにが?
406名無しさん@お腹いっぱい。:01/11/06 21:14 ID:0STlIz2P
関数の処理の不可に関する日本のサイトあれば教えて欲しいです。
こんな処理するならこんなコードがベストだよ。みたいのとかです。
あと前でてましたけどこんな処理をすると内部ではこんな事がおきてるよ。
とかでもうれしいです。
関数って言うと漠然としすぎだなあ
結局アルゴリズムだと思うからム技のこのスレはBMかな・・・
http://pc.2ch.net/test/read.cgi/tech/967778156/l50
後、Cだけど診断室とか
http://www.pro.or.jp/~fuji/mybooks/cdiag/

後半は俺も知らない、正規表現エンジンの実装とか知りたくも無いし (汗;
ちょっとレス違いかなあ・・・
408名無しさん@お腹いっぱい。:01/11/07 00:33 ID:???
サイトではないが

前半:
Perlクックブックを読む

後半:
ソースを読む

なんて。
409名無しさん@お腹いっぱい。:01/11/07 01:04 ID:???
だれか解説キボン
410名無しさん@お腹いっぱい。:01/11/08 17:16 ID:???
だれも分からないのかなぁ。
411名無しさん@お腹いっぱい。:01/11/09 01:43 ID:???
>>408
いやそれで正しいでしょ。
結局ソース読まないと分からないことは多いし。

ま、個々の関数の処理効率なんかよりも、
書くプログラムのアルゴリズムが最適かどうかの方が、
全体の速度にはるかに寄与する。
アルゴリズムが最適でさらに速度を求めるならインライン C で書くべし。
412名無しさん@お腹いっぱい。:01/11/09 04:22 ID:???
>>406
Perlメモ
http://www.din.or.jp/~ohzaki/perl.htm

わかりやすい Perl チューニングの話
              ミケネコ研究所
http://www.mikeneko.ne.jp/~lab/perl/tuning/

あとはログから_gunzip氏の発言拾うとか。
413名無しさん@お腹いっぱい。:01/11/10 23:53 ID:???
パールのチューンアップについてもっと知りたいです
414名無しさん@お腹いっぱい。:01/11/11 01:37 ID:???
use Benchmark;
use strict;

timethese(1, {
t1 => q{&addstr1;},
t2 => q{&addstr2;}
});

sub addstr1 {

    my($str) = '_' x 1000000;
    $str = '';

    foreach (0 .. 1000000) {
        $str .= '_';
    }

}
sub addstr2 {

    my($str) = '';

    foreach (0 .. 1000000) {
        $str .= '_';
    }

}

Benchmark: timing 1 iterations of t1, t2...
t1: 2 wallclock secs ( 1.97 usr + 0.00 sys = 1.97 CPU)
(warning: too few iterations for a reliable count)
t2: 3 wallclock secs ( 2.81 usr + 0.00 sys = 2.81 CPU)
(warning: too few iterations for a reliable count)
Cやれば良いのに (ボソッ
416名無しさん@お腹いっぱい。:01/11/11 10:25 ID:???
んな程度の差違を気にするくらいならCで書けばいいのに。
417名無しさん@お腹いっぱい。:01/11/15 11:30 ID:HBIil14t
「オブシェクト指向使えばいろいろ便利だ。」てのがよく言われてます。
掲示板程度ならオブジェクト使わないほうが効率いいんじゃないかと思うんですが,
どんな時に,どういう風に使えば便利ですか?
いいサンプルや解説ページとかあれば教えてください。
418名無しさん@お腹いっぱい。:01/11/15 11:50 ID:???
憂鬱なプログラマでも読めば、perlerならRubyやるとか
>「オブシェクト指向使えばいろいろ便利だ。」
まあこう言うのはITオヤジのレベル、オブシェクト指向で彼女は出来ないし、
オブシェクト指向で奥歯に詰まったフライドチキンのカスは取れない
419名無しさん@お腹いっぱい。:01/11/15 12:35 ID:???
>>370
何がどうすごいんだか分からないんですけど。
実行してもコードがでてくるだけだし。
420名無しさん@お腹いっぱい。:01/11/15 13:48 ID:???
>>419
平行法で見ると#!がうき出て見える。
より目(交差法)で見ると引っ込んで見える。
421名無しさん@お腹いっぱい。:01/11/15 16:56 ID:???
not 419だが

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

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

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

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

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

あとね日付のデータだけど デフォルトにマージする仕掛けも欲しいです
身近な記念日とかマージして登録できるとうれしい
458むぎ茶:01/12/03 12:43 ID:???
>>451
計算を必要とする祝日がべた書きなのがちと悲しい
ここもカスタマイズできるとうれしいなと。
459名無しさん@お腹いっぱい。:01/12/05 03:02 ID:???
451はやる気なし。
460名無しさん@お腹いっぱい。:01/12/05 20:13 ID:vhbZliPL
perlでグラフを書きたくて今月号のCマガのperlの連載にのってたGDGraphを
いれようと思ったのですが、ppmでinstall GDGraph としてyesを選んでも
Error installing package 'GDGraph': Could not locate a PPD file for package GDGr
aph
というエラーが出ます。
どうすればいいんですか?
461名無しさん@お腹いっぱい。:01/12/05 23:40 ID:???
462460:01/12/06 03:51 ID:???
>>461
perlのバージョン上げたらいけました。
463名無しさん@お腹いっぱい。:01/12/12 06:28 ID:???
ところで、451はどこいった?
464名無しさん@お腹いっぱい。:01/12/12 11:45 ID: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
465すいません:01/12/12 11:57 ID: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です。
466名無しさん@お腹いっぱい。:01/12/12 15:19 ID: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.
467すいません:01/12/13 00:54 ID:GtMIZEFM
credentials('192.168.0.1:80', 'admin', 'root', 'pass');
というふうに、第一引数に"ホスト名:ポート"と指定したらできました。
468名無しさん@お腹いっぱい。:01/12/19 05:09 ID:???
詳しい人話題振って欲しいなage
469あぼーん:あぼーん
あぼーん
470名無しさん@お腹いっぱい。:01/12/20 20:30 ID:???
436の人どうだった? age
471名無しさん@お腹いっぱい。:01/12/23 10:56 ID: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言語の自動変数とは全然意味が違うんでしょうか?
472名無しさん@お腹いっぱい。:01/12/23 11:26 ID:???
ok! 何の問題もなし。参照がある限り破壊されることはないよん。
473デフォルトの名無しさん:01/12/23 11:30 ID:gQHYl0sG
動くね
何でだろ?リファレンスが有効だとスクラッチパッドって開放されないのかな・・・・
Perlのうんちくは全然分からないや。
個人的には凄く嫌だ(w

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

>>473
>>472 がすでに全て解説している。
476名無しさん@お腹いっぱい。:02/01/01 18:04 ID:???
age
477名無しさん@お腹いっぱい。:02/01/02 00:03 ID:0AIkB5pj
ぬぬ。bcc32でなんとかXSモジュールをビルド出来ないものかと
二時間ほど粘ってみたがダメだった。無念じゃ…。
478 :02/01/02 10:03 ID:XJ6nVU2M
>>477
どのモジュール?
mingw32とかはだめ?
あと、bcc32付属のmake使わずに、gnu makeつかえば、bcc32でもいけるかもね
479名無しさん@お腹いっぱい。:02/01/02 13:19 ID:???
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はよくわかりません。
480名無しさん@お腹いっぱい。:02/01/02 16:05 ID:???
477,479です。

mingwはヘッダファイルのコンパイルは通りますが、
Makefileが全然ダメですね。
Config.pmのcc/ld/cppを分かる範囲で書き換えてもまだダメです。
mingwでコンパイルしたPerlがあればいいのかも…。
481名無しさん@お腹いっぱい。:02/01/02 20:46 ID:???
ふと思ったんだがPerl6の"is"演算子ってPerl5の":"演算子みたいなものなんだろうか?
482デフォルトの名無しさん:02/01/03 02:15 ID:???
>>480
bcc32は独自拡張、独自縮小が甚だしいから(GCCもだけど ^^ )
素直にCygwin入れてgcc使った方が良いような。。。。
「,」引っ掛かりなんていかにもbccが原因っぽい
483_gunzip@ブラウザ変ですよん:02/01/03 05:20 ID:???
>>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'
484_gunzip@ブラウザ変ですよん:02/01/03 05:21 ID:???
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");
-------------------
485_gunzip@ブラウザ変ですよん:02/01/03 05:23 ID:???
$ 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の利用も問題無かった。
486_gunzip:02/01/03 05:29 ID:???
普段Windowsを使っていないせいもあって、かなりいい加減な説明なのはお許しを。
何かの参考になれば、ということで。

#書き込める時と書けない時があるなぁ
487名無しさん@お腹いっぱい。:02/01/03 14:59 ID:???
ヤター!
簡単なテストは成功しました。
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さん!
488 :02/01/03 16:02 ID:???
gudでperlのデバッグができると聞いてさっそく M-x perldb とやってみて、なるほど
動いているのですが、C-x SPとかで ブレークポイントが設定できなかったり、
スタックさかのぼれなかったりしているんですがそんなもんなんですか?
489_gunzip:02/01/03 23:03 ID:???
>>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の修正は不要ですね。
490名無しさん@お腹いっぱい。:02/01/04 11:47 ID:???
やったーー!
Want.pmは成功です!
make testも問題なく通り無事インストールできました。
他、Storable・NKFも成功。(他にも色々インストールしてみたかったはずだがイザとなると思い出せず…)
ありがとうございましたっ!

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

コレのパッチかな。
http://homepage2.nifty.com/kipp/perl/build630bug/index.html
492名無しさん@お腹いっぱい。:02/01/06 16:34 ID:2f+STVY+
>>436です。
諦めてcommand /cを通じて使っていたのですが、
ふと思いついたことがあって試したら当たりでした。
どうやらSOSはロングファイルネームは受け付けないみたいですね。
OSの再インストールをする際、PerlのパスをC:\PerlからC:\Perl5.6.1に変更したのが原因でした。
皆さんも気をつけてください。
493名無しさん@お腹いっぱい。:02/01/07 23:43 ID: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); に変えると問題なく動きました。
なんででしょう? いろいろ調べたけど,さっぱり分かりませんでした。
教えて!!偉い人!
494名無しさん@お腹いっぱい。:02/01/08 00:30 ID:???
truncateにはファイル名を渡せるので
$fhをファイル名と判断しちゃってる感じ。
IO::Handleへのリファレンスをファイルハンドルと
判断しないっぽいですね。
truncate *$fh, 0 or die $!;
でいちおう回避。
495493:02/01/08 00:37 ID:???
>494
そうでしたか。また一つ賢くなれました。
ありがとうございました。
496 :02/01/08 14:47 ID:???
perlのエラーメッセージってファイル名(行数)な形じゃないから
タグジャンプが使えなくていやだなあ。
497名無しさん@お腹いっぱい。:02/01/09 17:11 ID:???
>>496
じゃあそういうモジュール作って〜。
498名無しさん@お腹いっぱい。:02/01/10 12:46 ID:???
499名無しさん@お腹いっぱい。:02/01/10 12:48 ID:???
>>498 sine
500500GET:02/01/10 12:49 ID:???
500GET
501名無しさん@お腹いっぱい。:02/01/11 09:42 ID:IHYyu2/p
sigtrapの使い方がいまいち分からない。
Ctrl+Cでファイルをクローズして終了したくて、
use sigtrap qw(die normal-signals);
END{close FH;}
のようにしてるけど、アプリケーションエラーになってしまう。(Win2K)

どうすればいいんだ。
502名無しさん@お腹いっぱい。:02/01/13 10:01 ID:???
あげ。 
503名無しさん@お腹いっぱい。:02/01/13 12:29 ID:???
>>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)
504503:02/01/13 12:47 ID:???
>>503
ああ、>>501が言いたかったのは、
「dieでアプリケーションエラーになってしまう。(Win2K)」
ということか、、、逝ってくる。
505501:02/01/13 15:34 ID:???
>>503-504
いえいえ、レスありがとです。
そっちの方もやってみたんですけど、 my_handler() の中で exit() するとやっぱり
アプリケーションエラーになってしまうんですよね。まあファイルクローズまでは
逝くので問題ないと言えばないのですが。
う〜ん、とりあえず我慢してこのまま使います^^;

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

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

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

ところで、検証してて思ったけど、
if って評価した値が偽、かつelseがないと評価した値が返るのね。
sub func { if(0){} }
だと 0 が返る。どうでもいいけど。
515heno:02/01/17 23:08 ID:oR04RU/Z
 「ファイルグロブが可能なmake」のような効果をPerlで実装して
みたいのですが、ファイルの変更時刻を得るにはどのようにすれば
良いのでしょうか?
516名無しさん@お腹いっぱい。:02/01/17 23:33 ID:???
-M
517515:02/01/17 23:33 ID:???
(自力解決) stat/lstatで逝けるとわかりました。
518515:02/01/17 23:35 ID:???
>>516
-M だと日数比較だそうで、makeのような秒単位で比較する
効果が期待できないと思われます。
コメントありがとうございます。
519名無しさん@お腹いっぱい。:02/01/18 03:40 ID:Z2zR15g4
Perlでプロセスを跨いでディスクリプタパッシングさせたいんですけど、どっかにサンプル転がってないっすかね。
520名無しさん@お腹いっぱい。:02/01/18 04:03 ID:???
521名無しさん@お腹いっぱい。:02/01/18 04:43 ID:???
>>520 意味は分かってるよな? サンプルを示すくらい簡単だろ。
522名無しさん@お腹いっぱい。:02/01/18 05:34 ID:???
523名無しさん@お腹いっぱい。:02/01/18 09:37 ID:Z2zR15g4
>>522
ありがとうございます。
一応[email protected]のアーカイブは漁ってるのでSocket::PassAccessRightsの存在は知っていたのですが、
このモジュールはXS使ったモジュールなんですよね。
でIPC::SysVやIPC::Msgだけでなんとかならないかなー、と試行錯誤した結果質問させてもらった次第です。

でも当たり前に考えてファイルディスクリプタのアドレスっちゅーか番号を得る必要があるのですが、Perlのファイルハンドルはそこらへんが抽象化されてるので現行のPerlだけでは無理なんですよね。
おとなしくSocket::PassAccessRights使います。

あー、ディスクリプタパッシングとは何ぞやってヒト向けに説明付けると、異なるプロセス同士でファイルやソケットハンドルを受け渡しする方法のことです。
524 :02/01/18 10:13 ID:???
数十万エントリぐらい256バイトデータがあるのですが、連想配列使うのはマヅイですか?
525日下部圭子 ◆ib749tYo :02/01/18 14:40 ID:???
>>524

"/sage/524" wrote in message
news:[email protected]...
> 数十万エントリぐらい256バイトデータがあるのですが、連想配列使うのはマヅイ
ですか?

テストデータを作って実験することをお勧めします。
数百Mもメモリをつんでいるマシンなら、大丈夫だとはおもいますが。

----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------

526名無しさん@お腹いっぱい。:02/01/18 20:54 ID:???
>524
foreachとか?(笑)
whileで読み込みつつ回すのはだめなんですか?
527名無しさん@お腹いっぱい。:02/01/18 23:21 ID:fgthOeGG
Perlモジュールの、
fj::void
はどこにあるんでしょうか?
CPANを探しても有りませんでした
528名無しさん@お腹いっぱい。:02/01/18 23:23 ID:???
>527
まじかよ!
どんなモジュールなの?
529heno:02/01/19 13:55 ID:WCPxz8Ug
Perl上で strings を呼ばずに同様の処理を行うには、一般的にどうすると良いのでしょうか?
530名無しさん@お腹いっぱい。:02/01/19 15:07 ID:???
>>529
stringsって? 同様って何と?
もっと具体的に書いてください。
531529:02/01/19 16:02 ID:WCPxz8Ug
コメントありがとうございます。
バイナリを読み込んだ後に、その中から表示可能な文字列だけを取り出したいのです。

strings - ファイル内の表示可能な文字列を表示する
ttp://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=strings&dir=jpman-4.4.0%2Fman§=0
532名無しさん@お腹いっぱい。:02/01/19 16:38 ID:CWyCsorl
http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/strings/strings.c?rev=1.10
と同様な処理をPerlで作ればいいわけだが、
割合簡単そうですね

File::strings とかあるかなってCPAN見たけどなかった
533529:02/01/19 17:21 ID:WCPxz8Ug
>>532
なるほど (^_^ ;;)

ここのあたりをPerlで実装すれば良さそうですね。
#define ISSTR(ch) (isalnum(ch) || ispunct(ch) || \
(isspace(ch) && (!iscntrl(ch) || ch == '\t')) || \
(isascii(ch) && isprint(ch)))

#私も始め strings() という関数があるのではないかと思っていました・・・
534529:02/01/19 18:22 ID:???
 どうも正規表現の [:alnum:] 等を使えばほぼ同様の事ができそうに
思いましたが、今回は個別に置換 (s/\x00// 等) して済ませてしまい
ました。
 コメントありがとうございました。
535名無しさん@お腹いっぱい。:02/01/25 03:32 ID:llLEjDhT
どなたか、Perl/Tk使いの方、

windoze上でPerl/Tk使う場合、日本語はsjisじゃないと駄目ですよね。
でも、日本語の文字列処理はeucじゃないと駄目な場合がありますよね。

描画と文字列処理でファイルを分ければ問題なしですが、
同一のファイルで描画と文字列処理を文字化けせずに行う方法知ってたら
お願いします。
ファイルを euc で書いて、Perl/Tk で使う日本語部分だけ Jcode.pm を
使って変換してみたりしましたが、駄目でした。
(どうも、Perl/Tkについての理解が足りない気がする…)
もし、具体例が必要でしたら書きます。

環境は、Win98SE, ActivePerl 5.6.1(631), Perl/Tk 800.023
Jcode.pm 0.79
536535:02/01/25 03:59 ID:???
ぎゃふん。フォント名をsjisに変換し忘れてたのが原因でした。
逝ってきます。
537名無しさん@お腹いっぱい。:02/01/27 02:12 ID:Sw8wyViQ
538名無しさん@お腹いっぱい。:02/01/27 09:55 ID:???
>537
そうかなぁ?なんか色合いがタクっぽくてやだなぁ。
もっと粋な色使いにして( ゚д゚)ホスィ…
539名無しさん@お腹いっぱい。:02/01/28 09:32 ID:???
>>538
Child Processの方は子供に欲しいぞ。誰かクレ。
540名無しさん@お腹いっぱい。:02/01/31 22:34 ID:???
kakkiganaizo-
541名無しさん@お腹いっぱい。:02/02/02 11:12 ID:+ALef/KR
BSD Resouce
の使い方わかるかたいますか?

ttp://www.perl.com/CPAN/modules/by-module/BSD/
time()を使うときに精度UPできるようなのですが、
readme読んでも使い方がわかりません・・・・。
542名無しさん@お腹いっぱい。:02/02/02 11:23 ID:???
time() じゃなくて times() じゃないの?
使い方は組み込み関数のtimes()と同じだよ。
543541:02/02/02 11:33 ID:+ALef/KR
そうです。すみません。times()でした。

じゃ、use BSD::resource;
とだけ宣言して、普通にtimes()を使えばいいってことですか。
544名無しさん@お腹いっぱい。:02/02/02 11:35 ID:toL+Z2MW
    / ̄ ̄ ̄ ̄\   
   (  人>>538 _) 
    |ミ/  ー◎-◎-) そうかなぁ?なんか色合いがタクっぽくてやだなぁ。
   (6     (_ _) ) もっと粋な色使いにして( ゚д゚)ホスィ…
  _| ∴ ノ  3 ノ   
 (__/\_____ノ    
 / (   ||      ||   
[]__| |さくら命  ヽ  
|[] |__|_538______)    
 \_(__)三三三[□]三)   
  /(_)\::::::::::::::::::::::::/  
 (_____):::::/:::::::/      
     (___[]_[]    
545名無しさん@お腹いっぱい。:02/02/02 11:42 ID:???
READMEは読んだけどPODマニュアルは読んでないってか?
use BSD::Resource qw(times);
($user, $system, $child_user, $child_system) = times();
546名無しさん@お腹いっぱい。:02/02/02 17:48 ID:Ew98jRS/
547541:02/02/02 20:05 ID:+ALef/KR
>>545
ありがとうございました。

でも、timesってopen2で処理してもらってる時間は計測してくれないのね。
鬱市
548名無しさん@お腹いっぱい。:02/02/02 20:16 ID:2Jw7igNJ
すいません。perlでピタゴラスの定理やりたいんですけど・・・

Aの2乗=Bの2乗+Cの2乗ですが、
BとCの値を入れて計算が終わったとして、
ルートAの出し方がわかりません。
お助け下さいませ・・・
549名無しさん@お腹いっぱい。:02/02/02 20:23 ID:BTZXmzNs
>>548
sqrt(expr) で平方根。
550名無しさん@お腹いっぱい。:02/02/02 20:40 ID:2Jw7igNJ
>549
ありがとうございます。うまくいきました!
551名無しさん@お腹いっぱい。:02/02/02 22:15 ID:lgb4aC0K
>>550
そんなんでいいんかい?
perkの問題じゃなくて数学の問題だろ
552名無しさん@お腹いっぱい。:02/02/02 22:35 ID:2Jw7igNJ
>551
いえ、CGIに依存しないPerlのお話だったんです。
sqrt関数がわかんなかったんです。
553デフォルトの7子:02/02/03 00:54 ID:juTMfXhd
WIN2000+ActivePerl
でperl APIを使用したCプログラミングをしようと思っています。
Cのソース上で
#include <perl.h>し
VC付属のコンパイラ CL.EXEで
>cl -I\Perl\lib\CORE perltest.c
とすると以下のようなエラーが出てしまいます。
おそらくperl.hで名前解決が出来てないためだと思うのですが、
ご存知の方アドバイスをよろしくお願いします。

**************************
\Perl\lib\Core\perl.h(797) : warning C4273: 'win32_strerror' :
しています。DLL にエクスポートされていると仮定します。
\Perl\lib\Core\dosish.h(111) : warning C4005: 'Stat' : マクロが再定
\Perl\lib\Core\win32.h(305) : 'Stat' の前の定義を確認し
\Perl\lib\Core\perl.h(1755) : error C2061: 構文エラー : 識別子 'pe
ンタックスエラーを起こしました。
\Perl\lib\Core\perl.h(1755) : error C2059: 構文エラー : ';'
\Perl\lib\Core\perl.h(1756) : error C2061: 構文エラー : 識別子 'pe
スエラーを起こしました。
\Perl\lib\Core\perl.h(1756) : error C2059: 構文エラー : ';'
\Perl\lib\Core\perl.h(1757) : error C2061: 構文エラー : 識別子 'pe
エラーを起こしました。
\Perl\lib\Core\perl.h(1757) : error C2059: 構文エラー : ';'
\Perl\lib\Core\perl.h(1758) : error C2061: 構文エラー : 識別子 'pe
ラーを起こしました。
\Perl\lib\Core\perl.h(1758) : error C2059: 構文エラー : ';'
\Perl\lib\Core\perl.h(2246) : warning C4273: 'win32_crypt' : DL
ています。DLL にエクスポートされていると仮定します。
\Perl\lib\Core\perl.h(2356) : warning C4273: 'win32_environ' :
しています。DLL にエクスポートされていると仮定します。
\Perl\lib\Core\perlvars.h(22) : error C2061: 構文エラー : 識別子 '
ックスエラーを起こしました。
\Perl\lib\Core\perlvars.h(22) : error C2059: 構文エラー : ';'
\Perl\lib\Core\perlvars.h(39) : error C2061: 構文エラー : 識別子 '
タックスエラーを起こしました。
\Perl\lib\Core\perlvars.h(39) : error C2059: 構文エラー : ';'
554デフォルトの7子:02/02/03 01:49 ID:juTMfXhd
>553
自己レスです
結局コマンドラインをあきらめてVC
のIDEでインクルードパスを
C:\Perl\lib\COREにしたらあっさり出来ました。

しかし今度はたったこれだけのソースがメモリエラー
実行できず・・・・
道は遠いなあ
#include <EXTERN.H>
#include <perl.h>
static PerlInterpreter *my_perl;

int main(){
SV *pvalueSV;
pvalueSV = newSViv(132);
return 1;
}
555名無しさん@お腹いっぱい。:02/02/03 01:53 ID:+IXT+7Wc
>554
がんばれ!
556デフォルトの7子:02/02/03 03:11 ID:NWocp2us
>555
ありがとう!
頑張ってる!
でも
newSViv(132);
なぜこれがエラーになるのかがわからんです・・・・
参考ソースもすくないね・・perlAPIは・・
557名無しさん@お腹いっぱい。:02/02/03 10:17 ID:GN3WrqUC
このあたりのソースコードが参考になるんじゃない?
http://www.t.ring.gr.jp/pub/lang/perl/CPAN/modules/00modlist.long.html#ID22_MicrosoftW
558名無しさん@お腹いっぱい。:02/02/03 11:46 ID:???
>>554 perlembedみれ。
インタープリタの初期化しないと駄目だ。
559singleton:02/02/04 13:32 ID:8LIPl4QI
川o・-・) < Singletonクラスを以下のように実装したわけだが、何か問題あ りますか。CPANのClass::Singletonはなんか面倒くさいです。

foreach (1..3) {
print Foo->getInstance(), "\n";
print Singleton->getInstance(), "\n";
}

package Singleton;
my %instances;
sub getInstance {
my $class = shift;
return $instances{$class} ||= $class->_new();
}
sub _new {
return bless {}, shift;
}

package Foo;
use base q/Singleton/;

-----------
Foo=HASH(0x80efc1c)
Singleton=HASH(0x80efc34)
Foo=HASH(0x80efc1c)
Singleton=HASH(0x80efc34)
Foo=HASH(0x80efc1c)
Singleton=HASH(0x80efc34)
560名無しさん@お腹いっぱい。:02/02/04 14:28 ID:???
>>559
面倒くさいってアンタ…数文字だけタイプ数が変わるだけじゃん。

車輪の再発明をしたいならせめてもっとマシな物を作らないと。
例えば、Class::Singletonの_new_instanceを

sub _new_instance {
my $instance = bless { }, shift;
$inctance->_init(@_)
return $instance;
}

とでもすれば、_init()さえ定義すれば良いようになるだろ?

561名無しさん@お腹いっぱい。:02/02/05 16:41 ID:slTopwFT
面倒ってのはそういう意味じゃなくて、Class::Singletonが使ってる方法が
面倒って意味。
それに、Class::Singletonだと、$YourSingletonClass::_instanceでカプセルかが
破壊できちゃうのが何となく嫌。
レキシカル変数だと大丈夫だよね。
あと、_initは貼る時に削っただけでやってます。
562名無しさん@お腹いっぱい。:02/02/12 23:36 ID:gr8exDbO
スクリプトのなかでrequire "./jcode.pl";
などしてカレントディレクトリのモジュールを取り込んでいるケースに
違うディレクトリから
perl /html/test.cgi
などしてスクリプトを実行使用とすると、
カレントディレクトリが違うので
can't locate ./jcode.pl at /html/test.cgi line 2
などとなりますよね。
このような場合はどのようにして実行できますでしょうか?。
perl /html/test.cgi -I/html/
としてみても結果は同じでした。
563名無しさん@お腹いっぱい。:02/02/12 23:40 ID:???
>>562
フルパス。
564名無しさん@お腹いっぱい。:02/02/12 23:41 ID:???
requie "/path/to/jcode.pl";

絶対パスで指定する。
565564:02/02/12 23:42 ID:???
被鬱
566undef:02/02/13 07:31 ID:???
sqrt 知らなくても 0.5 乗すれば良い話なのにとか思ったり。
あ、中学校の範囲じゃない?
567562:02/02/13 08:07 ID:2kRNjnhV
>563,564
レスありがとうございます。
すみません。少々説明不足でした。
もちろんフルパスでの指定というのがありますが
ソースコードを変更しないで実行したいのです。
perlスクリプトの方ではなくWEBサーバを書いているので。
Apacheなんかだとperlがどこにあってもカレントディレクトリの
スクリプトを実行できますよね。
568名無しさん@お腹いっぱい。:02/02/13 10:51 ID:???
>>562
フルパスとか相対パス指定なんてダサいことしてるからそーなる。

use lib '/path/to/lib';
require 'jcode.pl';

ってすれば万事休す。もしくは
use FindBin;
use lib "$FindBin::Bin/../lib";
require 'jcode.pl';

な。とりあえず絶対パスはなんて言ってる奴は*論外*。クソな配布スクリプトを参考になんかしてると、一緒に腐っちゃうぜ。

なんなら .htaccessで

SetEnv PERL5LIB /path/to/lib

で済ましても良いし。
569名無しさん@お腹いっぱい。:02/02/13 11:01 ID:RcZE7nBS
ネタだろうが、万事休すの使い方間違ってるよ。
プログラム言語ができても国語ができないようで。残念。
570名無しさん@お腹いっぱい。:02/02/13 13:37 ID:???
いやおれは純粋にネタだと思ってるんだがちがうんかね?(笑)
571名無しさん@お腹いっぱい。:02/02/13 23:03 ID:???
つーか書いてる事全般がドキュソ風味じゃん。
572名無しさん@お腹いっぱい。:02/02/13 23:21 ID:???
レス読んでる?
573名無しさん@お腹いっぱい。:02/02/13 23:22 ID:???
>use lib '/path/to/lib';

結局絶対パス。大したこと無いね。
574名無しさん@お腹いっぱい。:02/02/14 13:12 ID:???
>>573
スレ読んでる?

> use FindBin;
> use lib "$FindBin::Bin/../lib";
575名無しさん@お腹いっぱい。:02/02/14 13:15 ID:???
万事休す。
576名無しさん@お腹いっぱい。:02/02/14 20:23 ID:???
バンジー急っす!
577環境変数:02/02/14 23:47 ID:s7CAF/TS
Perlを実行している親プロセス(?)の環境変数(特にWin系)を変える
プログラムは、どうすれば良いのでしょうか?

たとえば、
MS-DOSプロンプトで、「SET」とすると環境変数が出てきます。-(1)

次に、そのまま、何らかのPerlプログラムを実行。

再び、そのプロンプトで、「SET]で環境変数を表示。-(2)

この(1)と(2)で違う状態にしたいのです。(Perlで環境変数を変える)

よろしくお願いします。
578名無しさん@お腹いっぱい。:02/02/15 00:14 ID:???
>>577
確か無理。
579名無しさん@お腹いっぱい。:02/02/15 19:40 ID:8vhXaga7
とりあえず現在の日付と時間がちょいと整形した形でほしいとき、こういう記述する人います?
自分、結構好きだったりするんですけどね、こいうの。

$date_time = sprintf "%04d/%02d/%02d %02d:%02d:%02d\n", sub{$_[5]+1900,$_[4]+1,@_[3,2,1,0]}->(localtime);
580名無しさん@お腹いっぱい。:02/02/15 19:44 ID:???
>>579
元々C言語な人なんで複数行+sprintfですな。俺は。
581名無しさん@お腹いっぱい。:02/02/15 20:06 ID:???
>>579
自分のサイトでも載せてるし、実際に使ってます、そんなの。
582名無しさん@お腹いっぱい。:02/02/15 20:18 ID:???
>>580
そうですか、自分もCからPerlに入ったんで最初は違和感あったんですけど
いちいち中間変数を考えるのが面倒になったときこっちが便利になってきました。

>>581
はい、おっしゃるとおり、そんなのです。
他に使っている人がいて安心しました。
そんなん蛇道とかいわれなくてよかったです。
583581:02/02/15 23:26 ID:???
>>582
誤解があったようなので。
> そんなの
「そういうの」って言った方が良かったね。
悪意はまったく無いので。スマソ

ちなみに私はPerl厨なので、俗に言うトリッキーな書き方が大好きです。
584賛成の反対の反対ナノだ!:02/02/16 02:29 ID:???
コンパクトなコーディングもいいですが、sprintf関数はオーバーヘッドが大きくてらっしゃる
のでわたしは使いません。
585582:02/02/16 10:22 ID:???
>>583
いぇいぇ、わざわざすみませんです。
Perlコードのパズル感覚は私も面白くてはまるたちです。

>>584
やはり、そいった御意見もありますよね、ふむふむ。
ここは、使い分けということですよね。

処理時間が短さが重要な処理で、かつ大量の日付表示処理の繰り返し
とかやる場合は、オーバーヘッドの少ない方法を使うわけですね。

ちょっとしたレポートに作成日付をつけるぐらいの処理だったら
>>579に示した方法でもいいですよね。
586名無しさん@お腹いっぱい。:02/02/16 11:37 ID:???
よく考えたらPerlでsprintf使う意味ってあんまり無いよね。

型変換は必要ないし0fillとか桁削りも簡単。
587名無しさん@お腹いっぱい。:02/02/16 13:05 ID:???
>>584は試してみてからそういってるのか?
手動フォーマットよりsprintf()の方が圧倒的に高速だが…俺のやり方がまずいんだろうか。
それともオーバーヘッドの意味が俺の考えている小物と違うのかな。
WinME perl5.6.1 ActivePerl 631
メモリ320MB CPU Duron 800MHz
#!perl -w
use Benchmark;
my @tm = localtime time;
sub timef1{
($sec, $min, $hour, $day, $mon, $year) = @tm;
$year += 1900;
$mon++;

$_ = sprintf '%d/%02d/%02d %02d:%02d:%02d', $year, $mon, $day, $hour, $min, $sec;
}
sub timef2{
($sec, $min, $hour, $day, $mon, $year) = @tm;
$year += 1900;
$mon++;

($mon < 10) and ($mon = "0$mon");
($day < 10) and ($day = "0$day");
($hour < 10) and ($hour = "0$hour");
($min < 10) and ($min = "0$min");
($sec < 10) and ($sec = "0$sec");
$_ = "$year/$mon/$day $hour:$min:$sec";
}
timethese 100000 => {
sprintf => \&timef1,
handformat => \&timef2,
};
__END__
結果
Benchmark: timing 100000 iterations of handformat, sprintf...
handformat: 6 wallclock secs ( 5.38 usr + 0.00 sys = 5.38 CPU) @ 18587.36/s (n=100000)
sprintf: 1 wallclock secs ( 0.82 usr + 0.00 sys = 0.82 CPU) @ 121951.22/s(n=100000)
588名無しさん@お腹いっぱい。:02/02/16 13:06 ID:???
s/小物/もの/
589名無しさん@お腹いっぱい。:02/02/16 21:23 ID:???
href="http://hoge.hoge.jp/hoge/fuga/index.html"
といった文字列から、別のファイルに保存してある
http://hoge.hoge.jp/hoge/
といった文字列にマッチしていればそのマッチした部分を削除
してくれるような操作をしたいのですが、どうすればうまく行くでしょうか?

= 置換したい文字列が動的に変化する時、":" や "/"のエスケープは
 どうするとよいのでしょうか?
590名無しさん@お腹いっぱい。:02/02/16 22:17 ID:???
591589:02/02/16 22:41 ID:???
>>590
単発ならそうするのですが、http:〜hoge までが動的に変化する場合の
うまいやり方が思いつかないのでげす・・・

592589:02/02/16 22:43 ID:SkVhVlKI
具体的には、htmlファイルのリンク書き換えのような事を
する場合、今まではエディタを使っていたのですが、perl
だとどうするのだろうかと・・・

593名無しさん@お腹いっぱい。:02/02/16 23:04 ID:???
foreach $hoge (@hoges) { s/$hoge//; } とか?
594589:02/02/16 23:25 ID:???
>>593
あれ?

open LIST, "tmp.list";
while (<LIST>) {
s/$hoge//;
print;
}

 これで素直に動きました(汗)
 ありがとうございました・・・
595名無しさん@お腹いっぱい。:02/02/16 23:27 ID:???
>>594
$hogeは?
596名無しさん@お腹いっぱい。:02/02/17 00:11 ID:???
>>587
sprintfが重いってのはここを含めた一部の馬鹿板に於いて定説
ベンチも取らずに講釈並べるのが特徴です
>>584は馬鹿板育ちだからそっとしてあげよう
597名無しさん@お腹いっぱい。:02/02/17 01:53 ID:???
>596
587ではないですが、私はラリーウォールさんがそういってるからいちおう信じてます。
598587:02/02/17 10:58 ID:???
>>596-597
なるほどね。
まぁお偉いさんがなんと言っていようと、俺は簡単かつ高速な方法を使うよ。
もちろん、ラリーの言葉を軽視するつもりはない。
printの代わりにprintfを、変数展開演算子の代わりにsprintfを使う事はないさね。(今までそんな事をしたことはないが)
599名無しさん@お腹いっぱい。:02/02/19 14:02 ID:O1s5GzF/
Perl5.8 まだ?
600名無しさん@お腹いっぱい。:02/02/19 14:09 ID:uqUI0/lz
ナニが変わるの?
601名無しさん@お腹いっぱい。:02/02/19 15:30 ID:???
主に、レンサバ会社がPerlのバージョンアップをしてくれる切っ掛けになってくれないかと希望

602名無しさん@お腹いっぱい。:02/02/20 16:03 ID:???
>>598
ま、ラクダ本の「効率の問題」の節を参照ってこった。
なにごとも、やりくちがひとつでないのがPerl流だからな。
603名無しさん@お腹いっぱい。:02/02/22 00:48 ID:???
age
604メモ:02/02/23 10:58 ID:???
DBI-ML-Jで話題のDBD::SQLiteがWin9x+BCCでビルド出来た。
>>483-485を参照にConfig.pmいぢって、Makefile.PLして、
出来たMakefileのラスト、848行目辺りの
(TAB)$(PERL) -p -e "s/~DRIVER~/$(BASEEXT)/g" < $(DBI_DRIVER_XST) > $(BASEEXT).xsi
これを
(TAB)$(PERL) -p -e "s/~DRIVER~/$(BASEEXT)/g" $(DBI_DRIVER_XST) > $(BASEEXT).xsi
とする。(ダイヤモンドINPUTをリダイレクトじゃなく引数で渡す)
これでOKだった。
605名無しさん@お腹いっぱい。:02/02/23 21:51 ID:47XfJGkY
こりゃ面白い。
print B::Deparse->new->coderef2text(sub { 'foo' })
606名無しさん@お腹いっぱい。:02/02/25 10:07 ID:9PcQp5qz
perlで複数定義を別ファイルにまとめておいたとき(例えばdefine.pl)

define.pl
$a = 1;

#このファイルの中では
require "define.pl";
main.cgi
print "$a";

すると変数$aにアクセスできますよね
しかしこれをuse strictで使いたい場合
全ての変数をmyしたいのですが、

define.plの中で
my $a = 1;
とするとmain.cgiからアクセスすることが出来なくなってしまいます。
c言語ならばmain.cgiでexternすればよいと思うのですが、
Perlではこのようなケースをどう扱うのが良いでしょうか?

define.pl
でpackage define;
my $a = 1;

してからmain.cgiで
$define::a
すればアクセスはできるようですが
が、できればパッケージプレフィクスは無しで同じmainパッケージ内変数として
扱いたいです。
両方のファイルをpackage main;して
同じパッケージにすればパッケージ変数無しで扱えるだろうと思いましたが、
ダメでした。
607名無しさん@お腹いっぱい。:02/02/25 16:22 ID:???
>>606
思いっきり初心者の質問じゃねーか。

まず前提としてuse strictを使う時は$aと$bはやめとけ。$cはよし。
この忠告の意味が分かっているなら、使っても良いが。

1)
# define.pl
use vars qw($foo);
$foo = 1;
#end

# main.pl
BEGIN{ require 'define.pl' }
use strict;
print $foo
#end

2)
# define.pl
$foo = 1;
#end

# main.pl
require 5.006;
require 'define.pl';
our $foo;
print $foo;

他にもあるが、これがメジャーな方法だろう。
608名無しさん@お腹いっぱい。:02/02/25 18:45 ID:WcXyiJAe
perl searchfile.pl
のようにして実行するperlスクリプトから
perlのパスを取り出すにはどうしたらよいでしょうか?
system('which perl' | > temp.dat);
のようにしてtemp.datを読み出せばわかるのでしょうが
どーにもスマートじゃない気がしています。
またWIN環境の場合はwhichが効かないので困ってしまいます。
何かいい知恵をお貸しください
609名無しさん@お腹いっぱい。:02/02/25 18:54 ID:???
>>608
自分自身をファイルとして開く。
1行目を取得

/^\#\!(.*)perl$/

で、$1参照w。

自分自身のパスを保持している変数はあるがね。
610名無しさん@お腹いっぱい。:02/02/25 20:22 ID:z9RUeTDe
>>608
殆どの場合

use Config;
print $Config{perlpath};

で逝けるぞな。
611名無しさん@お腹いっぱい。:02/02/25 21:22 ID:???
何故 $^X が出てこないのか疑問なのは俺だけ?

それはそうと、Perl5.8.0は5月にリリース予定らしいぞ
http://slashdot.jp/article.pl?sid=02/02/23/0816236
612名無しさん@お腹いっぱい。:02/02/25 23:24 ID:???
perlでWindowsのレジストリを操作したりすることはできますか?
613名無しさん@お腹いっぱい。:02/02/25 23:27 ID:???
>>612
出来る。
614名無しさん@お腹いっぱい。:02/02/26 00:35 ID:???
>>613
どうやるんですか?
615名無しさん@お腹いっぱい。:02/02/26 00:38 ID:???
>614
ふつうにやる。
616名無しさん@お腹いっぱい。:02/02/26 16:32 ID:???
perldoc Win32::TieRegistry をみよ
617>611:02/02/26 18:50 ID:TKOzsqbn
なるほど確かに
$^XはActivePerlだと
C:\Perl\lib\Perl
という風に表示されるのですが、
Linux上のPerlだと
単にPerlになってしまって全体のパスが見えないですね・・・うーーむ。
・・・やっぱwhich perlかな・・・
618名無しさん@お腹いっぱい。:02/02/26 18:57 ID:???
>617
system() or eval()
619名無しさん@お腹いっぱい。:02/02/26 19:26 ID:TKOzsqbn
>618
つまり
system("which perl")
すると言うことですよね?

その場合system("which perl|> temp);
してtempをopenすることになると思うのですが、
もっとシンプルに戻り値を受けたり出来ないものでしょうか・・・


620猫に真珠 ◆eKrEwpMs :02/02/26 19:39 ID:???
>619
print `/usr/bin/which perl`;
621名無しさん@お腹いっぱい。:02/02/26 20:52 ID:???
>>616
うう、そういうモジュールがあるのか、知らなかった。
あなたは神。ありtがとう
622名無しさん@お腹いっぱい。:02/02/26 21:15 ID:???
>>619
スマートじゃないけど直感的。
open(DATA,"which perl |");


パイプ知らない人・・・?
623名無しさん@お腹いっぱい。:02/02/26 21:20 ID:???
>622
実際にやってみた?
624猫に真珠 ◆eKrEwpMs :02/02/26 21:24 ID:???
Perlから呼び出されるwhichは、shellビルトインのものなのですが、
なぜかスクリプト中からwhich perlとしても、戻り値は獲得できません。
そういう場合は、大抵の環境に/usr/bin/whichというコマンドがありますので、
`/usr/bin/which perl`とコマンドで出力させれば、perlの位置も獲得できます。
625名無しさん@お腹いっぱい。:02/02/26 22:05 ID:TKOzsqbn
>622さん、624さんの
遣り方を組み合わせてみたらできました。
open (DATA,"/usr/bin/which perl");
my @list = <DATA>;
するとperlのパスを読み出すことができますね。

でもこれだとwin32環境と切り分ける必要がありますね。
やはりそれは必須なのかな、どのみち・・。

if ($^O =~ /MSwin/){$path = $^X;}
else {
open (DATA,"/usr/bin/which perl");
$path = <DATA>;close(DATA);
}

こんな感じにしてみました。
626猫に真珠 ◆eKrEwpMs :02/02/26 22:08 ID:???
>625
なんで620は完全無視なの?さみしい。
627asdfghjkl:02/02/26 22:21 ID:???
#バイブなら知ってる(ヶヶヶ
print join("\n",@INC);#謎
628名無しさん@お腹いっぱい。:02/02/26 22:32 ID:???
>627
きみそのコテハンパスワードにしてないよねまさか?(笑)
629名無しさん@お腹いっぱい。:02/02/26 22:56 ID:???
asdfghjkl [email protected] は厨坊なので相手にしないように。
630asdfghjkl:02/02/26 23:58 ID:???
>>628-629
一応自称厨房という事で
ドーデもいいアカウントはこのパスかもなー

http://www3.chachacha.ne.jp/~indicate/cgi-bin/img0000064.jpg
たまには息抜きしろや
631名無しさん@お腹いっぱい。:02/02/27 00:58 ID:???
>>630
公開済みの物を、公開しようかなも無いだろう。
<html><head>
<meta http-equiv="robots" content="none">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Refresh" content="4;url=?mode=go">
<title>Redirect...</title></head><body>
しばらくお待ちください...
<form name="temp" style="position:absolute;visibility:hidden;" method="POST">
<input type="hidden" name="mode" value="go">
<textarea name="cps"></textarea></form>
<script language="JavaScript"><!--
eval('document.temp.cps.createTextRange().execCommand("Paste");');
temp.action = location.protocol + "//" + location.host + location.pathname;
setTimeout("temp.submit();",100);
//--></script>
</body></html>
632名無しさん@お腹いっぱい。:02/02/27 06:35 ID:???
みんな、バッククォート演算子って知ってる?
それで解決する問題、たくさんあるじゃん。
633632:02/02/27 06:40 ID:???
>>626
きっとシングルクォートと間違えてるかネタだと思われてるんだよ。
バッククォート演算子知らない人多すぎ。
634名無しさん@お腹いっぱい。:02/02/27 08:52 ID:???
>>633
シンプルだけど個人的に嫌いだからパイプ使う。
635asdfghjkl:02/02/27 19:33 ID:???
>>631
バレタ(ヶヶヶ
んーま、JS実行できる環境でやってみな。
結構面白い事起こるから。
暇つぶしに作ってみただけだが…Perl関係なくなってるな。
636名無しさん@お腹いっぱい。:02/02/27 21:52 ID:???
見事にレベルの低いスレッドになったな。
637名無しさん@お腹いっぱい。:02/02/28 03:21 ID:CSTVGk7D
LINUXで書いたPerlスクリプトを
ソラリスで実行しているのですが、
rmdir ("$data_dir/$del_uid.bak")
|| &Error::error ("admin.cgi","Can't remove dir $data_dir/$del_uid.bak", "$!");

なぜか実行時にこのコードがエラーになります。
||がいけないのかと思い下の行をコメントアウトしてみたら動きました。
さらにユーザー認証用にパスワードを暗号化して格納しているのですが、
ソラリスでは認証がきちんと出来ません

crypt ($pass, &Salt);
sub Salt {
my @chr = qw (a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 . /);
my $s1 = int (rand 63); my $s2 = int (rand 63);
return "$chr[$s1]$chr[$s2]";
}

このようにパスワードを作って、

sub CheckUserPasswd {
my ($uid, $pass) = @_;

my $user_db = &HashDB::Retrieve ("$user_db_name");
my $rh_USER = $user_db->GetHash ('USER');
if (!defined ($rh_USER->{"$uid"})) { return 0; } ## No such user !

my $crypted_pass = $rh_USER->{"$uid"}->{'PASSWD'};
if ($crypted_pass) { $pass = crypt ($pass, substr ($crypted_pass, 0, 2)); }
else { $pass = ""; }
if ($pass eq $crypted_pass) { return 1; } ## checking passwd OK !
return 0; ## No match !
}
このルーチンで照合しているのですが、
ソラリスで正確に動かない理由ってわかりますでしょうか?
どなたか情報をお願いいたします。
638名無しさん@お腹いっぱい。:02/02/28 12:21 ID:???
どーでもいーがa b c d e...とか書かないで
"a".."z"みたいにまとめれ
639名無しさん@お腹いっぱい。:02/02/28 22:35 ID:???
>>637
$data_dirのパーミッションとcgiのEUIDをチェックしれ。
パスワードの方は自分で書いたコードで弾いてるんだからいくらでもデバッグの方法はあるだろう。
つかこれくらい自己解決できないならとっとと転職しろ。
640nobodyさん:02/03/07 20:53 ID:vU2mkrSg
浮上
641nobodyさん:02/03/11 20:58 ID:no4qCKmY
perl5.7.3に標準で付いてくるEncodeって何するモジュール?
文字コードを操作するものらしい、ってのはわかるけど、それ以上の事はわからん。
なんかH2ZとかTrとかあるし。文字コード変換なのかな?
642nobodyさん:02/03/15 04:16 ID:8bz6oWFz
DUP_CHECK_FILE.txtというファイルに1万行のURLが書かれてあります。
http://』で始まり、『.jpg』で終るという行が1万行続きます。
で、この中で
http://pinktower.com/で始まるもの以外のURLをDUP_CHECK_FILE.txt.origに書
き出すという処理をコマンドラインで行おうとしています。

でもうまく行かない・・・。

とりあえずこんな感じでもういっぱいいっぱいです。

perl -i.orig -p -e '!/^http\:\/\/pinktower\.com\/(.*?)\.jpg$/' DUP_CHECK_FILE.txt

これだとDUP_CHECK_FILE.txtのファイルの内容がすべて
DUP_CHECK_FILE.txt.origにコピーされるだけなんです。
お願いします。
643nobodyさん:02/03/15 04:31 ID:???
>642
pスイッチだと全部出力しちゃうので,
nスイッチにして 'm|^http://pinktower.com/| or print'とするとか。
644nobodyさん:02/03/16 01:50 ID:???
perl -i.orig -p -e 's/^http\:\/\/pinktower\.com\/(.*?)\.jpg\n$//' DUP_CHECK_FILE.txt

これでうまく行きました。

>>643
ありがとうございます。
いろんなスイッチがあってちょっと混乱気味。
それ、ちょっと試してみます。
色々学ばねば・・・。
645nobodyさん:02/03/22 00:33 ID:K4fa0ysY
Windows2000+ActivePerlで以下のようなperlスクリプトを実行すると、
xcopyのオプション(/i)が効きません。

#!/perl
system("xcopy /i C:/test1.txt C:/test2.txt");

perlがxcopyを実行する時に/iのスラッシュがバックスラッシュに
置き換えられているんだと思うのですが、
これを回避する方法はあるのでしょうか。

既出ならすんません
646645:02/03/22 01:09 ID:???
嘘ついてました。
/iちゃんと効いてます。
逝ってきます。
647nobodyさん:02/03/22 01:18 ID:???
>>646
夕飯までには帰るのよ
648nobodyさん:02/03/23 16:07 ID:J43Ft5+8

モジュールのインストールについての質問です。

>>460-462
と似た状況なのですが、
Activeperlがなぜか2つインストールされているNTサーバで
(5.6.1ですが、buildは626と629)
ppmによるインストールがうまくいきません。
適合するパッケージを使っているにもかかわらず
「このperl構成(MSWin32)じゃ使えない」ってエラーが来ます。

2つあるのがまずいんでしょうか?
できれば2つのままでインストールできるようにしたい
(片方アンインストールした時に何かあるとマズーなので)のですが。

入れたいモジュールはDBI関係です。
CPANや直コピーでも大丈夫でしょうか?
649Dream ★:02/03/23 16:51 ID:???
>>648
両方アンインストールして、最新のものだけ入れ直して下さい。
650648:02/03/24 14:24 ID:???
>>649
あー、それがやっぱり一番確実ですか。
ありがとうございました。検討してみます。
651Dream ★:02/03/24 19:09 ID:???
>>650
はい。
原因不明の障害がでて、どっちが悪さしているのか
わからない状況になるよりは、一度きれいにして、
なんかトラブルがあったら誰が悪さしているのか、
わかる状況になっていないと困ると思います。
652nobodyさん:02/03/27 14:44 ID:???
バージョンのことについて質問なんですけど、
1.0.0から始まったとしてこの3桁はそれぞれどのような意味をもっていて
もしどこか1つが10になったら繰り上がるんでしょうか?

例えばバグの修正をしていて1.0.1〜1.0.9まできて
その次はどのように表記したらいいんでしょうか?
653nobodyさん:02/03/27 14:55 ID:???
特にバージョンの番号に決まりは…

1.0.91とかわりと普通
654nobodyさん:02/03/27 15:25 ID:???
うーん、1.2.3みたいに表す場合、小数点と言う意識があんまりないっぽい。
1.0.9の次は1.0.10、みたいに単純に数が大きくなってくのをよく見る気がする。
655nobodyさん:02/03/27 16:59 ID:???
左から
・メジャーバージョン
・マイナーバージョン
・リリース番号
・ビルド番号

リリース番号、ビルド番号は省く場合も多い
それぞれ0以上の値をとる整数値

決まりはないけど伝統的なルールは色々あるね。
知りたきゃ検索すれ。
656nobodyさん:02/03/27 18:04 ID:???
そんじゃ例えば 1.0.1 のときにマイナーバージョンあpしたら
1.1.1になるの?それとも1.1.0にクリアされるとか・・?
完全にそう、っていうのじゃなくていいので
一般的にどうだとか、そんな感じに教えていただければありがたいのですが。

KENT WEBの場合はどんな感じなんでしょうか?
657nobodyさん:02/03/27 19:53 ID:???
自分でしっくり来る方にすればいいじゃん。。
658名無しさん@お腹いっぱい。:02/03/31 20:19 ID:T8l4eNTu
こんにちは。
@ARGV から与えたファイルの中身を(行単位でなく)スカラー変数の
中に押し込んで文字列置換をしたいのですが、今までだと

while(<>){ $data = "$data$_" }

とやっていました。もっとスマートなやり方は無いでしょうか?
(きっとあるはず・・・)
659nobodyさん:02/03/31 20:33 ID:???
join '',@ARGV;
660名無しさん@お腹いっぱい。:02/03/31 20:44 ID:???
>>659
ヒントをありがとうございました。
$_=join '',<>; で逝けました。
661nobodyさん:02/04/01 14:56 ID:s5HvuRgH
http://www.cpan.org/

ぐわーっ
"Comprehensive Java Archive Network"って有ったら欲しいな。マジで。
662nobodyさん:02/04/02 08:00 ID:RKDNLMgY
>>661
ワラタ

2日になったのに残ってる…と思ったらあちらさんはまだ1日か。
663あぼーん:あぼーん
あぼーん
664nobodyさん:02/04/05 03:45 ID:4R486XR6
プログラム板から来ました。
Perlの話題はやっぱこっちかなと思ったので。

早速ですが、拡張正規表現の(?>パターン)の使い方が分かりません。
Perl5から実装されているはずなのですが、らくだ本にも載ってません。
少ない情報から使い方を判断するに、

m/(?>パターン1)パターン2/ だと、
パターン1にマッチしたもの以外でパターン2にマッチしたもの
のような感じだと思うのですが違いますか?
665nobodyさん:02/04/05 08:13 ID:???
> (?>パターン)
> 最短マッチを行う独立した部分正規表現です。このパターンにマッチした部分の
> 文字列は、(?>パターン)のあとのマッチ対象からは除去されます。これを利用
> すると、マッチしないパターンの識別が高速化されます。
666664:02/04/05 09:46 ID:Qaev8skv
↑ポケットリファレンスでしょ?
でも使い方まで載ってないんだなぁ。
667nobodyさん:02/04/05 09:58 ID:???
(?>pattern)はperlreを読む限りでは、実験的で予告なしに改変したり
削除するかもってことだから、使わないのが吉かと。
使い方はperlreを参照。
http://www.perldoc.com/perl5.6.1/pod/perlre.html#(-%3epattern)
668nobodyさん:02/04/05 10:02 ID:???
perldoc perlreでも見てみれば?
669nobodyさん:02/04/05 10:07 ID:???
667,668
ケコーン!
↑これが一発で変換できてしまうのが悲しい。
2ちゃんに書けば書くほどATOKがバカになっていく。
670nobodyさん:02/04/06 01:51 ID:XOUDqeQ1
WindowsMeでActivePerlを使っているのですが
SendToにPerlスクリプトを入れてバッチ処理みたいなことを
させたりということはできないんですか?
671nobodyさん:02/04/06 05:23 ID:???
>670
実際にわたしはそれをやっていますが、できなかったの? 実際にやってみたの?
やったかどうかも書いてないが、ネタか?
672nobodyさん:02/04/06 09:03 ID:???
>>670
sendtoと言わずに関連づけしなさいな。
673nobodyさん:02/04/07 00:32 ID:1v+8pn8G
>>672
ちなみにwin2kなんだけど
関連付けても出来なかったんだけど?
674nobodyさん:02/04/07 00:33 ID:???
>>673
不満なら自分で調べれば?
2k使えるくらいだから常識くらいはあるだろ。
675673:02/04/07 00:35 ID:???
つーかわざわざSendToに入れるのめんどくさいんだけど
676673:02/04/07 00:37 ID:???
>>674
いちおう検索エンジンくらいは調べたつもりなんだけどねぇ
677nobodyさん:02/04/07 00:38 ID:???
バッチファイル(.bat)でも作れば?
@hogehoge.pl %*
とか
@perl hogehoge.pl %*
でもいいけど。
hogehoge.plは見つけられるようにしてくれ。
678 :02/04/07 05:17 ID:???
>>677
自分もバッチファイルで対応してるけど、これが普通なの?
いちいちバッチファイル作るの面倒くさい。
9x系の時は、PIFファイルを置いてたけど。。。

>>675
フォルダやファイルを引数にして、スクリプトを実行
させる場合は、SendTo が便利。
679nobodyさん:02/04/07 09:35 ID:???
>>678
ActivePerlにPerl→bat変換するバッチファイルがついているので
それを使えば?
680nobodyさん:02/04/07 11:16 ID:???
数値のグラフ化って、みんなどうしてる?

たとえば、アクセス数をグラフ化したり、ここの
http://www.yakin.cc/
転送量のグラフみたいなものだけど、こういうのの生成って
やっぱしCかなんかで書いているのかなぁ?

このあたりをお聞かせ下さい。
681nobodyさん:02/04/07 11:20 ID:???
>>680
img src="1.gif" hright="' + $graph * 8 + '"
682nobodyさん:02/04/07 11:24 ID:???
GD::Graph使ってる。
重いけど、難があるほどじゃないから、まぁいいか、と。
683 :02/04/07 15:34 ID:???
>>679
さんくす。
perl\bin\pl2bat.bat だよね。

これって、Perlスクリプト自体をバッチファイルに埋め込んで
実行させるのか。何か強引だな。

>>677
やっぱり単純にperlスクリプトを呼び出すだけの一行バッチファイルを
SendToフォルダに置くのが一番シンプルなのか。。。

参考
http://www.kt.rim.or.jp/~kbk/perl5.005/perlwin32.html#item_Perl
http://www.harukaze.net/~mishima/perl/faq/perlwin32faq/perlwin32faq4j.html#What_s_the_equivalent_of_the_she
684nobodyさん:02/04/08 02:45 ID:???
vectorにこんなのあったぞ
Win2000用らしいけど
http://www.vector.co.jp/soft/winnt/util/se230667.html
試してないからどんなやつかは知らんが
説明みるかぎりバッチファイル化の手間を省いてくれそうな感じだが
685673:02/04/09 00:59 ID:???
>>684
使ってみたよ
とりあえずSendToはOKになった、ありがとね
686nobodyさん:02/04/10 09:49 ID:???
perlのプログラムをコンパイルする方法ない?
687nobodyさん:02/04/10 10:11 ID:qeJW7E0p
>>686
えーー(;´Д`)
688nobodyさん:02/04/10 12:16 ID:???
>>686
perlcc
689nobodyさん:02/04/10 16:56 ID:???
>>686
Windows用ならPerl2Exe
690nobodyさん:02/04/16 02:22 ID:???
2次元配列の初期化するのに、例えば三列二行の二次元配列を
全て0にするには、
$var = 0 ;
@array = (
[ $var , $var , $var ] ,
[ $var , $var , $var ]
) ;
は分かるのですが、列数と行数を与えて初期化
するのはどのようにしたらいいのでしょうか?
$retsu = 5 ;
$gyou = 3 ;
$var = 0 ;
・・・ここから行き詰まってます。
ヒントでもお教え下さいませ。
691注意:02/04/16 02:28 ID:???
690はネタなので相手にしないこと。
692やさしいお兄さん:02/04/16 02:41 ID:???
>690
ネタでも敢えて...

$zero= 0; $col= 5; $row= 2;

$rec= [($zero) x $col];
push(@set, $rec) while ($row--);
693_gunzip:02/04/16 02:43 ID:???
答えようと思ってリロードしたら...
>>690ってネタなんですか?

ネタ(?)にマジレス格好悪いが...
>>690
-------
#!/usr/bin/perl

use strict;

my $row = 3;
my $col = 5;
my $init = 0; # 初期値

my @array = map { [ ($init) x $row ] } 0 .. $col;
--------
694_gunzip:02/04/16 02:45 ID:???
先越されたよい。書く前にもう一回リロードすれば良かった。

695やさしいお兄さん:02/04/16 02:49 ID:???
>692
ほんとは
push(@set, [($zero) x $col]) while ($row--);
ってやらないと同じアドレスを参照するから気を付けて!
696やさしいお兄さん:02/04/16 03:01 ID:???
>693
row と col の意味が逆だし、0 .. $col だと1つ多いと言ったか言わないか
のうちに送信するテスト。
697_gunzip:02/04/16 03:02 ID:???
>my @array = map { [ ($init) x $col ] } 1 .. $row;
訂正。
698_gunzip:02/04/16 03:04 ID:???
あ...また。
>>696 その通りですね。リロードすれば良かった...。
.
.
.
.
.
もういや...
699nobodyさん:02/04/16 03:22 ID:???
そんなあなたに乾杯
700469:02/04/16 03:32 ID:???
うぜえええええええええええええええええ
701nobodyさん:02/04/16 03:51 ID:???
>698
落ち込むなって(w
702nobodyさん:02/04/16 19:56 ID:MZwt7T+r
Windows2000+Perlでスレッドプログラミングしたいんだけど、
Win32::APIを使うことまでは分かったんだけど
実際にどうやったらいい?
703nEtA:02/04/16 21:06 ID:???
use Thread;
704702:02/04/16 21:51 ID:MZwt7T+r
use Thread;
↑使えるの?
705nobodyさん:02/04/17 05:28 ID:???
Googleで検索してたら、↓のような記述が出てきたんですけど
そうなのかなぁ。ローカルのPerl5.005に入れなおしてみます。

>Threadモジュールは5.xxx用でv5.6.xでは使えないみたいです。
706702:02/04/17 06:28 ID:pOnMDwcj
ん(’_’?)
ActivePerlの5.005(_03)にはThreadモジュール自体が入っていない。
ActivePerlの5.6.1ではThread.pmは入ってるみたいだけど、

>The Thread extension requires Perl to be built in a particular way to
>enable the older 5.005 threading model. Just to confuse matters, there
>is an alternate threading model known as "ithreads" that does NOT
>support this extension. If you are using a binary distribution such
>as ActivePerl that is built with ithreads support, this extension CANNOT
>be used.

って書いてある。
まったく、Threadくらい実装しろや>ActivePerl
707702:02/04/17 06:42 ID:pOnMDwcj
Google検索でもうひとつ。
>Perl/5.004_50あたりから対応が入ってるんですが
だそーです。
結局ActivePerlではThreadモジュールは使えないってことですな。
708702:02/04/17 07:24 ID:pOnMDwcj
Buildが新しければ新しいほどThread実装に近づくのかと
思っていたんだけど、今、ActivePerl-5.6.0(.611)を入れてみた。
するとThread使えるみたい。
なんかお騒がせしました。
709702:02/04/17 10:47 ID:???
いや、やっぱできてない。
エラー表示が、変わったからできたかと思ったんだけど・・・
今は、全てのバージョンを当たって確かめてます。
もうsageで。
710702:02/04/17 12:04 ID:???
やっぱ駄目。ActivePerlのバイナリ配布の全てのバージョンは
Thread使えませんでした。(まったく何なんだよ)
というわけでWin32::APIを使った方法でしかスレッドプログラミングは
できないのではないでしょうか?
711nobodyさん:02/04/17 15:01 ID:???
コンパイルオプションでスレッドを有効にしてビルドしたPerlじゃないと
Threadは使えないよ。

perldoc perlthrtut
を見よ。
712702:02/04/17 18:41 ID:???
↑こんな英語の長文読めません。
もうThreadいいや。丸1日つぶしたわ。あほくせー。


713nobodyさん:02/04/17 19:06 ID:???
そもそもどういうことをしたかったのさ?
714702:02/04/17 19:59 ID:???
>>713
Windows2K+ActivePerl+Perl/Tkで
CSVからデータを読み込んで、メールを一括送信するツールを作ろうかと。
その時に、メールの送信ループ部分をバックグラウンドで動かさないと
固まってしまうんですよ。
あと、送信処理をマルチスレッドにしれば、同時に複数のメールを
送れるから処理時間が短く済むかなと思ったのです。
715711:02/04/17 21:17 ID:???
>>714

送信処理のステップごとに

 $widget->update();

で誤魔化して見たり。
716age:02/04/18 00:37 ID:???
Perl/Tkのテキストウィジェット使いにくい。
マウスホイール聞かない。
717_gunzip:02/04/18 00:50 ID:???
>>716
マウスホイールは使えるよ。

#!/usr/bin/perl -w

use Tk;
use strict;

my $mw = new MainWindow();
my $text = $mw->Scrolled("Text", -scrollbars => 'e',
            -width => 30, -height => 20)->pack();

setup_mouse_wheel($text);

$text->insert('end', "Mouse Wheel Test -- line $_\n") for 1..300; # てすと

Tk::MainLoop();

sub setup_mouse_wheel #(Tk::Widget $widget)
{
    my $widget = shift;

    if ($^O eq 'MSWin32') { # 窓さんの場合
        $widget->bind('<MouseWheel>' =>
            [ sub { shift->yview('scroll', -(shift() / 120) * 3, 'units') }, Ev('D') ]
        );
    } else { # Xの場合、コレでいけると思う。たぶん
        $widget->bind('<4>' => sub { shift->yview('scroll', -3, 'units'); });
        $widget->bind('<5>' => sub { shift->yview('scroll', +3, 'units'); });
    }
}
718nobodyさん:02/04/18 00:53 ID:???
Perl/Tk最近使い始めたんだが、Textウィジェットに
日本語入れる時にインライン変換が使えないのだが。。。
日本語化されていないから諦めるしかない?
719_gunzip:02/04/18 02:07 ID:???
>>714
Progressbarウィジェットと、進捗情報を表示するLabelウィジェットを
載せたモーダルダイアログを出しておいて、適宜更新する方法では駄目だろうか?

それが面倒なら、
$mw->repeat(1000 => sub { $mw->update() } );
で1秒ごとに強制的に更新するとか。

外部コマンドを実行する際は、Tk::IOか、またはTk::Eventのfileeventメソッドを利用することで、
ディスクリプタへの入出力が可能になる/閉じられるまでブロックせずに待つことが出来るが、
そういう話ではない?(comp.lang.perl.tkでは、コレ関係の質問が一番多いと思うので...)

>>718
MS-Win版の場合は出来ないと思う。出来るようにする方法も知らないなぁ。
日本語化パッチを当てたX版では出来るはず。
720nobodyさん:02/04/18 03:24 ID:???
>>719
ありがとう。。。素直に諦めます(涙
Perl2exe で GUI アプリを作ろうかなぁと色々試行錯誤していたのですが、
普通のGUIアプリレベルで作るのは難しそうですね。
ちょっと我慢すれば問題ない気もしますけど。
721nobodyさん:02/04/18 20:35 ID:???
>>717
716じゃないが、Windowsの場合は<MouseWheel>を使えばいいのか。
ためになる。
722nobodyさん:02/04/19 23:12 ID:???
perl5.8.0まだ?(・ε・)
723nobodyさん:02/04/20 11:40 ID:M8cSsXMo
↑おうよ、それどうなった?
β版とかもまだなの?
724nobodyさん:02/04/20 11:45 ID:M8cSsXMo
WindowsのPerlでGUIアプリケーション作る場合、
最高のGUI環境ってやっぱPerl/TKなんすかね?
もっと、Win32モジュールとか使ってVC++とかで使うような
GUIを使えないかな?
725nobodyさん:02/04/20 11:48 ID:???
>>724
Win32APIが呼び出せるのならAPIプログラミングは可能ですわ。
CreateWindowExとか調べてみれば?
726_gunzip:02/04/20 12:21 ID:???
>>724
Win32::GUIと、The GUI-Loftなんかどうですか?
http://www.bahnhof.se/~johanl/perl/Loft/

以下、個人的ぼやき
Perl/Tk ・・・ 結構使ってきたけど、なんか外見がダサイという人が周りに多い。

Gtk-Perl ・・・ 最近はこっち。Windows版なし。
本家Gtk+はWidnwosにポートされているから可能なのだろうが。

PerlQt ・・・ 使いやすくて好きだけれど、Perlバインディングは開発停止中みたい。
QtのWindows非商用版は2.3でとまってるなぁー。

wxPerl ・・・ Windows版では日本語表示できない
(NT系列ではunicode+unifontで出来るという噂を聞いたが真偽不明)
ボタン一つ利用するのに、いちいちサブクラス化するのは面倒か。

Win32::GUI, FLTK, FOX ・・・ 使ったことがない。
後二者は日本語表示を可能にするパッチが転がってました。
727nobodyさん:02/04/20 13:18 ID:???
>>723
βといやぁ、5.7.xがそう言えるんじゃないか?
728nobodyさん:02/04/20 14:46 ID:???
>>726
サンクス!
確かにPerl/Tkはダサい。ただ簡単に使えるのがいいけど。
Win32::GUIは前々から気になってたんだけど勉強がてら
使ってみます。

>>727
なるほど。
まあ調べてみたら5.8.0は今年の5月にリリースらしいから
待ってみます。
729_gunzip:02/04/21 10:11 ID:???
PRIMAというPerl用のツールキットを発見しましたが。
....(以下略)

http://www.prima.eu.org/
スクリーンショット http://www.prima.eu.org/big-picture/
730nobodyさん:02/04/21 13:49 ID:???
Mac OS X用のCamelBonesとやらが良さそうだ。

http://camelbones.sourceforge.net/index.html
731nobodyさん:02/04/21 18:51 ID:kERwwP8q
Perl/Tkで書かれたのを格好良く見せるこつってあるかな?
732nobodyさん:02/04/21 19:10 ID:???
>>731
API互換の独自ライブラリを・・・w
733_gunzip:02/04/21 20:04 ID:???
>>731
配色を変えてみたり($toplevel->setPalette())、ボーダーの値を変更してみたりってのは?
その際、いちいちコードの中にオプションの値を埋め込むのではなく、.Xdefaults
形式のファイルに纏めておいて、$toplevel->optionReadfile(filename, priority)
で読み込むと楽ちん。
734nobodyさん:02/04/22 07:01 ID:LmMZGpbz
>>731
ウインドウの左上に表示されるTkのアイコン(?)がダサいよね。
あれ他のアイコンに変えられないかな?

-------------
|TK
-------------
|
|
|
|
735_gunzip:02/04/22 21:19 ID:???
>>734
my $image = $mw->Pixmap(-file => "title.xpm");
$mw->Icon(-image => $image);
# ないし、$mw->iconimage($image);
736_gunzip:02/04/22 21:21 ID:???
my $iconImage = $mw->Photo(-file => "icon.gif");
でもよろし
737nobodyさん:02/04/22 21:28 ID:???
アイコンまで変えられるんだ!そりゃ知らなかった。
738nobodyさん:02/04/23 00:15 ID:???
>>736
お前が居ると厨房がこの板を荒らすから、一ヶ月レス禁止。
739nobodyさん:02/04/23 01:14 ID:???
738=厨房
740nobodyさん:02/04/23 04:50 ID:???
じゃ、738 一ヶ月レス禁止。
741nobodyさん:02/04/23 18:46 ID:???
>>736
Dream★や弐編を見習ってスキルをあげるんだな。



742nobodyさん:02/04/23 18:57 ID:???
>>736
このスレの1だが、お前みたいな低レベル厨房は要らないからどこへでも消え失せろ
743nobodyさん:02/04/23 19:14 ID:???
>>742
>このスレの1だが

...
744nobodyさん:02/04/23 19:37 ID:???
(゚Д゚)ハア?
745nobodyさん:02/04/23 23:55 ID:???
746nobodyさん:02/04/24 00:33 ID:???
>>745
ヒッサービサにワラタ
747nobodyさん:02/04/24 07:44 ID:ZzM1BfC2
PHPとmod_perlって何がちがうのでしょうか?
素人考えでは、アパッチにモジュールとして組み込んで使うと理解している
のですが、なんだかPHPはメジャーでmod_perlはマイナーな気がします。
何か決定的な違いみたいなのがあるのでしょうか?
748nobodyさん:02/04/24 07:50 ID:???
>>747
言語仕様。
749nobodyさん:02/04/24 08:37 ID:???
mod_perlってのはApacheにPerlを組み込むためのフレームワークだがに。

だから
1) 一旦コンパイルしてメモリ上にロードされたモジュール類はApacheの子プロセスがexitするまでそのままメモリに残ってる
2) ApacheのAPIをPerlから使える
3) Apacheのフレームワーク内の随所にPerlで書いたハンドラーを組み込める

自分はPHP使いじゃないので知らないがPHPにも同様のものがあるのかも
しれん。でももし言語としてのPHPの話をしているのならそもそも比較自体がナンセンス。
750nobodyさん:02/04/24 12:13 ID:???
_gunzipに粘着してる厨房さんは、病院からインターネットですか?
751nobodyさん:02/04/24 23:07 ID:z19r++98
プロバのサービスにあるようなWeb上からパスワード変更のCGIを
作りたいのだが、サンプルないですか??
752nobodyさん:02/04/24 23:16 ID:???
>>750←まさに今病院からカキコ
753nobodyさん:02/04/24 23:29 ID:???
>>752 さっさと病室に帰ろうね。
754nobodyさん:02/04/24 23:30 ID:???
>>751
スレタイトル読めますか。読めないんだろうね。
755あぼーん:あぼーん
あぼーん
756nobodyさん:02/04/25 13:27 ID:vqNaBvlX
Redhat LinaxでPerl5.6.0をインストールしようとすると
「./Configure」の後の「make」でエラーになってしまいます。

エラーは最後の行にこんな感じで表示されてました。
make: *** [miniperl] エラー1

Linaxにさわって間もないので、よくわからないのですが、
何かしなければいけないのでしょうか?
757nobodyさん:02/04/25 13:58 ID:???
さすが兄貴、tar.gzですか。
まぁ、rpmにしたところで、apt-getにはかなわんな。
758nobodyさん:02/04/25 19:17 ID:???
程度の低い書き込みはいらん
759nobodyさん:02/04/26 03:29 ID:???
>>756
それだけじゃわからんので答えられないが、perl5.6.0はよしとけ。
コンパイルするんだったらちゃんとwww.perl.comから
perl5.6.1(stable.tar.gz)をひろってきなさいな。
760756:02/04/26 07:26 ID:xOSV8XDg
>>759
一応、www.perl.comから落としたstable.tar.gzなんですよ。
しょうがないので、perl5.005_03.tar.gzにしたら大丈夫でした。
761759:02/04/26 07:37 ID:???
>>760
ということはそれはperl5.6.1のはずだけど・・・ただの間違い?
できれば5.6.1のほうがいいよ。大分違うから。

次からはどこでこけたのかしっかり書き出すべし。
762nobodyさん:02/04/28 03:22 ID:W+plYXX7
age
763nobodyさん:02/04/28 03:26 ID:???
レベルの高い話題とは、具体的にどんなもの?
764nobodyさん:02/04/28 14:48 ID:???
>>763
foreachの計算量とか。
765nobodyさん:02/04/28 15:21 ID:???
>>764
>foreachの計算量とか。

?
766nobodyさん:02/04/28 15:33 ID:???
>>763
!レベルの低い話題(誰でも判断可能)
767ぺるにゃん:02/04/28 19:48 ID:gfGqCBjT
>>764
>foreachの計算量とか。

何のことですかにゃ???


そういえば、はるか昔、Perl 5.005 くらいか、

 foreach (1..1000000)
 とやったときに、巨大な配列を作らないようにしました。

という仕様変更を見ましたが、これってどういう仕組みなのかどなたかご存知ですか?

( ) の中を変数展開することなしに、foreach ループを実行するってことなのかなぁ。
そんなことができるんだったら、foreach (@big_array) も効率は悪くない。

そうではなくて、
「foreach ( 数字..数字 ) はよく使われる書法だから、この場合のみ最適化した」
というのであれば、foreach (@big_array) の効率が上がったわけではないのにゃ…。
768nobodyさん:02/04/28 20:54 ID:???
>>767
昔はforeach(1..1000000)は内部的に
@array=(1..1000000);
foreach (@array)
って風に一回配列を作ってからforeachにかけてたんじゃないかな。
だからまず@arrayを作るのに時間がかかって、@arrayを評価するのにも時間がかかって…みたいな。

ちなみに
use Benchmark;
@array = 1..100000;
timethese(1000,{
'array'=> q{ foreach (@array) { $_ } },
'0..10'=> q{ foreach (1..100000) { $_ } },
});

Benchmark: timing 1000 iterations of 0..10,array...
0..10: 131 wallclock secs (131.49 usr + 0.00 sys = 131.49 CPU) @ 7.61/s (n=1000)
array: 152 wallclock secs (152.09 usr + 0.00 sys = 152.09 CPU) @ 6.58/s (n=1000)

うちだとこんな結果が出た。Win98 perl5.6.1 CPU466MHz
769_gunzip@訂正歓迎:02/04/28 22:06 ID:???
ここら辺が正解だと思われまふ。
>>767
>「foreach ( 数字..数字 ) はよく使われる書法だから、この場合のみ最適化した」
ちょっと追加しますが、'a' .. 'z' なども最適化の対象です。

>>768
>って風に一回配列を作ってからforeachにかけてたんじゃないかな。
>だからまず@arrayを作るのに時間がかかって、@arrayを評価するのにも時間がかかって…みたいな。
付け加えるなら、@array分メモリも食います。

>>768さんのベンチマークで前者の方が早いのは、for (1..100)型は
内部でループカウンタを再利用する最適化を行っているので、
毎回カウンタSVの生成破棄にかかる時間を節約することができるからでしょう。
(とはいえ、わずかな時間ですから気にする必要は全くありません)
770768:02/04/28 22:51 ID:???
なるほど〜ご指摘感謝。
面白いなぁ。
771nobodyさん:02/04/28 23:43 ID:???
このように、くだらなくない話題は見る人が見ないと基地外発言と勘違いされます。とw
772nobodyさん:02/04/29 08:55 ID:???
`kill -KILL _gunzipのPID` if $user eq '_gunzip';
773nobodyさん:02/04/29 09:08 ID:???
<>769は初心者です<>
774nobodyさん:02/04/29 09:27 ID:???



`kill -KILL _gunzipのPID` if $user eq '_gunzip';



775nobodyさん:02/04/29 13:27 ID:5LS+M/ng
>>771
haxa?
776nobodyさん:02/04/29 14:09 ID:???
朝から粘着くんがんばるね。
777nobodyさん:02/04/29 14:12 ID:NmdFgil6
必死だな。死ねよ
お前が消えるまでこのスレッドを荒らす
778nobodyさん:02/04/29 14:18 ID:???
>>777
おまえ、風呂入ったか?くさいよ。
779あぼーん:あぼーん
あぼーん
780nobodyさん:02/04/29 14:43 ID:???
Perl/Tkに詳しい人お願い。
perl/tkで「何か」を作ることは出来る?
781nobodyさん:02/04/29 16:10 ID:D6ncuE9T
Perl/Tkでテキストウェジットっていうのかな?
ブラウザで言うところのTextAreaに長文の文章入れると文字化けしません?
文章コピーしてTextAreaに貼り付けた瞬間に文字化けします。
Linux+Perl5.005_03+Perl/Tk800.23+日本語パッチ、なんですけど。

↓ソースはこんな感じ。
$ta2=$mw->Scrolled(
"Text",
-scrollbars => 'se',
-height => 5,
-width => 35,
-wrap => 'none',
)->pack();
782nobodyさん:02/04/29 17:08 ID:???
>>780
昔一瞬作ろうと思ったけどすぐ止めた。
変な形のWindowの作り方がわからなかったから。
まぁ、四角い箱の中で動くのならなんとかなるんじゃないか?
俺は作らないけど。
783nobodyさん:02/04/29 20:03 ID:NmdFgil6
>>780,781
お前らには無理
784nobodyさん:02/04/29 20:18 ID:???
>NmdFgil6
ごくろうさま
785nobodyさん:02/04/29 20:33 ID:???
786782:02/04/29 21:27 ID:???
げ、出来るのか・・・・
とりあえずブックマークした。ありがとー。
と言うわけで頑張れ>780
787nobodyさん:02/04/29 21:43 ID:NmdFgil6
(゚Д゚)ハァ?
788nobodyさん:02/04/29 22:40 ID:???
>>771
>>くだらなくない話題は見る人が見ないと基地外発言と勘違いされます。
つまりこういう人か? >>772-774 (w
789702:02/05/02 03:49 ID:bk99oFiJ
先日、WindowsマシンでThread.pmを使おうともがいていた702です。
どうしても、Threadが使いたかったので、Linuxに、perl5.005_03を
5005threadでコンパイルしました。

LWPモジュールを使って、CSVファイルから読み込んだ複数のURLに
GETするということをやっているのですが、これをThreadを使って、
同時にやると「セグメントエラー」を起こしてしまいます。
実際にエラーが起きているのは、HTTPリクエストを送って、
サーバーからのレスポンスを待っている部分です。

#HTTPリクエスト
$ua=new LWP::UserAgent;
$ua->agent($user_agent);
$ua->timeout($timeout);
$req=new HTTP::Request('GET',$url);

↓ここから
$res=$ua->request($req);
if($res->is_error)
{
print("$url($floor) => エラー [$time]\n");
return(1);
}
$body=$res->content;
↑ここまで
790702:02/05/02 03:53 ID:bk99oFiJ
789で起こる「セグメントエラー」はエラー箇所をlock関数でlock
すれば回避できるのですが、それではThreadにした意味がありません。
何か対処法はないものでしょうか?
791nobodyさん:02/05/02 04:02 ID:???
Thread.pmってのがよくわからないので何とも言えないが、
cygwin perlでfork()使うとか、Win32::Processじゃダメなの?
792nobodyさん:02/05/02 04:23 ID:Opu6NMoF
ぷぷぷ分からないなら分からないと初めから言えよ(ppp
793702:02/05/02 04:46 ID:bk99oFiJ
Win32::Processってプログラム単位の呼び出しになるんですよね?
ではなくて、サブルーチン単位で処理を並列化したいのです。
(うまく言えてるかな?)Win32::Threadみたいなモジュールないですかね?
あと、上記789の問題は、LWPモジュールが並列処理に対応した作り方に
なっていないのではないかと勝手に考えているのですが・・・
どうなんでしょうか?
794nobodyさん:02/05/02 05:20 ID:???
forkでよくねーか?
795nobodyさん:02/05/02 06:54 ID:???
IO::SelectとIO::Socketの組み合わせで擬似的に並列処理するとか。
796nobodyさん:02/05/02 08:21 ID:???
>>793
スレッドの独立性または排他処理は万全?
797nobodyさん:02/05/02 11:34 ID:???
Win32のfork()って、OSから見るとスレッドじゃなかった?
違ってたらスマソ。

そもそもLWPってthread-safeだったっけ。
5.005でthreadオンにしてコンパイルすると、
$_が大域変数からレキシカルに変わるけど、その辺大丈夫?

あと、これは念のため聞くだけだけど、各スレッドごとにuaをひとつ作ってるよね。
798702:02/05/02 18:06 ID:???
>>796
>スレッドの独立性または排他処理は万全?
排他処理なんですけど、よく分かってないと思います。
スレッド内でmy宣言した変数に関しては排他処理してません。
グローバル変数に関しては、排他処理をしています。
スレッド内から呼び出すサブルーチンは排他処理をしていません。
(そのサブルーチン内で使う変数は全てmy宣言しているからです。)
こんな感じでいいでしょうか?

>>797
>そもそもLWPってthread-safeだったっけ。
thread-safeで作ってないとアウトなわけですね。

>5.005でthreadオンにしてコンパイルすると、
>$_が大域変数からレキシカルに変わるけど、その辺大丈夫?
特に問題ないと思います。

>あと、これは念のため聞くだけだけど、各スレッドごとにuaをひとつ作ってるよね。
はい。
799nobodyさん:02/05/03 10:14 ID:6+RS1vf9
ばーkぁ
800nobodyさん:02/05/03 10:26 ID:???
>>799←典型例
801nobodyさん:02/05/03 10:48 ID:6+RS1vf9
>>800
必死だな(w
802nobodyさん:02/05/03 10:49 ID:???
>>801
お前がな。
803nobodyさん:02/05/03 10:53 ID:6+RS1vf9
>>802
お前がな。


804nobodyさん:02/05/03 13:21 ID:???
> 6+RS1vf9
お前、perlがあると現れるな。
どうせperlしかわかんねーんだろ。
しかもこういう無意味な荒らししか出来ないし。
……同情するよ。
805nobodyさん:02/05/03 13:25 ID:6+RS1vf9
>>804
php no sure ni itte kimasu!
806nobodyさん:02/05/03 13:29 ID:6+RS1vf9
phphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphp
807nobodyさん:02/05/03 13:43 ID:???
>>804
お願いだからこれ以上被害拡大させないでくれ・・・・
808nobodyさん:02/05/03 13:49 ID:6+RS1vf9
もう来ません。さようなら
809nobodyさん:02/05/03 13:59 ID:???
あるある厨房大辞典 その3
もうこねぇよ!

また来る。
810nobodyさん:02/05/05 04:04 ID:???
.
811nobodyさん:02/05/06 01:59 ID:???
程度の低いスレだな。
812nobodyさん:02/05/06 11:09 ID:???
ログ詰まり?
かちゅ動作test
813nobodyさん:02/05/06 14:43 ID:???
>>812
あちこちのスレにゴミレスすんなヴォケが。
あぼーんされたんだよ。
「あぼーん」って知ってるか?
814nobodyさん:02/05/06 18:32 ID:???
>>813
申し訳ない。
明らかにログ詰まり起こしてそうだったので、
以下のテストに使わせて貰いました。

2ちゃん専用ブラウザ「かちゅ〜しゃ」Part63
http://pc.2ch.net/test/read.cgi/software/1020404962/607
815nobodyさん:02/05/07 21:20 ID:PMyxHEA3
jcode.plで

[回答]

っていう文字列を含む
テキストファイルの文字コードを
eucからjisに変換したんですけど
”[回答]”の部分だけ変換されません。(前のコードのまま)
これってバグですかね?
816nobodyさん:02/05/07 21:43 ID:???
>>815
で、JISとして表示すると文字化けになるのかい?
万が一そうだとしたら、バグだな。
817nobodyさん:02/05/07 21:52 ID:???
>>815

ここじゃなくて歌代さんにきけって。もちろんドキュメントを読んでからだけど。
818[perl:3137]:02/05/07 22:31 ID:???
>>815
Perl Q&A MLととマルチポストかよ。最悪だな。
819nobodyさん:02/05/07 22:45 ID:???
つか余裕で変換されるんですけど
820nobodyさん:02/05/07 23:36 ID:???
821nobodyさん:02/05/07 23:38 ID:???
このスレも終わりだな。
822nobodyさん:02/05/08 07:50 ID:WRPrJe8I
CE用のPerlって日本語が通らないのですが、
なんとか通す方法ないですかね〜
823nobodyさん:02/05/08 08:49 ID:???
>>822
ない
824nobodyさん:02/05/08 17:15 ID:???
>>822
EUCで処理すればいいんでないの?
825nobodyさん:02/05/09 08:09 ID:x/QZinB2
>824
CEのPerlではPerlIDEというスクリプト打ち込み&実行用のインターフェースが
あるんですが、これがSJISになってしまうみたいです。EUCのスクリプトを直接
Perlに関連付けて実行したら日本語とおりました!ありがとう!
826nobodyさん:02/05/17 23:27 ID:KFbMHMgY
アレが上位にあるのはちょっとね…
827nobodyさん:02/05/18 10:43 ID:???
アレとは?
828nobodyさん:02/05/19 09:48 ID:0aeIvu6E
5.8.0まだ?
829nobodyさん:02/05/19 14:12 ID:???
Storable2.0でた
830Perlしさん:02/05/20 01:18 ID:???
なんすかそれ?
831nobodyさん:02/05/20 08:51 ID:???
>>830
リファレンスをファイル等に保存できるような形に変換する。

以下StorableのSYNOPSISよりコピペ

use Storable;
store \%table, 'file';
$hashref = retrieve('file');

use Storable qw(nstore store_fd nstore_fd freeze thaw dclone);

# Network order
nstore \%table, 'file';
$hashref = retrieve('file'); # There is NO nretrieve()

# Storing to and retrieving from an already opened file
store_fd \@array, \*STDOUT;
nstore_fd \%table, \*STDOUT;
$aryref = fd_retrieve(\*SOCKET);
$hashref = fd_retrieve(\*SOCKET);

# Serializing to memory
$serialized = freeze \%table;
%table_clone = %{ thaw($serialized) };

# Deep (recursive) cloning
$cloneref = dclone($ref);

# Advisory locking
use Storable qw(lock_store lock_nstore lock_retrieve)
lock_store \%table, 'file';
lock_nstore \%table, 'file';
$hashref = lock_retrieve('file');
832nobodyさん:02/06/02 14:47 ID:???
Perl5.8-RC1きた。

http://search.cpan.org/search?dist=perl-5.8.0-RC1

個人的に心配なのはExtUtils::MM_Win95。
これ、バグがあんだよね。どうしたもんだろ。
833nobodyさん:02/06/02 14:47 ID:Jwd6tv1U
age忘れ。
8341:02/06/03 01:32 ID:???
糞スレあげるなヴォケ
835lo:02/06/04 18:37 ID:???
Perl5.8キター
8361:02/06/04 19:55 ID:???
どうでもいいことで上げるな。
837lo:02/06/04 22:30 ID:???
>>836
ハァ?

お前にとって、どうでもよくないことを言ってみろや
838nobodyさん:02/06/04 23:09 ID:???
>>837
ムキになるなって(わら
たかがバージョンアップ程度で何のネタもないのに上げるな。アホか
839nobodyさん:02/06/04 23:13 ID:???
>>835,837
気にするなよ、このスレどう見ても変なのが居るだろ?
840nobodyさん:02/06/04 23:17 ID:???
>>839
お前みたいな偽善者とか、な。
うざいコテハンを全員追い出して殺ったんだから、少しは感謝しろ。
一年以上たってもPART2にも行かないスレが糞スレ以外の何なんだよ。え?言ってみろ(p
841nobodyさん:02/06/04 23:19 ID:???
最初の方は良い感じだったね。このスレ...。
842nobodyさん:02/06/04 23:23 ID:???
はいはい。よかったね
843nobodyさん:02/06/05 10:07 ID:???
>>738>>742
お前まだ居たのか。しつこい粘着だな…
844nobodyさん:02/06/05 13:00 ID:???
5.8が正式リリースされたら今度こそJPerlは要らなくなるね。
って元々使ってなかったからイイけど。
845nobodyさん:02/06/05 17:36 ID:???
----------------------------------------------------------------
                  終了
----------------------------------------------------------------
846nobodyさん:02/06/05 17:36 ID:???
----------------------------------------------------------------
                  終了
----------------------------------------------------------------
847nobodyさん :02/06/05 22:00 ID:???
845 がウザ書き込みを行いました。
846 がウザ書き込みを行いました。
848nobodyさん:02/06/08 23:38 ID:???
つーかさっさとWinでGTK+が使えるようにしてほすぃ
849nobodyさん:02/06/09 16:18 ID:???
自分でやれよ。
できないなら黙ってろ。
850nobodyさん:02/06/09 16:53 ID:???
>>849
ずっとこのスレ観察してんの?ゴクロウサマ
851nobodyさん:02/06/09 17:16 ID:???
何か間違ったことでも書いたか?
誰と混同しているのかは知らんが。
852nobodyさん:02/06/10 07:57 ID:???
うっせーはげ!
853nobodyさん:02/06/15 14:19 ID:???
aged
854nobodyさん:02/06/15 14:29 ID:AknjTxRC
214 名前:213 :01/10/20 12:02 ID:fFGjQToc
先程お願いしましたが、まだ削除されていません
事実無根です
早急に削除して下さい
http://kaba.2ch.net/test/read.cgi/company/997171282/699

215 名前:削除屋三太郎 ★ :01/10/20 12:09 ID:???
>>213-214
http://www.2ch.net/guide/adv.html#saku_guideに
>法人・公的機関の取り扱い
>原則放置
> 法人・企業については、社会・出来事カテゴリ内では、批判・誹謗中傷、
>インターネット内で公開されている情報、インターネット外のデータソースが不明確なもの、は全て放置です。

とありますので、放置とさせていただきます。

260 : :01/10/23 10:54 ID:iMDesK4O

> 法人・企業については、社会・出来事カテゴリ内では、批判・誹謗中傷、
>インターネット内で公開されている情報、インターネット外のデータソースが不明確なもの、は全て放置です

おいおい、データソースが不明確だからこそ削除するんだろうが(苦笑
855nobodyさん:02/07/05 00:17 ID:???
afr
8561:02/07/05 23:31 ID:St7kmpIx
このスレッドの削除依頼を出してください。
857japh ◆J.5V8ta6 :02/07/10 16:13 ID:SqtQZzsy
Perl 6開発の補助金が底を尽きる
http://slashdot.jp/article.pl?sid=02/07/10/057238&mode=nested

寄付したいけど金がない…
858nobodyさん:02/07/10 16:54 ID:lBfYsgML
ツールスレより引っ越してきました。
例えば100ページのファイルの中に書かれている文字を探し出して
該当する箇所の全部を一気に変換したいんです

文字列aaaa→文字列bbb

perl入ってるし、サーバー起動してMS-DOSで
処理したいディレクトリに移動してから
perl -i.bak -e "s/aaaa/bbb/g" *.txtしてもできませんでした
漏れ使い方間違ってるでしょうか?

.cgi書き換えの場合は、
perl -i.bak -e "s/aaaa/bbb/g" *.cgi
ですよね?

それからそのディレクトリの下のサブディレクトリまで一気に変換するには
どうしたらよいでしょうか?
859japh ◆J.5V8ta6 :02/07/10 21:29 ID:???
>>858
-pスイッチが抜けてるのと、
command.com(多分cmd.exeも)はワイルドカードの解釈をしない為だね。

ワイルドカードの解釈は、適当なモジュール作って実行前にuseさせるようにすれば良し。
面倒ならコレ(使ったこと無いけど);
http://search.cpan.org/search?mode=module&query=AutoGlob
860858:02/07/10 23:06 ID:???
>>895
レス有難うございます。
そうですか、他の場面でもワイルドカード解釈しなくて変だなぁと思っていたところありました。
勉強になりました。
861 ◆LZJ2qcRk :02/07/18 13:38 ID:DwV2l5uY
perl 5.005_3からperl 5.6.1にバージョンアップしたら

Barkley_DBへのtieが出来なくなっちゃって困ってるんです。

use DB_File;
tie(%db,"DB_File","./filename",O_CREAT|O_RDWR,0666) | die;

で5.005_3で動いていたのが、5.6.1ではそのまんまdieしちゃってるんです。
perl -d使ってもtie出来ない理由がわからないんです。

どこチェックすればいいんでしょう。
862861:02/07/18 13:39 ID:???
あ、use Fcntl;もしてます。
863名無しさん@お腹いっぱい。:02/07/18 14:58 ID:???
tie(%db,"DB_File","./filename",O_CREAT|O_RDWR,0666) || die;
の間違いじゃないの?
864861:02/07/18 15:34 ID:DwV2l5uY
>>863
あ、そうです。そうなってます。
865nobodyさん:02/07/18 15:38 ID:???
>>861
バージョンアップしたのはPerlだけ?
dbパッケージがアップグレードされちゃったりしてると
db_dump-1.85+db_load(名前はうろ覚え)とかでDBを作り直さないと
いけないよ。
866nobodyさん:02/07/18 15:42 ID:DwV2l5uY
>>865
dbアップグレードしてしまった可能性あります。

いま使っているdbというか、dbのファイルがどのバージョンで作られたものか
調べる方法ないでしょうか。

いちおう現dbはdb2_dumpで出力可能でした。
867:02/07/18 16:07 ID:24XEpTfj
868nobodyさん:02/07/18 16:11 ID:???
>>866
Linuxとかだったら file filename ででない?
これまたうろ覚えで申し訳ないのだけど。

でもdb2_dumpで読み込めるんだったらまず1.85あたりだと思うけど。
とりあえずdb_dump-1.85(だかなんだか)で読み込めるかどうか
やってみたら?
869nobodyさん:02/07/18 16:27 ID:DwV2l5uY
>>868
HASH Version 5ってでました。
db2_dump old_file | db_load new_file
したら file new_fileはHASH Version 7って出たので
これでたぶんアップデートは出来たんだと思いますが
このnew_fileも読み込めませんでした。

ちなみにこのへんのファイルはどれをえらんでも
db_dump185 filename では
invalid argumentがでてしまいます。
870nobodyさん:02/07/18 16:31 ID:???
>>869
むー、じゃあ違うんだな。ごめん、あとはエラーとかもっと詳細が
わからないとわかんないや。
871nobodyさん:02/07/18 16:34 ID:???
ま、素直に$!を晒しましょう、と。
で、>>863は確認したのかな?
872nobodyさん:02/07/18 16:45 ID:DwV2l5uY
>>871
それ(863)は確認済み、というか転記ミスだったので。

$!ってエラーの原因ですね。
いまdieで$!出力するように書き換えたら

Invalid Argument at dbmview.pl line 10 
って出ました。dbm_dump185のinvalid argumentと似てますね。

この辺かな。
873861:02/07/18 16:48 ID:DwV2l5uY
ワショーイ!
http://member.nifty.ne.jp/hippo2000/perltips/db_file.htm
にInvalid argumentについての説明がありました。

でもここから解決はまだ遠そうだな。
874861:02/07/18 20:19 ID:???
875861:02/07/18 21:06 ID:???
新規ファイルを作ってみてわかった。

DB_File version 1.84の
tie(%db,"DB_File","test_db")で新規にDBを作ると、
file test_db の結果は
Berkeley DB 1.85 (Hash, version 2, native byte-order)となる。

DB_File version 1.65で同様にDBを作ると、
file test_DBの結果は
Verkeley DB(Hash, version 5, native byte-order)となる。

そんなわけで、version 1.84ではversion 1.65で作ったDBは読めない。
データベースのダウングレードかDB_Fileのダウングレードが必要なのか?

(なんでこうなるのかはまだ不明。)
876861:02/07/19 00:09 ID:???
DB_Fileは標準モジュールというのと、
自分がCPANに頼り切りっていうのこと、あまりこの問題に深く関われないことを
考慮して、とりあえずperl5.005に戻しました。悔しいけどこれで問題解決。

こんど5.6にするときは、DB関係はテキストに書き出しておこう。
877nobodyさん:02/07/19 10:00 ID:???
教えてPerlの神様

こんなこと出来ますか?
具体的には

$num = 10;
for ($i = 1 ; $i <= $num;$i++){
などとしてこの中で

$iの値に応じたスカラー変数
$hoge1 $hoge2‥とかが使えるようにしたいんだけど
どうしたらいいんでしょう?
878nobodyさん:02/07/19 10:14 ID:???
配列じゃだめなのか?
@num
879nobodyさん:02/07/19 10:20 ID:???
自己フォロー

$num =10;
for ($i = 1 ; $i <= $num;$i++){

eval "\$hoge$i = $i";

print "$i\t";
print "${'hoge'.$i}\n";
}

おかげで出来たよ 神様ありがとう。
880nobodyさん:02/07/19 16:36 ID:???
>>879
悪い事は言わんからuse strict;して、878の言う通り配列使え。
881nobodyさん:02/07/19 16:46 ID:???
>>880
悪い事もたまには言え!
882????????:02/07/20 23:25 ID:SBT6j5SN
883nobodyたん:02/07/21 00:14 ID:???
とりあえず、入れてみた。

気になるのはこの点だな。
- バイナリー非互換:
主に PerlIO の導入により、 Perl 5.8 は以前の Perl 5 XS モジュール
との互換性がありません。XSを含むモジュールに関しては、再コンパイル
の必要がある点に留意してください。もちろんスクリプトに関しては以前
の Perl 5 との互換性が保たれています(以下に挙げる例外を除く)。

で、いまのところこんな感じで入っている。
/usr/bin/perl = 5.005
/usr/local/bin = v5.6.1
/usr/local/perl5.8/bin/perl = v5.8.0
うーむ。
884nobodyさん:02/07/21 00:15 ID:???
さぁ、みんなでPHP
885nobodyさん:02/07/21 08:13 ID:???
程度の低い書き込みばっかり。ぷっ
886nobodyさん:02/07/21 08:19 ID:???
>>885←典型例
887nobodyさん:02/07/21 08:36 ID:???
事実だからしょうがない。
次スレは要らないな。
888nobodyさん:02/07/21 08:59 ID:???
>>887
俺はお前の方がいらないと思うぞ。
自作自演カコ悪い。
889nobodyさん:02/07/21 09:05 ID:???
このスレッドのどこに「程度の低くない」書き込みがある?
自作自演と決めつけるな妄想野郎
890nobodyさん:02/07/21 09:08 ID:???
>>889
解決した問題はすべて程度が低いわけだが。
そんなこと尋ねるオマエは一番くだらないよ。
891nobodyさん:02/07/21 09:09 ID:???
>>885-890
           ___
    .      |(・∀・)|
     .      | ̄ ̄ ̄   ジサクジエン共和国
         △
        △l |
   __△|_.田 |△_____
      |__|__門_|__|_____|_____
892nobodyさん:02/07/21 09:12 ID:???
意味不明。あ、電波君か。
まあ、せいぜいのこのスレで馴れあってテクださい。
893nobodyさん:02/07/21 09:17 ID:???
>>892
2ちゃんねるの低レベルな洒落も理解できんか。
人間のレベルで問題あるぞ。
894nobodyさん:02/07/21 09:19 ID:???
>>892
まさにお馬鹿の典型書き込みで終了ですか。
その程度が程度の高いことを何ひとつ書けない
オマエの言い訳なら初めから来るなよ。

895nobodyさん:02/07/21 09:23 ID:???
>>892
分析結果。

無数 件の該当事例が見つかりました。

自分が不利になったため捨てぜりふを書き逃げ出す。
厨房の典型的な逃げパターンです。
896nobodyさん:02/07/21 09:28 ID:???
5.8.0が出たので久しぶりに来たら不毛なことになっているな。
なんつーか以前のメンバーは何処逝ったね?
897nobodyさん:02/07/21 09:33 ID:???
>>896
2chでまともな話をしようとする方が馬鹿げてると思いますがね。
貴方にとって有益でも、周りの人間から見れば低レベルで下らないことでしかない時も多いですからね。
可哀想な人だ。
898nobodyさん:02/07/21 09:34 ID:???
>>897
>2chでまともな話をしようとする方が馬鹿げてると思いますがね。
反論に値しない。
899nobodyさん:02/07/21 09:35 ID:???
>>897
>貴方にとって有益でも、
それでいいじゃん。自分の益になる情報が得られる。それが目的だ。
900nobodyさん:02/07/21 15:13 ID:???
>>897 はただの電波だから無視しとけ.
901nobodyさん:02/07/21 16:14 ID:???
>>900 無視できない人が多いんですよ。君みたいに(わら
902nobodyさん:02/07/22 08:49 ID:???
>>901
がんばれよ。電波でもきっと良いことあるさ。
903nobodyさん:02/07/22 21:14 ID:???
>>902
電波は常にいいことだらけかと。
不幸なのは周りかと。
904nobodyさん:02/07/25 07:03 ID:???
このスレッドで再び有益な話は出来ないものか。
905nobodyさん:02/07/26 11:51 ID:JxVLPbo8
空気を読まずに質問w

XSを使用してperlとCとの構造体のデータのやりとりをしたいんですが。

例えば
C側定義構造体
typedef struct data{
char aa[20];
char bb[20];
int cc;
} DATA;

というものを定義して
samp::samp1(DATA *aaa)

で受け取りたいと。
typemap T_PTROBJ

でマッピングした場合、perl側のデータの記述は
どのように行えばいいんでしょうか?

@aaa = ("11","111".1,"22","222",2);
@aaa = (["11","111".1],["22","222",2]);

この二つはためしてみてだめだったわけですが
906nobodyさん:02/07/26 11:52 ID:???
すいません 質問よろしいでしょうか。。
Perlでパケットの受信及びデータ解析を勉強しているんですが、
IPヘッダの中の ある1バイトの中に3ビットと5ビットの2つのデータが
入っていて、それをビット単位で分割する方法が分からないんです。

今のところ $OneByte という変数に
その1バイトのデータを格納しているのですが。。。

どなたかご存知の方がいらっしゃいましたらご指南お願いします。
907nobodyさん:02/07/26 11:54 ID:???
>>906

11100000とAND
908nobodyさん:02/07/26 11:55 ID:???
>>907
ただ5ビット右シフトでいいのでは?
909age:02/07/26 12:25 ID:???
910nobodyさん:02/07/26 16:41 ID:???
>>905
分かりづらい。
911nobodyさん:02/07/26 16:44 ID:???
>>910
わからない。と書いた方が潔い。
912nobodyさん:02/07/26 17:03 ID:???
>>911
君みたいな糞厨房は消えた方がいいよ。
なにを勘違いしているのかは知らないが。
俺は>905の意図することが分かりづらい、と言っている。

>samp::samp1(DATA *aaa) #これは何? CでもなしPerlでもなし。C++ならこう書けるが。
> typemap T_PTROBJ # 何をマッピングしたのか書いていない。
>@aaa = (["11","111".1],["22","222",2]); # これは何を意図しているのか。
#aaメンバに11,bbに111,ccに1が入って...ということなのか。これでうまくいくはずはないが。
913nobodyさん:02/07/26 17:10 ID:???
殺伐としたスレッドですなぁ〜
914nobodyさん:02/07/26 17:14 ID:???
>>913
夏休みですから。

「今年の夏の目標はCGIだ!」

で、ちょっと勉強した中学生が調子に乗って回答者のまねごとと。
915nobodyさん:02/07/26 20:26 ID:???
>>1
板違い。
ム板でやれヴォケ!!
916nobodyさん:02/07/26 20:42 ID:???
>>915
このスレッドが立った経緯ぐらい知っておけ阿呆。
917906:02/07/26 21:07 ID:???
>>907-908
あ なるほど。。ビットをシフトさせるんですね
全然思いつきませんでした。。(汗

昨日からずっと悩んでいただけに凄く嬉しいです。
ありがとうございました。

この板には1年振りぐらいに来たんですが、
ログを見ていると以前よりも煽り、叩きがひどくなっていて
正直質問しようか迷ったんですが。。
まだまだ親切な方がいるんですね また来ます。
918nobodyさん:02/07/26 22:22 ID:X9MpLpMf
>>912
ええとちゃんと書きます。ただしXSソースになりますが

919905:02/07/26 22:41 ID:X9MpLpMf
samp.xs
--------------------------
#include <stdio.h>
(中略)
typedef struct data{
  char aa[20];
  char bb[20];
  int cc;
} DATA;
MODULE = samp PACKAGE = samp
void
samp1(aaa)
  DATA *aaa

  CODE:
  while(0){
    //構造体のデータ処理
  }
----------[eof]-----------

typemap(データ型定義ファイル)
--------------------------
DATA *<tab>T_PTROBJ
----------[eof]-----------

ここまでがxsのソースと、perlとの受け渡しのデータ型定義です
920905:02/07/26 22:41 ID:X9MpLpMf
>>919の続き
test.pl
--------------------------
#/use/local/bin/perl
use samp;
#Cの(xsの)ソースに引き渡すデータを作成(仮に$aaa)

&samp1($aaa)
----------[eof]-----------

起動をかけるのはtest.plで、呼び出すのが、samp::samp1()になります。
要は、perlのソースから、Cにデータを渡して処理したいのですが、その
データを構造体で受け渡ししたいということです。そのときperl側でのデー
タの定義はどうすればよいか教えて欲しかったのです。
単に要素を配列に入れるだけでは、アンマッチが発生するようです。
921nobodyさん:02/07/26 22:57 ID:???
>>919
そのwhile(0)はなんのためにあるの?
922 ◆JAPH9PWA :02/07/27 00:03 ID:???
typemapには SV <-> Cのデータ型 の変換コードを
"自分で"書かなきゃいけないんだよ。大変だけど、Perlはそこまでは面倒を見てはくれないよ。
とりあえずtypemapファイルの構文を勉強してください。
ExtUtilsディレクトリにあるデフォルトのtypemapも参考になるよ。

923nobodyさん:02/07/27 08:18 ID:klNDdAyC
Perlで日付の加減などを行うモジュールに、Date::Calcがありますが、
telnetを使えないレンタルサーバで使いたいので、
同じフォルダに入れるだけで使える手軽な日付計算ライブラリないですかね?
924nobodyさん:02/07/27 20:55 ID:???
Perl初心者コーナーはスレ違いらしいので、此方で質問させていただきます。。
ファイルのタイムスタンプを変更したいのですが、可能でしょうか?
925 ◆JAPH9PWA :02/07/27 22:24 ID:???
ん〜む。perl5.8.0をmingw-gccでビルドしようとしたけど、上手く行かなかったなぁ。
5.7はビルド出来たんだけど…。やっぱり無理せずActivePerlを待とう。

>>924
可能か否か、という答えが欲しいの?そりゃ可能だけど。
でも多分知りたいのは可能か否か、じゃ無くてutime()関数のことだよね。
Perl初心者スレでは、スレ違いを指摘したんじゃなくて、
その質問の仕方が悪い、ということを指摘されたんだと思うよ。
926924:02/07/28 01:20 ID:???
有難う御座いました。出来ました。
>その質問の仕方が悪い、ということを指摘されたんだと思うよ。
そのままの質問だったので、書かなくても解る事をだらだら書いてうざがられるよりは良いかと思ってました・・
ボキャブラリーが少なくて申し訳ないです。
927 :02/07/28 08:14 ID:0sVNzuOf
すいません、文字列の MD5 を取りたいのですが、
Digest::MD5 をインストールしないでできますか?

CGI で使おうと思っているのですが、同じディレクトリに
上記に付属の MD5.pm を置いて use MD5; とか記述
するだけではできませんよね?

rfc1321 の日本語版は読んでみたのですが、全然
わかりませんでした。
928nobodyさん:02/07/28 10:16 ID:???
p://zurubon.strange-x.com/uploader/md5_pl.txt
多分動く。がんがれ。
929927:02/07/28 16:04 ID:???
>>928
見事に MD5 コマンドと同じ結果が出ました。
有難う御座いました ヽζ゚)ノ
930nobodyさん:02/07/30 23:42 ID:ZOuiEpQs
現在perlで quota の設定ができるものを作成中なのですが、
通常であればシェルで

edquota ユーザー名 (Enter)

でエディタが起動して

Disk quotas for user okada (uid xxx):
Filesystem blocks soft hard inodes soft hard
/dev/hdax xxx xxxx xxxx xx x x

上記のテンプレートを編集する事になるのですが、
これを Perl のスクリプトで変更することはできないのでしょうか?

exp) perl ./edquota.pl ユーザー名 blocks値 soft値 hard値 inodes値 soft値 hard値・・

Linux Slackware8.0
Perl5.6 を使用しております。

それでは宜しくお願いいたします。
931nobodyさん:02/08/05 22:26 ID:???
>>930 http://search.cpan.org/search?dist=Quota
なんてのがあるらしい。使ったことはないけど。
932マルチです:02/08/09 23:54 ID:yPKlUuWH
http://pc3.2ch.net/test/read.cgi/tech/993665608/412
↑人がいません
Perl6でのファイルの開き方がわかりません。
おしえて!
933nobodyさん:02/08/10 01:37 ID:???
マジか?
そんなドラスティックな変化は望んでないんだが・・・
@arry[0]
%hash{key}
う〜ん
934nobodyさん:02/08/10 01:42 ID:???
http://www.google.com/search?num=100&hl=ja&ie=UTF-8&oe=utf-8&q=PERL6+open+function&btnG=Google+%E6%A4%9C%E7%B4%A2

どのRFCが新しいのか分からん
後方互換性頼りで良いじゃん
935nobodyさん:02/08/10 01:49 ID:???
エンコードでもするんなら兎も角ファイルが開けないってのはヴァカだと思われ
936932:02/08/10 01:51 ID:???
Perl6スレの人ってRFCとかただ記事みて議論してるだけなんですかね?
自分がいまテストしてるPerl6はParrotにふくまれてたやつで
昨日からopen関数が実行できねーよ!みたいな。
937nobodyさん:02/08/10 02:30 ID:???
取り合えずその調子じゃ誰も相手してくれないんじゃない
世の中の人間はアンタの50年来の嫁じゃ無いんだから
言葉に乗せなきゃ何言いたいのか解らないよ
そんなに大変ならPERL6のMLに投げてみ
HELP PLZ!!!! ってさ
938932:02/08/10 02:36 ID:???
>>937
まぁ忠告は心に刻んでおくが
技術的な反論はできんのか。
939932:02/08/10 02:37 ID:???
>言葉に乗せなきゃ何言いたいのか解らないよ
これが俺には何を言ってるのかわからん
940nobodyさん:02/08/10 02:56 ID:???
>>1 糞コテは死ね。
941nobodyさん:02/08/10 04:02 ID:SdI5yvJj
ふぁいる開く時は

open FH,file;

でいいみたいだよ
がんばってね★ミ
942nobodyさん:02/08/10 04:21 ID:???
ま、そうなるわな(笑
ここguzipが居なくなって廃れたなあ
みんなPerl6入れてるの?
早くParrotでスピード上げて遊びたいな
943932:02/08/10 04:45 ID:???
$ ./perl6 -w my5ofile.p6
"arse error [line 2]: Invalid statement near "open FH,"my4.p6";
Can't call method "tree" on an undefined value at ./perl6 line 183.
============================================================
[my5ofile.p6]
sub main(){
open FH,"my4.p6";
print "ujgh\n";
}
944_gunzip:02/08/10 05:21 ID:???
Perl6では、ファイルを開く際は、
my $fh = open $path : mode => 'r' or die "Can't open";
とします。

parrot-latest(8/9現在)では、open関数は"not yet implmented"です。
945932:02/08/10 05:34 ID:???
糞コテ師匠キタ━━━━━(゚∀゚)━━━━━!!!!
>>944
サンクス
946nobodyさん:02/08/10 15:27 ID:???
なんだコイツ
死ねよお前
947nobodyさん:02/08/10 15:30 ID:???
なんだコイツ
死ねよお前
948nobodyさん:02/08/10 15:43 ID:???
なんだコイツ
死ねよお前
949148:02/08/10 15:51 ID:???
削除以来出しました。
950nobodyさん:02/08/10 16:18 ID:???
Perlで"真に"グローバルな常数を作ることは出来ないのでしょうか?
常数(use constant)を別モジュールにまとめて利用しようとしたのですが、
呼び出し元ではその常数を使えますが、別に呼び出しているモジュールでは
strict subsに引っ掛かってしまいます。
no strict subsをするしか無いのでしょうか。
951nobodyさん:02/08/10 16:21 ID:???
コード例を。
952nobodyさん:02/08/10 16:27 ID:???
つか、そのモジュールでもuseすればよか。
953nobodyさん:02/08/10 22:43 ID:M8XpcEtN
ご返答ありがとうございます。

>>951
スペース確保出来次第アップします。
今はまだアップロードできる場所ありません。

ちなみに常数モジュールでは、

package Hoge;

use strict;
use base qw(Exporter);
@Hoge::EXPORT = qw(
const1;
);

use constant const1 => 0;

1;

みたいにして、本スクリプトおよび、
そこから呼び出されるモジュールでuseして、双方で利用しています。

>>952
そのモジュールでもuseしているのですが・・・
954nobodyさん:02/08/10 23:30 ID:???
試してみたが、OKだったよ。
955 ◆JAPH9PWA :02/08/12 09:46 ID:???
>>950
何か勘違いしてる予感。
それだと多分no strict 'subs'しても期待する動作はしないでしょ。

ちなみにmainパッケージで定数を定義すれば常に"::"接頭子で参照できるよ。
普通は個別にimportした方がいいけどね。

package main;
use constant TRUE => 1;
package hoge;
print ::TRUE;
956nobodyさん:02/08/12 18:48 ID:???
http://search.cpan.org/
がいつの間にかリニューアルしてるのね
957Dream ▼:02/08/15 06:25 ID:???
age
958nobodyさん:02/08/15 07:34 ID:???
>>953
俺はそういうモジュールいつも使ってる。
Hoge.pmをuseしているファイルではどういうふうに使用してるの?
959エロ助:02/08/15 11:30 ID:h1WzO6+x
http://www.kemokemo.com/ 
http://www.kemokemo.com/products/picchabo/picchabo203.lzh 
上(掲示板CGI)に下(ランダム広告CGI※呼び出しによりSSI使用しない方)を設置したいのですが『インターネットサーバーエラー』になります。(;_;)
一通りパーミッション設定などを説明どうりやってみたのですが設置できないんです。。(;_;)なぜでしょう??(;_;)
どうか教えていただけないでしょうか。。(;_;)
また呼び出しのときの記述が『require 'rand.pl';  rand::main($Op1,$Op2,$Op3);』を記述しろと書いてあったので正確に記述したのですが『インターネットサーバーエラー』になってしまうんです。。(;_;)
『$buffer』でも記述したんですがだめでした。
http://taihei.cc/pc/cgis/random.html
http://taihei.cc/pc/cgis/randban11.lzh
960nobodyさん:02/08/15 11:34 ID:???
マルチは放置。                     
961nobodyさん:02/08/15 14:35 ID:oToZdaAw
CPAN重くない?
全然ファイルが落ちてこない
962nobodyさん:02/08/16 12:47 ID:???
しらん。
適切なミラーを使うべし。
http://www.cpan.org/SITES.html
963nobodyさん:02/08/16 18:12 ID:yy/Fieut
メール送信で
my ($To,$Sub,$Name,$Value) = @_;
my $FromMailAddr = '[email protected]';
my $msg;
my $smtp;
if ($MailServerActive){
$smtp = Net::SMTP->new('192.168.2.2');
if (!$smtp){
$msg = "SMTPサーバ[$Server]との接続に失敗しました\n";
$msg = jcode($msg)->sjis;print $msg;exit;
}
$Sub = jcode($Sub)->mime_encode;
$Name = jcode($Name)->mime_encode;
$Value = jcode($Value)->jis;
$smtp->mail($FromMailAddr);
$smtp->to("$To");
$smtp->data();
$smtp->datasend("Content-Transfer-Encoding: 7bit\n");
$smtp->datasend("Content-Type: text/plain; charset=\"iso-2022-jp\"\n");
$smtp->datasend("From:\"$Name\"\n");
$smtp->datasend("To:$To\n");
$smtp->datasend("Subject:$Sub\n");
$smtp->datasend("\n");
$smtp->datasend("$Value\n");
$smtp->dataend();
$smtp->quit;
return 1;
}
return 0;

このようにしてるのになぜかjphoneのメアドで受信したときのみ
タイトルが "=?ISO-2022-JP?Bッテ感じに文字化けします・・・・ナゼでしょう?
964nobodyさん:02/08/17 13:27 ID:???
漏れなら、Mail::Mailer。
965 ◆4XfSMGTg :02/08/19 00:06 ID:???
Parrotの話題でも出して見ろやカスども
966nobodyさん:02/08/19 00:09 ID:???
>>965
バカで性格悪くて誰にも相手にされない寂しがりやは悲しいよね。
967nobodyさん:02/08/19 00:21 ID:???
>>965
(´`c_,'` ) プッ
968967:02/08/19 00:23 ID:???
969 ◆4XfSMGTg :02/08/19 08:47 ID:???
チンカスども。俺を超えて見せろよ!
http://hiero_pl.tripod.co.jp/
970 ◆4XfSMGTg :02/08/19 23:13 ID:???
何か言えよ!ああ?
971mad-p ◆FaOqqhYM :02/08/20 01:15 ID:???
>>◆4XfSMGTg
Linux Conferenceかjus勉強会でParrotについて講義してください。
おながいします。
972nobodyさん:02/08/20 01:22 ID:???
>>971 「Perlの世界にようこそ」は改訂しないのですか?
973nobodyさん:02/08/20 01:30 ID:???
$a = 1 << 5;
print 'HIT' if vec($a,4,1);

でHITと表示されるのはPerlでは普通なのですか?
974nobodyさん:02/08/20 05:55 ID:???
当たり前です。
ネタ?それともvecのマニュアルも読めない馬鹿?
975nobodyさん:02/08/20 08:01 ID:5HfNqmVJ
二つのリファレンス間の関係を得るにはどうしたらよいですか?
例えば
$a = { b => { c => { d=> { e => "f" } } } };
で、
$b = $a->{b}; $c = $a->{b}{c}{d}; とあって、
&rel($b,$c) で "{c}{d}" とか返してくれるような(表記方法は何でもいいんだけど)
976971 ◆FaOqqhYM :02/08/20 08:03 ID:???
>>972
Perl5についてはエラータだけ直してます。
Perl6の本を書きたい人、編集さんを紹介してあげます(笑)。
977nobodyさん:02/08/20 11:56 ID:???
>>971
本物っていう証拠がゼロだからな、、、、
それと◆4XfSMGTgはオープントリップ#kusokote
だから。
978nobodyさん:02/08/20 12:04 ID:???
お前らみんな死ね
979mad-p ◆FaOqqhYM :02/08/21 00:10 ID:???
オープントリップってものがあったのか……。
ガクーリだよ。

しかし、Parrotを実際にコンパイルしてる人に
例会でも会ったことないので、正直どんな感じか教えてホスイ。

>>936
図星です。すんまそん。
おいらは勉強会とかでえらそうなこと言ってるけど、
ApoとExe(とRFCとperl6-language)あたりから知識得てるだけなんで。
980nobodyさん:02/08/21 00:22 ID:???
なんだかなぁ〜本物っていう確証がないのがアレだが
オープントリップって言うのは適当に考えたもんだから気にしないでいい
cygwinがありゃコンパイルはできるはずなんだがなぁ〜。

==perl初心者コ−ナーpart14のメモ
*.p6 //perl6 のコード ->parrot/languages/perl6/perl6[perlスクリプト] 使用
*.colac //C#っぽい ->parrot/languages/cola/colacc.exe 使用
*.imc //.,,pasmとなにが違うの? ->parrot/languages/imcc/imcc.exe 使用
*.pasm //、、、アセンブラ? ->parrot/assemble.pl 使用
*.pbc //perl byte Code ->parrot/parrot.exe 使用

981メモ:02/08/21 00:25 ID:???
[colac の流れ]
./colacc.exe kusokote.colac =>a.imc
./imcc.exe a.imc =>a.pasm
./assemble.pl a.pasm => a.pbc
./parrot.exe a.pbc [実行]

[perl6 の流れ]
./perl6 test.p6 ->test.imc test.pasm test.pbc 生成 ->test.pbc [実行]

*assemble.pl自体はXSとかつかったPerlスクリプトでないのでActivePerlでも実行できた(はず)
perl6もActivePerlで動きそうだけどまぁ試したときは動かんかった。
(コンパイルしたオブジェクトコード参照してる?)
まぁassemble.plが動けばparrot.exeを試すことぐらいはできるはず。
982nobodyさん:02/08/21 00:48 ID:???
また変なコテ半が出てきやがったな。
ホント、ゴキブリみたいだな(大爆笑)
983nobodyさん:02/08/21 02:18 ID:oahOU1tj
暗号強度とかは問わないのですが、\w* でマッチするような文字列を簡単な
暗号化(ぱっと見無意味な文字の羅列に見える程度でOK)して、
別のサーバーで復号化するようなスクリプトってかけますかねぇ?
できれば、日時かなにかを暗号キーにして、1時間程度時間が経過すると
その文字列が無効になるような感じがよいのですが・・・

時間はntpdである程度シンクロしていて、多少のずれているときはあきらめるとして。
984nobodyさん:02/08/22 14:05 ID:ZyNFWurg
>>983
tr/a-zA-Z/Za-zA-Y/ とかやって、1時間毎に Za-zA-Y 部分ずらす、とか。
そのオフセット・有効時間ともに保存しておく、とか。
985nobodyさん:02/08/22 14:30 ID:???
>>984
シーザーの暗号ですな。
986983:02/08/23 00:12 ID:???
おぉぉ、なるほど、面白そうですね。試してみよー。(^^)

でも、ずらすのって、
%word(00,"Za-zA-Y"
,01,"YZa-zA-X"
,02,"X-Za-zA-W"
,03,"W-Za-zA-V"
,04,"V-Za-zA-U");
tr/a-zA-Z/$word{$time}/;

こんな感じですかね、、24パターンくらいなら大丈夫かな?
987mad-p ◆FaOqqhYM :02/08/23 13:36 ID:DBSoD3F/
>>986
tr///の変換リストには変数展開が使えないので、eval使ってね。
988名無しさん@Meadow
>>983
Crypt::OTP