【モダン推奨】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/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で書く。
333デフォルトの名無しさん
垢版 |
2012/10/20(土) 14:43:54.03
>>332
perl本体に組み込まれた関数が何十年後も互換を維持してるとは思えないがな
2012/10/20(土) 15:22:59.17
寿命が6〜8年のモルモットの推測が当たるとは思えないがな
2012/10/20(土) 15:54:12.00
数十年後も使い続ける物はCで書いとけよ。
Perl5自体、メンテされてるかどうか分からんぞ。
2012/10/20(土) 17:23:24.31
mooseとか使いまくってる俺が通りますよ

早くPerl6出ないな〜
2012/10/20(土) 20:08:44.97
Cで書いたら実行環境の違いを記述するコードでアプリケーションが
埋め尽くされるんだろーなー
338デフォルトの名無しさん
垢版 |
2012/10/20(土) 20:25:13.96
>337
Linuxのソース見たけど、
一部の層で吸収しているから
ほとんどのコードは実行環境の違いなんて関係ないよ。

ま、お前にはそんな芸当出来ないだろうがな。がはははははwwww
2012/10/20(土) 20:32:14.18
ゆとりだからLinuxしか習わなかったんだよね?かわいそす
340デフォルトの名無しさん
垢版 |
2012/10/20(土) 20:34:13.97
「Linuxしか習わなかった」と判断した理由を書いてください。

ゆとりの脳内はよくわかりませんのでw
あ、書かなくても(逃げても)構いませんよwww
2012/10/20(土) 20:54:05.91
書いてもいいんだけど、Linuxのソースが、Linux以外のオペレーティング
システム上でperlを実行したときの実行環境の違いを吸収できると考えて
いるひとには理解できなそう
2012/10/20(土) 21:09:04.20
たぶん、無理だろうね。かわいそす
343デフォルトの名無しさん
垢版 |
2012/10/20(土) 21:21:01.55
やっぱゆとりだったかw

実行環境の違いなんてそれを埋めるレイヤーに固めるから
アプリケーションがそんなコードで埋まることはないってのが
一番の趣旨だろ。

こういう作り方ってのは普通にやることだし、そんなことが
思いつかないってのは自分でやったことがないってことw

そこからこのセリフにつながる

ま、お前にはそんな芸当出来ないだろうがな。がはははははwwww
344デフォルトの名無しさん
垢版 |
2012/10/20(土) 21:42:31.78
>>343
意味不明
345デフォルトの名無しさん
垢版 |
2012/10/20(土) 21:47:19.43
意訳 馬鹿だから理解できないw
346デフォルトの名無しさん
垢版 |
2012/10/20(土) 22:34:46.28
興奮してるのか脳に障害があるのか分からないが
文章が無茶苦茶だな
2012/10/20(土) 23:27:28.93
たぶんではなくて完全に無理です。コンテキストの理解を求める俺のほうが
完全に悪かったです。printf も覚えようとしなくて結構です。

どうもすみませんでした。
2012/10/20(土) 23:55:00.68
モダンPerlが脳障■者を集めるのか、脳障■者がモダンPerlを好むのか

これって日本だけの現象なの?モダンRubyとかも同じ状況なの?
349デフォルトの名無しさん
垢版 |
2012/10/21(日) 00:21:29.73
いいから黙ってろって
350デフォルトの名無しさん
垢版 |
2012/10/21(日) 00:34:27.55
>>343
> こういう作り方ってのは普通にやることだし、そんなことが
> 思いつかないってのは自分でやったことがないってことw
>
> そこからこのセリフにつながる

罵倒を目的とした文章で代名詞の頻度が上がるのは、脳に良くない変化が起きていることを現すから気をつけた方がいい。
2012/10/21(日) 00:35:41.55
じいさんがボケ始めた頃「あれ取って」が増えたのと同じか?
352デフォルトの名無しさん
垢版 |
2012/10/21(日) 00:46:26.95
>>350
> 罵倒を目的とした文章で代名詞の頻度が上がるのは、脳に良くない変化が起きていることを現すから気をつけた方がいい。

