[表示 : 全て 最新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 あたり

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]$/)
でいいのかな


338 名前: ◆TWARamEjuA mailto:sage [2009/03/17(火) 20:38:57 BE:3920966-BRZ(10001)]
>>337
おしいかも。
/^A[0-9]+$/

でもその前にchomp入れた方がよいかも♪

339 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 20:47:23 ]
おおお、なんと優しい
ありがとーw

340 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 23:20:12 BE:309540375-PLT(54324)]
/\AA[0-9]+\z/

341 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 04:15:45 ]
xms

342 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 09:46:26 ]
\d+はダメなの?

343 名前:311 mailto:sage [2009/03/18(水) 10:41:45 ]
>>316
時間が空いてすいません。

^Z(1A)はシグナルなのでそもそもファイルからは渡せないもんなんでしょうか?(単にデータとして受け取られる)

問題は、通常のプログラムから標準入力を渡した場合なのですが、これもファイルから渡したのと同様になる
ものなのでしょうか?
つまり、何かのデータをフラグと見立てて、それを検出したら終了、というような作業が必要なものか、と。

344 名前:311 mailto:sage [2009/03/18(水) 10:44:13 ]
>>323
期待する動作は、プログラムで1Aを送ると終了して欲しい、ということです。
ターミナルやコマンドプロンプトなどで、^Zを送ったときと同じような動作を期待しています。

345 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 10:44:39 ]
>>342
\d や \w はロケールや UTF-8 フラグによってマッチする文字が変わる。例えば全角数字。
$ は改行の直前にもマッチするので、"A10\n" =~ /^A[0-9]+$/ が真となってハマる初心者多し。
^ は /m が指定されていない限り文字列先端にしかマッチしないので、\A だとやや偏執的
とも感じる。用心深いに越した事はないけれど、/\AA よりは /^A の方が見た目がスッキリ
して読みやすい。

perldoc.jp/docs/perl/5.10.0/perlreref.pod
perldoc.jp/docs/perl/5.10.0/perlretut.pod



346 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 11:35:38 ]
>>344
1Aが入ってきたら終わるように書けばいいだけ。

347 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 16:01:22 ]
Perl業界におけるPerl 6の立ち位置がよく分からないんですが、
雰囲気的にはどんな感じなんでしょうか?

348 名前:デフォルトの名無しさん [2009/03/18(水) 16:24:04 ]
>>347
Web業界に限って言えば様子見ムード。

349 名前:デフォルトの名無しさん [2009/03/18(水) 16:28:27 ]
Parrot1.0が出ましたが、これ使うと何が出来るようになるんですか?
他言語との連携が楽になるだけ?

350 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 16:40:10 ]
>>344
CP/Mからの呪縛。

DOS(Windows)とUNIXそれぞれの、改行コード、終端コード、
テキストモード、バイナリモードについて、ググるなりして理解するのが先。

351 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 18:44:37 ]
>>345
d

352 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 20:17:40 ]
>>344
だから 0x1a が EOF と思ってる時点で間違ってる
まずここを理解しろよ

CTRL-Z 押下は EOF を送るための特殊な操作であって、
それが歴史的な理由で CTRL-Z (0x1a)になってるだけであって
0x1a を送れば EOF になるわけじゃない。


353 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 01:24:01 ]
>>344
if (ナントカ eq "\x1a") { exit }

こういう発想は思いつかんの?

354 名前:311 mailto:sage [2009/03/19(木) 07:08:15 ]
>>346 >>352-353
理解しました。ありがとう。

355 名前:デフォルトの名無しさん [2009/03/20(金) 02:20:00 ]
@a = ('1','2','3','4','5','6')
@b = ('2','3')

という配列があった時に、@aから@bを削除して

@c = ('1','4','5','6')

