CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
CGI と Perl の区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: http://hibari.2ch.net/php/ )
回答する際はモダンな方法でお願いします
(例 jcode.plではなくEncodeモジュールを使った方法)
理由はもう2012年です。いい加減2000年以前の方法はやめましょう。
最新のPerlを使うほうがかっこいいです。
いつまで勉強しないつもりですか?
過去にとらわれるのはもうやめです。進歩しませんよ。
このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
"The duct tape of the Internet" こと、Perl についての質問箱です。
"There's more than one way to do it" ということで、
Perl の奥深さについて皆で語り合い、追求してまいりましょう。
http://www.perl.org/get.html
● 2011/10/30 現在の最新版: 5.14.2
▼ 前スレ
Perlについての質問箱 49箱目
http://toro.2ch.net/test/read.cgi/tech/1319953460/
リンク集は >>2-3辺り
Perl 日本語処理の基礎の基礎 >>4辺り
【モダン推奨】Perlについての質問箱 50箱目
■ このスレッドは過去ログ倉庫に格納されています
2012/01/21(土) 10:56:39.03
202デフォルトの名無しさん
2012/07/20(金) 23:17:21.71 モダンな奴はそもそもPerl使わないからな
203デフォルトの名無しさん
2012/07/25(水) 02:06:14.30 USP(Universal Shell Programming)研究所は、UNIX/Linuxの基本思想である、
「小さな道具」(コマンド)を組み合わせて「問題を解決する」(シェルス
クリプト)手法の研究・普及を行っています。この開発手法(ユニケージ
開発手法)は、従来のウォーターフォール型開発や、オブジェクト指向言
語・データベースソフトを用いた開発手法と一線を画し、圧倒的な開発生産
性 圧倒的な柔軟性を特徴としています。
ttp://www.usp-lab.com/
「小さな道具」(コマンド)を組み合わせて「問題を解決する」(シェルス
クリプト)手法の研究・普及を行っています。この開発手法(ユニケージ
開発手法)は、従来のウォーターフォール型開発や、オブジェクト指向言
語・データベースソフトを用いた開発手法と一線を画し、圧倒的な開発生産
性 圧倒的な柔軟性を特徴としています。
ttp://www.usp-lab.com/
204デフォルトの名無しさん
2012/07/30(月) 19:45:03.06 本スレも、荒しに常駐されてぐだぐだだし、
WebProgの方も同じみたいに、スレ違いの会話が
ぐだぐだ続いて終了したし、終りかなあ。
ここのスレの方がまだ真面にperlの話をしてた気がするよ。
WebProgの方も同じみたいに、スレ違いの会話が
ぐだぐだ続いて終了したし、終りかなあ。
ここのスレの方がまだ真面にperlの話をしてた気がするよ。
205デフォルトの名無しさん
2012/07/30(月) 20:56:12.50 まあモダンには2つあって、ひとつはすぐに古くなるモダン。
もうひとつはいつまでも古くならないモダン。
おれは断然古くならないモダンのほうがいいな。
もうひとつはいつまでも古くならないモダン。
おれは断然古くならないモダンのほうがいいな。
206デフォルトの名無しさん
2012/07/30(月) 23:46:15.85 XSを使うと1年後に古くなるほうのモダンですか?
207デフォルトの名無しさん
2012/07/30(月) 23:47:25.65 軟便スキー独りか知らんが、
韓国ネタのコピペしたり
hoge煽りしたり
ググれ煽りしたり
馬鹿じゃねーの?
韓国ネタのコピペしたり
hoge煽りしたり
ググれ煽りしたり
馬鹿じゃねーの?
208デフォルトの名無しさん
2012/07/31(火) 00:19:41.40 そしてゆっくりモダンになっていく...
それが理想です
それが理想です
209デフォルトの名無しさん
2012/07/31(火) 00:27:00.96 進歩というものは過去を捨てることではない。
過去に加えて積み上げるものなのだ。
過去に加えて積み上げるものなのだ。
210デフォルトの名無しさん
2012/07/31(火) 01:28:15.89 荒しが950踏んで嬉々としてhoge禁止をテンプレに入れる姿が目に見える様だ
211デフォルトの名無しさん
2012/08/04(土) 17:51:38.53 過去のソフトウェアと作法やインタフェースが異なる言い訳としてモダンと
いう用語を使うのはまずい。今までより苦労が増えるなら移行は進むはず
がない。
いう用語を使うのはまずい。今までより苦労が増えるなら移行は進むはず
がない。
212デフォルトの名無しさん
2012/08/05(日) 20:55:07.11 ところでこのスレが53箱目の続きってことでいいの?
213デフォルトの名無しさん
2012/08/05(日) 20:56:46.40 すまん、53箱目の続きあった。“54目”になってたんで検索に引っかからなかったわ。
214デフォルトの名無しさん
2012/08/06(月) 18:23:11.89 以下のように時刻と曜日が書かれたlogファイルがあります。
Jun 6 00:07:41 xxxxx
Aug 8 00:14:34 yyyyy
Aug 8 00:16:26 zzzzz
〜
(以下略
現時刻から一時間前のログのみ抽出して、抽出したログの行数だけ出したいのですがこの処理って一行(ワンライナー)で書けますか?※重複とかは無視して単純に一時間分のログが引っこ抜ければ良いです。
詳しい人教えてください。
Jun 6 00:07:41 xxxxx
Aug 8 00:14:34 yyyyy
Aug 8 00:16:26 zzzzz
〜
(以下略
現時刻から一時間前のログのみ抽出して、抽出したログの行数だけ出したいのですがこの処理って一行(ワンライナー)で書けますか?※重複とかは無視して単純に一時間分のログが引っこ抜ければ良いです。
詳しい人教えてください。
215デフォルトの名無しさん
2012/08/06(月) 18:26:08.19216デフォルトの名無しさん
2012/08/06(月) 18:57:53.32217デフォルトの名無しさん
2012/08/07(火) 18:06:48.10218デフォルトの名無しさん
2012/08/07(火) 18:12:29.44 横レス(別人)
$ perl -F'/[\s:]+/' -MTime::Local -lane 'BEGIN{ %m = map{uc $_, $i ++} qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);} next if ( time - timelocal @F[4,3,2,1], $m{uc $F[0]}, 2012 - 1900 ) > 3600 ; print ;' *txt
年は 2012 年を期待、 2013 年になったら知らん。
年跨ぎを念頭に入れるとなると log file の形式から作成しなおし。
win の人なら、シングルクォーテーションをダブルに
変えなきゃ動かんかも。
勉強したいのであれば、エポック秒、時間比較 perl あたりでググる。
$ perl -F'/[\s:]+/' -MTime::Local -lane 'BEGIN{ %m = map{uc $_, $i ++} qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);} next if ( time - timelocal @F[4,3,2,1], $m{uc $F[0]}, 2012 - 1900 ) > 3600 ; print ;' *txt
年は 2012 年を期待、 2013 年になったら知らん。
年跨ぎを念頭に入れるとなると log file の形式から作成しなおし。
win の人なら、シングルクォーテーションをダブルに
変えなきゃ動かんかも。
勉強したいのであれば、エポック秒、時間比較 perl あたりでググる。
219デフォルトの名無しさん
2012/08/07(火) 18:20:05.07 >>218
あんた2012年の住人じゃないだろw
あんた2012年の住人じゃないだろw
220デフォルトの名無しさん
2012/08/07(火) 18:30:46.11221デフォルトの名無しさん
2012/08/07(火) 18:34:05.93 年跨ぎのケースを考え無くて良いなら、コードの2012を2013にすりゃいいだけ。
222デフォルトの名無しさん
2012/08/08(水) 18:20:12.98 というより、「年」は全部今年として扱えばいい。
年が明けてから1時間はまともにログを拾えなくなるけど。
そもそもログデータに「年」の情報が入っていないんだから、
厳密に処理するのは無理だべ。
年が明けてから1時間はまともにログを拾えなくなるけど。
そもそもログデータに「年」の情報が入っていないんだから、
厳密に処理するのは無理だべ。
223デフォルトの名無しさん
2012/08/08(水) 18:36:12.52 >>218に対して言ってるのなら、
最初からそれを念頭に書いてないか?
コードは既にそうなってるし、
説明文の方は質問者に向けたもんだし、
改造しやすいように除算は態々、2012 -1900 にして残してあるし。
それともtime関数に、年を除外するオプションでもあんの?
最初からそれを念頭に書いてないか?
コードは既にそうなってるし、
説明文の方は質問者に向けたもんだし、
改造しやすいように除算は態々、2012 -1900 にして残してあるし。
それともtime関数に、年を除外するオプションでもあんの?
224デフォルトの名無しさん
2012/08/08(水) 19:02:57.22 >>223
年が変わるごとに 2012 を 2013 だの 2014 だのに書き換えるの面倒だろうから
「年」のところはログの日付も現在の時間も全部localtimeの「今年」という前提で
扱えば毎年コード書き直さなくてもよくなるだろっていってるんだよボケ。
年が変わるごとに 2012 を 2013 だの 2014 だのに書き換えるの面倒だろうから
「年」のところはログの日付も現在の時間も全部localtimeの「今年」という前提で
扱えば毎年コード書き直さなくてもよくなるだろっていってるんだよボケ。
225デフォルトの名無しさん
2012/08/08(水) 19:09:28.99 perl -F'/[\s:]+/' -MTime::Local -lane 'BEGIN{ %m = map{uc $_, $i ++} qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);} next if ( time - timelocal @F[4,3,2,1], $m{uc $F[0]}, ( localtime(time))[5] ) > 3600 ; print ;' *txt
こういう意味ねw、了解した。
こういう意味ねw、了解した。
226デフォルトの名無しさん
2012/08/08(水) 19:17:05.60 で、試しに自分でも書いてみた。
LC_ALL=C perl -MTime::Piece -e '$lt=localtime;$ty=$lt->year;while(<>){next unless m/(\w+) +(\d+) +(\d+:\d+:\d+)/;$t=Time::Piece->strptime("$ty $1 $2 $3","%Y %b %d %H:%M:%S");$c++ if $lt-$t<3600}print "$c\n"' logfile
218の方がすっきりしてるか。なぜかうちの環境だとエラー吐いて動かなかったけど…。
(Day 'Jun' out of range 1..31 at -e line 1 て言われた)
LC_ALL=Cは環境によってはつけとかないとTime::Piece->strptime()がエラー吐くんで。
行数が知りたい、だったので行数出力にしたけど、該当行を全部出したいんだったら
$c++以降を print if $lt-$t<3600}' に置き換えれば218と同じ出力になる。
行数はwc使えばあとからでもわかるしね。
LC_ALL=C perl -MTime::Piece -e '$lt=localtime;$ty=$lt->year;while(<>){next unless m/(\w+) +(\d+) +(\d+:\d+:\d+)/;$t=Time::Piece->strptime("$ty $1 $2 $3","%Y %b %d %H:%M:%S");$c++ if $lt-$t<3600}print "$c\n"' logfile
218の方がすっきりしてるか。なぜかうちの環境だとエラー吐いて動かなかったけど…。
(Day 'Jun' out of range 1..31 at -e line 1 て言われた)
LC_ALL=Cは環境によってはつけとかないとTime::Piece->strptime()がエラー吐くんで。
行数が知りたい、だったので行数出力にしたけど、該当行を全部出したいんだったら
$c++以降を print if $lt-$t<3600}' に置き換えれば218と同じ出力になる。
行数はwc使えばあとからでもわかるしね。
227デフォルトの名無しさん
2012/08/08(水) 19:19:19.26228デフォルトの名無しさん
2012/08/08(水) 19:28:58.56 >>226
> 218の方がすっきりしてるか。なぜかうちの環境だとエラー吐いて動かなかったけど…。
> (Day 'Jun' out of range 1..31 at -e line 1 て言われた)
なぜエラーが出たかわかった。自分でテスト用に切り出して作ったログファイルの
各行頭にスペースが入っていたからだった。(ありがち)
> 218の方がすっきりしてるか。なぜかうちの環境だとエラー吐いて動かなかったけど…。
> (Day 'Jun' out of range 1..31 at -e line 1 て言われた)
なぜエラーが出たかわかった。自分でテスト用に切り出して作ったログファイルの
各行頭にスペースが入っていたからだった。(ありがち)
229デフォルトの名無しさん
2012/08/08(水) 21:24:39.24230デフォルトの名無しさん
2012/08/09(木) 03:59:05.87 perl -MTime::Piece -lE 'my $lt=localtime; my $ty=$lt->year ; while(<>){next unless m/(\w+) +(\d+) +(\d+:\d+:\d+)/;\
my $t=Time::Piece->strptime("$ty $1 $2 $3","%Y %b %d %H:%M:%S"); print q{#####} ; print ; print $lt ; print $t ; print $lt-$t }' log file
#####
Jun 6 00:07:41 xxxxx
Thu Aug 9 03:45:48 2012
Wed Jun 6 00:07:41 2012
5510287
#####
Aug 8 00:14:34 yyyyy
Thu Aug 9 03:45:48 2012
Wed Aug 8 00:14:34 2012
66674
#####
Aug 8 00:16:26 zzzzz
Thu Aug 9 03:45:48 2012
Wed Aug 8 00:16:26 2012
66562
#####
Aug 8 22:15:14 zzzzz
Thu Aug 9 03:45:48 2012
Wed Aug 8 22:15:14 2012
-12566
うちの環境だとTime::Pieceオブジェクトの除算が変だ。なんで?
my $t=Time::Piece->strptime("$ty $1 $2 $3","%Y %b %d %H:%M:%S"); print q{#####} ; print ; print $lt ; print $t ; print $lt-$t }' log file
#####
Jun 6 00:07:41 xxxxx
Thu Aug 9 03:45:48 2012
Wed Jun 6 00:07:41 2012
5510287
#####
Aug 8 00:14:34 yyyyy
Thu Aug 9 03:45:48 2012
Wed Aug 8 00:14:34 2012
66674
#####
Aug 8 00:16:26 zzzzz
Thu Aug 9 03:45:48 2012
Wed Aug 8 00:16:26 2012
66562
#####
Aug 8 22:15:14 zzzzz
Thu Aug 9 03:45:48 2012
Wed Aug 8 22:15:14 2012
-12566
うちの環境だとTime::Pieceオブジェクトの除算が変だ。なんで?
231デフォルトの名無しさん
2012/08/09(木) 05:09:37.92 >>230
あう〜。ホントだ。ウチでも同じだ。
Time::Piece->strptime()でTime::Pieceオブジェクトを作るとgmtimeベースになるっぽい。
ttp://digit.que.ne.jp/work/index.cgi?Perl%E3%83%A1%E3%83%A2%2FTime%3A%3APiece%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB
だから引き算の結果がTZのoffset分ずれるのか…。strptime()でlocaltimeベースにするには…
$ LC_ALL=C perl -MTime::Piece -lE '$lt=localtime;$ty=$lt->year;while(<>){next unless m/(\w+) +(\d+) +(\d+:\d+:\d+)/;\
$t=localtime Time::Piece->strptime("$ty $1 $2 $3","%Y %b %d %H:%M:%S")->epoch;$t-=$lt->tzoffset;\
say q{#####};say $lt," = ",$lt->[Time::Piece::c_islocal];say $t," = ",$t->[Time::Piece::c_islocal];say $lt-$t}' logfile
#####
Thu Aug 9 04:57:20 2012 = 1
Wed Jun 6 00:07:41 2012 = 1
5546979
#####
Thu Aug 9 04:57:20 2012 = 1
Wed Aug 8 00:14:34 2012 = 1
103366
#####
Thu Aug 9 04:57:20 2012 = 1
Wed Aug 8 00:16:26 2012 = 1
103254
#####
Thu Aug 9 04:57:20 2012 = 1
Wed Aug 8 19:20:14 2012 = 1
34626
(こんな時間に何をやっているんだか)
もしくはstrptime()の方をいじらずに、
$lt=localtime; → $lt=gmtime;$lt+=localtime->tzoffset;
か…。gmtimeベースになっちゃうけど引き算の結果は正しくなる。
という訳で、けっこういろいろとメンドくさいもんですね。
あう〜。ホントだ。ウチでも同じだ。
Time::Piece->strptime()でTime::Pieceオブジェクトを作るとgmtimeベースになるっぽい。
ttp://digit.que.ne.jp/work/index.cgi?Perl%E3%83%A1%E3%83%A2%2FTime%3A%3APiece%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB
だから引き算の結果がTZのoffset分ずれるのか…。strptime()でlocaltimeベースにするには…
$ LC_ALL=C perl -MTime::Piece -lE '$lt=localtime;$ty=$lt->year;while(<>){next unless m/(\w+) +(\d+) +(\d+:\d+:\d+)/;\
$t=localtime Time::Piece->strptime("$ty $1 $2 $3","%Y %b %d %H:%M:%S")->epoch;$t-=$lt->tzoffset;\
say q{#####};say $lt," = ",$lt->[Time::Piece::c_islocal];say $t," = ",$t->[Time::Piece::c_islocal];say $lt-$t}' logfile
#####
Thu Aug 9 04:57:20 2012 = 1
Wed Jun 6 00:07:41 2012 = 1
5546979
#####
Thu Aug 9 04:57:20 2012 = 1
Wed Aug 8 00:14:34 2012 = 1
103366
#####
Thu Aug 9 04:57:20 2012 = 1
Wed Aug 8 00:16:26 2012 = 1
103254
#####
Thu Aug 9 04:57:20 2012 = 1
Wed Aug 8 19:20:14 2012 = 1
34626
(こんな時間に何をやっているんだか)
もしくはstrptime()の方をいじらずに、
$lt=localtime; → $lt=gmtime;$lt+=localtime->tzoffset;
か…。gmtimeベースになっちゃうけど引き算の結果は正しくなる。
という訳で、けっこういろいろとメンドくさいもんですね。
232デフォルトの名無しさん
2012/08/09(木) 08:02:26.85233デフォルトの名無しさん
2012/08/09(木) 08:03:44.22 レスくれた人ありがとうございます>>214です。
まだperlは入門書読み終わった程度なので右も左も分かりませんが、教えて頂いたコードを参考に色々書き方を研究したいと思います。
まだperlは入門書読み終わった程度なので右も左も分かりませんが、教えて頂いたコードを参考に色々書き方を研究したいと思います。
234デフォルトの名無しさん
2012/08/12(日) 12:31:10.61 入門書読み終えたばかりの初心者には組込みのlocaltime関数を教えてあげないよ
235デフォルトの名無しさん
2012/08/13(月) 16:57:18.75 >>234
なにが言いたいのかわからん
なにが言いたいのかわからん
236デフォルトの名無しさん
2012/08/14(火) 00:43:26.35 ほら、俺ってサ
意外にすいすいしいヤツ
だからサ
意外にすいすいしいヤツ
だからサ
237デフォルトの名無しさん
2012/08/14(火) 23:54:42.42 初心者には localtime の方が便利な件
238デフォルトの名無しさん
2012/08/15(水) 05:40:02.45 >>234,>>237
既に>>225が提示してるだろ?
学習するかは質問者さんの勝手。
>>232
目医者行け。
266氏を晒す訳じゃないが、ワンライナにwhile(<>){}直接埋め込んでる時点で
スタイリッシュじゃない。
225に相当するコードをTime::Pieceで書いた場合、
perl -F'\s+' -MTime::Piece -lanE 'state $lt = localtime; next if $lt - localtime( Time::Piece->strptime((join " ", $lt->year,@F[0..2]),"%Y %b %d %H:%M:%S")) > 3600; say'
226に略
perl -F'\s+' -MTime::Piece -lanE 'state $lt = localtime; $c++ if $lt - localtime( Time::Piece->strptime((join " ", $lt->year,@F[0..2]),"%Y %b %d %H:%M:%S")) < 3600;}{ say $c'
既に>>225が提示してるだろ?
学習するかは質問者さんの勝手。
>>232
目医者行け。
266氏を晒す訳じゃないが、ワンライナにwhile(<>){}直接埋め込んでる時点で
スタイリッシュじゃない。
225に相当するコードをTime::Pieceで書いた場合、
perl -F'\s+' -MTime::Piece -lanE 'state $lt = localtime; next if $lt - localtime( Time::Piece->strptime((join " ", $lt->year,@F[0..2]),"%Y %b %d %H:%M:%S")) > 3600; say'
226に略
perl -F'\s+' -MTime::Piece -lanE 'state $lt = localtime; $c++ if $lt - localtime( Time::Piece->strptime((join " ", $lt->year,@F[0..2]),"%Y %b %d %H:%M:%S")) < 3600;}{ say $c'
239266 (未来より参上)
2012/08/15(水) 16:15:51.26 >>238
おおうスタイリッシュ。
state とか使ったことなかったけど便利そうだな。参考にさせていただきます。
ワンライナーはあんまし書かないのもあってオプションも -i -n -p -e くらいしか
普段使ってなかったりしますんで。-E すら滅多に使わないな…。nもpもなしに
while(<>)埋め込むのもループの前後で処理が必要な時とかは普通にやってるし。
その程度のスキルでもとりあえず動くものは書けるってのがPerlのメリットでもあり
欠点でもあると…まあこの場合メリットということで。TMTOWTDI。(覚えづらいよなこれ)
おおうスタイリッシュ。
state とか使ったことなかったけど便利そうだな。参考にさせていただきます。
ワンライナーはあんまし書かないのもあってオプションも -i -n -p -e くらいしか
普段使ってなかったりしますんで。-E すら滅多に使わないな…。nもpもなしに
while(<>)埋め込むのもループの前後で処理が必要な時とかは普通にやってるし。
その程度のスキルでもとりあえず動くものは書けるってのがPerlのメリットでもあり
欠点でもあると…まあこの場合メリットということで。TMTOWTDI。(覚えづらいよなこれ)
240デフォルトの名無しさん
2012/08/16(木) 22:01:16.60 なんで隔離スレで真面目に質問箱してんのよw
>>233
コード研究するんだったら、B::Deparseは必須。
% perl -MO=Deparse -lane '}{ print $.'
BEGIN { $/ = "\n"; $\ = "\n"; }
LINE: while (defined($_ = <ARGV>)) {
chomp $_;
our(@F) = split(' ', $_, 0);
}
{
print $.;
}
-e syntax OK
調べたいコードのオプションの先頭に、-MO=Deparseくっつけるだけ。
それにしても、バルサン炊いたみたいに、人がいなくなったな本スレと初心者スレ。
実際の所は、ハイエナが肉に夢中になってるだけだろうけど。
>>233
コード研究するんだったら、B::Deparseは必須。
% perl -MO=Deparse -lane '}{ print $.'
BEGIN { $/ = "\n"; $\ = "\n"; }
LINE: while (defined($_ = <ARGV>)) {
chomp $_;
our(@F) = split(' ', $_, 0);
}
{
print $.;
}
-e syntax OK
調べたいコードのオプションの先頭に、-MO=Deparseくっつけるだけ。
それにしても、バルサン炊いたみたいに、人がいなくなったな本スレと初心者スレ。
実際の所は、ハイエナが肉に夢中になってるだけだろうけど。
241デフォルトの名無しさん
2012/08/19(日) 22:14:32.47 初めてのPerl第6版とPerl5.16.1のことだね。
Unicodeサポートの問題に今頃気づいたって読める。
第5版のときはまだ気づいていなかったのかな?
まあ、そんときは使ってなかったんだろうけどな。
Unicodeサポートの問題に今頃気づいたって読める。
第5版のときはまだ気づいていなかったのかな?
まあ、そんときは使ってなかったんだろうけどな。
242デフォルトの名無しさん
2012/08/20(月) 05:51:33.20 今上天皇侮辱発言の祭りが落ち着いたから、戻って来たぞゴキブリ。
でも、まあ、5割くらい減ったんじゃねーかな?
でも、まあ、5割くらい減ったんじゃねーかな?
243デフォルトの名無しさん
2012/08/20(月) 22:17:22.42 バルサン耐性を備えて5割以上パワーあっぷぷぷw
244デフォルトの名無しさん
2012/08/26(日) 15:07:51.22 ゆっくりモダンになっていく・・・
・・・モダンRuby。
・・・モダンRuby。
245デフォルトの名無しさん
2012/08/29(水) 00:35:50.14 モダンPERL追いかけてたら時代に取り残されましたとほほ
246デフォルトの名無しさん
2012/08/30(木) 21:05:34.35 >>245
その最後の「とほほ」だけで、もう10年以上は時代に取り残されてるよな
その最後の「とほほ」だけで、もう10年以上は時代に取り残されてるよな
247デフォルトの名無しさん
2012/08/30(木) 21:12:12.26 とほほだってよw
もうお前5.6こそ最高とかいって周りに強要してろよ
もうお前5.6こそ最高とかいって周りに強要してろよ
248デフォルトの名無しさん
2012/08/31(金) 00:07:22.19 5.6だと日本語がちゃんと使えません。仕事で使うなら5.005一択です。
249デフォルトの名無しさん
2012/09/01(土) 09:59:22.19 どうやらモダンパールは時代遅れみたいですね
本家のパールはすでにその先に進んでます
テキスト処理90%のPerlが文字列を楽に扱えないなんてたちの悪い冗談でしか
ありません
本家のパールはすでにその先に進んでます
テキスト処理90%のPerlが文字列を楽に扱えないなんてたちの悪い冗談でしか
ありません
250デフォルトの名無しさん
2012/09/02(日) 02:19:31.92 C++へのアンチテーゼの側面もあったPerlなのにモダンPerlはどうしちゃったのかな
251デフォルトの名無しさん
2012/09/03(月) 01:19:39.59 テクノロジーはスクラップアンドビルドなものと考える連中はとほほの内容が
古いと考えるようだ
古いと考えるようだ
252デフォルトの名無しさん
2012/09/08(土) 14:37:07.80 かってに「モダン」とか名乗るなや
253デフォルトの名無しさん
2012/09/09(日) 00:59:31.20 モダンでもないのにモダン名乗られてもなあ
254デフォルトの名無しさん
2012/09/09(日) 08:13:34.65 リャマ本第6版までモダンに毒されてるよ
おまいらリャマ本は第1版こそ至高・正義だ
定価より高くても中古で第1版を買え!
おまいらリャマ本は第1版こそ至高・正義だ
定価より高くても中古で第1版を買え!
255デフォルトの名無しさん
2012/09/09(日) 17:51:10.11 第1版ってのはバージョン4のピンク本のことか?あれは本当にいい本
256デフォルトの名無しさん
2012/09/09(日) 18:42:20.14 ダヨモンPerl
アリャマ本
アリャマ本
257デフォルトの名無しさん
2012/09/10(月) 00:59:47.94 赤らくだ本だとか赤リャマ本の序文、それにポケットリファレンスの序文でLarryはふざけ過ぎてしばらくの間O'reillyから干されていた。今回「まじめに書く」と誓ったためようやく第4版の執筆許可が下りたらしい。
258デフォルトの名無しさん
2012/09/12(水) 00:04:41.71 結局らくだ本的にはモダンPerl(=perl5.8)はスルーってことか
最近は重いモジュールも避けられる傾向にあるしな
最近は重いモジュールも避けられる傾向にあるしな
259デフォルトの名無しさん
2012/09/12(水) 00:11:25.67 重いモジュールも避けられる傾向にあるしな(キリッ
とか言う奴は十中八九List::Utilとかを使わない
とか言う奴は十中八九List::Utilとかを使わない
260デフォルトの名無しさん
2012/09/12(水) 00:30:32.64 実際に書かせてみればろくなコード書かないんだろうな
261デフォルトの名無しさん
2012/09/12(水) 00:31:53.70 モダンperlと言われているもののうち一部の重たいモジュールを持ち出して
重たいモジュールは避ける傾向にあるからモダンperlも避ける傾向だよねー
なんてどんな詭弁だよ
重たいモジュールは避ける傾向にあるからモダンperlも避ける傾向だよねー
なんてどんな詭弁だよ
262デフォルトの名無しさん
2012/09/12(水) 00:33:07.74 確かにLarryはモダンPerlについて多くを語ろうとしないな
きっと軽いスクリプトが好きなんだろうなList::Utilとか使わない
きっと軽いスクリプトが好きなんだろうなList::Utilとか使わない
263デフォルトの名無しさん
2012/09/12(水) 00:55:43.31 List::UtilはXSで書かれてるから自分でPerlで書くよりよっぽど高速なわけだが
てかとってつけたようにLarry様の名前出すなよw
てかとってつけたようにLarry様の名前出すなよw
264デフォルトの名無しさん
2012/09/12(水) 01:36:14.68 GUIやバイナリファイル扱うときにXSを使って効率を上げるのは分かるが
そうでないときにXS使ってスクリプトの利便性を下げるのは簡便だな。
そうでないときにXS使ってスクリプトの利便性を下げるのは簡便だな。
265デフォルトの名無しさん
2012/09/12(水) 01:47:29.25 勘弁
266デフォルトの名無しさん
2012/09/12(水) 02:38:31.59 >>264
なぜ利便性が下がる?
なぜ利便性が下がる?
267デフォルトの名無しさん
2012/09/13(木) 23:01:41.84 第1ヒント:テキスト萌えたんのポータビリティ強化月間
268デフォルトの名無しさん
2012/09/13(木) 23:29:47.30 「スクリプトが何かよく分かっていない」と書いたはらたいらに3,000点。
269デフォルトの名無しさん
2012/09/14(金) 23:30:28.34 バイナリではないところがスクリプトの利便性って分かるかな?無理かな?
270デフォルトの名無しさん
2012/09/15(土) 17:45:47.86 利便性の優先度
作る人の利便性 <<< 使う人の利便性
作る人の利便性 <<< 使う人の利便性
271デフォルトの名無しさん
2012/09/15(土) 18:43:43.53 中身が古いか新しいかは使う人の利便性に影響はしないけどね
272デフォルトの名無しさん
2012/09/15(土) 22:16:30.43 結局モダンかどうかは気持ちの問題だし、供給者側の主張次第でしょ
利用者側にとってはちゃんと使えればどうでもいいよそんなもん
利用者側にとってはちゃんと使えればどうでもいいよそんなもん
273デフォルトの名無しさん
2012/09/19(水) 01:43:10.30 モダンパールは単なる自己満足であったか
そもそも書いたときはモダンでも後で読むときはモダンではないわな
モダンと言われると互換性がないんじゃないかと思って警戒するひとも
いるかもしれないしな
そもそも書いたときはモダンでも後で読むときはモダンではないわな
モダンと言われると互換性がないんじゃないかと思って警戒するひとも
いるかもしれないしな
274デフォルトの名無しさん
2012/09/19(水) 02:38:41.68 use strict;
use Encode;
use Encode;
275デフォルトの名無しさん
2012/09/20(木) 09:27:07.77 Perl 6は、ポストモダンですか
276デフォルトの名無しさん
2012/09/20(木) 13:14:19.79 バイナリでの文字列置換をしています
$str =~ s/\xFF/\x00/g;
という書き方ならうまく行くのに、
$src = '\xFF';
$dst = '\x00';
$str =~ s/$src/$dst/g;
ではうまく行きません
$srcの部分は思い通り検索できるのに、
$dstの部分はバイナリではなく \x00 という文字列に置換されます
どうすればいいですか
$str =~ s/\xFF/\x00/g;
という書き方ならうまく行くのに、
$src = '\xFF';
$dst = '\x00';
$str =~ s/$src/$dst/g;
ではうまく行きません
$srcの部分は思い通り検索できるのに、
$dstの部分はバイナリではなく \x00 という文字列に置換されます
どうすればいいですか
277デフォルトの名無しさん
2012/09/20(木) 13:16:41.93 $dst = "\x00";
278デフォルトの名無しさん
2012/09/20(木) 13:31:02.66 確かにそういうことなのですが、
何故$dstという変数を使うかというと、その中身が不定だからです
$dst に '00' とか '01' とかいろんな文字列が入った場合の置換の書き方はありませんか
とりあえず、pack("C", hex($dst)) と書いて eオプションで評価すれば
うまく行くのは確認したのですが、$srcみたいなスマートな書き方はできないものかと
何故$dstという変数を使うかというと、その中身が不定だからです
$dst に '00' とか '01' とかいろんな文字列が入った場合の置換の書き方はありませんか
とりあえず、pack("C", hex($dst)) と書いて eオプションで評価すれば
うまく行くのは確認したのですが、$srcみたいなスマートな書き方はできないものかと
279デフォルトの名無しさん
2012/09/20(木) 14:11:13.98 packするのが一番マシじゃないだろうか
ただ置換内ではなくその直前に追い出したいけど
ただ置換内ではなくその直前に追い出したいけど
280デフォルトの名無しさん
2012/09/20(木) 14:30:17.21 後半が文字列で表現されている時に、
それをテキストとして見ていいのかバイナリとして見ていいのか、
両方の解釈が有り得るのが問題なんだな
書いたままだよ、というルールで統一されていれば納得するものを、
コードに埋め込んだ時はバイナリだけど、変数が来たら文字列、という解釈をして、
しかも、置換の前半部分は変数でもバイナリとする変態文法
逆に前半を文字列として認識させたい時はどうするんだろう
それをテキストとして見ていいのかバイナリとして見ていいのか、
両方の解釈が有り得るのが問題なんだな
書いたままだよ、というルールで統一されていれば納得するものを、
コードに埋め込んだ時はバイナリだけど、変数が来たら文字列、という解釈をして、
しかも、置換の前半部分は変数でもバイナリとする変態文法
逆に前半を文字列として認識させたい時はどうするんだろう
281デフォルトの名無しさん
2012/09/20(木) 22:51:50.63 すみません、何がなんだか分からないのでゆっくりと、そして複数の質問で
あるのなら分割して1つずつ質問してもらっていいですか?
中卒なんで
あるのなら分割して1つずつ質問してもらっていいですか?
中卒なんで
282デフォルトの名無しさん
2012/09/20(木) 22:56:52.61 eval "" と eval {} と /e で解決しそうに読めるんですけど
283デフォルトの名無しさん
2012/09/21(金) 00:33:30.46 よくある
$str =~ s/%([a-zA-z0-9]{2})/pack("C", hex($1))/eg;
こんな置換を、packやらhexやら使わずに書いてみそ
という問題
$str =~ s/%([a-zA-z0-9]{2})/pack("C", hex($1))/eg;
こんな置換を、packやらhexやら使わずに書いてみそ
という問題
284デフォルトの名無しさん
2012/09/21(金) 00:35:30.66 >>276
> バイナリでの文字列置換をしています
{
no utf8;
$str =~ s/\xFF/\x00/g;
}
> バイナリでの文字列置換をしています
{
no utf8;
$str =~ s/\xFF/\x00/g;
}
285デフォルトの名無しさん
2012/09/21(金) 00:43:45.02 eval qq{ \$str =~ s/\\Q$src\\E/$dst/g };
286デフォルトの名無しさん
2012/09/21(金) 11:42:35.55 どうやってもスマートじゃないな
前半も後半も素直にpackしておくのが一番分かり易い
なまじ前半に書けてしまうのがおかしい
前半も後半も素直にpackしておくのが一番分かり易い
なまじ前半に書けてしまうのがおかしい
287デフォルトの名無しさん
2012/09/22(土) 06:20:20.87 文字列とバイナリを区別する時点から問題が発生していると思うので、
区別しなければ解決するのだと思う
区別しなければ解決するのだと思う
288デフォルトの名無しさん
2012/09/22(土) 12:20:01.08 楽になるために区別するのならよいわけだけど、
区別したがゆえに苦労するのであれば、区別しなければ苦労はない。
過去にとらわれるのはもうやめです。進歩しませんよ。
区別したがゆえに苦労するのであれば、区別しなければ苦労はない。
過去にとらわれるのはもうやめです。進歩しませんよ。
289デフォルトの名無しさん
2012/09/22(土) 15:03:36.74 どっちに解釈するか文脈で判断、ということをperlはあちこちでやっていて、
それは多くの場合正しいので表面化しないけど、
こんな風に不合理を露呈する場合もある
それは多くの場合正しいので表面化しないけど、
こんな風に不合理を露呈する場合もある
290デフォルトの名無しさん
2012/09/22(土) 20:40:59.67 プログラムはテキスト、処理するデータはバイナリ
対
プログラムはバイナリ、処理するデータはテキスト
深い質問だな、これは
対
プログラムはバイナリ、処理するデータはテキスト
深い質問だな、これは
291デフォルトの名無しさん
2012/09/22(土) 22:17:29.81 Win7上で、Strawberry Perl と SQL Server2008 を使用して開発をしています。
DBD::ODBCでDBにアクセスをして、データを操作しています。
質問
・DBIでSQL Serverのデータベースにconnectを作成し、あるキーとなる情報を取得するSQLを
prepare、execute、fetchrow_arrayを使用して取得し、取得したキーをもとに別なSQLを作成し、
実行しようとしましたが、「接続がビジーです」といった内容のエラーが返ってきます。
fetchrow_arrayでデータを参照しつつ、同一のデータベースから同じようにデータを取得する
ことはできないのでしょうか?
何か情報がありましたら、教えてください。
よろしくお願いいたします。
DBD::ODBCでDBにアクセスをして、データを操作しています。
質問
・DBIでSQL Serverのデータベースにconnectを作成し、あるキーとなる情報を取得するSQLを
prepare、execute、fetchrow_arrayを使用して取得し、取得したキーをもとに別なSQLを作成し、
実行しようとしましたが、「接続がビジーです」といった内容のエラーが返ってきます。
fetchrow_arrayでデータを参照しつつ、同一のデータベースから同じようにデータを取得する
ことはできないのでしょうか?
何か情報がありましたら、教えてください。
よろしくお願いいたします。
292デフォルトの名無しさん
2012/09/22(土) 23:59:54.07 2つのSQL文をひとつにまとめるのが正攻法に思えるが「参照しつつ」をやめて「参照し終わってから」にすればいいんじゃないかと言ってみた。
293デフォルトの名無しさん
2012/09/23(日) 09:13:22.29 SQL文を相関副問い合わせを使って書き直す
294デフォルトの名無しさん
2012/09/23(日) 10:24:02.93 Strawberry Perlは「接続がビジーです」に関わっていない件
295デフォルトの名無しさん
2012/09/23(日) 11:27:29.98 プログラムはテキスト(簡便)、処理するデータはバイナリ(簡便)
プログラムはバイナリ(勘弁)、処理するデータはテキスト(勘弁)
プログラムはバイナリ(勘弁)、処理するデータはテキスト(勘弁)
296デフォルトの名無しさん
2012/09/23(日) 11:29:56.95 $str = 'aaa[bbb[c]ddd]eee';
$str =~ s/\[.+?\]//;
こんな感じにした時に
aaa[bbbddd]eee
になって欲しい
gを付けたら、
aaaeee
になって欲しい
うまい書き方はありますか
$str =~ s/\[.+?\]//;
こんな感じにした時に
aaa[bbbddd]eee
になって欲しい
gを付けたら、
aaaeee
になって欲しい
うまい書き方はありますか
297デフォルトの名無しさん
2012/09/23(日) 12:06:04.53298デフォルトの名無しさん
2012/09/23(日) 12:40:34.62 中身が固定だと判ってるなら\[c\]でいいんだけどね
299デフォルトの名無しさん
2012/09/23(日) 16:22:38.40 $str = 'aaa[bbb[c]ddd]eee';
$str =~ s/\[[^\[\]]+?\]//;
print "($str)\n";
# /g とは違うけど
$str = 'aaa[bbb[c]ddd]eee';
while($str =~ s/\[[^\[\]]+?\]//){}
print "($str)\n";
$str =~ s/\[[^\[\]]+?\]//;
print "($str)\n";
# /g とは違うけど
$str = 'aaa[bbb[c]ddd]eee';
while($str =~ s/\[[^\[\]]+?\]//){}
print "($str)\n";
300デフォルトの名無しさん
2012/09/23(日) 20:34:01.47 スカラーで置換した数を返す、という仕様は
whileで使ってくれと言ってるようなもんだな
whileで使ってくれと言ってるようなもんだな
301291
2012/09/24(月) 00:26:24.29 >>292-293
ありがごうございます。
ただすみません、自分の書き方も悪かったのですが・・・
取得した情報で、その後の処理を変更しています。
そのため、発行するSQLもselectだけでなく、insert,update,deleteなどもあり、
単純にSELECTを見直すというわけにもいかず。
ありがごうございます。
ただすみません、自分の書き方も悪かったのですが・・・
取得した情報で、その後の処理を変更しています。
そのため、発行するSQLもselectだけでなく、insert,update,deleteなどもあり、
単純にSELECTを見直すというわけにもいかず。
■ このスレッドは過去ログ倉庫に格納されています
