CGIに依存しないPerlの話題一般
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2001/05/31(木) 21:49ID:bKRSBFew・モジュール、オブジェクト指向プログラミング
・Perl6や.NET対応など
・各種GUIツールキット(Perl/Tk, Gtk-Perlなど)
・他言語による拡張(Inline::*, XS, Swigなど)
についてマターリと語り合うスレッドです。
#CGI関連の話題は、なるべく専用スレッドで。
0161名無しさん@お腹いっぱい。
2001/07/23(月) 23:33ID:D.yGMh3Q0162_gunzip
2001/07/25(水) 20:21ID:???Perl.NETはbeta3になっているけれど、試した人いるかな?
(今のところWindows2000,NTでしか動作しないそうなので試せない。)
Perl.NETで、MS Windows上でもPerlで単体実行ファイル(PEじゃないが)や、
DLLを作り、それを C#, C++,JScriptから呼び出したり、逆にC#, C++のクラスライブラリを
Perlから簡単に利用できるようになるらしいな。(実際は知らんが)
0163名無しさん@お腹いっぱい。
2001/08/05(日) 06:15ID:???pack(chr(++$*+$*+++$**$*.
$*),$=))+--$* .. ord(pack
(chr($*+$*+++$**$*.$*),$=
))+--$*+$*++-(($*-$***$*)
)+$*+++$***$*-$*---$**$*,
$***$***$**$*){push@_,$_}
;foreach($***$**$*+$*/$*,
$***$**$**$*+$**$*,$***$*
*$**$*+$*,$***$**$**$*+$*
*$*-$*/$*,$**$**$**$**$*-
$**$**$*+$*,$*-$*,$**$***
$**$*-$*-$*/$*,$**$***$**
$*-$*,$***$***$*+$**$*-$*
/$*,$**$**$*-$*/$*,$**$*,
$***$***$*+$*/$*,$**$**$*
*$**$*-$**$**$*+$*,$***$*
**$*-$*/$*,$**$*,$***$***
$*+$*/$*,$***$**$*+$*+$*/
$*,$***$**$**$**$*-$**$**
$*+$*,$***$**$*-$*/$*,$*-
$*,$*,$***$**$*+$*,$**$*,
pack(chr$**$**$**$**$**$*
+$**$*+$*/$*-$*,$_[$_]);}
こんなことして遊んでいる方とかいますか?
いたら是非あなたの作品を見せてください。
0164名無しさん@お腹いっぱい。
2001/08/06(月) 00:10ID:oWP36vTo改訂(日本語)は青だよね?
0165名無しさん@お腹いっぱい。
2001/08/06(月) 00:11ID:???参考書スレッドがありました。
そっちにコピペします。
0166名無しさん@お腹いっぱい。
2001/08/06(月) 12:33ID:???うーん、その手の話題はプログラム板とかのほうが食いつきがいいんでは?
回文プログラムとかトリッキーなプログラムとかのスレあるし。
0167名無しさん@お腹いっぱい。
2001/08/09(木) 03:07ID:bI3E6lI.http://www.cpan2.org
http://www.cpan2.com
0168名無しさん@お腹いっぱい。
2001/08/13(月) 14:23ID:???my ($name, $mail, $date, $contents) = split /<>/, $line;
ってやるよりも
$line =~ /(.*?)<>(.*?)<>(.*?)<>(.*?)/;
my ($name, $mail, $date, $contents) = ($1, $2, $3, $4);
ってやったほうが速いんですね。
見やすい、書きやすい以外のsplitを使う理由があれば教えてください。
また、もっと速い方法があるならばそちらも教えていただけませんか?
0169名無しさん@お腹いっぱい。
2001/08/13(月) 15:27ID:???嘘はいけません。
my ($name, $mail, $date, $contents) = split /<>/, $line;
こっちの方が圧倒的に早い。
データ量によっては、
my @data = split /<>/,$line;
の方が早い。
my は付けない方が早い。
ちなみにスレ違い。このような話題は初心者コーナーへ。
0170名無しさん@お腹いっぱい。
2001/08/13(月) 17:00ID:???別に嘘を言いたかったわけではなくて、
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の方が速いという結果が出たから質問したんですが・・・・
これは何故ですか?
あと、どこまでが初心者コーナー行きかの線引きがわかりません。
私としては、初心者コーナーはリファレンスを引けばわかるようなことを
やるところだと思っていたのですが。
0171名無しさん@お腹いっぱい。
2001/08/13(月) 17:38ID:???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を入れ替えている)
>>初心者コーナーはリファレンスを引けばわかるようなこと
まさしく貴方は初心者コーナーへどうぞ。
0172名無しさん@お腹いっぱい。
2001/08/13(月) 19:51ID:???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)
0173名無しさん@お腹いっぱい。
2001/08/15(水) 00:30ID:???# どうでっしゃろ。
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";
0174名無しさん@お腹いっぱい。
2001/08/16(木) 00:03ID:???自分でも色んなコマンドもどき書いてるんだけど全然違います(-▽-;
モジュールの使い方とか参考になるなぁこれ、
0175恥ずかしながら
2001/08/17(金) 01:35ID:???それ故、オブジェクト指向的な書き方が未だに分からないのであります。
自分の書くコードはPerl4とPerl5がイビツに混じっているのであります。
逝ってよしでありますか?
0176名無しさん@お腹いっぱい。
2001/08/17(金) 10:43ID:xrVq7k..日本の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
0177名無しさん@お腹いっぱい。
2001/08/19(日) 02:16ID:i6ZuuVgY0178名無しさん@お腹いっぱい。
2001/08/19(日) 02:36ID:???コンパイル可能(?)なPerl6でなら…誰かやるのかねぇ。
0179名無しさん@お腹いっぱい。
2001/08/19(日) 02:43ID:???カーネルとPerl処理系のみで、システムは全てPerlで書くとか。
ダメかなぁ。知識0厨房でスマソ。
でもこれだったらスゴック小さい&軽いOSができそうだけどなぁ。
0180名無しさん@お腹いっぱい。
2001/08/19(日) 03:54ID:???軽くはないでしょう・・
0181sage
2001/08/19(日) 16:15ID:i6ZuuVgYhttp://www.perl.org/
0182恥ずかしながら175
2001/08/20(月) 04:52ID:???ありがとうであります。
新しい書き方も取り入れて行こうと思う次第であります。
0185名無しさん@お腹いっぱい。
01/09/05 16:01ID:8Hg/qZ8ICのgetchar みたいなんすけど、、ARGV??
つーかプリント文が流れて逝くだけだし、、、俺ってあほですか?
0186名無しさん@お腹いっぱい。
01/09/05 16:09ID:dfrFd246うん。
#!perl
use constant PROMPT => '( ´∀`)>';
print PROMPT;
while (<>) {
chomp;
system $_;
print PROMPT;
}
__END__
0187名無しさん@お腹いっぱい。
01/09/05 17:09ID:jg.i3l1M逝って来ます アホだ。。。
0188名無しさん@お腹いっぱい。
01/09/06 20:41ID:???組み込み関数をかなり違う動作をする関数でオーバーライドするのってどうよ?
$s = new File::Stat('foo);
$t = new Time::Localtime(time);
$c = new ChdirSaver ('..');
などの方が読みやすく安全だと思うのだが。
0189名無しさん@お腹いっぱい。
01/09/07 11:56ID:.xfvPVkw同感。普通のコード書く時はそうですよね。
ただワンライナーを書く時はオーバーライドしてくれた方が便利という背景もある。
@EXPORT じゃなくて @EXPORT_OK に書いてくれてれば良いのにね。
0190名無しさん@お腹いっぱい。
01/09/07 14:36ID:BHawRKfcuse File::Stat ();
@EXPORT に入ってるのはあくまで「デフォルト」でEXPORTするだけです。
空リストをuseに渡せばOK。
$st = File::stat($file);
0192名無しさん@お腹いっぱい。
01/09/08 00:16ID:TqV0GOBs組み込み関数の名前をオーバーライドするってのは、
こんな使えない組み込み関数は捨てちまえ!俺のモジュール使え!という
モジュール作成者の自信をあらわすものだったりして。
0193名無しさん@お腹いっぱい。
01/09/08 23:45ID:UUPZ4HXg0194名無しさん@お腹いっぱい。
01/09/09 16:18ID:???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なら感激なんですが
よろしくお願いします。
0195194
01/09/09 16:31ID:???処理モードに入るんです、各コマンドのサブルーチンは大体出来ていて
例えば、
$./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>からの入力の処理が出来ないのです。
ここに
0196名無しさん@お腹いっぱい。
01/09/09 16:40ID:???もう少しマトモかつ具体的な例を頼む。
0197194
01/09/09 17:08ID:???つまりShellをエミュレートしたいのだと思います。
tcshから、./perlshell.pl とタイプすると
perlshell$ こう言うプロンプトが出ます。
そこに
cp "dist1" "dist2" "dist3" "target" と入力した時の
<STDIN>からの入力を上手に配列(上なら("dist1","dist2","dist3","target"))
に収めたいのです。
今bashのソースを拾ってきたのですが、何故か心が重いです・・・
0198名無しさん@お腹いっぱい。
01/09/09 18:08ID:???と思いつつ少し考えてみる。
とりあえず
http://www.din.or.jp/~ohzaki/perl.htm#Tag_Remove
でも読みながら考えていろ。
0199194
01/09/09 21:46ID:???シェルのソース見てみたんですが、Cが殆ど読めないので良く分かりません
でした、ただそれらしきループが有ったんでやはり1byteづつ切り出してる
んだと思います。
取り合えずsubstrで1byteづつ切り出してるんですが、難しいです。
フラグだらけで訳が分からなくなってきた。
まずは ' の中では " が使える、" の中では ' が使える。
これを目指して頑張ってます。
パイプとリダイレクトはどうしようかなぁ、何か無理っぽいです。
0200名無しさん@お腹いっぱい。
01/09/09 21:53ID:NKqI5UNoprint `$cmd`;
で
$ perlshell rm -rf /
じゃだめなの?
0201198
01/09/09 22:18ID:???逝ってきます。
#!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__
0202JAPU@ページデザイン変更してみたり
01/09/09 22:35ID:???$arg = q/Sakura "Moe" "\"puni\"" 'hanya-n'/;
@arg = split /\0/, `perl -e 'print join "\\0", \@ARGV' $arg`;
print "$_\n" foreach @arg;
0203>>JAPUさん
01/09/09 22:53ID:???でもあまり暗いのは好きじゃないですね。鬱になりそう。
0204名無しさん@お腹いっぱい。
01/09/09 23:32ID:???psh (Perl Shell) っていうのがあるらしいんだが、参考にはなるか?
ttp://sourceforge.net/projects/psh/
0205194
01/09/10 01:25ID:???>>200 それはちょっと・・(笑
>>201
いえいえ、凄く参考になります。自分では何も思いつかないレベルなので
>>202
凄いトリックですね、こんなの絶対考えつかないです。
今回は、勉強がてらなるべくシステムを呼ばない前提なので、
最後の手段に保存させてもらいました。
>>204
大感謝です、これは凄い。
入れてみてビックリしました、完全にShellの動作をしてます
グロビングまで自前でやってる様です、きっとこの人は偏執狂だ(笑
同じ名前で情けないので dameshell に改名しました。
今、該当部分を探している所です。段々流れがつかめて来た気がします。
今日は寝るので、ある程度形になったらまた報告させてもらいます。
多謝です>みなさん
$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;
}
}
うーん。この位なら正規表現一発で綺麗に書けそうだけど…
リダイレクトやパイプがないんじゃシェルとは…
0207名無しさん@お腹いっぱい。
01/09/10 10:19ID:7tqUQO.2#!perl
use Text::ParseWords;
@args = shellwords($strings);
__END__
0208194
01/09/10 15:53ID:???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;
}
0209194
01/09/10 15:54ID: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 $_;
}
#**********************************
0210194
01/09/10 15:57ID:???>>206
いえいえ、**完全に**とか言ってしまいましたが、本当は
It's my dir と言うディレクトリを開けなかったのと不定な
引数の数に対応出来なかっただけなのです。 " の中では ' が
使える、逆もOK、"と' の中ではスペースが使える、区切り文字の
スペースは幾つでも良い。これ位が目標だったので
リダイレクトは本物の動作がよく理解出来てない厨房っぷりなので
今後の課題にしようと思います。
>>207
知らなかったです、>>204さんに教えて頂いたpshもそうでしたが
細かく機能別のサブルーチンに分けて、そこに投げて行くんですね。
今、sub parse_lineとにらめっこしてます。実は、モジュールはrootに
有るの位しか使った事が無いのです(汗)
恥かしいコードですが結果、上の様になりました。
本物のふるまいが理解出来てないので今一つですが、
一応目的は達しました。ループしてるのは効率的じゃないかも、、
まだ比較演算子の優劣が分からないのでカッコだらけですが
ご勘弁ください、変な所有ったら指摘してもらえたら嬉しいです。
ありがとうございました>みなさん。 ホント勉強になる!
この板は2chじゃないですよね 笑)
0211名無しさん
01/09/10 18:00ID:???0212超上級者
01/09/13 05:28ID:???それと、実行されている環境のバイトオーダーを知る方法は?
知ってる人はココに書きなさいね。
0213_gunzip
01/09/13 05:59ID:???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 */
}
0214_gunzip
01/09/13 06:03ID:???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;
}
0215超初心者
01/09/13 06:04ID:???unpack('s', pack('n',1));
戻り値で判断
0216_gunzip
01/09/13 06:13ID:???#このスレッドに書き込むのも久しぶりな気がする...。
#いつの間にか書き込み200を越えていて嬉しひ。
0217名無しさん@お腹いっぱい。
01/09/13 09:16ID:FCaipOx6flockが使えないなら、自動的に他のロックを使いたいのです。
0218名無しさん@お腹いっぱい。
01/09/13 12:59ID:skA46.9M/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 っていうモジュール使うと便利かも。
0219218
01/09/13 13:03ID:???0220_gunzip
01/09/13 15:42ID:???ちなみに、マウントされたファイルシステムのタイプ(nfs, ext2, msdos, etc...)を取得するには
mntent構造体のmnt_typeメンバを調べるだけでおっけいです。
--> getmntent(3), fstab(5)
#213のは、見つかった場合endmntent(FILE *)を呼ぶのを忘れてる...。
0221名無しさん@お腹いっぱい。
01/09/13 16:18ID:???0222JAPU@会社作ったにょ
01/09/13 16:47ID:???ただ、NFS だとうまくロック出来ない場合がある... らしい。
# 何種類佳乃組合わせでためしたけど、全部成功したので "らしい" としか...
0223217
01/09/14 13:09ID:???eval { flock(STDIN) };
if ($@) {
# my_flock
}
elsif (is_nfs("mypath/mylockfile") {
# my_flock
}
else {
# flock
}
てな具合でいきたいと思います。
>>222
># 何種類佳乃組合わせでためしたけど、全部成功したので "らしい" としか...
成功したっていうのは吐いた制御がちゃんとできているってことですか?
# 自分も実験できる環境がないので "らしい" でしかないんですよね。
0224名無しさん@お腹いっぱい。
01/09/14 13:22ID:???0225名無しさん@お腹いっぱい。
01/09/14 13:27ID:???0226名無しさん@お腹いっぱい。
01/09/14 17:56ID:???0227226
01/09/14 18:07ID:???0228名無しさん@お腹いっぱい。
01/09/14 23:38ID:???美凪組み合わせだとどうですか?
0229217
01/09/15 01:07ID:???NFSの自動判別とかしないでユーザに指定させるか、
flockは完全に無視して独自ロックだけをつかう方法が多かった
前者がLockFile::Simple、後者がFile::FlockDir、File::NFSLock
厨房は厨房らしく自動判別はやめて、ぬるく逝こうと思う。
0230PerlHacker
01/09/19 05:33ID:???ページを見ている人のパソコンのCD-ROMを排出させる方法をCGIでやるやり方を教えてください!!!!
ネットを探しまわったのですが見つかりませんでした。
0231名無しさん@お腹いっぱい。
01/09/19 05:45ID:???そいつの家まで逝って、手動で開けてやれ。
0233_gunzip
01/09/19 06:07ID:???まず/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で変換
0234_gunzip@Scheme初心者
01/09/19 06:23ID:???0235PerlHacker
01/09/19 07:05ID:???教えてください!!!!!
0236PerlHacker
01/09/19 07:08ID:???0237名無しさん@お腹いっぱい。
01/09/19 07:09ID:???Activeでも勉強して下さい!!!!!
ついでに首括って芯で下さい!!!!!!!!!!
0238PerlHacker
01/09/19 07:12ID:???0239PerlHacker
01/09/19 07:13ID:???よろしくお願いします!!!
0240名無しさん@お腹いっぱい。
01/09/19 07:14ID:???これを全部落してインストールする
↓
リモートデバイスマネージャ(RDM)のヘルプを良く読む
↓
RDMサンプルスクリプトが付いてるからそれを試してみる
↓
(゚Д゚)ウマー
0241名無しさん@お腹いっぱい。
01/09/19 08:53ID:???0242名無しさん@お腹いっぱい。
01/09/19 14:11ID:???誰かXML::RSS使ってる人いますかね?
自分のサイトでRSS使って更新情報吐き出そうと思っているのですが。
使い方教えれってんじゃないよ(w
0243名無しさん@お腹いっぱい。
01/09/19 17:33ID:???窓のサイズを途中で変更されると表示が変になったり、全く何も描画されなくなったり。
そこで質問なのだが、窓のサイズが変更されたことを知るにはどうすればいい?
0244243
01/09/19 17:35ID:???0245_gunzip@Scheme初心者
01/09/19 17:52ID:???UNIX BSD4.3,SVR4から追加されたシグナルSIGWINCHを使えばいい。
端末サイズの変更の際にカーネルから送られてくるから、適切なハンドラでもって応えてやればいい。(デフォルトでは'IGNORE'になっている)
0246_gunzip
01/09/19 18:21ID:???http://www.research.att.com/sw/tools/sfio/
0248名無しさん@お腹いっぱい。
01/09/20 22:53ID:BGTtPH/k#!/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のままです。どこが変なのでしょうか?
0249名無しさん@お腹いっぱい。
01/09/20 23:01ID:???>>248いい子だからUNIX板に池。
0250248
01/09/20 23:04ID: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のままです。どこが変なのでしょうか?
これならここでいいでしょ?
0251名無しさん@お腹いっぱい。
01/09/20 23:22ID:???perl -i.bak -pe s/\r\n/\n/ *
ではイカンのか。
0252_gunzip
01/09/20 23:23ID:???0253名無しさん@お腹いっぱい。
01/09/20 23:23ID:???echo "\r\n"
0255名無しさん@お腹いっぱい。
01/09/21 08:12ID:???0256名無しさん@お腹いっぱい。
01/09/21 10:27ID:eCUa7iH.オレ使ってるよ。とか言ったとしてどうなるのよ?
0257名無しさん@お腹いっぱい。
01/09/21 10:49ID:???そこから話が盛り上がる可能性に期待して、とか?
0258_gunzip
01/09/25 04:46ID:???http://www.perl.com/pub/a/2001/09/12/wxtutorial1.html
wxWindows
http://www.wxwindows.org/
wxWindows-Perl
http://wxperl.sourceforge.net/
02591
01/09/25 05:00ID:7Zufx8jAhttp://members.tripod.co.jp/bingo852/
0260_gunzip
01/09/25 05:35ID:???また、特に何も手を加えずに日本語の表示も可能ですね。
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
0261Perlあまちゅあ
01/09/27 15:04ID:n78xCnwcどうすれば良いのでしょう?
(例えば、コマンドラインで、パスワードを入力するときに、8文字なら8文字と決まっていて、
9文字目は入力しても、画面には表示されない。)
OS非依存が良いのですが、依存せざるを得ないのであれば、Win依存でお願いします。
(キーが押されたってことを検出できれば、それをループでまわせるとは思うんですが、
C言語のgetche や kbhitに相当するPerl関数がわからないんです。。とほほ。。。。)
厨な質問ですみません。(板違いなら、さらにごめんなさい)
■ このスレッドは過去ログ倉庫に格納されています