トップページ⇒tech
1001コメント298KB

Perlについての質問箱 11箱目

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
"The duct tape of the Internet"こと、
Perlについての質問箱です
"There's more than one way to do it"ということで
ぱぁるの奥深さについて皆で語り合い、追求してまいりましょう。

CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc5.2ch.net/php/ )

CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするので
WEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。

姉妹スレッド
http://pc5.2ch.net/test/read.cgi/php/1089779036/

過去ログは>>2-1001あたり
0153152NGNG
いやなんでもないなんでもない(^_^;) 見なかったことにして。
0154デフォルトの名無しさんNGNG
>>151
Perl 関係ない。 man sendmail したか?
-t の場合は宛て先をヘッダから抽出するようになる。その $to_add の指定は間違い。
ヘッダに To: とか Cc: とか Bcc: とかで指定する。
0155デフォルトの名無しさんNGNG
>>151
http://qmail.jp/
文面が痛いが djb と大先生なんだから我慢しる(w
個人的には、qmail-inject 推奨。

>>152
てめぇマァヴだな? > (^_^;)
0156デフォルトの名無しさんNGNG
>>154
qmailのは知らんがsendmailは-tするとヘッダからもあて先を
取り出すけど、コマンドラインで指定したあて先も有効だったような。

他に気になるのは、「,」で区切ってることだな。普通は別々の
引数になるように空白で区切る。本家sendmailはそれでも適当に
よろしくやってくれますがqmailのはどうだろうか?
0157デフォルトの名無しさんNGNG
うるへー! Wikiでもいいんだったらこれでもいいだろ

>>147
OK. RSS勉強してくるぜ
0158デフォルトの名無しさんNGNG
気づくといつのまにか Wiki になってた、という展開きぼんぬ。
0159デフォルトの名無しさんNGNG
>>151 のロジック実行してメール送信してみた。

ちゃんとメール送信できた。
(ちなみに $to_add="test1\@xxxx.co.jp , test2\@xxxx.co.jp" ってやると複数指定できた。)

でも何故か送られてきたメールのTo欄の内容が無い。一切無い。

これは何ゆえ? そういう仕様なのか?
0160デフォルトの名無しさんNGNG
>>159
そういう仕様です。自分で To 欄出力してください。
0161デフォルトの名無しさんNGNG
>>159
「,」宛にもメール出されてないか?
0162デフォルトの名無しさんNGNG
use Hoge qw/foo bar/のfoo, barの部分はどうやってモジュール側から受取ればいいんですか?
0163デフォルトの名無しさんNGNG
age忘れ
0164デフォルトの名無しさんNGNG
import
0165デフォルトの名無しさんNGNG
あるPerlスクリプトが、require等で別のスクリプトから呼ばれた場合と
直接起動された場合を区別する方法はありますでしょうか?
ActivePerlの5.8を使っています。
0166デフォルトの名無しさんNGNG
>>165
if (-t) {} else {} は無理?
0167デフォルトの名無しさんNGNG
>>166
レスありがとうございます。
試してみたところ、どちらの場合も -t が真となってしまいました。
0168デフォルトの名無しさんNGNG
>>167
あー、すまん。requireしている方もコマンドラインから起動してたら真になってしまうな。
俺にはわかんねーや。

ところでrequireされる方を起動して何が起きるの?やりたいことがよく分からんが。
普通1返して終わりじゃない?
0169デフォルトの名無しさんNGNG
あー、これでどう?
--- hoge.pl ---
require 'req.pl'

--- req.pl ---
if ($0 eq 'req.pl') {
print "direct"
} else {
print "required";
}
1;
0170デフォルトの名無しさんNGNG
>>169
こちらでも動きました。ありがとうございます。
やりたかったのは、単体としてもモジュールとしても使えるスクリプトです。
単体の場合はコマンドライン引数を用いて処理します。
0171デフォルトの名無しさんNGNG
>>170
> 単体の場合はコマンドライン引数を用いて処理します。
だったら @ARGV を調べればいいんでないの?
0172デフォルトの名無しさんNGNG
>>169
ふつー if (__FILE__ eq $0) では?
0173デフォルトの名無しさんNGNG
@list = grep {/hoge/} @list;
$a = $list[0];

を1行で書きたいのですが、どうすればイイですか?

@list = grep {/hoge/} @list;$a = $list[0];
以外で・・・

0174デフォルトの名無しさんNGNG
$a = (grep {/hoge/} @list)[0];
0175デフォルトの名無しさんNGNG
>>173
>>174
@listの更新も入れたいなら
 $a = (@list = grep {/hoge/} @list)[0];
か? 試してないけど。
0176デフォルトの名無しさんNGNG
>>173
174,175以外で
@list = grep {/hoge/} @list , $a = $list[0];
($a) = grep {/hoge/} @list;
0177176NGNG
>>176
@list = grep {/hoge/} @list , $a = $list[0];は嘘。 スマソ
0178デフォルトの名無しさんNGNG
意味もなく1行で書いてどうすんの?

正規表現でも無理やり一行で書いて、効率を犠牲にしてるのを見るけど。
0179デフォルトの名無しさんNGNG
効率は犠牲になってないかと思われ。別に速度計ってないけど。
あとこの場合は一行の方が見やすい気が?(たぶん。

>>173
@listん中には最初のヤツ入らないけど。
($a, @list) = grep {/hoge/} @list;
0180デフォルトの名無しさんNGNG
みなさん、ありがと
>>174さんを使わせていただきます。
0181デフォルトの名無しさんNGNG
効率を気にするならこういうのはどうですか?本文は1行。

sub test { foreach (@_) {return $_ if(/hoge/)} }

$a = &test (@list);
0182デフォルトの名無しさんNGNG
>>181
grepよりforeachで回したほうが速いんですか?
0183デフォルトの名無しさんNGNG
>>182
ベンチ取る癖を付けた方がいいぞ
モジュール使えば面倒でもないから
0184181NGNG
>>182
たとえば、@list = ("hoge", "geho", "foo", "bar"); のとき、
 ・ (grep {/hoge/} @list)[0]; の文字列照合回数は4回
 ・ &test(@list) の文字列照合回数は1回

と考えました。ベンチ取ってないけど。
0185デフォルトの名無しさんNGNG
とりあえずベンチ。

use Benchmark;

@list = qw(hoge geho foo baa);

timethese(undef, {
grep => sub {
$a = (grep {/hoge/} @list)[0];
},
test => sub {
$a = &test(@list);
},
});

sub test { foreach (@_) {return $_ if(/hoge/)} }

で、結果は、
grep: 2 wallclock secs ( 3.11 usr + 0.00 sys = 3.11 CPU) @ 125654.98/s (n=390787)
test: 4 wallclock secs ( 3.09 usr + 0.01 sys = 3.10 CPU) @ 297963.87/s (n=923688)

hogeが最初は不公平すぎるので最後にしてみたがそれでも
grep: 2 wallclock secs ( 3.10 usr + 0.00 sys = 3.10 CPU) @ 126060.32/s (n=390787)
test: 4 wallclock secs ( 3.19 usr + 0.00 sys = 3.19 CPU) @ 205490.60/s (n=655515)

0186デフォルトの名無しさんNGNG
>>185
追試。環境は ActivePerl Build810 (5.8.4)

#!/usr/local/bin/perl
use Benchmark;
our @list = qw(hoge fuga piyo foo bar baz);

sub t_l { /hoge/ && return $_ for @_ }

timethese(-5, {
  g_b => sub { my $a = (grep {/hoge/} @list)[0] },
  g_e => sub { my $a = (grep /hoge/, @list)[0] },
  g_l => sub { my($a) = grep /hoge/, @list },
  t_l => sub { my $a = t_l(@list) },
});
__END__

Benchmark: running g_b, g_e, g_l, t_l for at least 5 CPU seconds...
g_b: 6 wallclock secs ( 5.16 usr + 0.00 sys = 5.16 CPU) @ 49723.26/s (n=256572)
g_e: 5 wallclock secs ( 5.32 usr + 0.00 sys = 5.32 CPU) @ 193839.10/s (n=1031224)
g_l: 5 wallclock secs ( 5.11 usr + 0.00 sys = 5.11 CPU) @ 199724.07/s (n=1020590)
t_l: 5 wallclock secs ( 5.33 usr + 0.00 sys = 5.33 CPU) @ 193475.42/s (n=1031224)
0187デフォルトの名無しさんNGNG
ソースコードは分かりやすいのが一番。
ということで、こんなのも。
use List::Util qw/first/;
my $a = first {/hoge/} @list;
※要Perl5.8
0188デフォルトの名無しさんNGNG
>>186
grepの条件をblockにしてるから遅くなってたのか。

1つの式ですむならblockにしてはいかんということだな。勉強になった。
0189名無しさん@Vim%ChaliceNGNG
PDFJ-0.76で質問です
nouhinsho.plのプログラムで使っているデータファイル
nouhinsho.datのデータを書き換えて
LANケーブル 0.5m アイボリー 5   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
な感じにすると"aaa..."の部分が折り返されません。
LANケーブル 0.5m アイボリー 5   ああああああああああああああああああああああああああああああ
"あああ..."だったら折り返されます

"aaa..."な方でも折り返しにする設定はどうすればよいのでしょうか?
0190デフォルトの名無しさんNGNG
Perlでコンパイラを作った人もしくはそのような
解説サイトをご存知の方いらっしゃいませんか?
0191デフォルトの名無しさんNGNG
>>190
perlcc, perl2exe, parとかがある
0192デフォルトの名無しさんNGNG
Perl "の" コンパイラじゃなくて
Perl "で" コンパイラを作った人じゃないの?
0193デフォルトの名無しさんNGNG
そんな無駄なことする人いるのだろうか?
0194デフォルトの名無しさんNGNG
作れるわけね-じゃん
0195デフォルトの名無しさんNGNG
一応作れるぞ
0196デフォルトの名無しさんNGNG
Parrotコンパイラ・アセンブラはPerlで書かれているわけだが。
0197デフォルトの名無しさんNGNG
そんなことしても自己満足以外なんにもならないから誰もしないだけ。
0198デフォルトの名無しさんNGNG
たしかにPerlなんかで作っても遅いから
自己満足以外なんにもならないね。
0199デフォルトの名無しさんNGNG
>>195
すいません
"おまいらには"
が抜けてましたw
0200デフォルトの名無しさんNGNG
トランスレータならperlccだな
0201デフォルトの名無しさんNGNG
>>197
そんな事は無いと思うけど。
インタプリタ言語でコンパイラを作るって事は、昔のパソコン雑誌では
普通に連載されていたよ。
BASICでコンパイラ言語を、記述。
そのコンパイラのソースを、BASICインタプリタでコンパイル。
出来たコンパイラで、そのコンパイラ(のソース)を、機能拡張する。
そのソースを、コンパイラでコンパイル。
でまた機能拡張、またコンパイルまた機能拡張またコンパイル
きりねー。と。WICSなんかそうだったな。
0202デフォルトの名無しさんNGNG
コンパイルといっても、CやPerlのような大規模な
言語のコンパイルとは限らないからね。
コンパイルは要はファイル変換。小規模なものなら
Perlでも十分できると思う。

>>190
字句解析や逆ポーランド記法等の一般的な知識が
使えると思うので、
その手の勉強をしてみれば?
0203デフォルトの名無しさんNGNG
#/usr/local/bin/perl
$script = <STDIN>;
eval($script);
exit(0);

インタプリタができたYO!あとは標準入出力で(ry
0204デフォルトの名無しさんNGNG
cpanにyaccやlexのモジュールがぱらぱらあるから
それを作ったやつや使ってるやつを探せばいいんじゃないかな。
0205デフォルトの名無しさんNGNG
perl -e %1

バッチファイルでインタープリタが出来ますた。
0206デフォルトの名無しさんNGNG
インンタープリタじゃなくて丸投げって言うんだろ
0207デフォルトの名無しさんNGNG
インタープリンタです!失礼な………
0208デフォルトの名無しさんNGNG
PIC のコンパイラ/アセンブラとかあると嬉しいかも。既にあるのかな。
0209デフォルトの名無しさんNGNG
トークンの切り出しとか字句解析はPerlの十八番だよな。
0210デフォルトの名無しさんNGNG
バイナリ(HEX)単位での扱いは?
0211デフォルトの名無しさんNGNG
yacc みたいなのの定番ってありますか?
0212デフォルトの名無しさんNGNG
Perl程コンパイラ向けの言語ってのも無いだろ。
速度だってそんなに遅くないし。
0213デフォルトの名無しさんNGNG
とか言う割には一向にコンパイラが挙がって来ませんねえ
0214デフォルトの名無しさんNGNG
Parrot
0215デフォルトの名無しさんNGNG
>>210
pack や unpack あたりでできそう。
でも、たしかに Perl ばかりやってるとバイナリの処理が
苦手になるかも…。
0216デフォルトの名無しさんNGNG
そこで Binutils のモジュール化ですよ。と云ってみるてst
0217デフォルトの名無しさんNGNG
Perlばかりやってるとバカになる
0218デフォルトの名無しさんNGNG
実感。C++, Java のコードが組めなくなってたり

「なんでExcelのマクロにPerlが使えないんだyp!」と発狂してみたり。
0219デフォルトの名無しさんNGNG
Perlだとすぐできるのに〜と思うことが多くなった。
0220デフォルトの名無しさんNGNG
Perlやってるとsh,sed,awkの使い方忘れる。
0221デフォルトの名無しさんNGNG
テキストの置換なんかは「あー、このソフトでPerl流の置換式使えたらなぁ」ってよく思う
0222デフォルトの名無しさんNGNG
テキスト入力なんかじゃ
ATOK用perl機能追加プラグイン
ttp://www.hirax.net/diaryweb/2004/04/09.html#200404092

なんてのもある
ATOK入ってないんで私は使えませんがね・・・
0223デフォルトの名無しさんNGNG
ねぇ、pack や unpack ってどうやって使うの?
つか、どんなときにつかうの?
0224デフォルトの名無しさんNGNG
perlfuncを見りゃわかる。
Cなら構造体を作るだろうなってときに使う。
0225デフォルトの名無しさんNGNG
>>223
CGIでURLエンコード・デコードとかに使う。
%82%CA%82%E9%82%DB
みたいなの
0226デフォルトの名無しさんNGNG
>>223
シリアライズ・デシリアライズ
0227デフォルトの名無しさんNGNG
>>223
カレーライス・ハヤシライス
0228デフォルトの名無しさんNGNG
i18n m17n
0229デフォルトの名無しさんNGNG
perlのハックして自分独自のperlを使ってる人いる?
0230デフォルトの名無しさんNGNG
自分独自のPerlってなに?
インタプリタをカーネルに組み込んで、
モジュールをPerlで書けるようにするとか?
0231デフォルトの名無しさんNGNG
dukeで画像掲示板に画像をアップしたいのですがうまくいきません
0232デフォルトの名無しさんNGNG
>>229
昔のえらい人たちは Perl をハックして JPerl を作った
みんな感謝して使っていた
0233デフォルトの名無しさんNGNG
>>189

「折り返し」って? foldingのこと? アルファベットは空白文字が来ないと
発生しないよーな希ガス。
0234デフォルトの名無しさんNGNG
>>232
じゃあ君のために KusoPerl っていうの作ってあげるから
感謝して使ってくれ。
0235デフォルトの名無しさんNGNG
夏だな
0236デフォルトの名無しさんNGNG
>>234
もっとカルシウム取れよ。
0237デフォルトの名無しさんNGNG
>>234
今日の宿題は終わったのか?
おやつ食べて大好きなプールにでも行ってきたらどうだ?
0238デフォルトの名無しさんNGNG
なんか書けよ。
0239デフォルトの名無しさんNGNG
なんか
0240デフォルトの名無しさんNGNG
Perl6のリリースは2006年だってさ
http://japan.linux.com/desktop/04/07/27/1436242.shtml?topic=1
0241デフォルトの名無しさんNGNG
>>240
そんなに待てるか!
俺、死んじゃってるかもしれないじゃないか!
0242デフォルトの名無しさんNGNG
不治の病を患ってるやしがいるな(ノД`、)逝�`
0243デフォルトの名無しさんNGNG
人間は全員不治の病を患っている。
0244デフォルトの名無しさんNGNG
packageに外部に公開しないサブルーチンを作るにはどうすればいいでしょうか?
(JavaとかC++のprivateメソッドっぽいのを作りたい)
0245デフォルトの名無しさんNGNG
my をつける
0246デフォルトの名無しさんNGNG
"my sub" not yet implementedと怒られてしまいました
0247デフォルトの名無しさんNGNG
sub my だ
0248デフォルトの名無しさんNGNG
syntax error at ***.pm line 16, near "sub my ***"
えー?
0249黒死犬 ◆EgxBlf8nvc NGNG
my $unko = sub {
return $$**$$;
}

しかし、そのうち my sub って書ける様になるらしい
0250デフォルトの名無しさんNGNG
そのうち = Perl6
0251デフォルトの名無しさんNGNG
前川くん、マルチポストは・・・・・
0252デフォルトの名無しさんNGNG
ikannzaki
■ このスレッドは過去ログ倉庫に格納されています