[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 05/09 22:28 / Filesize : 164 KB / Number-of Response : 561
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 21:17:36 ]
"The duct tape of the Internet" こと、Perl についての質問箱です。
"There's more than one way to do it" ということで、
Perl の奥深さについて皆で語り合い、追求してまいりましょう。

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

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

www.perl.org/get.html
● 2009/02/09 現在の最新版: 5.10.0

▼ 前スレ
Perlについての質問箱 38箱目
pc11.2ch.net/test/read.cgi/tech/1221967332/

リンク集は >>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは >>5-6 あたり

237 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:47:37 ]
>>236
quicksortなんてlibcに任せときゃいいんですよ。気に病むことでもない。

238 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:59:13 ]
>>236
quick sortもできないの?
ププ

239 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 17:03:17 ]
>>237
だね。
>>238みたいになんでも自分で作るとたまに間違うことがあるし、
馬鹿馬鹿しいプライドで心がねじ曲がってしまう。

240 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 17:17:39 ]
エンドユーザの立場から一言。

プログラマの方のお考えはごもっともです。
しかし、sortコマンド打つのが簡易で合理的な発想だと思えるのですが。

たかだかちょっとしたソートも自分で書けない人だらけにしてしまったのは
「素人はソートなんてやらなくていい」という発想のせいだと思えるのですが。

241 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 17:22:21 ]
単純なテキストファイルで単純なソートなら sort(1) でもいいんだろうけど

242 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 17:24:54 ]
FYI

■libcでqsort()を再帰を使って実装してる香具師は怠慢だろ…常識的に考えて
d.hatena.ne.jp/n2s/20070421/p1

243 名前: ◆TWARamEjuA mailto:sage [2009/03/08(日) 18:49:15 BE:1742944-BRZ(10000)]
そーっとしといてやれよ。

244 名前:デフォルトの名無しさん [2009/03/08(日) 20:19:13 ]
>>230
シェル言語ってのは地味に需要がある。
MSがUNIX/Linuxへの対抗心むき出しでWindows PowerShellなんぞ作ってるくらいだから。

UNIX/Linuxを普段使ってる人ってのはシェルを対話的に利用するのに慣れている。
だから、さて何か組もうかって時もシェル言語が第一選択になる。
それでダメな時に別の言語を選ぶ。
UNIXの世界ではシェルでできることはシェルで、というのが昔から暗黙の了解なので
いきなりPerlやPythonでやろうとするのは、コンピュータの世界にWindowsから入った人くらいだろう。
それは例えて言うなら、自家用車を持ってるのにリムジンをレンタルしてドライブするようなもんだ。

245 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 22:44:41 ]
ワンライナーはsed,awk,sortの方が楽なことが
多いな。例えばいくらオプションでsplitを暗黙
にさせても[]書かされる時点で、$1,$2でいい
awkにはかなわない。

もちろんガッツり書くならスクリプト言語。



246 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 17:17:27 ]
>>244
1行目は同意だが、あとはいつの時代の話だよと思うな。
そりゃ配布物配ろうとか思ったらまずshを選択するだろうが、
例えばWebアプリケーション作る時にshを第一選択肢に上げるか?
hello world以外は特にsh使う場面って思いつかないんだが。

247 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 17:48:50 ]
>>246
普通にファイル処理やテキスト処理には使うし、
処理を自動化するのにも使うし、
定期的にどっかのサイトにアクセスして、特定の情報だけを記録するとか、
その程度の用途には当たり前に使うと思うが。

本格的なプログラミングか、ワープロとか表計算みたいに出来合いのアプリで済ませるか、
二者択一だったらパソコンライフなんて送れねーよ。

それとも、プログラミングってのはアプリとwebの開発のためだけにあんのか?

248 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 17:54:32 ]
小規模ならまずシェルで出来ないか考えるよな

249 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 17:54:45 ]
>>247
例外は認めないのかよw
普遍的な事のように書くから変な誤解受けるんだろ。

んで、それらの用途にシェル使わない人もいると思うが何かデメリットでもあるのか?
「UNIXの世界ではふつー」とかじゃ理由にならんだろ。
例えば毎秒起動とかだったらさすがに少々面倒でもshを第一選択とするのが吉だと思うが。

