5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :名無しさん@お腹いっぱい。:2001/05/31(木) 21:49 ID:bKRSBFew
・コマンドラインからの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の話題一般」
です。

25 :enhydra: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付けるのもアホらしいし

34 :enhydra:2001/06/11(月) 00:41 ID:g88SXDIU
>> 30
topとかlsこまんどのマニュアルをまんこまんどで見よ。です。

strictもwarningsもスピードなり消費リソースが気になるなら、コードをきれいにした後コメントアウトすれば済むし。おいら
は気にならないけど。
あとCGI.pm とか巨大なやつをWebアプリで使う時もmod_perlで親httpdにロードさせとけば子httpdで共有されるから実質的に
リソース(めもり)くわなくなるっすよね。
# おっとCGIよりなお話(汗)

35 :32:2001/06/11(月) 00:42 ID:???
>>33
さんきゅ! どこかでPerl/TK本見てくるよ!
ていうかmake失敗したんでこれから原因チェックせんと。

36 :enhydra:2001/06/11(月) 00:48 ID:g88SXDIU
>> 34
いかん lsこまんどじゃ調べらんない(汁)
psコマンドのマニュアルをマンコマンドで見よ。の誤りっす。

37 :名無しさん@お腹いっぱい。:2001/06/11(月) 00:51 ID:???
>>35
WIn2000ってぇとActivePerl?
ならPPMで一発じゃん?<Tk.pm

38 :35: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:???
Tkもいいけれど、Gtk-Perlもよろしく。
#Gtk-Perlのサイトって皆無に等しいのが残念...。

リンク
http://projects.prosa.it/gtkperl/
http://personal.riverusers.com/~swilhelm/perlgtk/index.html
スクリーンショット
http://personal.riverusers.com/~swilhelm/gtkperl-tutorial/calendar.html#CALENDAR-FIGURE
http://personal.riverusers.com/~swilhelm/gtkperl-tutorial/spinbutton.html#SPINNER-FIGURE
http://personal.riverusers.com/~swilhelm/gtkperl-tutorial/tree.html#TREE-FIGURE

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
鬱だ。

48 :rubbish_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:???
>>52
船渡し問題
http://piza.2ch.net/test/read.cgi?bbs=tech&key=990503990

問題クレクレ
http://piza.2ch.net/test/read.cgi?bbs=tech&key=989687023
この2つだよ。

53 :52: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();

60 :rubbish_lister:2001/06/20(水) 02:16 ID:???
overloadを使えばstatic変数であるかのように振舞う変数を作成できるような気がする。
無理かな?

61 :名無しさん@お腹いっぱい。:2001/06/20(水) 02:32 ID:???
まずはやってみせることだ。

62 :rubbish_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__

63 :rubbish_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__


但し…ネタにしかならない。

64 :rubbish_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
なるほど。出現行数で変数を識別するのかー。
面白いっす。これってオリジナルのアイデア?

66 :rubbish_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とか。アマチュアよん。

80 :rubbish_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用ゲームプログラム。

85 :S: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:???
日本語の「〜なら○○」を正規表現しようと書き始めたら泥沼だった。

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

…氏にそう。おれに日本語を教えてくれ。いやマジで。

98 :Name_Not_Found:2001/07/02(月) 20:54 ID:???
>>97
ワラタ

99 :名無しさん@お腹いっぱい。:2001/07/02(月) 21:17 ID:???
http://www.kabeya.net/linklink/navi.cgi?links=23
無修正です。

100 :_gunzip:2001/07/03(火) 01:08 ID:???
http://www.perl.com/
デザインが変わったね。

101 :名無しさん@お腹いっぱい。:2001/07/03(火) 12:24 ID:fLxGSuZs
>>100
use Perl;でも話題になってた。
Perlのメインサイトがオライリーっぽくなりすぎで興ざめだってさ。

102 :rubbish_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 になるっつうのがそもそもの間違い。

105 :rubbish_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)

108 :Perl好き: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
全くもって同感

112 :shige:2001/07/05(木) 11:19 ID:???
Ruby最高!
イエイ!

113 :106: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
あなたマジすげえ。

135 :129: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がそう)スカラー値でなくてはならない。

138 :129: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って何処が違うんでしょ。
付加分散の為?

146 :JAPU: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を探せば大抵は揃っているようですね。

148 :____________________:2001/07/19(木) 06:30 ID:???
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を奨励したい。
パイプ繋がるから。

153 :148: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,$_);}"

カレントディレクトリ(サブディレクトリは除外)限定の場合

158 :155:2001/07/20(金) 18:30 ID:69JZH5Is
>>156
>>157
すみません。訊き方方が悪かったです。
HOGEHOGEはファイル名ではなく、ファイルの中に書いてある内容です。

159 :名無しさん@お腹いっぱい。:2001/07/20(金) 20:27 ID:???
>>155
まずうまく逝かなかったスクリプトを上げるべきだと思うのだが、
いかがかな?

それが無いようであれば、「教えて君」と見なし、以後放置するよ。

160 :155: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
軽くはないでしょう・・

181 :sage:2001/08/19(日) 16:15 ID:i6ZuuVgY
>>177
http://www.perl.org/