そんなデータはありませんwww
大丈夫?
2012/10/21(日) 01:30:13.87
ボケ老人風文体わろす
2012/10/21(日) 02:33:32.41
実行環境の制約(機器であったり、OSであったり、その会社の規則だったり)で
ポータブルなスクリプトを書かなければならないことはあるだろうけど、
制約によってモダンPerlで書かなければならないってことは現実にあるんだろ
うか?

その前にポータブルなスクリプトとレガシーなスクリプトの違いはちゃんと
理解できているのだろうか?

モダンPerlは結局のところ単なる自己満足なのだろうか?回答を求む。
355デフォルトの名無しさん
垢版 |
2012/10/21(日) 02:48:51.74
> ポータブルなスクリプトを書かなければならないことはあるだろうけど
お前のポータブルの意味って何?
新しいPerlを入れればいいだけだろ。

お前が言ってるのは、ポータブルなスクリプトを書く。ではなく
古いPerlにも対応したスクリプトを書くって話。

ポータブルとは関係ない。
2012/10/21(日) 08:22:34.33
古いPerlって、どれくらい前のPerlの事を言ってるの?
CPANライブラリが動かないような古いPerlも視野に入れて開発しないといけないの?
どうして、そんな古いPerlに固執してるの?バージョンアップできないの?

正直モダンPerlって呼ばれてるような書き方をしてはいけないなんて制約がある方が特殊すぎ
2012/10/21(日) 14:23:20.43
自分の書くプログラムのスタイルなら、モダンだろうとクラシックだろうと好きに書けばよい。
でも、モダンPerl!モダン!モダン!って言う連中って、CPANとかのライブラリを使って書くことを
モダンだと言ってることが多い。

ライブラリを自分で抱えるのでなく、システムに入れろっていうのは横暴だし無理だろう。
すでに作られているシステムに、あとからCPANライブラリを追加したら、
既存のPerlスクリプト全ての再検証必要となるからね
2012/10/21(日) 14:57:36.30
どんなモジュール追加したらそんな大げさなことになるんだよ。
359デフォルトの名無しさん
垢版 |
2012/10/21(日) 15:03:26.42
今のモダンPerlの世界は
perlbrew + cpanminus + local::lib を使って
システムに入れずに最新Perlを使うのです。
2012/10/21(日) 20:00:42.97
『はじめてのPerl』にlocal::libとcpanmが出てくる時代になりました。
2012/10/31(水) 01:25:45.68
書いたときにモダンなのは当たり前だろう
モダン推しは時間軸の視点が抜け落ちているんだな
2012/11/04(日) 13:29:05.31
>>358
Encodeモジュールのようなモジュールだろ
まあ、あえて名指しはしないけどな
363デフォルトの名無しさん
垢版 |
2012/11/04(日) 17:39:50.59
なんでEncodeモジュールを追加しただけで
再検証が必要になるんだ?

Encodeモジュールは最近のPerlには標準搭載されてるだろ。
まさか最新のPerlで動かないコード書いてるのか?
2012/11/06(火) 01:19:20.40
>>318 >>319
フリーソフトはそもそも AS IS だからサポート切れとかはない
今までのどのらくだ本にも最初に書いてある

で、強要だの押し付けただのってしたことあったっけ?
2012/11/06(火) 17:24:09.46
>>364
http://perldoc.perl.org/perlpolicy.html#MAINTENANCE-AND-SUPPORT
2012/11/06(火) 23:57:40.03
And if you have a problem that the Perl community can't fix,
you have the ultimate backstop: the source code itself.
-- Programming Perl 4th Edition
2012/11/07(水) 00:29:49.79
好きなだけ弄ればいいさ。
誰も止めやしない。
2012/11/07(水) 01:58:26.48
Jcode,pmてまだまだ使われてるの?
さすがに require jcode はないよねー
2012/11/07(水) 21:36:21.96
まだまだ現役です。だって使いやすいんだもん。
2012/11/07(水) 21:58:36.93
Inline CとPerlとの
XSUB変換がperlgutの必須必要事項だと
会社の上司に言われたのですが、最後の

READMEに乗ってる
ようにmakeコマンドが生成されません。基本は
h2xs -A -n ExtModuleを実行し、種々の
実行環境を整えます。
参考URL:
http://d.hatena.ne.jp/perlcodesample/20100809/1278596435
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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