【モダン推奨】Perlについての質問箱 50箱目

■ このスレッドは過去ログ倉庫に格納されています
2012/01/21(土) 10:56:39.03
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辺り


2012/08/09(木) 08:03:44.22
レスくれた人ありがとうございます>>214です。
まだperlは入門書読み終わった程度なので右も左も分かりませんが、教えて頂いたコードを参考に色々書き方を研究したいと思います。
2012/08/12(日) 12:31:10.61
入門書読み終えたばかりの初心者には組込みのlocaltime関数を教えてあげないよ
2012/08/13(月) 16:57:18.75
>>234
なにが言いたいのかわからん
2012/08/14(火) 00:43:26.35
ほら、俺ってサ
意外にすいすいしいヤツ
だからサ
2012/08/14(火) 23:54:42.42
初心者には localtime の方が便利な件
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'
2012/08/15(水) 16:15:51.26
>>238
おおうスタイリッシュ。
state とか使ったことなかったけど便利そうだな。参考にさせていただきます。
ワンライナーはあんまし書かないのもあってオプションも -i -n -p -e くらいしか
普段使ってなかったりしますんで。-E すら滅多に使わないな…。nもpもなしに
while(<>)埋め込むのもループの前後で処理が必要な時とかは普通にやってるし。
その程度のスキルでもとりあえず動くものは書けるってのがPerlのメリットでもあり
欠点でもあると…まあこの場合メリットということで。TMTOWTDI。(覚えづらいよなこれ)
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くっつけるだけ。


それにしても、バルサン炊いたみたいに、人がいなくなったな本スレと初心者スレ。
実際の所は、ハイエナが肉に夢中になってるだけだろうけど。
2012/08/19(日) 22:14:32.47
初めてのPerl第6版とPerl5.16.1のことだね。
Unicodeサポートの問題に今頃気づいたって読める。
第5版のときはまだ気づいていなかったのかな?
まあ、そんときは使ってなかったんだろうけどな。
2012/08/20(月) 05:51:33.20
今上天皇侮辱発言の祭りが落ち着いたから、戻って来たぞゴキブリ。
でも、まあ、5割くらい減ったんじゃねーかな?
2012/08/20(月) 22:17:22.42
バルサン耐性を備えて5割以上パワーあっぷぷぷw
2012/08/26(日) 15:07:51.22
ゆっくりモダンになっていく・・・