を作りたいのです。ループ回すしか無いのでしょうか?
大崎氏(www.din.or.jp/~ohzaki/perl.htm#ArrayUnique)の、

# 配列 @array から重複した要素を取り除く

{
my %count;
@array = grep(!$count{$_}++, @array);
}

みたいな華麗な手法があるなら知りたいです。



356 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 03:24:57 ]
@count{@b} = @b;
@array = grep(!defined($count{$_}), @a);

357 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 05:09:05 ]
@c = grep{!((join ',', @b) =~ /(?:^|[^0-9])$_(?:[^0-9]|$)/)} @a;

すごく…力わざです…

358 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 06:47:02 ]
>>355
みたいなじゃなくてそれ使えよ

359 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 16:49:14 ]
>>355
use Array::Utils;

@a = ('1','2','3','4','5','6');
@b = ('2','3');
@c = Array::Utils::array_diff(@a, @b); # (1,4,5,6)

360 名前:デフォルトの名無しさん [2009/03/20(金) 16:52:41 ]
>>359
最近ではそういうのを華麗というのか?

361 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 17:25:05 ]
モダン(笑)

362 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 21:33:12 ]
教えてください。恥ずかしいんですが...

sample.html
--------------------
<html>
2009-03-20
</html>
--------------------

yyyy-mm-dd.pl
--------------------
#!/usr/bin/perl

use Time::Local;

($s, $mi, $h, $d, $mo, $y, $w) = localtime(time);

$lastupdate = sprintf("%04d-%02d-%02d", $y + 1900, $mo +1, $d);
$yesterday = sprintf("%04d-%02d-%02d", $y + 1900, $mo +1, $d-1);

s/$yesterday/$lastupdate/g sample.html;
--------------------

363 名前:362 mailto:sage [2009/03/21(土) 21:34:06 ]
(続き)
sample.html内の2009-03-20を2009-03-21に置換したいのですが、
これじゃだめなんですよね? どうしたらいいでしょうか。

ちなみに、ワンライナーっていうんですよね、それで
$ perl -i -p -e 's/2009-03-20/2009-03-21/g;' sample.html
みたいにすると置換できましたが、s/foo/bar/のfoo, barの部分に
変数を使いたいんです。

目的は、社内LANで公開しているweb(html)内の最終更新日時の表示を、
ちょっとした理由から、毎朝午前5時とかに、その日の日付に変えること、です。

よろしくお願いします。

364 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 21:45:51 ]
>>363
javascriptじゃだめなの?

365 名前: ◆TWARamEjuA mailto:sage [2009/03/21(土) 21:51:44 BE:3484984-BRZ(10001)]
04月01日だと、$yesterdayに04月00日が生成される伊予柑♪



366 名前:362 mailto:sage [2009/03/21(土) 22:00:24 ]
しくしく。。。いじわるですね。。。というか遊ばれていますね。。。

javascriptでもいけるんでしょうか。
それから、おっしゃるとおり04月00日になりそうですね。
perlで行くとしたら、そこは勉強して、何とか回避策を考えようと思います。

WSH, perl, あと何だろう、いくつか候補を考えたのですが、perlは
まったくといっていい初心者です。sedも。正規表現は理解はしている
つもりですが使ったことがあまりないです。

どんな手段でもよいのですが、何となくperlがよさそうだと思って、
この板に来てしまいました。。。

あらためて、どんな手段(言語、手段、ツール)がいいかを含めて
教えてください。<(_ _)>

367 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 22:11:34 ]
>>362
1) SSIで最終更新日時を書くのが楽
2) Perlでやるなら、File::Slurpで読んでDateTimeで計算するのが楽

かね。
そもそも、

A) sample.htmlにベタ書きしてある最終更新日時の翌日を書けばいいのか、
B) sample.htmlの最終更新日時をただ表示すればよいのか(上記1.でよい)、

そのあたりの要件がはっきりしません。
更新日時についても、営業日でなくて暦日で良いのか、とか。

ちょっとまってね、これから書くから。






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

前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