250 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 17:58:02 ]
>>249
>んで、それらの用途にシェル使わない人もいると思うが何かデメリットでもあるのか?

同じことができるならそれでいい。
ただし、より面倒臭くなることはあるだろう。
何も難しくないワンライナーでできることに他の物使うとか、そういうのは単なるアホだろ。

251 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:06:37 ]
トリッキーなことしなくても普通にシェルでできるなら、それが一番簡単なんじゃね?
コマンド並べれば動くから
難しいナンチャラ理論やらウンタラ指向やらも考えなくて済む

プログラマでないエンドユーザや管理者にも使えるのは大きなメリットだと思うな

252 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:07:23 ]
>>250
要するに余計面倒な時だけsh使うでもいいわけね。
>>244はとてもそういう論調には見えないけど。

そういう俺はよくshスクリプト書くがな。

253 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:10:49 ]
>>252
w3m -dump www.media-k.co.jp/jiten/wiki.cgi?%A1%E3%B4%E9%CA%B8%BB%FA%A1%A6%A3%C1%A3%C1%A1%E4 | grep '´_'

254 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:11:49 ]
>>250
> 何も難しくないワンライナーでできることに他の物使うとか、そういうのは単なるアホだろ。

Perlプログラミングに没頭してる合間とかだったら、AWKの方が少々短くても
Perlのワンライナーを選択することはあるな。

短く書けるっつったってせいぜい数バイトだろ>>228。頭切り替える方が面倒だわ。

255 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:13:28 ]
>>254
Perlに没頭してるあなたにとってはPerlでやるほうが簡単なんでしょうね
別にそれはそれでいいのでは?
だからといって、それはあなた個人の特殊事情で簡単に感じるだけなのだから、
シェルでやるほうが手間が少ない人にまで強要すべきことではないでしょう



256 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:15:10 ]
>>255
いつ強要したんだよww俺はこうだって言っただけじゃん。
逆に>>244なんかshで出来ることにPerl使う奴は外道みたいな書き方じゃん。

257 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:17:24 ]
この人論点が分かってないからトンチンカンな事を言うのかね。

「何事もshが第一選択にするのが普通、じゃなきゃ外道」

みたいな主張がおかしいと言ってるだけなんだが。

258 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:22:07 ]
>>257
話がかみ合わない理由って案外簡単なんじゃない?
普通にUNIX系OS使ってる人にとってshって標準的な道具だから、
シェルで作業するってのは鉛筆で文字を書くのと同じくらい簡単で当たり前なんだよ。
だから、どうしても他の物を試す前にshで、っていう発想になるだけでしょ。

259 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 19:01:03 ]
いったい、シェルの話をしているのかシェルスクリプトの話をしているのか
はっきりさせてくれ。

260 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 19:09:12 ]
つーかPerlの話しようぜ


261 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 19:20:03 ]
>>259-260の流れわろた


262 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 19:41:35 ]
この現代に、WEBアプリ以外に何があるの?
世界じゅうどこを見て回っても、WEBアプリしか無いんだから
awk も sh もいらん。perl しか選択の道は無いだろ。

263 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 19:43:50 ]
最近の家庭電化製品はマイコン内臓でずいぶん賢くなった。
しゃべる電子レンジのファームウエアを awk や sh で書けると思ってんの?

264 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 19:56:31 ]
宗教の勧誘みたいw

265 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:00:33 ]
shのほうが慣れてるからsh使うという人が、昔は多かった。
イマドキのPerlerには、Perlのワンライナーのほうが慣れてる人が多いんだろうね。



266 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:06:24 ]
>>265
perlの人は

ls

と打たずに

opendir(DIR,'.');
@file = sort readdir(DIR);
foreach(@file){
$time = localtime ((stat($_))[9]);
print "$time"."\t"."$_\n";
}
closedir(DIR);

とやるわけですね?
簡単なことをいちいち
perl ふがほげ
perl うんたらかんたら
ってやるのは不自然なんですけど


267 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:10:37 ]
lsで済むことならlsじゃねえの普通
Windowsユーザならlsなんぞ打たずにファイラとかエクスプローラだろうしな

でも、スクリプトの話じゃなかったのか