・・・モダンRuby。
2012/08/29(水) 00:35:50.14
モダンPERL追いかけてたら時代に取り残されましたとほほ
2012/08/30(木) 21:05:34.35
>>245
その最後の「とほほ」だけで、もう10年以上は時代に取り残されてるよな
2012/08/30(木) 21:12:12.26
とほほだってよw
もうお前5.6こそ最高とかいって周りに強要してろよ
2012/08/31(金) 00:07:22.19
5.6だと日本語がちゃんと使えません。仕事で使うなら5.005一択です。
2012/09/01(土) 09:59:22.19
どうやらモダンパールは時代遅れみたいですね
本家のパールはすでにその先に進んでます
テキスト処理90%のPerlが文字列を楽に扱えないなんてたちの悪い冗談でしか
ありません
2012/09/02(日) 02:19:31.92
C++へのアンチテーゼの側面もあったPerlなのにモダンPerlはどうしちゃったのかな
2012/09/03(月) 01:19:39.59
テクノロジーはスクラップアンドビルドなものと考える連中はとほほの内容が
古いと考えるようだ
252デフォルトの名無しさん
垢版 |
2012/09/08(土) 14:37:07.80
かってに「モダン」とか名乗るなや
2012/09/09(日) 00:59:31.20
モダンでもないのにモダン名乗られてもなあ
2012/09/09(日) 08:13:34.65
リャマ本第6版までモダンに毒されてるよ
おまいらリャマ本は第1版こそ至高・正義だ
定価より高くても中古で第1版を買え!
2012/09/09(日) 17:51:10.11
第1版ってのはバージョン4のピンク本のことか?あれは本当にいい本
2012/09/09(日) 18:42:20.14
ダヨモンPerl
アリャマ本
2012/09/10(月) 00:59:47.94
赤らくだ本だとか赤リャマ本の序文、それにポケットリファレンスの序文でLarryはふざけ過ぎてしばらくの間O'reillyから干されていた。今回「まじめに書く」と誓ったためようやく第4版の執筆許可が下りたらしい。
2012/09/12(水) 00:04:41.71
結局らくだ本的にはモダンPerl(=perl5.8)はスルーってことか
最近は重いモジュールも避けられる傾向にあるしな
2012/09/12(水) 00:11:25.67
重いモジュールも避けられる傾向にあるしな(キリッ
とか言う奴は十中八九List::Utilとかを使わない
2012/09/12(水) 00:30:32.64
実際に書かせてみればろくなコード書かないんだろうな
2012/09/12(水) 00:31:53.70
モダンperlと言われているもののうち一部の重たいモジュールを持ち出して
重たいモジュールは避ける傾向にあるからモダンperlも避ける傾向だよねー
なんてどんな詭弁だよ
2012/09/12(水) 00:33:07.74
確かにLarryはモダンPerlについて多くを語ろうとしないな
きっと軽いスクリプトが好きなんだろうなList::Utilとか使わない
2012/09/12(水) 00:55:43.31
List::UtilはXSで書かれてるから自分でPerlで書くよりよっぽど高速なわけだが
てかとってつけたようにLarry様の名前出すなよw
2012/09/12(水) 01:36:14.68
GUIやバイナリファイル扱うときにXSを使って効率を上げるのは分かるが
そうでないときにXS使ってスクリプトの利便性を下げるのは簡便だな。
2012/09/12(水) 01:47:29.25
勘弁
2012/09/12(水) 02:38:31.59
>>264
なぜ利便性が下がる?
2012/09/13(木) 23:01:41.84
第1ヒント:テキスト萌えたんのポータビリティ強化月間
2012/09/13(木) 23:29:47.30
「スクリプトが何かよく分かっていない」と書いたはらたいらに3,000点。
2012/09/14(金) 23:30:28.34
バイナリではないところがスクリプトの利便性って分かるかな?無理かな?
2012/09/15(土) 17:45:47.86
利便性の優先度
作る人の利便性 <<< 使う人の利便性
2012/09/15(土) 18:43:43.53
中身が古いか新しいかは使う人の利便性に影響はしないけどね
2012/09/15(土) 22:16:30.43
結局モダンかどうかは気持ちの問題だし、供給者側の主張次第でしょ
利用者側にとってはちゃんと使えればどうでもいいよそんなもん
2012/09/19(水) 01:43:10.30
モダンパールは単なる自己満足であったか
そもそも書いたときはモダンでも後で読むときはモダンではないわな
モダンと言われると互換性がないんじゃないかと思って警戒するひとも
いるかもしれないしな
2012/09/19(水) 02:38:41.68
use strict;
use Encode;
2012/09/20(木) 09:27:07.77
Perl 6は、ポストモダンですか
2012/09/20(木) 13:14:19.79
バイナリでの文字列置換をしています

$str =~ s/\xFF/\x00/g;

という書き方ならうまく行くのに、

$src = '\xFF';
$dst = '\x00';
$str =~ s/$src/$dst/g;

ではうまく行きません
$srcの部分は思い通り検索できるのに、
$dstの部分はバイナリではなく \x00 という文字列に置換されます
どうすればいいですか
2012/09/20(木) 13:16:41.93
$dst = "\x00";
2012/09/20(木) 13:31:02.66
確かにそういうことなのですが、
何故$dstという変数を使うかというと、その中身が不定だからです
$dst に '00' とか '01' とかいろんな文字列が入った場合の置換の書き方はありませんか

とりあえず、pack("C", hex($dst)) と書いて eオプションで評価すれば
うまく行くのは確認したのですが、$srcみたいなスマートな書き方はできないものかと
2012/09/20(木) 14:11:13.98
packするのが一番マシじゃないだろうか
ただ置換内ではなくその直前に追い出したいけど
2012/09/20(木) 14:30:17.21
後半が文字列で表現されている時に、
それをテキストとして見ていいのかバイナリとして見ていいのか、
両方の解釈が有り得るのが問題なんだな

書いたままだよ、というルールで統一されていれば納得するものを、
コードに埋め込んだ時はバイナリだけど、変数が来たら文字列、という解釈をして、
しかも、置換の前半部分は変数でもバイナリとする変態文法
逆に前半を文字列として認識させたい時はどうするんだろう
2012/09/20(木) 22:51:50.63
すみません、何がなんだか分からないのでゆっくりと、そして複数の質問で
あるのなら分割して1つずつ質問してもらっていいですか?
中卒なんで
2012/09/20(木) 22:56:52.61
eval "" と eval {} と /e で解決しそうに読めるんですけど
2012/09/21(金) 00:33:30.46
よくある
$str =~ s/%([a-zA-z0-9]{2})/pack("C", hex($1))/eg;

こんな置換を、packやらhexやら使わずに書いてみそ
という問題
2012/09/21(金) 00:35:30.66
>>276
> バイナリでの文字列置換をしています
{
  no utf8;
  $str =~ s/\xFF/\x00/g;
}
2012/09/21(金) 00:43:45.02
eval qq{ \$str =~ s/\\Q$src\\E/$dst/g };
2012/09/21(金) 11:42:35.55
どうやってもスマートじゃないな
前半も後半も素直にpackしておくのが一番分かり易い
なまじ前半に書けてしまうのがおかしい
2012/09/22(土) 06:20:20.87
文字列とバイナリを区別する時点から問題が発生していると思うので、
区別しなければ解決するのだと思う
2012/09/22(土) 12:20:01.08
楽になるために区別するのならよいわけだけど、
区別したがゆえに苦労するのであれば、区別しなければ苦労はない。

過去にとらわれるのはもうやめです。進歩しませんよ。
2012/09/22(土) 15:03:36.74
どっちに解釈するか文脈で判断、ということをperlはあちこちでやっていて、
それは多くの場合正しいので表面化しないけど、
こんな風に不合理を露呈する場合もある
2012/09/22(土) 20:40:59.67
プログラムはテキスト、処理するデータはバイナリ
 対
プログラムはバイナリ、処理するデータはテキスト

深い質問だな、これは
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でデータを参照しつつ、同一のデータベースから同じようにデータを取得する
 ことはできないのでしょうか?
 
何か情報がありましたら、教えてください。
よろしくお願いいたします。
2012/09/22(土) 23:59:54.07
2つのSQL文をひとつにまとめるのが正攻法に思えるが「参照しつつ」をやめて「参照し終わってから」にすればいいんじゃないかと言ってみた。
2012/09/23(日) 09:13:22.29
SQL文を相関副問い合わせを使って書き直す
2012/09/23(日) 10:24:02.93
Strawberry Perlは「接続がビジーです」に関わっていない件
2012/09/23(日) 11:27:29.98
プログラムはテキスト(簡便)、処理するデータはバイナリ(簡便)

プログラムはバイナリ(勘弁)、処理するデータはテキスト(勘弁)
2012/09/23(日) 11:29:56.95
$str = 'aaa[bbb[c]ddd]eee';
$str =~ s/\[.+?\]//;

こんな感じにした時に
aaa[bbbddd]eee
になって欲しい
gを付けたら、
aaaeee
になって欲しい

うまい書き方はありますか
2012/09/23(日) 12:06:04.53
>>296
s/\[.{1}\]//;
オプションつけて最長マッチとかってあるのか?
2012/09/23(日) 12:40:34.62
中身が固定だと判ってるなら\[c\]でいいんだけどね
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";
2012/09/23(日) 20:34:01.47
スカラーで置換した数を返す、という仕様は
whileで使ってくれと言ってるようなもんだな
301291
垢版 |
2012/09/24(月) 00:26:24.29
>>292-293
ありがごうございます。
ただすみません、自分の書き方も悪かったのですが・・・

取得した情報で、その後の処理を変更しています。
そのため、発行するSQLもselectだけでなく、insert,update,deleteなどもあり、
単純にSELECTを見直すというわけにもいかず。
2012/09/24(月) 00:48:00.82
複数のアクティブな結果セット (MARS) の使用
http://msdn.microsoft.com/ja-jp/library/ms131686.aspx
303291
垢版 |
2012/09/24(月) 22:40:47.72
>>302
ありがとうございます。
こんなものがあったんですね。知らなかったです。
2012/09/26(水) 00:01:18.00
Perlのこと聞きたかったら、いつでもこのモダンPerlスレに来な
2012/09/26(水) 01:15:59.84
モダン焼きは四角く切るのと放射状に切るのとどっちがいい?
2012/09/26(水) 05:22:19.56
おちんちんお切ってしまえ
2012/09/27(木) 01:25:13.55
たこ焼き器で作るとひと口サイズなので切らなくともよい。
2012/09/27(木) 06:03:41.53
私女だけどひと口サイズのおちんちんは勘弁
2012/09/30(日) 12:10:27.15
切り方変えても味は変わらないのでそのままかぶりつく
2012/09/30(日) 23:22:27.63
結局一過性のモダンポールか、青臭いな
2012/10/06(土) 16:46:58.45
少数のエリートが良かれと思っても多数派の一般民が取り入れないと意味がない
ひとがプログラミングする訳だから、フィーリングを大事にしないとだめだな
312デフォルトの名無しさん
垢版 |
2012/10/14(日) 16:56:04.97
開発効率のことだけで言うと
モダンPerlの方が効率がいいね。
313デフォルトの名無しさん
垢版 |
2012/10/14(日) 23:37:41.19
俺が好きなのはポストモダンPerlだな
2012/10/15(月) 03:13:27.49
ああ、アレね、アレのことね
2012/10/15(月) 12:16:14.31
Time::Pieceの実験用モルモットになるよりlocaltimeをツールとして安心して使うタイプか
2012/10/15(月) 15:57:01.88
モジュールに一切頼らないスタイルこそが正義
317ハートマン軍曹
垢版 |
2012/10/15(月) 18:43:05.44
お前の顔はモダンアートの醜さだ!
318デフォルトの名無しさん
垢版 |
2012/10/16(火) 00:31:08.75
もうPerlは5.16の時代ですよ。
5.12とそれより前はサポート終了しました。

10年前のPerlのことなんか、
考える必要ないんですよ。
2012/10/16(火) 00:42:38.62
5.6とか使いたい奴は自分らで勝手に使ってたらいい
ただし5.6を他人に強要したり、5.6向けに書いた古臭いスクリプトを他人に押し付けて保守させたりするな
2012/10/16(火) 01:21:14.64
>>319
いやなことあったの?
2012/10/16(火) 01:23:22.72
>>320
主にこのスレでねw
2012/10/16(火) 01:37:39.47
とにかくコードが手元の環境で動くのが正義
そして長期間に渡るメンテが可能で楽なのが正義
localtimeは標準モジュールより格上の標準関数

ポータブルPerlこそがこの世の正義

319による保守は誰も期待していない
2012/10/16(火) 01:59:23.74
>>321
無理して見なくていいぞ
324デフォルトの名無しさん
垢版 |
2012/10/16(火) 02:00:05.08
ポータブルPerlって
Perlのバージョンはなんだ?
言ってみろよwおらおらw
2012/10/16(火) 02:04:53.00
>>322
> とにかくコードが手元の環境で動くのが正義

> ポータブルPerlこそがこの世の正義

矛盾してる
326デフォルトの名無しさん
垢版 |
2012/10/16(火) 02:06:12.86
>>322
> ポータブルPerlこそがこの世の正義

つまり手元の環境で動きさえすればいいってもんじゃないってか?
327デフォルトの名無しさん
垢版 |
2012/10/16(火) 02:06:57.24
>>322
> localtimeは標準モジュールより格上の標準関数

格上わろす
2012/10/16(火) 02:21:46.91
手元にたくさんあるんだろ、モルモット君。
2012/10/16(火) 11:09:16.58
localtime()は、Cにもあるよ
330デフォルトの名無しさん
垢版 |
2012/10/17(水) 18:24:12.99
うるさいゴミ
2012/10/20(土) 13:36:25.82
リストコンテキストとスカラーコンテキストの違いとか printf とかはモダン
うんぬんの前に知らないとだめだろ。

モダンなゆとり世代。壮大な実験に付き合わされたモルモット。かわいそす
2012/10/20(土) 14:30:09.12
刹那的なモダンPerlでは自分が書いたスクリプトを数十年に渡って保守する
ことは不可能と悟り本来のPerlに戻ってくる。で、localtimeで書く。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況