182 :恥ずかしながら175:2001/08/20(月) 04:52 ID:???
>>176
ありがとうであります。
新しい書き方も取り入れて行こうと思う次第であります。

183 :111:01/08/27 09:56 ID:gtVoupko
>>111
すみません、誤爆です。
逝ってきます。

184 :183: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);

191 :188: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なら感激なんですが
よろしくお願いします。

195 :194: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
もう少しマトモかつ具体的な例を頼む。

197 :194: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
でも読みながら考えていろ。

199 :194: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 /

じゃだめなの?

201 :198: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__

202 :JAPU@ページデザイン変更してみたり:01/09/09 22:35 ID:???
こうしとけ。(笑)

$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/

205 :194: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__

208 :194: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;
}

209 :194: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 $_;
}
#**********************************

210 :194: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 っていうモジュール使うと便利かも。

219 :218: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使って返値でチェックしたら?

222 :JAPU@会社作ったにょ:01/09/13 16:47 ID:???
NFSでも、flockは成功するにょ。
ただ、NFS だとうまくロック出来ない場合がある... らしい。

# 何種類佳乃組合わせでためしたけど、全部成功したので "らしい" としか...

223 :217: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:???
あたりまえ。

227 :226:01/09/14 18:07 ID:???
すまん。マジ誤爆。

228 :名無しさん@お腹いっぱい。:01/09/14 23:38 ID:???
>>222
美凪組み合わせだとどうですか?

229 :217:01/09/15 01:07 ID:???
修行のためCPANのLock関連のモジュールあさってたけど、
NFSの自動判別とかしないでユーザに指定させるか、
flockは完全に無視して独自ロックだけをつかう方法が多かった
前者がLockFile::Simple、後者がFile::FlockDir、File::NFSLock

厨房は厨房らしく自動判別はやめて、ぬるく逝こうと思う。

230 :PerlHacker: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で無茶をすることは十分可能だろうけど、実験する時間がないなあ。

235 :PerlHacker:01/09/19 07:05 ID:???
全然分かりません!!!!!
教えてください!!!!!

236 :PerlHacker:01/09/19 07:08 ID:???
優しい方DOSプロンプトの使い方も教えてください!!!

237 :名無しさん@お腹いっぱい。:01/09/19 07:09 ID:???
CGIじゃ出来ません!!!!!!
Activeでも勉強して下さい!!!!!
ついでに首括って芯で下さい!!!!!!!!!!

238 :PerlHacker:01/09/19 07:12 ID:???
Activeって何ですか!!!!

239 :PerlHacker: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使った簡単なキャラクタベースのプログラム作ってるけど、
窓のサイズを途中で変更されると表示が変になったり、全く何も描画されなくなったり。
そこで質問なのだが、窓のサイズが変更されたことを知るにはどうすればいい?

244 :243: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:???
sfioおすすめ。
http://www.research.att.com/sw/tools/sfio/

247 :243: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板に池。

250 :248: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:???
>>252

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/

259 :1: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

261 :Perlあまちゅあ: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
ありゃりゃ。とんだ無駄足だったな。

269 :名無しさん@お腹いっぱい。 :01/09/27 22:18 ID:???
いや、俺は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

272 :261: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とかでもイイ鴨!
>本当ですか!! ←ハイ!!!
僕も厨房なんです!ゴメンナサイ!!!

275 :JAPU: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で探しても、
良さそうなモジュールが見つかりませんでした。

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

・マイクからの入力を受け取る方法。
・音声をネットを通して送信する方法。
・受け取った音声を再生する方法。
などが知りたいです。

279 :278:01/09/28 15:25 ID:8UXDD7TM
どなたか上記の事を出来る方法やモジュールなどを教えてください。

280 :276: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は考慮するようですが)

285 :age: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)のほうがテキストと判定されやすいような。

288 :名無しさん@お腹いっぱい。 :01/09/29 00:40 ID:???
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-)

291 :JAPU: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:???
初心者ばっかりですかココは?

297 :ぽおおおおおおおおおおおおおお:01/09/29 13:28 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:???
マジレスすんな、アホは放置しようぜ。
結局まともに文章かけないんだよこの手の輩は

301 :Perlあまちゅあ: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コンポーネント使ってんのかな?

309 :262:01/09/30 15:45 ID:FsOWX/IM
>>306
一応、メニューとかステータスバーは大丈夫なんだけど、
その他はダメっぽいですね。日本語さえ何とかなればすごく面白そうなのに・・・
http://lists.wxwindows.org/pipermail/wx-users/2000-June/002733.html
中心人物はほとんどマルチバイトに関する知識がないっぽいですね。

310 :301: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
!!!!!!!!!!!!!!

328 :1:01/10/03 05:17 ID:7eUT1aME
http://www5.justnet.ne.jp/~ttp/

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' };

358 :356 :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のソースが読めれば良いんだが…ドッチモダメナンデスヨ。

362 :JAPU@見知らぬ国のトリッパー ◆dcddJAPU :01/10/12 14:54 ID:???
えーと誤解されているようですが、私はそんなに内部に詳しくありません。
たまに必要に迫られてソースを参照しますが、この手の解説は多分できません。

# 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/

366 :365: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, <marcus@marcuspost.com>

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;

382 :Perl上級者: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

127 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)