268 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:13:40 ]
ファイルの行数調べるのも「Perlでどうやろうか」とか考えちゃうのね
cat hoge | wc -l
とせずに

269 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:14:54 ]
そこは
wc -l <hoge
catとか使わないな

270 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:15:05 ]
>>267
シェルとシェルスクリプトに何の違いがあんの?
コマンドが単発か複数かの違いだけじゃん?

271 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:15:32 ]
ファイルに記述するか
その場でうちこんで終わりかの違いじゃね

272 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:17:15 ]
シェル言語の有用性認めないなら
シェル言語使わなけりゃいいじゃん
そこまで言うならPerlだけで暮らせ

273 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:18:57 ]
bashのコマンド使わないでperlだけで暮らしたらさぞ便利だろうねw

274 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:23:47 ]
Windowsユーザの9割はbashなんて使ってないけどね

275 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:26:16 ]
>>274
この話ではWinユーザは無関係と思われ

UNIXの操作ではシェルが母国語みたいなもんなのに
簡単な用事でも外国語使いたがる変人だけが対象



276 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:30:51 ]
それって、いもしないキャラを作り上げてない?

277 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:40:09 ]
awk '/UNIX/ || /Linux/' hoge

perl -ne 'print if /UNIX/ || /Linux/' hoge

シェルを普通に使いこなしてる人なら最初の方が明らかに簡単だろ?
打鍵数だけじゃなく、構文的にも。

「何でもPerl」ってやりかたが変だってのは、そういうこと。
shは古い、awkやgrepは低機能だと文句言いながら、より難しくやってる人たちを変だと言ってるだけさ。

で、シェルとシェルスクリプトをやたらに区別したがってる奴がいるが、本質は同じだろ。
シェル使って作業して、コマンドを複数使って仕事しようとすると、シェルスクリプトと言われるだけで。

278 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:04:33 ]
>>277
その例なら
grep '(UNIX|LINUX)' hoge
かなあ
awkなんて使わないよ

279 名前: ◆TWARamEjuA mailto:sage [2009/03/09(月) 21:09:44 BE:1960463-BRZ(10000)]
my @textfiles = grep /txt$/, qx|ls -l|;
でもえぇやん。。。

280 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:13:16 ]
>>278
環境によって動かないとおもいまつ
GNU grep 2.5.3
では少なくとも×

grep -e UNIX -e Linux hoge

これなら動きます
ただし、awk使うのと難しさに大差ありません

281 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:15:29 ]
例を挙げれば挙げるほど
Perlより簡単な方法が出てくる件

282 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:21:06 ]
>>280
ありゃ
egrepならいいのかな?

283 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:21:44 ]
>>282
そうでつね

284 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:29:38 ]
ここまでの流れを見た率直な感想


Bシェルとかgrepとかawkとかsedなんて前時代の遺物だと思ってたけど・・・
今でも十分に使えんじゃん

285 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:45:28 ]
結局どうやるのがもっとも効率的かを的確に判断できるように
あらゆるスキルを磨いとけってこった。



286 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 22:15:16 ]
専用のコマンドの方が使い勝手がいいのは当然だよね
それでも sed や awk を使うのでは1行で済まない場合は
(シェルスクリプト組むような場合は)、Perl の方がシンプルになってくる

287 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 22:19:03 ]
ワンライナーの話をしてるのに
なんでshのコマンドラインとワンライナーを比べるんだか・・・。
ネジ緩んでるの?後者は一応スクリプトだぞ。

コマンドはスクリプトで書くのが大変or不可能なことをするために
存在するんだからwcとか例に持ってくるのは愚の骨頂。


288 名前:デフォルトの名無しさん [2009/03/09(月) 23:24:23 ]
>>286
簡単なことだけならシェルスクリプトの方がシンプルだと思うが

>>287
それって自分の首絞めてないか?
コマンド単体で強力ならそれを利用したスクリプトも強力なわけで

289 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:42:01 ]
>>287
ワンライナーってコマンドラインの延長じゃねーの?
質的な違いなんてねーよ

290 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:48:37 ]
質問です!
Perlとsedとawkとbashはどれがいちばんつおいのですか?


291 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:57:59 ]
perlで話題が無いからって、そこまで引っ張ることないだろ(w

292 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 00:00:57 ]
じゃあ無理やり話題作りを。
問:以下のシェルスクリプトをPerlに直しなさい。

#!/bin/sh
o=$(echo "$@" | sed 's/ /+/g' | sed 's/ /+/g')
w3m "www.google.co.jp/search?hl=ja&q="$o"&meta=lr%3D&aq=f&oq="

293 名前:292 mailto:sage [2009/03/10(火) 00:08:22 ]
ちなみに、
sed 's/ /+/g' | sed 's/ /+/g'
の部分は
sed 's/[  ]/+g'
でも同じですが、
全角スペースと半角スペースを列記すると見た目にわかりにくくなるので、
問題文ではあえて別々に処理しとります。

294 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 00:15:36 ]
sedやw3mがシェルスクリプトの一部だというなら
perlも仲間に入れてあげなよ

295 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 00:18:46 ]
perlだけは絶対入れない。絶対ニダ



296 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 00:21:18 ]
sedとかawkでやると楽な事とperlでやるのが楽な事の境界線を
判断するのは難しいよな

297 名前:デフォルトの名無しさん [2009/03/10(火) 01:53:00 ]
まーあれだ、シェルがどーこーとかほざいてる奴らが言ってるのはどうせbashだろ。
糞linuxごときの標準シェルなんぞどーでもえーわ

298 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 06:31:06 ]
どーでもえーことに熱くなれるっていいネ!!

299 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 11:47:12 ]
Linux板のシェルスクリプトスレはここほど釣れなかった
からといってここに八つ当たりしなくてもねえ。

300 名前:デフォルトの名無しさん [2009/03/10(火) 22:07:54 ]
RSSから指定期間の祝日を取得するスクリプトを書いてる。
ある程度の日付の範囲をもって複数の祝日を取得するときは問題なく動作するんだけど、ある特定の祝日を一つに絞って実行すると上手く動作しない。
printをあちこちかませて調べてるんだけどどうも$keyが上手く取れてない様子。通常はURLが入るんだけどNGの場合はXMLのタグ名がなぜか入ってきてNGになってしまう。

上手く動かすには何が足らないんだろ?
use LWP::UserAgent;
use XML::Simple;
&Holiday ("2009-02-01", "2009-04-01"); # OK
&Holiday ("2009-03-20", "2009-03-21"); # NG
sub Holiday {
my $feed_base = 'www.google.com/calendar/feeds/japanese@holiday.calendar.google.com/public/full';
my $sdate = $_[0]; # この日を含む開始日
my $edate = $_[1]; # この日を含まない終了日
my $query = "start-min=${sdate}&start-max=${edate}";
my $feed_url = $feed_base . '?' . $query;
my $ua = LWP::UserAgent->new;
my $res = $ua->get( $feed_url );
if( $res->is_success ){
my $xml_parser = XML::Simple->new();
$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
my $holidays_data = $xml_parser->XMLin( $res->content );
foreach my $key ( keys %{ $holidays_data->{ entry } } ){
#print "$key\n";
my $holiday_day = $holidays_data->{ 'entry' }{ "$key" }{ 'gd:when' }{ startTime };
print $holiday_day , "\n";
}
}else{
die $res->status_line;
}
}

301 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 23:08:10 ]
質問です。
以下のコードを実行するとhoge_fooという出力を期待していたのですがfooとしか表示されません。
おそらく_が何か演算子としての働きをしているんだと思いますが、
一体これはどういう意味を持つ演算子なんでしょうか?教えてください。
Perlのバージョン:This is perl, v5.8.8 built for MSWin32-x86-multi-thread

$hoge="hoge";
$foo="foo";
print "$hoge_$foo\n"; # 出力:foo
print "$hoge\_$foo\n"; # 出力:hoge_foo

302 名前:301 mailto:sage [2009/03/10(火) 23:10:45 ]
$hoge="hoge";
$foo="foo";
$hoge_="まさか・・";

print "$hoge_$foo\n";
print "$hoge\_$foo\n";

どうみても誤解釈です。ほんとうにありがとうございました。

303 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 23:11:02 ]
>>301
3行目で$home_ を展開してる。
サンプルコードの最初に
$hoge_ = "HOGE";
て入れてみると、3行目の出力が「HOGEfoo」になる。

304 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 23:11:34 ]
あ、>>302で解決してますね

305 名前:301 mailto:sage [2009/03/10(火) 23:17:29 ]
>>303,304
レスどうもありがとうございました。



306 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 10:31:12 ]
くだすれスンマセン
($self->{year},$self->{month},$self->{day}) = ( gmtime time + $time_difference * 3600 )[5,4,3]

この [5,4,3]っていうのはどういうことなのですか?
こういう書き方の呼称がわからないのでググれなくて

307 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 10:50:28 ]
slice

308 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 13:46:55 ]
list

309 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 18:19:50 ]
>>306
ググる前にマニュアルを読めばいいと思うよ。
perldoc.jp/docs/perl/5.10.0/perldata.pod

310 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 18:31:28 ]
>>309
perldata読めばいいってはじめからわかってたら困らんだろ。

311 名前:デフォルトの名無しさん [2009/03/14(土) 10:04:59 ]
少しお聞きしたいのです。

以下のようなソースがありまして、

$| = 1;
print "Start\n";
$i = 0;
while($a = <>){
 print "Loop: $a $i\n";
 $i++;
}
print "End\n";

コマンドラインから perl test.pl などとして起動すると、
Ctrl+Z(ENTER)でEOFを渡して(よくわかってない?)中断して終了できますよね。

しかし、EOF(0x1a)を、
ファイルで渡したり(perl test.pl < test.txt)、Delphi等のプログラムから渡したりすると
上記プログラムでは終了してくれなす。
これを終了してくれるようにするにはどうしたらよいでしょうか?

312 名前:デフォルトの名無しさん [2009/03/14(土) 10:06:38 ]
>>311
捕捉
> EOF(0x1a)を、ファイルで渡したり
これは、バイナリエディタで 74 65 73 0D 0A 74 65 73 74 0D 0A 1A 0D 0A のように記述しました。


313 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 11:13:25 ]
シグナル打ち込め

314 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 11:24:01 ]
>>311
1A は関係ないと思う。
1A は有っても無くても終了するはずだよ。
でないと UNIX などは大変なことになる。
1A は Windows だけの習慣。UNIX のテキストファイルには普通 1A は無いからね。
原因は何か他にあるんじゃないの?

315 名前:311 mailto:sage [2009/03/14(土) 12:15:10 ]
ごめん、環境かいてなかった。

OS: Windows Vista SP1 32bit
perlは体分前に入れたものなので古い

This is perl, v5.8.3 built for MSWin32-x86-multi-thread
(with 8 registered patches, see perl -V for more detail)

>>314
ファイルをつっこむと、1Aで終了せずに、ファイル全部読み込んだら終了します
プログラムで(というか以下のライブラリ)で読むと、1A送っても無限ループが続く幹事
maxxdelphisite.free.fr/doscmd.htm

1AってそもそもEOFじゃないんのかな?



316 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 12:27:16 ]
>>315
先ず先に<>はSTDINとARGV両方を示す事を理解しろ。
プログラム引数に何か渡されたら、< であろうが、ARGVとして扱われ、
ARGVがあれば、暗黙のうちに<>は<ARGV>として挙動する。
従って
====
while(<>){ print "ARGV: $_" }
while( ($_=<>) !~/^$/ ){ print "STDIN: $_"}
====
をhoge.plとして保存して以下の様に実行した場合、
perl hoge.pl < hoge.pl
は、ARGVの中身を全てプリントした後にSTDINの処理をする
(STDIN処理は、何も入力せずにreturnで終了)。

外部ファイルにシグナルを入れて流し込むのが仮に可能だと
しても、それをどのタイミングで使うかは書き手に任される訳だから、
素直に終了フラグを立てるのが普通では無いの?


317 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 13:49:03 ]
なんか変なのが沸いた

>>プログラム引数に何か渡されたら、< であろうが、ARGVとして扱われ、

へー


318 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 13:55:55 ]
ファイルハンドルがって意味じゃねえの?
それでも言葉不足だけどw
perl hoge.pl < hoge.pl
は、
while(<ARGV>){ print ; }
でも
while(<STDIN>){ print ; }
動くよ。


319 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 13:57:02 ]
最終行「でも動くよ。」


320 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 14:08:58 ]
知ったかぶり者を論うのやめろ。荒れるから。

321 名前:へんなの mailto:sage [2009/03/14(土) 14:09:01 ]
あーすまん。
言葉も変だし、5.8までと5.10で挙動が違うわ、>>316
>>316の例とかは全面撤回(5.10では動く)


322 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 14:28:14 ]
CPANやperldoc.jpでのPODトランスレータは何を使っていますか?

Pod::HTML, Pod::HtmlEasy, Pod::Xhtml, Pod::Tree::HTML,
Pod::Simple::HTML, Pod::Simple::XHTML...と、色々試していますが、
L<Foo>やら=item * <Bar::Baz>やらマルチバイト文字やら、
一部に対応しているものがありますが、全部に対応したものはないように
感じました。

323 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 17:02:33 ]
>>315
>ファイルをつっこむと、1Aで終了せずに、ファイル全部読み込んだら終了します
>プログラムで(というか以下のライブラリ)で読むと、1A送っても無限ループが続く幹事

結局どうなの?終了するの?無限ループするの?どっちなの?
結局、何がしたいの?どういう動作を期待してるの?

324 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 19:47:30 ]
>>311 が使ってるOSでは、0x1a を送っても 0x1a にすぎず EOF にはならない。
どうしてもそれを望むなら OS を CP/M に換えるといい

325 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 21:48:07 ]
I love you



326 名前:デフォルトの名無しさん [2009/03/16(月) 20:40:31 ]
二重のforeach修飾子は使えないのでしょうか?

perl -E '
@tmp=([1,2,3],[4,5,6],[7,8,9]);
for (@tmp){
for (@{$_}){say}
}'

出力
1
2
3
(以下略)

という構文をforeach修飾子を使って、以下のように書いたのですが、

perl -E '
@tmp=([1,2,3],[4,5,6],[7,8,9]);
say for @{$_} for @tmp;'
コンパイルエラーになってしまいます。

このような二重のforeach修飾子は使えないのですか?
それともコードが間違っているのでしょうか?

perlのバージョンは
v5.10.0 built for x86_64-linux-thread-multi
です。


327 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 20:59:27 ]
修飾子はひとつしかつけられません。(perlsyn参照)

Any simple statement may optionally be followed by a SINGLE modifier,
just before the terminating semicolon (or block ending).


328 名前:デフォルトの名無しさん [2009/03/16(月) 21:15:11 ]
rand()で、0が出る確率というのはあるのでしょうか?

もしくはrand()で出る一番小さな数字というのがあれば教えて頂けないでしょうか。

329 名前:326 [2009/03/16(月) 21:19:15 ]
>>327

ありがとうございます。
参考になりました。

330 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 21:51:39 ]
>328
perldoc -f rand

331 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 23:58:47 ]
$data = "19:09:34 hoge 294";

if($data =~ /\d\d:\d\d:\d\d \d*/){
    print "マッチ\n";
}else{
    print "マッチせず\n";
}

「数字数字:数字数字:数字数字 いくつかの数字」という文にだけヒットさせたいんですが、
何故か余計な文字の入っている上の文でもヒットしてしまいます。
どうしてヒットしてしまうんでしょうか?

環境:This is perl, v5.8.8 built for MSWin32-x86-multi-thread

332 名前:331 mailto:sage [2009/03/17(火) 00:01:27 ]
*だと\dが0の場合も含まれるんでした。
*を+にしたらうまくいきました。

333 名前:デフォルトの名無しさん [2009/03/17(火) 00:42:36 ]
関数のreturn値って成功の場合1で、失敗の場合0が普通なのでしょうか?
標準関数はこのパターンが多いような気がします。
シェルスクリプトの場合だとたいてい逆ですよね?


334 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 07:18:18 ]
成功の場合に真を、失敗の場合に偽を返す
って考えれば Perlの関数の多くも コマンドの終了コードも同じ

335 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 08:34:52 ]

アフォ?



336 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 16:16:53 ]
>>333
そだよ
だからsystem関数の使い方には注意

Perl6では、system関数の戻り値もPerlの流儀になる

337 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 20:36:43 ]
引数がAから始まって、後が全部数字かどうかチェックするのって

if($ARGV[0] =~ /^A+[0-9]$/)
でいいのかな







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<164KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef