2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2012/01/21(土) 10:56:39.03 .net
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辺り




2 :デフォルトの名無しさん:2012/01/21(土) 11:38:32.23 .net
[プログラミング自体の経験が無い奴はまずココを読め]
Perl プログラミング講座: ttp://www.site-cooler.com/kwl/perl/
モダンPerlの世界へようこそ http://gihyo.jp/dev/serial/01/modern-perl/0001

[本]
リャマ: ttp://www.oreilly.co.jp/books/9784873114279/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://ascii.asciimw.jp/books/books/detail/4-7561-3057-7.shtml
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/

[オンラインマニュアル]
最新のドキュメント: ttp://search.cpan.org/dist/perl/
perldoc.jp: ttp://perldoc.jp/
perldoc.perl.org: ttp://perldoc.perl.org/

3 :デフォルトの名無しさん:2012/01/21(土) 11:39:11.92 .net
[モジュール]
CPAN.com: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/

[テクニック]
Perl メモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perl のページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perl の小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm

[Perl 5.8 Unicodeメモ]
ttp://www.rwds.net/kuroita/program/Perl_unicode.html (修正)
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html


4 :デフォルトの名無しさん:2012/01/21(土) 11:39:41.13 .net
Encodeモジュール (現在のPerl文字コードの標準)
http://search.cpan.org/dist/Encode/

UNICODEでわからなくなったらここを読め
http://perldoc.jp/docs/perl/5.8.1/utf8.pod
http://perldoc.jp/docs/perl/5.10.0/perlunifaq.pod


5 :デフォルトの名無しさん:2012/01/21(土) 11:40:18.24 .net
1レスで理解できるutf8フラグ

utf8フラグとい名前がまずかったね。
文字列フラグなどという名前だったらよかった。

文字列フラグはPerl固有のものだから
Perlコード外部から渡されるのは文字列ではない。
文字列でなかったらなにか?それはバイナリ。

バイナリを文字として扱いたければ、文字に変換しないといけない。
それがdecode。

ではソースコードに書いてあるのは、文字かバイナリか。
それはuse utf8を使えば文字で、そうでない場合はバイナリ。

話はこれだけ。


6 :デフォルトの名無しさん:2012/01/21(土) 13:51:55.46 .net
【プログラミング部】 PHPが100倍速で動くようになったぞー
http://awabi.2ch.net/test/read.cgi/poverty/1327050821/

7 :デフォルトの名無しさん:2012/01/21(土) 21:49:44.50 .net
あのー、重複スレってことないですか?

8 :デフォルトの名無しさん:2012/01/29(日) 11:19:25.66 .net
はてなキーワード > モダン
ttp://d.hatena.ne.jp/keyword/%A5%E2%A5%C0%A5%F3

書いているひとは 1. の意味で書いていそうだけど、読む人は(書いた時期
を考慮して) 2. や 3. の意味で解釈している。

よく印刷した資料に「最新版」とか書くひとがいるけどそれと似てるのかも
しれない。たくさんの最新版のうちどれが最新版なのか分からなくなる。
この場合の正解は版数を書くこと。

モダンの場合は、個別の技術の名称を書くことに相当する。

そうしないと「えっ?いまどきモダンPerl使ってるのかよ、お前w」なんて
ことになる。

9 :デフォルトの名無しさん:2012/01/29(日) 11:38:31.81 .net
個別の技術は是々非々で議論しましょう。
現状は、モダンという名のせいで盥水とともに赤子を流してしまっています。

10 :デフォルトの名無しさん:2012/02/03(金) 01:55:40.19 .net
モダンPerlと呼ばれているものは、過去の一時期のスタイルと結びついていて
今はもう使われていない。一方、レガシーPerlと呼ばれているものは現在でも
利用されていて、その名とうらはらに全くレガシーな気がしない。

思うにこれらの名称は、実態を正確に示していない点で失敗だと思う。

そういえば、モダンRubyやレガシーRubyという言葉は聞いたことがない。
名前重要っていうのは本当なんだな。

11 :デフォルトの名無しさん:2012/02/03(金) 07:54:57.41 .net
ルビーはバージョン毎に違うからなあ
新旧をバージョン番号以外で呼ぶ事は今後もないんだろう

12 :デフォルトの名無しさん:2012/02/04(土) 00:24:55.23 .net
83JISは新JISですね。わかります。

13 :デフォルトの名無しさん:2012/02/04(土) 10:44:31.66 .net
2012年なんだから、そろそろ新JISキーボード使おうよってスレですね。
わかります。

14 :デフォルトの名無しさん:2012/02/05(日) 16:28:37.59 .net
問題を解決する方法がモダンかどうか、誰もこだわっていない件

15 :デフォルトの名無しさん:2012/02/08(水) 01:37:01.27 .net
今はポストモダンの時代

16 :デフォルトの名無しさん:2012/02/08(水) 01:42:45.73 .net
何がどうなるの?教えて、教えて

17 :デフォルトの名無しさん:2012/02/08(水) 22:53:51.78 .net
結局、モダンって何だったの?
本を売りたかったとか、会社作ってみたとか、そういうことなの?
失敗だったの?
もうモダンには会えないの?

18 :デフォルトの名無しさん:2012/02/09(木) 18:46:51.29 .net
         _  , 、
     r‐v'´ ̄  `~ く     
  _.  7,‐、   r‐、  ヽ   だったら Perlのはじめて を
  (._ ^ヽ|{ 0 _l 0ノ   i
   ヽ (´ ̄  `_, ヶ  ノ   見に行こうよ 
     `、`ー-ヾ._.// )
     /      (_.ノV^) 「クルクルバビンチョパペッピポ、イア!イア!ハスターの
      i    _     「
    L_ _/  \_ _.ノ


19 :デフォルトの名無しさん:2012/02/09(木) 22:43:43.29 .net
Perl on Heroku | Hacker News
http://news.ycombinator.com/item?id=3570894

judofyr/perloku - GitHub
https://github.com/judofyr/perloku

20 :デフォルトの名無しさん:2012/02/10(金) 00:41:07.42 .net
「モダン、ここはどこ?」

21 :デフォルトの名無しさん:2012/02/10(金) 04:35:12.65 .net
ネタが古い

22 :デフォルトの名無しさん:2012/02/11(土) 00:04:56.56 .net
ここはね、パークハイアット東京。
The Perl Confernce Japan の会場だょ。

まもなく、まつもとゆきひろさんのRubyのセッションが始まるょ。

(コーヒーがおいしいょ。)

23 :デフォルトの名無しさん:2012/02/11(土) 04:05:03.81 .net
ワンライナー [ 一行野郎 OneLiner ]

24 :デフォルトの名無しさん:2012/02/21(火) 06:43:24.21 .net
書き込みテスト

25 :デフォルトの名無しさん:2012/02/21(火) 23:13:43.25 .net
結局、モダンPerlって何だったんですかね?

26 :デフォルトの名無しさん:2012/02/22(水) 14:11:38.18 .net
Perlの長所であり短所であるTMTOWTDIによるコードの難読化を共通ルールっぽいテンプレで改善しようという風潮

27 :デフォルトの名無しさん:2012/02/22(水) 21:13:46.02 .net
変なこと考えるより、ポータブルCみたいにポータブルPerlで書けばいいと
思うんでそうしてる。書きやすいし読みやすい、おまけに長期的に保守
できる。これもTMTOWTDIのひとつの形態。

28 :デフォルトの名無しさん:2012/02/23(木) 21:47:31.36 .net
長期的に保守できる=いつまでもモダン。

29 :デフォルトの名無しさん:2012/02/24(金) 15:24:49.40 .net
>>28
動いているものに手を入れるな。
手を入れるときは該当箇所にだけ入れろ
決して他の部分をいじるな。

ほとんど同じ処理でも既存の部分を
修正するなコピペして作れ。

これこそモダン

30 :デフォルトの名無しさん:2012/02/25(土) 00:48:11.36 .net
気が合いそうですね

31 :デフォルトの名無しさん:2012/02/25(土) 00:58:50.25 .net
モダンが嫌いな人って、新しいものが嫌い。
だからデザインパターンもリファクタリングも
アジャイルも嫌い

32 :デフォルトの名無しさん:2012/02/25(土) 01:20:21.71 .net
そう捉えてるとするならば、ちゃんとコトを理解できていない

33 :デフォルトの名無しさん:2012/02/25(土) 04:47:56.86 .net
Perlの評価の8割はCPANだよね
Rubyの評価の8割はRailsだよね

34 :デフォルトの名無しさん:2012/02/25(土) 13:39:26.50 .net
残りの2割はPerl4ですか

35 :デフォルトの名無しさん:2012/02/25(土) 13:55:49.15 .net
Perl4はマイナス評価だよ。

36 :デフォルトの名無しさん:2012/02/25(土) 14:20:32.95 .net
加えてPerl6もマイナス評価だからPerlはPerl5が支えているといっても寝言ではない

37 :デフォルトの名無しさん:2012/02/26(日) 21:09:36.58 .net
「モダンPerl」の"モダン"はあさってな方向に行ってしまっているので、
一般的な単語のモダンとは意味が違っている。だから>>31の言っている
ことは間違い。

38 :デフォルトの名無しさん:2012/03/02(金) 09:42:04.91 .net
>>35
うそつけ。このスレを潰そうとする連中はみんなPerl4時代のコードしか書かないじゃんか。

39 :デフォルトの名無しさん:2012/03/03(土) 00:51:07.30 .net
Perl4も現役で使われているのでモダンですよ。
モダンではないのは(らくだ本が出版されていなかった)Perl3以前ですよ。
もちろん異論はありませんね?

40 :デフォルトの名無しさん:2012/03/03(土) 00:52:39.18 .net
現役でサポートされてるディストリで
Perl4が入っているものを教えて下さいよw

41 :デフォルトの名無しさん:2012/03/03(土) 04:06:39.76 .net
5.8が出てから今年で10年。
それより前は昔の実装でおk。

42 :デフォルトの名無しさん:2012/03/03(土) 10:52:44.75 .net
こうして世界は騙された!!

43 :デフォルトの名無しさん:2012/03/03(土) 11:06:06.57 .net
ディストリインストールできる人はPerlもインストールできるんじゃね?

44 :デフォルトの名無しさん:2012/03/03(土) 15:18:20.72 .net
まさかオマイラ、ディストリ付属のperlをそのまま使ってる、なんてことないよな?

45 :デフォルトの名無しさん:2012/03/03(土) 16:17:57.11 .net
ディストリのパッケージ以外からperlとかモジュールとか入れたらシステムの安定性が壊れる
パッケージが提供されてないモジュールを野良ビルドで入れたりしない
cpanm、perlbrew、local::libを使うなどもってのほか

↓のスレ読んで出直せ
http://toro.2ch.net/test/read.cgi/tech/1217851121/544-

46 :デフォルトの名無しさん:2012/03/03(土) 16:36:36.95 .net
>>45
押すなよ絶対押すなよみたいな言い方ですね。

つまり、それらは便利ってことですね!



47 :デフォルトの名無しさん:2012/03/03(土) 19:02:12.13 .net
>>45
root管理のパッケージと混ぜないために、cpanmやlocal::libを使うのよ。
ユーザ権限でユーザ領域に突っ込めるから、バックアップも楽だし、
いらなくなったらユーザごと消せばいいし。
Perl自体は、特に必要ない限り、システム付属使ってるけど。

48 :デフォルトの名無しさん:2012/03/06(火) 23:18:42.91 .net
ユーザが移行するのは、今までよりも分かりやすいもの、使いやすいもの。
今までよりも新しいもの、多機能なもの、ではない。

49 :デフォルトの名無しさん:2012/03/06(火) 23:35:43.27 .net
モダンなものってたいがいわかりやすくて
使いやすくなってるよね。

Time::Pieceとか。

50 :デフォルトの名無しさん:2012/03/06(火) 23:43:48.61 .net
でもそうじゃないから、"モダン"っていうラベルを付けて強引に勧めて
いるんだね。分かりやすかったら、使いやすかったら、ほっておいても
自然に使われるだろうから、わざわざ無理強いする必要はないもんね。

51 :デフォルトの名無しさん:2012/03/06(火) 23:54:43.29 .net
> 分かりやすかったら、使いやすかったら、ほっておいても
> 自然に使われるだろうから

それじゃ時間がかかりすぎる。
ようはオールドタイプはさっさと消えろってこと。

ネットの古い情報もさっさと消えて欲しいし、
今頃古いやり方を教えるやつもさっさと消えて欲しい。

だから俺は古いやり方を教えている奴を見つけたら
今はこうやる。こっちのほうがもっと簡単だと
情報を広めている。

52 :デフォルトの名無しさん:2012/03/07(水) 02:54:40.01 .net
新しいけど使いづらいって、自分で言っているようなもんだな

53 :デフォルトの名無しさん:2012/03/07(水) 03:03:09.93 .net
面倒なやつは無視が一番。

54 :デフォルトの名無しさん:2012/03/07(水) 03:57:57.80 .net
CPANをすべてRubyが補完してくれたらどんなにいいだろう。

55 :デフォルトの名無しさん:2012/03/07(水) 23:12:02.32 .net
   end
  end
 end
end

あぁ、終わりだもうだめだぁ

56 :デフォルトの名無しさん:2012/03/08(木) 00:42:07.15 .net
まあモダンなPerlを知らなければ、
Perl使いとみなせない時代にはなってるよね。

57 :デフォルトの名無しさん:2012/03/08(木) 00:51:37.53 .net
もちろん情報は日々取得してるから知られてはいるんだろうけど、
使いやすくなかったらいつまでたっても使われることはないよね。

58 :デフォルトの名無しさん:2012/03/08(木) 01:03:50.28 .net
使われてるけどね。
Perlで作られてる他のプロジェクト見たこと有る?
(昔に作られて放置されてるのは除く)

Jcodeとか海外じゃ全く使われてないから。



59 :デフォルトの名無しさん:2012/03/08(木) 23:37:48.23 .net
>>58

60 :デフォルトの名無しさん:2012/03/09(金) 01:54:01.68 .net
確かに Time::Piece 以外は見たことがないね

61 :デフォルトの名無しさん:2012/03/09(金) 02:06:51.28 .net
>>58
海外で使われていないと、自分が日本語を処理するときに使っちゃいけないの?
日本では使ってもいいんでしょ?
そもそもモダンっていうのは禁止して不便にすることなの?
それにJcodeはオブジェクト指向なんだし十分モダンだと思うけどな

62 :デフォルトの名無しさん:2012/03/10(土) 00:38:59.17 .net
モダンPerlでいうところの"モダン"は、
 1.リリース時期のことをいっているのか
 2.実装手法のことをいっているのか
 3.はたまたインタフェースのことをいっているのか
ところで、インタフェースっていうのは
 a.新しければ新しいほど好ましいのか
 b.古ければ古いほど好ましいのか
このあたりの見解が一致しないと、具体的なモノがモダンなのか
そうでないのかが変ってしまうし「これはモダンだ」と言ったか
らって、そのものに価値があるのか無いのかは別問題になる

63 :デフォルトの名無しさん:2012/03/10(土) 01:24:18.18 .net
1.がモダンでも2.がモダンでも利用者にとって関係なく、単に供給側
の自己満足になってしまう。3.のことだとすると新しいもの好きはa.で、
人柱をかってでることになるわけで、そうでないならb.で問題ない。

64 :デフォルトの名無しさん:2012/03/10(土) 02:28:05.91 .net
>>62
Rubyはモダンだ。

そこからいえばRubyに近いことを
Perlでやるのがモダンだ。

65 :デフォルトの名無しさん:2012/03/10(土) 02:38:52.80 .net
モダンの定義は分かったけど、それ価値あんの?

66 :デフォルトの名無しさん:2012/03/10(土) 02:45:52.84 .net
あるよ。

開発速度が上がった。
少ないコードで、今まで以上のことができる。

なにより、プログラミング一般とPerlに関して
深い知識を手に入れられたのがいいね。

オブジェクト指向言語、関数型言語、
継承。ポリモーフィズム。mixin、
アスペクト指向、O/Rマッパー
フレームワーク、MVC・・・etc

Perlだけじゃ、世界が狭いからほかの言語をやるといい。
そうして戻ってくると、自然とモダンPerlな体になってるよ。

67 :デフォルトの名無しさん:2012/03/10(土) 02:50:23.82 .net
考え方が間違っていたかもしれない。

モダンPerlとは、Perlがモダンなのではなく
プログラマ的にモダンな開発手法、
それをPerlに取り入れたものではないのか?

よくよく考えたら、最近はやりのほかの言語の機能を
PerlでやれるようにしたがモダンPerlなモジュールではないだろうか。

68 :デフォルトの名無しさん:2012/03/10(土) 11:58:33.08 .net
モダンPerlはアンチPerlなのか...
それでPerl原理主義者の抵抗にあっているという構図か

69 :デフォルトの名無しさん:2012/03/10(土) 12:24:09.53 .net
ニーズにマッチしないモダンならいらないよ。

70 :デフォルトの名無しさん:2012/03/10(土) 12:38:37.16 .net
便利ならそれでよくて、モダンという線引きは要らないってことでおk?

71 :デフォルトの名無しさん:2012/03/10(土) 12:41:50.76 .net
お好み焼きとの違いがいまだに覚えられない

72 :デフォルトの名無しさん:2012/03/10(土) 15:44:56.75 .net
どうにも架空臭がするモダンPerlだが最近ますますそう感じている。
(モダンPerlを構成するといわれる)個別の要素の議論で十分だと思う。
ひと括りにしてしまうせいで大事なものまで一緒に捨てられてしまう。

73 :デフォルトの名無しさん:2012/03/10(土) 23:59:10.17 .net
モダンPerlではなく、
Perlでモダンプログラミングといえば、
面白いように情報弱者が落ちていく。

74 :デフォルトの名無しさん:2012/03/11(日) 00:48:24.53 .net
モダンっていう言い方が古臭い

75 :デフォルトの名無しさん:2012/03/11(日) 01:03:16.37 .net
トレンディPerl

76 :デフォルトの名無しさん:2012/03/11(日) 02:15:55.91 .net
単に"モダンPerl"と言いたいだけにしか思えない
Perlのリリースが予定通りじゃなかったり、らくだ本の改版に10年もかかっ
たりするからって、無理して話題を作る必要はない

5.14.3がリリースされない今はらくだフォーでつなぐのが吉

77 :デフォルトの名無しさん:2012/03/11(日) 02:21:20.79 .net
普通にPerl5を使えばいいだけ。

78 :デフォルトの名無しさん:2012/03/11(日) 04:00:30.75 .net
Perlのオブジェクト指向はどう考えてもいびつでおかしいのに
それを主張しても理解できない人の戯言にされてしまう。

79 :デフォルトの名無しさん:2012/03/11(日) 04:48:04.26 .net
お好み焼きは食えるけど、モダンPerlは食えないね。

80 :デフォルトの名無しさん:2012/03/11(日) 05:14:03.94 .net
>>73
人間としての品位を疑われるぞ
社会に適合してないんじゃなイカ?

81 :デフォルトの名無しさん:2012/03/11(日) 08:47:05.63 .net
>>76
らくだフォー?

82 :デフォルトの名無しさん:2012/03/11(日) 12:35:38.71 .net
らくだフォア
 モダンはとおくに
  なりにけり

83 :デフォルトの名無しさん:2012/03/11(日) 12:59:34.63 .net
>>78
Perlのオブジェクト指向はいびつ

じゃあいびつじゃない形にしましょう。それができるのがPerlの凄さだ

そうやってできたもの=モダンPerl


>>78
お前はPerlを使いこなせてないだけ。

84 :デフォルトの名無しさん:2012/03/11(日) 17:32:12.27 .net
またそんな青くさいこといちゃって、このフォーティーンめ

85 :デフォルトの名無しさん:2012/03/11(日) 19:50:09.03 .net
モダン推奨者は自分が社会に適合しようとするんじゃなくて、社会を
自分に適合させようとしている。

結果、当然うまくいかなくて挫折する。

その繰り返し。

86 :デフォルトの名無しさん:2012/03/11(日) 20:47:59.28 .net
>>85
そうそう。
CPANモジュールで楽せず全て一から自分でコードを書くのが社会の常識だからね。


87 :デフォルトの名無しさん:2012/03/11(日) 21:48:16.89 .net
モダン、モダンとか言って周りに合わせられないのは単に能力がないだけでしょ

88 :デフォルトの名無しさん:2012/03/11(日) 22:00:36.17 .net
>>87
ねぇ。
自分でコードかけないからCPANモジュールなんぞ入れようとするんだよ。

89 :デフォルトの名無しさん:2012/03/12(月) 00:38:19.94 .net
ググって何も出なかったら「ありません。」で終わりだもの、今のひとは。

90 :デフォルトの名無しさん:2012/03/12(月) 01:08:30.57 .net
>>89
ばかばかしいよね。
何も出なかったら自分で書けよ、と。

91 :デフォルトの名無しさん:2012/03/12(月) 12:37:32.86 .net
>>87
モダン、モダン言わなくても、周りに合わせられなければ、単に能力がないだけ。
つまり、モダンプログラミングと、周りに合わせられない事は別問題。

>>90
そこは迷うところだな。別の手を考えるか、そのまま自分で実装するか。
ある意味チャンスだ。

92 :デフォルトの名無しさん:2012/03/12(月) 23:57:29.35 .net
別の手ってYahoo!か?

93 :デフォルトの名無しさん:2012/03/13(火) 02:54:48.40 .net
質問箱よりOKWaveがお勧め。

94 :デフォルトの名無しさん:2012/03/15(木) 23:34:57.79 .net
どうやってCPAN使いこなせるようになるんだよ…。

95 :デフォルトの名無しさん:2012/03/16(金) 00:44:44.19 .net
今までのインタフェースで実装できなくてだめだめなのをモダンPerlとか
言って取繕ってるだけでしょ

96 :デフォルトの名無しさん:2012/03/16(金) 01:02:24.92 .net
perl6のコンセプトを先取りしてるものではないの?

97 :デフォルトの名無しさん:2012/03/16(金) 02:27:51.26 .net
ttp://www.amazon.co.jp/dp/486267108X/

98 :デフォルトの名無しさん:2012/03/16(金) 08:17:31.69 .net
>>95
なんでそういう悪意のある言い方するの?

99 :デフォルトの名無しさん:2012/03/16(金) 15:52:29.33 .net
新しい手法・置き換えるモジュールがあれば、それを採用しましょうってのがモダンPerl。
Fatalプラグマよりautodieプラグマ。
switch,caseよりgiven,when。
evalとif($@)よりTry::Tiny。
という感じ。

置き換えられないモジュールを置き換えようとするのは多分違う。

100 :デフォルトの名無しさん:2012/03/16(金) 15:57:44.21 .net
次スレがあったら、テンプレにこれも追加で
http://perl-users.jp/

で、>>3はこのスレ的には整理した方がいいだろうね

101 :デフォルトの名無しさん:2012/03/16(金) 15:59:56.20 .net
www.amazon.co.jp/Modern-Perl-Chromatic/dp/0977920178/
どんな本なんだろう

102 :デフォルトの名無しさん:2012/03/16(金) 16:35:08.87 .net
>>101
http://www.onyxneon.com/books/modern_perl/index.html

103 :デフォルトの名無しさん:2012/03/16(金) 17:04:15.50 .net
>>102
無料でも読めるのか。トントン

104 :デフォルトの名無しさん:2012/03/16(金) 21:48:33.88 .net
モダンPerlは無駄なもの
なぜなら業界歴20年の俺が理解できなかったからだ
そこから役に立たないものだと結論づけた

105 :デフォルトの名無しさん:2012/03/16(金) 23:16:39.05 .net
新しいことについていけない老害の人って。。。

106 :デフォルトの名無しさん:2012/03/17(土) 00:38:01.50 .net
プログラムはプログラマだけのものじゃなくて、依頼者や使用者のものでも
あって、依頼者視点での保守、使用者視点での保守をしていかないとならない。
その場限りのソフトウェアならモダンPerlでも構わないかもしれないが、
保守するのであれば、流行で作ったものは時間が経つと「変な髪形」になっ
てしまう。それが分かってないのは、おまいのしりが青い証拠だ。

107 :デフォルトの名無しさん:2012/03/17(土) 00:43:57.57 .net
じゃあPerl使うなってことになるな。

108 :デフォルトの名無しさん:2012/03/17(土) 00:45:13.60 .net
一番人を集められるのはJavaかPHPだよね。

109 :デフォルトの名無しさん:2012/03/17(土) 00:54:53.13 .net
>>106
受託ってやつ?
ウェブサービス作ってるんじゃないの?

俺にとってプログラムは自社のもので、自分たちが
開発しやすいように最善の方法を目指してるんだけどさ、
客に足を引っ張られるのって、ちょっと可哀想に思う。


110 :デフォルトの名無しさん:2012/03/17(土) 02:45:39.65 .net
>>106
そういう時はバージョンと使用するライブラリを指定すればいいんだよ。

111 :デフォルトの名無しさん:2012/03/17(土) 02:46:55.30 .net
依頼者は何も指定しなかった場合、
古いPerllで作ろう。

それが依頼者のためになるんだ。

112 :デフォルトの名無しさん:2012/03/17(土) 03:00:54.49 .net
当然4.036よりもさらに前だよな?

113 :デフォルトの名無しさん:2012/03/17(土) 03:04:12.17 .net
>>106
客が要求するのがモダンではないと決めてかかってる。
客がモダンを要求したらどうするつもりだ?
単にお前は、モダンPerlが書けないだけ。

114 :デフォルトの名無しさん:2012/03/17(土) 16:11:00.12 .net
>>112
はい

115 :デフォルトの名無しさん:2012/03/18(日) 01:23:00.96 .net
逆になんでモダンにこだわるの?変なとこにこだわって成果がでないんじゃ
本末転倒じゃないの?成果とモダンとどっちが優先なの?

116 :デフォルトの名無しさん:2012/03/18(日) 01:53:27.60 .net
>>113
単におまいはモダンっていいたいだけちゃうんか
この青尻め

117 :デフォルトの名無しさん:2012/03/18(日) 03:15:04.19 .net
>>115
モダンを諦めれば、成果が出るとでも思ってるの?

むしろ、モダンを使う=成果が出る
なんだが。

118 :デフォルトの名無しさん:2012/03/18(日) 07:42:28.32 .net
一旦モダンって名前を頭から消して普通にPerlコードを書かせてみるとする
そいつのコードがKENTみたいなやつだとして、それが他の人が誰でも保守できるようなシロモノになるとは到底思えない

119 :デフォルトの名無しさん:2012/03/18(日) 16:06:49.73 .net
>>117
そんなこと言ってないだろ、どこを読んでんだ?青尻くん

120 :デフォルトの名無しさん:2012/03/18(日) 16:17:39.87 .net
とうとうホモスレになったのか

121 :デフォルトの名無しさん:2012/03/18(日) 22:44:09.24 .net
青尻くんとこは結構自由みたいだけど、個人事業主なの?

122 :デフォルトの名無しさん:2012/03/20(火) 19:21:50.84 .net
これまでの積み重ねがないと例えば会社が終わりになったときに技術的にも
全てを失うことになるよ。

123 :デフォルトの名無しさん:2012/03/20(火) 19:29:12.55 .net
モダンなんかやってて技術の積み重ねになるわけがない。

124 :デフォルトの名無しさん:2012/03/20(火) 20:23:18.91 .net
わざわざ不便なものを選んで苦しむのが積み重ねか
古いんだよそんなスポ根的発想は!

125 :デフォルトの名無しさん:2012/03/20(火) 22:46:00.37 .net
青尻くんは、プログラムは実現したいこととその解決方法の両方を記述する
ためのものだってこと、ちゃんと理解してるの?そうか、してないのかまだ
青いのか。

126 :デフォルトの名無しさん:2012/03/20(火) 23:19:46.15 .net
普通にわかれよ。
モダンperlがいいものだとしたら普通に普及する。
駄目なもので無理やり普及させたいのには訳がある。

本や講演などで稼ぎたい人もいるってこった。


127 :デフォルトの名無しさん:2012/03/21(水) 01:55:19.27 .net
それには付き合えないけどね。

128 :デフォルトの名無しさん:2012/03/21(水) 08:37:14.83 .net
> モダンperlがいいものだとしたら普通に普及する。

実際に普及してるよな。


129 :デフォルトの名無しさん:2012/03/21(水) 09:55:42.06 .net
半径5m以内の、CPANモジュールも使えない環境を見て言ってるんだろうな。

130 :デフォルトの名無しさん:2012/03/21(水) 22:40:10.92 .net
そうだな。青尻くんが青筋立ててキーキーいう必要はないはずだよな?

131 :デフォルトの名無しさん:2012/03/23(金) 11:52:12.45 .net
ステマってやつだな

132 :デフォルトの名無しさん:2012/03/24(土) 12:30:46.46 .net
かわいいの♪ステマつげるぅ〜♪
いーないーな♪それいいなぁー♪
つげるタイプの魔法だょ〜♪

133 :デフォルトの名無しさん:2012/03/25(日) 07:17:46.89 .net
ステルスマーケティング用語か。個々の技術とまったく関係ない話だな。
要は互換性のなさをごまかそうとしているんだな。ばればれだぞw

134 :デフォルトの名無しさん:2012/03/25(日) 16:36:42.85 .net
>>118
で、きみの書いた誰でも保守できるようなコードはどこにあるの?

135 :デフォルトの名無しさん:2012/03/27(火) 21:08:40.38 .net
長期に渡る保守が予想されるソフトウェアは一時期の流行に合わせて
書くのではなく、将来を見据えた記述をするのが正解。

136 :デフォルトの名無しさん:2012/03/27(火) 21:29:13.75 .net
意固地に10年前の書き方を押し付ける必要はない
今使える書き方と今使えるモジュールで書けばいい


137 :デフォルトの名無しさん:2012/03/28(水) 05:29:06.98 .net
今使えない書き方で書けと読めてるお前がおかしい
ワンライナーや売り切り逃げ切りのソフトならお好きにどうぞ

138 :デフォルトの名無しさん:2012/03/28(水) 06:14:36.83 .net
モダンは互換性がないのと将来のメンテナンスが不安なのが弱点か。
モダンゆえに時間軸の過去も未来もだめってことか。それは困る。

139 :デフォルトの名無しさん:2012/03/28(水) 06:17:08.97 .net
お花を大切に

140 :デフォルトの名無しさん:2012/03/28(水) 06:46:19.55 .net
>>138
>互換性がない
何と?
>将来のメンテナンスが不安
将来のメンテナンスを考えると何を使えばいいの?


141 :デフォルトの名無しさん:2012/03/28(水) 21:48:50.07 .net
素のPerlや標準モジュールが思いつかないあたり、いい、すごくいいよ、
青尻くん。だんだん気に入ってきた。

142 :デフォルトの名無しさん:2012/03/28(水) 22:59:03.49 .net
たとえば標準モジュールの例としては、
http://perldoc.perl.org/index-modules-A.html

・文字コード関係
Encodeモジュール
(Jcodeは×)

・日付関係
Time::Piece、Time::Seconds
(もろもろある日付モジュールは×)

・オブジェクト指向関係
Object::Accessor、Class::Struct

データベース関係(ファイル以外)は、何もありません。

>>141が言っていることはこういう意味です。

143 :デフォルトの名無しさん:2012/03/28(水) 23:57:43.96 .net
がんばって標準モジュールを列記してみたものの、やっぱり素のPerlは
思いつかないところ、青尻くん、すばらしい。すごくいい。

「モダンPerl使いなのでlocaltimeは使えません。」キリッ

職場で一度言ってみたい。。。試用期間で終わるだろうけどw

144 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/29(木) 00:40:36.87 .net
>>143
localtimeは、Time::Pieceで使うよw

標準モジュールのTime::Pieceが素のPerlを拡張してくれるのに、
今更配列のインデックスで年取得して+1900とかする
冗長なコード書くバカいるのかい?

145 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/29(木) 01:26:41.94 .net
>>143
お前がTime::Piece知らないってのが
モロバレだなw

はい、このように、モダンPerlを嫌ってる人=無知なだけ
ってことなのです。

146 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/29(木) 02:28:11.13 .net
> 素のPerlや標準モジュールが思いつかないあたり

って言っておきながら、標準モジュールをあげたら今度は

> がんばって標準モジュールを列記してみたものの、やっぱり素のPerlは
> 思いつかないところ

もしかして、自分の知らない標準モジュールばっかりで
方向転換したのかいな?

147 :デフォルトの名無しさん:2012/03/30(金) 00:32:49.44 .net
ぷぷぷ。

148 :デフォルトの名無しさん:2012/03/30(金) 01:00:11.52 .net
モダンPerlとそうでないPerlとの違い、メリットについてもっと教えておくれ

149 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/30(金) 02:00:07.89 .net
標準モジュールを使いこなすのがモダン。
そうでないものは単に勉強不足なだけ。

150 :デフォルトの名無しさん:2012/03/30(金) 21:55:40.66 .net
なんだ、そうだったのか。てっきりlocaltimeも満足に使えないのかと
思ってたよ。失敬、失敬、こりゃ失敬。

151 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 00:55:04.25 .net
念のため言っとくがlocaltimeから
リストコンテキストで取得するのは古いやり方だからな。

最近のやり方はlocaltimeからTime::Pieceオブジェクトを返す方法。
もちろん標準モジュール。

152 :デフォルトの名無しさん:2012/03/31(土) 01:09:11.56 .net
で、Time::Pieceのインタフェースってlocaltimeと互換性あるの?
例えばリストコンテキストで使うと同じように値が戻ってくるの?

153 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 01:15:37.67 .net
>>152
% perl -MTime::Piece -E'say (localtime);say scalar localtime;say localtime->datetime'

154 :デフォルトの名無しさん:2012/03/31(土) 01:19:35.68 .net
しばらくメリットを考えてみる。

155 :デフォルトの名無しさん:2012/03/31(土) 02:46:36.36 .net
職場にようやく5.8が入ったんでよーし、これからはモダンPerlだぞ!と
意気込んできたらTime::Pieceは5.10以上と知ってがっかり。
らくだ本に載ってるTime::localtimeを使って愛想笑いでごまかすしかない。

156 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 07:54:16.78 .net
その職場に5.10が入るのは10年後であった。
そしてcpanmやperlbrewを入れることは全面禁止されていた。

157 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 10:15:27.26 .net
そんなんで仕事できるの?w
少なくとも効率が悪いね。

158 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 11:16:41.36 .net
古い所が新しい所に
あっさり追い抜かれる原因の一つである。

159 :デフォルトの名無しさん:2012/03/31(土) 12:09:29.38 .net
やっぱりモダンっていうのは供給者側の視点であって、利用者側の視点が
抜け落ちているな。残念。

160 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 13:05:29.17 .net
利用者?
俺は利用者なんだが。

勉強しない奴に合わせる理由なんてないよ。

161 :デフォルトの名無しさん:2012/03/31(土) 15:55:14.37 .net
おれに合わせる必要はない。逆におれはおれでperl4が使われているところも
あるから、がんばってlocaltimeで書くと。需要ベースで考えるしかない。
残念。

162 :デフォルトの名無しさん:2012/03/31(土) 17:19:27.03 .net
まあゆっくりやっていこう。モダンPerlにタイムリミットがあるわけでなし。

163 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 19:21:56.77 .net
古いPerlにはタイムリミットあるけどな。

Perl4のサポート期間は10年ぐらい前に終わっていそうだけどw

164 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 19:22:54.88 .net
perl4の需要はすでに99.9%無い
かろうじて残っているような需要に対応する必要はない。

165 :デフォルトの名無しさん:2012/03/31(土) 20:22:18.67 .net
お前に期待してないから大丈夫だ。

166 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 21:07:02.42 .net
>>161
Perl4に拘るのはせいぜいあなた個人あるいはお客様だけでありますように
あなたの後をうける人、あなたの下につく人が不幸にならないことを祈りたいですなぁ

167 :デフォルトの名無しさん:2012/03/31(土) 22:03:37.68 .net
そうだね。

168 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 12:23:36.71 .net
windowsXp:ActivePerl環境で、perlをタスクスケジューラからバックグラウンドで実行させたい。
wperl.exeで実行すればよいとgoogle先生が教えてくれたんだけど、
↓でやっても実行時にウィンドウが一瞬だけ開いてしまう。
C:\Perl\bin\wperl.exe sample.pl

↓だと↑より長くウィンドウが表示されるので、wperl.exeが効いていないわけではないっぽい。
C:\Perl\bin\perl.exe sample.pl

うーん、なぜだ
誰か教えてください


169 :デフォルトの名無しさん:2012/04/01(日) 19:58:44.51 .net
タスクスケジューラに設定したのはwperl.exeではなくバッチファイルと予想。

170 :デフォルトの名無しさん:2012/04/02(月) 01:47:27.43 .net
% pp --gui --verbose --output=sample.exe sample.pl
でスクリプトをexeファイルにする。

ttp://search.cpan.org/~rschupp/PAR-1.005/lib/PAR/Tutorial.pod

171 :168:2012/04/03(火) 00:54:00.46 .net
デバッガあててみたら↓が原因だった
our $mech = new WWW::Mechanize(autocheck => 1);

手前は中で何やってるんだよ・・・
これ以上解析するのはめんどいが、
ウィンドウが表示されるのは耐え難いので
暇なときに中をのぞいてやる

>>170
なんかすごそう
暇なときにやってみる

172 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 01:50:55.99 .net
ハッシュにblessしたオブジェクトのプロパティに対してlvalue属性つきのサブルーチンを用意しようとしています。
単純なアクセサなので呼び出されたときにAUTOLOADで補足してインストールするようにしています。

package Config;
sub new { my ($class) = @_; bless { name => 'foo', }, $class; }
sub AUTOLOAD {
 no strict 'refs';
 my ($self) = @_;
 our $AUTOLOAD;
 if ($AUTOLOAD =~ /.*::(.*)\z/) {
  *$AUTOLOAD = sub : lvalue { my ($self) = @_; $self->{$1}; };
 }
 goto &$AUTOLOAD;
}
sub DESTROY {} # 一応・・

package main;
my $obj = Config->new;
print $obj->name,"\n"; #=>'foo'
$obj->name = 'bar';
print $obj->name,"\n"; #=>'bar'

これは正常に動作しますが、mainパッケージの最初のprint文をコメントアウトした場合や
新たなプロパティをセットしようとした場合↓にはAUTOLOADが呼ばれず(AUTOLOADに行く前に?)エラーとなります。

$obj->update = '2012/4/8'; => Can't modify non-lvalue subroutine call at...

回避方法あるでしょうか?

173 :172:2012/04/07(土) 02:55:30.64 .net
投稿の際に行数を節約しようと修正した部分で動かないところがありました

×*$AUTOLOAD = sub : lvalue { my ($self) = @_; $self->{$1}; };

my $name = $1;
*$AUTOLOAD = sub : lvalue { my ($self) = @_; $self->{$name}; };

174 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 17:14:55.67 .net
package _Config;
our $AUTOLOAD;

sub new { bless { name => 'foo' }, shift }

sub AUTOLOAD : lvalue {
my ($self) = @_;

(my $name = $AUTOLOAD) =~ s/.*://;
my $sub = sub : lvalue { shift->{$name} };
{
no strict 'refs';
*{$AUTOLOAD} = $sub;
}
$self->$name();
}

sub DESTROY {}

ここまで来ると普通のハッシュでよくね?
あと、ネタすれなんで、本スレで質問しる。

175 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 19:05:08.57 .net
在日韓国・朝鮮人や,
働かないで金をせびるクズ人間を取り締まってくれや。
追うも国士館,追われるも国士館頼むぞ。

http://www2.ocn.ne.jp/~hirohito/photo/s6116.jpg
http://www.masuko.co.jp/school/img/otona/4men_2.jpg
http://keiten.net/image/070804kokushi/kekki.htm

規律ある大学生活
http://daiminsya.exblog.jp/2750544/

国士舘OBの回想
http://www.youtube.com/watch?v=LBtSNMhree4&feature=related

国士舘アルバム
http://www.youtube.com/watch?v=5vZmce3qPGg&feature=related



176 :172:2012/04/07(土) 23:31:22.35 .net
>>174
おおーありがとうございます。AUTOLOAD自体をlvalueにするというのは気づきませんでした。
実際のプログラムはもう少し複雑ですが、正しく動作しています。

>>普通のハッシュでよくね?
たしかにw
一応オブジェクトであってはほしいのですが、ハッシュ記法であれば何の不都合もなく
$obj->{name} = 'bar';
と書けるわけですしね。
オマケでメソッド呼び出しも、と考えてたらハマってしまった格好です

177 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/08(日) 21:43:29.63 .net
Apple 社の Mac OS X は、 ベースの一部 が FreeBSD です。Apple 社独自の
ユーザインタフェースとともに、豊富なUNIX(R)基盤が取り入れられています。

178 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/08(日) 23:11:38.92 .net
OpenStepじゃなかったっけ?

179 :デフォルトの名無しさん:2012/04/14(土) 14:38:18.13 .net
>>171
事前にSTDOUT、STDERRをつぶして
おいたらどーなる?

ウインドウアプリで、そこに吐くと、
自動的に新規コンソールが開く、
とかだったような。


180 :デフォルトの名無しさん:2012/04/17(火) 22:06:08.88 .net
>>179
タスクのウィンドウが表示されなくなってうれしいものの、その他の
ウィンドウも一切表示されなくなりました ;_;
(D-SUB抜いて試しました)

181 :デフォルトの名無しさん:2012/04/18(水) 03:18:24.23 .net
一方、日本は...




瞳をとじた

182 :デフォルトの名無しさん:2012/04/29(日) 00:38:07.87 .net



そしてこのスレッドもクローズした

183 :デフォルトの名無しさん:2012/04/29(日) 06:35:31.99 .net
再開

184 :デフォルトの名無しさん:2012/04/29(日) 06:52:54.09 .net

  ∧∧
  ( ゚Д゚ )∩
 ⊂   ノ
  /  0
  し´
えっ…と、
ここかな…、と
 ∧∧ ∧∧
∩゚Д゚≡゚Д゚ )
`ヽ     |)
  | __ |〜
  ∪  ∪
      ドスッ
  ∧∧.ミ. _
  (   )┌┴┴┐
  /   つ.再開│
〜   ./ └┬┬┘
 ∪∪    ││_ε3
     ゛゛゛゛

185 :デフォルトの名無しさん:2012/04/29(日) 14:21:23.37 .net
最近のPerlでOOP用ライブラリってどんなのが主流ですか?

186 :デフォルトの名無しさん:2012/04/29(日) 14:23:06.27 .net
Mooseだろ?

最近のライブラリでそれ以外使ってるの有るのか?

187 :デフォルトの名無しさん:2012/04/29(日) 14:25:50.06 .net
ありがとうございますMoose調べてきます

188 :デフォルトの名無しさん:2012/04/29(日) 18:38:18.38 .net
Mooseが重いと思ったらMouseとAny::Mooseの組合せで代用もよし

189 :デフォルトの名無しさん:2012/04/29(日) 20:25:09.14 .net
最初から Mouse 使ったほうが

190 :デフォルトの名無しさん:2012/05/15(火) 18:28:38.45 .net
cpan でモジュールインストールしんたいんだけど
install やら make やら make install やら全部 OK
でたのに
perldoc -l インストールしたモジュール名
やるとそんなのないて怒られる。
なんで?

191 :デフォルトの名無しさん:2012/05/15(火) 22:29:19.68 .net
>>190
普通 perldoc -l DBI などは成功すると思うよ。
どうやって入れたの? モジュール名は?

192 :デフォルトの名無しさん:2012/05/16(水) 07:35:09.36 .net
>>191
cpan>install Math::Vector::Real
でいれて
全部 make やら make install やら全部 OK と出たが
ないようだった。

cpanplus でインストールしてみたらいけたのだが原因がわからない。

193 :デフォルトの名無しさん:2012/05/16(水) 19:04:48.32 .net
Regexp::Assembleでマッチした時って
後方参照使えるの?

194 :デフォルトの名無しさん:2012/06/20(水) 00:40:13.88 .net
perl 5.10.1 を使っています。
$str = "ABCD"; の時
@a = $str =~ /AB|CD/g;
を実行すると、@a = ( "AB", "CD" ) と2つの要素が返されますが、
@a = $str =~ /AB|BC/g;
だと、@a = ( "AB" ) しか帰ってきません。
(ABがマッチしたら、その次のCからサーチが始まるため)

@a に ("AB", "BC") と、マッチするものすべてを得たい場合、
どうすればよいでしょうか。



195 :デフォルトの名無しさん:2012/06/20(水) 01:29:26.87 .net
なんか面白そうなお題なのでとりあえず最悪くさいものを作ってみた
素晴らしい人がボロクソにけなしてくれると期待しつつ投げてみる

$str='ABCD';
{
my $tmp=$str;
while($tmp=~/AB|BC/){
push @a,$&;
$tmp = $&.$';
$tmp=~s/^.//;
}
}
print join' ',@a;

196 :194:2012/06/20(水) 02:51:53.45 .net
>>194
場当たり的に色々試していたら
@a = $str =~ /(?=(AB|BC))/g;
で、(AB,BC) が取得できました。
(?= で、次の走査開始点を移動させないようにしたから、でしょうか?

197 :デフォルトの名無しさん:2012/07/15(日) 14:22:38.65 .net
一過性のモダンPerlはもう終わり。
らくだ本の発行によって本来のPerlへの回帰が始まっている。

198 :デフォルトの名無しさん:2012/07/15(日) 14:36:07.64 .net
本来のPerl=5.0でも動く範囲でしかコード書かない

199 :デフォルトの名無しさん:2012/07/15(日) 16:03:33.45 .net
そういえばPerl5のスレってないね?やっぱりまだPerlの方が使われてるのかな?

200 :デフォルトの名無しさん:2012/07/20(金) 00:44:57.65 .net
モダンPerl書いたひとはどうしてるの?最近見ないけど、やっぱりだめなの?

201 :デフォルトの名無しさん:2012/07/20(金) 06:04:14.97 .net
まあソースをみて改良したりとか前向きな動機はほぼゼロで99.99%はこのメーカー
困らせてやれって開示請求なんだろうな。


202 :デフォルトの名無しさん:2012/07/20(金) 23:17:21.71 .net
モダンな奴はそもそもPerl使わないからな

203 :デフォルトの名無しさん:2012/07/25(水) 02:06:14.30 .net
USP(Universal Shell Programming)研究所は、UNIX/Linuxの基本思想である、
「小さな道具」(コマンド)を組み合わせて「問題を解決する」(シェルス
クリプト)手法の研究・普及を行っています。この開発手法(ユニケージ
開発手法)は、従来のウォーターフォール型開発や、オブジェクト指向言
語・データベースソフトを用いた開発手法と一線を画し、圧倒的な開発生産
性 圧倒的な柔軟性を特徴としています。

ttp://www.usp-lab.com/

204 :デフォルトの名無しさん:2012/07/30(月) 19:45:03.06 .net
本スレも、荒しに常駐されてぐだぐだだし、
WebProgの方も同じみたいに、スレ違いの会話が
ぐだぐだ続いて終了したし、終りかなあ。

ここのスレの方がまだ真面にperlの話をしてた気がするよ。


205 :デフォルトの名無しさん:2012/07/30(月) 20:56:12.50 .net
まあモダンには2つあって、ひとつはすぐに古くなるモダン。
もうひとつはいつまでも古くならないモダン。
おれは断然古くならないモダンのほうがいいな。

206 :デフォルトの名無しさん:2012/07/30(月) 23:46:15.85 .net
XSを使うと1年後に古くなるほうのモダンですか?

207 :デフォルトの名無しさん:2012/07/30(月) 23:47:25.65 .net
軟便スキー独りか知らんが、
韓国ネタのコピペしたり
hoge煽りしたり
ググれ煽りしたり

馬鹿じゃねーの?

208 :デフォルトの名無しさん:2012/07/31(火) 00:19:41.40 .net
そしてゆっくりモダンになっていく...
それが理想です

209 :デフォルトの名無しさん:2012/07/31(火) 00:27:00.96 .net
進歩というものは過去を捨てることではない。
過去に加えて積み上げるものなのだ。

210 :デフォルトの名無しさん:2012/07/31(火) 01:28:15.89 .net
荒しが950踏んで嬉々としてhoge禁止をテンプレに入れる姿が目に見える様だ


211 :デフォルトの名無しさん:2012/08/04(土) 17:51:38.53 .net
過去のソフトウェアと作法やインタフェースが異なる言い訳としてモダンと
いう用語を使うのはまずい。今までより苦労が増えるなら移行は進むはず
がない。

212 :デフォルトの名無しさん:2012/08/05(日) 20:55:07.11 .net
ところでこのスレが53箱目の続きってことでいいの?

213 :デフォルトの名無しさん:2012/08/05(日) 20:56:46.40 .net
すまん、53箱目の続きあった。“54目”になってたんで検索に引っかからなかったわ。

214 :デフォルトの名無しさん:2012/08/06(月) 18:23:11.89 .net
以下のように時刻と曜日が書かれたlogファイルがあります。

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.19 .net
>>214
訂正
1時間前のログのみ抽出じゃ無くて一時間分のログを抽出です。



216 :デフォルトの名無しさん:2012/08/06(月) 18:57:53.32 .net
>>214
> この処理って一行(ワンライナー)で書けますか?
書けます。

217 :デフォルトの名無しさん:2012/08/07(火) 18:06:48.10 .net
>>216
やり方教えてください!
一時間前の日付時刻と現在の日付時刻を比較して条件を満たせば該当行を出力みたいなことをやれば良いとおもうんですが、どう書けば良いのかわかりません

218 :デフォルトの名無しさん:2012/08/07(火) 18:12:29.44 .net
横レス(別人)
$ 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 .net
>>218
あんた2012年の住人じゃないだろw

220 :デフォルトの名無しさん:2012/08/07(火) 18:30:46.11 .net
>>218
レスありがとうございます。
参考にさせてもらいます。
でも2013年以降も使えるのが理想ですが…

221 :デフォルトの名無しさん:2012/08/07(火) 18:34:05.93 .net
年跨ぎのケースを考え無くて良いなら、コードの2012を2013にすりゃいいだけ。


222 :デフォルトの名無しさん:2012/08/08(水) 18:20:12.98 .net
というより、「年」は全部今年として扱えばいい。
年が明けてから1時間はまともにログを拾えなくなるけど。
そもそもログデータに「年」の情報が入っていないんだから、
厳密に処理するのは無理だべ。

223 :デフォルトの名無しさん:2012/08/08(水) 18:36:12.52 .net
>>218に対して言ってるのなら、
最初からそれを念頭に書いてないか?
コードは既にそうなってるし、
説明文の方は質問者に向けたもんだし、
改造しやすいように除算は態々、2012 -1900 にして残してあるし。

それともtime関数に、年を除外するオプションでもあんの?


224 :デフォルトの名無しさん:2012/08/08(水) 19:02:57.22 .net
>>223
年が変わるごとに 2012 を 2013 だの 2014 だのに書き換えるの面倒だろうから
「年」のところはログの日付も現在の時間も全部localtimeの「今年」という前提で
扱えば毎年コード書き直さなくてもよくなるだろっていってるんだよボケ。

225 :デフォルトの名無しさん:2012/08/08(水) 19:09:28.99 .net
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、了解した。


226 :デフォルトの名無しさん:2012/08/08(水) 19:17:05.60 .net
で、試しに自分でも書いてみた。
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.26 .net
>>225
了解してくれてどうも。
俺の日本語がわかりにくかったのか…

228 :デフォルトの名無しさん:2012/08/08(水) 19:28:58.56 .net
>>226
> 218の方がすっきりしてるか。なぜかうちの環境だとエラー吐いて動かなかったけど…。
> (Day 'Jun' out of range 1..31 at -e line 1 て言われた)

なぜエラーが出たかわかった。自分でテスト用に切り出して作ったログファイルの
各行頭にスペースが入っていたからだった。(ありがち)

229 :デフォルトの名無しさん:2012/08/08(水) 21:24:39.24 .net
>>227
違う。料理の合間に、斜め読みでレスした俺が悪い。


230 :デフォルトの名無しさん:2012/08/09(木) 03:59:05.87 .net
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オブジェクトの除算が変だ。なんで?

231 :デフォルトの名無しさん:2012/08/09(木) 05:09:37.92 .net
>>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ベースになっちゃうけど引き算の結果は正しくなる。
という訳で、けっこういろいろとメンドくさいもんですね。

232 :デフォルトの名無しさん:2012/08/09(木) 08:02:26.85 .net
同じぐらいの長さのワンライナーなのに
>>218がダサくて>>226がスタイリッシュに見えるのはなぜだろう

233 :デフォルトの名無しさん:2012/08/09(木) 08:03:44.22 .net
レスくれた人ありがとうございます>>214です。
まだperlは入門書読み終わった程度なので右も左も分かりませんが、教えて頂いたコードを参考に色々書き方を研究したいと思います。

234 :デフォルトの名無しさん:2012/08/12(日) 12:31:10.61 .net
入門書読み終えたばかりの初心者には組込みのlocaltime関数を教えてあげないよ

235 :デフォルトの名無しさん:2012/08/13(月) 16:57:18.75 .net
>>234
なにが言いたいのかわからん

236 :デフォルトの名無しさん:2012/08/14(火) 00:43:26.35 .net
ほら、俺ってサ
意外にすいすいしいヤツ
だからサ

237 :デフォルトの名無しさん:2012/08/14(火) 23:54:42.42 .net
初心者には localtime の方が便利な件

238 :デフォルトの名無しさん:2012/08/15(水) 05:40:02.45 .net
>>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'


239 :266 (未来より参上):2012/08/15(水) 16:15:51.26 .net
>>238
おおうスタイリッシュ。
state とか使ったことなかったけど便利そうだな。参考にさせていただきます。
ワンライナーはあんまし書かないのもあってオプションも -i -n -p -e くらいしか
普段使ってなかったりしますんで。-E すら滅多に使わないな…。nもpもなしに
while(<>)埋め込むのもループの前後で処理が必要な時とかは普通にやってるし。
その程度のスキルでもとりあえず動くものは書けるってのがPerlのメリットでもあり
欠点でもあると…まあこの場合メリットということで。TMTOWTDI。(覚えづらいよなこれ)

240 :デフォルトの名無しさん:2012/08/16(木) 22:01:16.60 .net
なんで隔離スレで真面目に質問箱してんのよ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くっつけるだけ。


それにしても、バルサン炊いたみたいに、人がいなくなったな本スレと初心者スレ。
実際の所は、ハイエナが肉に夢中になってるだけだろうけど。

241 :デフォルトの名無しさん:2012/08/19(日) 22:14:32.47 .net
初めてのPerl第6版とPerl5.16.1のことだね。
Unicodeサポートの問題に今頃気づいたって読める。
第5版のときはまだ気づいていなかったのかな?
まあ、そんときは使ってなかったんだろうけどな。

242 :デフォルトの名無しさん:2012/08/20(月) 05:51:33.20 .net
今上天皇侮辱発言の祭りが落ち着いたから、戻って来たぞゴキブリ。
でも、まあ、5割くらい減ったんじゃねーかな?


243 :デフォルトの名無しさん:2012/08/20(月) 22:17:22.42 .net
バルサン耐性を備えて5割以上パワーあっぷぷぷw

244 :デフォルトの名無しさん:2012/08/26(日) 15:07:51.22 .net
ゆっくりモダンになっていく・・・




・・・モダンRuby。

245 :デフォルトの名無しさん:2012/08/29(水) 00:35:50.14 .net
モダンPERL追いかけてたら時代に取り残されましたとほほ

246 :デフォルトの名無しさん:2012/08/30(木) 21:05:34.35 .net
>>245
その最後の「とほほ」だけで、もう10年以上は時代に取り残されてるよな

247 :デフォルトの名無しさん:2012/08/30(木) 21:12:12.26 .net
とほほだってよw
もうお前5.6こそ最高とかいって周りに強要してろよ

248 :デフォルトの名無しさん:2012/08/31(金) 00:07:22.19 .net
5.6だと日本語がちゃんと使えません。仕事で使うなら5.005一択です。

249 :デフォルトの名無しさん:2012/09/01(土) 09:59:22.19 .net
どうやらモダンパールは時代遅れみたいですね
本家のパールはすでにその先に進んでます
テキスト処理90%のPerlが文字列を楽に扱えないなんてたちの悪い冗談でしか
ありません

250 :デフォルトの名無しさん:2012/09/02(日) 02:19:31.92 .net
C++へのアンチテーゼの側面もあったPerlなのにモダンPerlはどうしちゃったのかな

251 :デフォルトの名無しさん:2012/09/03(月) 01:19:39.59 .net
テクノロジーはスクラップアンドビルドなものと考える連中はとほほの内容が
古いと考えるようだ

252 :デフォルトの名無しさん:2012/09/08(土) 14:37:07.80 .net
かってに「モダン」とか名乗るなや

253 :デフォルトの名無しさん:2012/09/09(日) 00:59:31.20 .net
モダンでもないのにモダン名乗られてもなあ

254 :デフォルトの名無しさん:2012/09/09(日) 08:13:34.65 .net
リャマ本第6版までモダンに毒されてるよ
おまいらリャマ本は第1版こそ至高・正義だ
定価より高くても中古で第1版を買え!

255 :デフォルトの名無しさん:2012/09/09(日) 17:51:10.11 .net
第1版ってのはバージョン4のピンク本のことか?あれは本当にいい本

256 :デフォルトの名無しさん:2012/09/09(日) 18:42:20.14 .net
ダヨモンPerl
アリャマ本

257 :デフォルトの名無しさん:2012/09/10(月) 00:59:47.94 .net
赤らくだ本だとか赤リャマ本の序文、それにポケットリファレンスの序文でLarryはふざけ過ぎてしばらくの間O'reillyから干されていた。今回「まじめに書く」と誓ったためようやく第4版の執筆許可が下りたらしい。

258 :デフォルトの名無しさん:2012/09/12(水) 00:04:41.71 .net
結局らくだ本的にはモダンPerl(=perl5.8)はスルーってことか
最近は重いモジュールも避けられる傾向にあるしな

259 :デフォルトの名無しさん:2012/09/12(水) 00:11:25.67 .net
重いモジュールも避けられる傾向にあるしな(キリッ
とか言う奴は十中八九List::Utilとかを使わない

260 :デフォルトの名無しさん:2012/09/12(水) 00:30:32.64 .net
実際に書かせてみればろくなコード書かないんだろうな

261 :デフォルトの名無しさん:2012/09/12(水) 00:31:53.70 .net
モダンperlと言われているもののうち一部の重たいモジュールを持ち出して
重たいモジュールは避ける傾向にあるからモダンperlも避ける傾向だよねー
なんてどんな詭弁だよ

262 :デフォルトの名無しさん:2012/09/12(水) 00:33:07.74 .net
確かにLarryはモダンPerlについて多くを語ろうとしないな
きっと軽いスクリプトが好きなんだろうなList::Utilとか使わない

263 :デフォルトの名無しさん:2012/09/12(水) 00:55:43.31 .net
List::UtilはXSで書かれてるから自分でPerlで書くよりよっぽど高速なわけだが
てかとってつけたようにLarry様の名前出すなよw

264 :デフォルトの名無しさん:2012/09/12(水) 01:36:14.68 .net
GUIやバイナリファイル扱うときにXSを使って効率を上げるのは分かるが
そうでないときにXS使ってスクリプトの利便性を下げるのは簡便だな。

265 :デフォルトの名無しさん:2012/09/12(水) 01:47:29.25 .net
勘弁

266 :デフォルトの名無しさん:2012/09/12(水) 02:38:31.59 .net
>>264
なぜ利便性が下がる?

267 :デフォルトの名無しさん:2012/09/13(木) 23:01:41.84 .net
第1ヒント:テキスト萌えたんのポータビリティ強化月間

268 :デフォルトの名無しさん:2012/09/13(木) 23:29:47.30 .net
「スクリプトが何かよく分かっていない」と書いたはらたいらに3,000点。

269 :デフォルトの名無しさん:2012/09/14(金) 23:30:28.34 .net
バイナリではないところがスクリプトの利便性って分かるかな?無理かな?

270 :デフォルトの名無しさん:2012/09/15(土) 17:45:47.86 .net
利便性の優先度
作る人の利便性 <<< 使う人の利便性

271 :デフォルトの名無しさん:2012/09/15(土) 18:43:43.53 .net
中身が古いか新しいかは使う人の利便性に影響はしないけどね

272 :デフォルトの名無しさん:2012/09/15(土) 22:16:30.43 .net
結局モダンかどうかは気持ちの問題だし、供給者側の主張次第でしょ
利用者側にとってはちゃんと使えればどうでもいいよそんなもん

273 :デフォルトの名無しさん:2012/09/19(水) 01:43:10.30 .net
モダンパールは単なる自己満足であったか
そもそも書いたときはモダンでも後で読むときはモダンではないわな
モダンと言われると互換性がないんじゃないかと思って警戒するひとも
いるかもしれないしな

274 :デフォルトの名無しさん:2012/09/19(水) 02:38:41.68 .net
use strict;
use Encode;

275 :デフォルトの名無しさん:2012/09/20(木) 09:27:07.77 .net
Perl 6は、ポストモダンですか

276 :デフォルトの名無しさん:2012/09/20(木) 13:14:19.79 .net
バイナリでの文字列置換をしています

$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 .net
$dst = "\x00";

278 :デフォルトの名無しさん:2012/09/20(木) 13:31:02.66 .net
確かにそういうことなのですが、
何故$dstという変数を使うかというと、その中身が不定だからです
$dst に '00' とか '01' とかいろんな文字列が入った場合の置換の書き方はありませんか

とりあえず、pack("C", hex($dst)) と書いて eオプションで評価すれば
うまく行くのは確認したのですが、$srcみたいなスマートな書き方はできないものかと

279 :デフォルトの名無しさん:2012/09/20(木) 14:11:13.98 .net
packするのが一番マシじゃないだろうか
ただ置換内ではなくその直前に追い出したいけど

280 :デフォルトの名無しさん:2012/09/20(木) 14:30:17.21 .net
後半が文字列で表現されている時に、
それをテキストとして見ていいのかバイナリとして見ていいのか、
両方の解釈が有り得るのが問題なんだな

書いたままだよ、というルールで統一されていれば納得するものを、
コードに埋め込んだ時はバイナリだけど、変数が来たら文字列、という解釈をして、
しかも、置換の前半部分は変数でもバイナリとする変態文法
逆に前半を文字列として認識させたい時はどうするんだろう

281 :デフォルトの名無しさん:2012/09/20(木) 22:51:50.63 .net
すみません、何がなんだか分からないのでゆっくりと、そして複数の質問で
あるのなら分割して1つずつ質問してもらっていいですか?
中卒なんで

282 :デフォルトの名無しさん:2012/09/20(木) 22:56:52.61 .net
eval "" と eval {} と /e で解決しそうに読めるんですけど

283 :デフォルトの名無しさん:2012/09/21(金) 00:33:30.46 .net
よくある
$str =~ s/%([a-zA-z0-9]{2})/pack("C", hex($1))/eg;

こんな置換を、packやらhexやら使わずに書いてみそ
という問題

284 :デフォルトの名無しさん:2012/09/21(金) 00:35:30.66 .net
>>276
> バイナリでの文字列置換をしています
{
  no utf8;
  $str =~ s/\xFF/\x00/g;
}


285 :デフォルトの名無しさん:2012/09/21(金) 00:43:45.02 .net
eval qq{ \$str =~ s/\\Q$src\\E/$dst/g };

286 :デフォルトの名無しさん:2012/09/21(金) 11:42:35.55 .net
どうやってもスマートじゃないな
前半も後半も素直にpackしておくのが一番分かり易い
なまじ前半に書けてしまうのがおかしい

287 :デフォルトの名無しさん:2012/09/22(土) 06:20:20.87 .net
文字列とバイナリを区別する時点から問題が発生していると思うので、
区別しなければ解決するのだと思う

288 :デフォルトの名無しさん:2012/09/22(土) 12:20:01.08 .net
楽になるために区別するのならよいわけだけど、
区別したがゆえに苦労するのであれば、区別しなければ苦労はない。

過去にとらわれるのはもうやめです。進歩しませんよ。

289 :デフォルトの名無しさん:2012/09/22(土) 15:03:36.74 .net
どっちに解釈するか文脈で判断、ということをperlはあちこちでやっていて、
それは多くの場合正しいので表面化しないけど、
こんな風に不合理を露呈する場合もある

290 :デフォルトの名無しさん:2012/09/22(土) 20:40:59.67 .net
プログラムはテキスト、処理するデータはバイナリ
 対
プログラムはバイナリ、処理するデータはテキスト

深い質問だな、これは

291 :デフォルトの名無しさん:2012/09/22(土) 22:17:29.81 .net
Win7上で、Strawberry Perl と SQL Server2008 を使用して開発をしています。

DBD::ODBCでDBにアクセスをして、データを操作しています。

質問
・DBIでSQL Serverのデータベースにconnectを作成し、あるキーとなる情報を取得するSQLを
 prepare、execute、fetchrow_arrayを使用して取得し、取得したキーをもとに別なSQLを作成し、
 実行しようとしましたが、「接続がビジーです」といった内容のエラーが返ってきます。
 fetchrow_arrayでデータを参照しつつ、同一のデータベースから同じようにデータを取得する
 ことはできないのでしょうか?
 
何か情報がありましたら、教えてください。
よろしくお願いいたします。


292 :デフォルトの名無しさん:2012/09/22(土) 23:59:54.07 .net
2つのSQL文をひとつにまとめるのが正攻法に思えるが「参照しつつ」をやめて「参照し終わってから」にすればいいんじゃないかと言ってみた。

293 :デフォルトの名無しさん:2012/09/23(日) 09:13:22.29 .net
SQL文を相関副問い合わせを使って書き直す

294 :デフォルトの名無しさん:2012/09/23(日) 10:24:02.93 .net
Strawberry Perlは「接続がビジーです」に関わっていない件

295 :デフォルトの名無しさん:2012/09/23(日) 11:27:29.98 .net
プログラムはテキスト(簡便)、処理するデータはバイナリ(簡便)

プログラムはバイナリ(勘弁)、処理するデータはテキスト(勘弁)


296 :デフォルトの名無しさん:2012/09/23(日) 11:29:56.95 .net
$str = 'aaa[bbb[c]ddd]eee';
$str =~ s/\[.+?\]//;

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

うまい書き方はありますか

297 :デフォルトの名無しさん:2012/09/23(日) 12:06:04.53 .net
>>296
s/\[.{1}\]//;
オプションつけて最長マッチとかってあるのか?

298 :デフォルトの名無しさん:2012/09/23(日) 12:40:34.62 .net
中身が固定だと判ってるなら\[c\]でいいんだけどね

299 :デフォルトの名無しさん:2012/09/23(日) 16:22:38.40 .net
$str = 'aaa[bbb[c]ddd]eee';
$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 .net
スカラーで置換した数を返す、という仕様は
whileで使ってくれと言ってるようなもんだな

301 :291:2012/09/24(月) 00:26:24.29 .net
>>292-293
ありがごうございます。
ただすみません、自分の書き方も悪かったのですが・・・

取得した情報で、その後の処理を変更しています。
そのため、発行するSQLもselectだけでなく、insert,update,deleteなどもあり、
単純にSELECTを見直すというわけにもいかず。


302 :デフォルトの名無しさん:2012/09/24(月) 00:48:00.82 .net
複数のアクティブな結果セット (MARS) の使用
http://msdn.microsoft.com/ja-jp/library/ms131686.aspx


303 :291:2012/09/24(月) 22:40:47.72 .net
>>302
ありがとうございます。
こんなものがあったんですね。知らなかったです。


304 :デフォルトの名無しさん:2012/09/26(水) 00:01:18.00 .net
Perlのこと聞きたかったら、いつでもこのモダンPerlスレに来な

305 :デフォルトの名無しさん:2012/09/26(水) 01:15:59.84 .net
モダン焼きは四角く切るのと放射状に切るのとどっちがいい?

306 :デフォルトの名無しさん:2012/09/26(水) 05:22:19.56 .net
おちんちんお切ってしまえ

307 :デフォルトの名無しさん:2012/09/27(木) 01:25:13.55 .net
たこ焼き器で作るとひと口サイズなので切らなくともよい。

308 :デフォルトの名無しさん:2012/09/27(木) 06:03:41.53 .net
私女だけどひと口サイズのおちんちんは勘弁

309 :デフォルトの名無しさん:2012/09/30(日) 12:10:27.15 .net
切り方変えても味は変わらないのでそのままかぶりつく

310 :デフォルトの名無しさん:2012/09/30(日) 23:22:27.63 .net
結局一過性のモダンポールか、青臭いな

311 :デフォルトの名無しさん:2012/10/06(土) 16:46:58.45 .net
少数のエリートが良かれと思っても多数派の一般民が取り入れないと意味がない
ひとがプログラミングする訳だから、フィーリングを大事にしないとだめだな

312 :デフォルトの名無しさん:2012/10/14(日) 16:56:04.97 .net
開発効率のことだけで言うと
モダンPerlの方が効率がいいね。

313 :デフォルトの名無しさん:2012/10/14(日) 23:37:41.19 .net
俺が好きなのはポストモダンPerlだな

314 :デフォルトの名無しさん:2012/10/15(月) 03:13:27.49 .net
ああ、アレね、アレのことね

315 :デフォルトの名無しさん:2012/10/15(月) 12:16:14.31 .net
Time::Pieceの実験用モルモットになるよりlocaltimeをツールとして安心して使うタイプか

316 :デフォルトの名無しさん:2012/10/15(月) 15:57:01.88 .net
モジュールに一切頼らないスタイルこそが正義

317 :ハートマン軍曹:2012/10/15(月) 18:43:05.44 .net
お前の顔はモダンアートの醜さだ!

318 :デフォルトの名無しさん:2012/10/16(火) 00:31:08.75 .net
もうPerlは5.16の時代ですよ。
5.12とそれより前はサポート終了しました。

10年前のPerlのことなんか、
考える必要ないんですよ。

319 :デフォルトの名無しさん:2012/10/16(火) 00:42:38.62 .net
5.6とか使いたい奴は自分らで勝手に使ってたらいい
ただし5.6を他人に強要したり、5.6向けに書いた古臭いスクリプトを他人に押し付けて保守させたりするな

320 :デフォルトの名無しさん:2012/10/16(火) 01:21:14.64 .net
>>319
いやなことあったの?

321 :デフォルトの名無しさん:2012/10/16(火) 01:23:22.72 .net
>>320
主にこのスレでねw

322 :デフォルトの名無しさん:2012/10/16(火) 01:37:39.47 .net
とにかくコードが手元の環境で動くのが正義
そして長期間に渡るメンテが可能で楽なのが正義
localtimeは標準モジュールより格上の標準関数

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

319による保守は誰も期待していない

323 :デフォルトの名無しさん:2012/10/16(火) 01:59:23.74 .net
>>321
無理して見なくていいぞ

324 :デフォルトの名無しさん:2012/10/16(火) 02:00:05.08 .net
ポータブルPerlって
Perlのバージョンはなんだ?
言ってみろよwおらおらw

325 :デフォルトの名無しさん:2012/10/16(火) 02:04:53.00 .net
>>322
> とにかくコードが手元の環境で動くのが正義

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

矛盾してる

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

つまり手元の環境で動きさえすればいいってもんじゃないってか?

327 :デフォルトの名無しさん:2012/10/16(火) 02:06:57.24 .net
>>322
> localtimeは標準モジュールより格上の標準関数

格上わろす

328 :デフォルトの名無しさん:2012/10/16(火) 02:21:46.91 .net
手元にたくさんあるんだろ、モルモット君。

329 :デフォルトの名無しさん:2012/10/16(火) 11:09:16.58 .net
localtime()は、Cにもあるよ

330 :デフォルトの名無しさん:2012/10/17(水) 18:24:12.99 .net
うるさいゴミ

331 :デフォルトの名無しさん:2012/10/20(土) 13:36:25.82 .net
リストコンテキストとスカラーコンテキストの違いとか printf とかはモダン
うんぬんの前に知らないとだめだろ。

モダンなゆとり世代。壮大な実験に付き合わされたモルモット。かわいそす

332 :デフォルトの名無しさん:2012/10/20(土) 14:30:09.12 .net
刹那的なモダンPerlでは自分が書いたスクリプトを数十年に渡って保守する
ことは不可能と悟り本来のPerlに戻ってくる。で、localtimeで書く。

333 :デフォルトの名無しさん:2012/10/20(土) 14:43:54.03 .net
>>332
perl本体に組み込まれた関数が何十年後も互換を維持してるとは思えないがな

334 :デフォルトの名無しさん:2012/10/20(土) 15:22:59.17 .net
寿命が6〜8年のモルモットの推測が当たるとは思えないがな

335 :デフォルトの名無しさん:2012/10/20(土) 15:54:12.00 .net
数十年後も使い続ける物はCで書いとけよ。
Perl5自体、メンテされてるかどうか分からんぞ。

336 :デフォルトの名無しさん:2012/10/20(土) 17:23:24.31 .net
mooseとか使いまくってる俺が通りますよ

早くPerl6出ないな〜

337 :デフォルトの名無しさん:2012/10/20(土) 20:08:44.97 .net
Cで書いたら実行環境の違いを記述するコードでアプリケーションが
埋め尽くされるんだろーなー

338 :デフォルトの名無しさん:2012/10/20(土) 20:25:13.96 .net
>337
Linuxのソース見たけど、
一部の層で吸収しているから
ほとんどのコードは実行環境の違いなんて関係ないよ。

ま、お前にはそんな芸当出来ないだろうがな。がはははははwwww

339 :デフォルトの名無しさん:2012/10/20(土) 20:32:14.18 .net
ゆとりだからLinuxしか習わなかったんだよね?かわいそす

340 :デフォルトの名無しさん:2012/10/20(土) 20:34:13.97 .net
「Linuxしか習わなかった」と判断した理由を書いてください。

ゆとりの脳内はよくわかりませんのでw
あ、書かなくても(逃げても)構いませんよwww

341 :デフォルトの名無しさん:2012/10/20(土) 20:54:05.91 .net
書いてもいいんだけど、Linuxのソースが、Linux以外のオペレーティング
システム上でperlを実行したときの実行環境の違いを吸収できると考えて
いるひとには理解できなそう

342 :デフォルトの名無しさん:2012/10/20(土) 21:09:04.20 .net
たぶん、無理だろうね。かわいそす

343 :デフォルトの名無しさん:2012/10/20(土) 21:21:01.55 .net
やっぱゆとりだったかw

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

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

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

ま、お前にはそんな芸当出来ないだろうがな。がはははははwwww


344 :デフォルトの名無しさん:2012/10/20(土) 21:42:31.78 .net
>>343
意味不明

345 :デフォルトの名無しさん:2012/10/20(土) 21:47:19.43 .net
意訳 馬鹿だから理解できないw

346 :デフォルトの名無しさん:2012/10/20(土) 22:34:46.28 .net
興奮してるのか脳に障害があるのか分からないが
文章が無茶苦茶だな

347 :デフォルトの名無しさん:2012/10/20(土) 23:27:28.93 .net
たぶんではなくて完全に無理です。コンテキストの理解を求める俺のほうが
完全に悪かったです。printf も覚えようとしなくて結構です。

どうもすみませんでした。

348 :デフォルトの名無しさん:2012/10/20(土) 23:55:00.68 .net
モダンPerlが脳障■者を集めるのか、脳障■者がモダンPerlを好むのか

これって日本だけの現象なの?モダンRubyとかも同じ状況なの?

349 :デフォルトの名無しさん:2012/10/21(日) 00:21:29.73 .net
いいから黙ってろって

350 :デフォルトの名無しさん:2012/10/21(日) 00:34:27.55 .net
>>343
> こういう作り方ってのは普通にやることだし、そんなことが
> 思いつかないってのは自分でやったことがないってことw
>
> そこからこのセリフにつながる

罵倒を目的とした文章で代名詞の頻度が上がるのは、脳に良くない変化が起きていることを現すから気をつけた方がいい。

351 :デフォルトの名無しさん:2012/10/21(日) 00:35:41.55 .net
じいさんがボケ始めた頃「あれ取って」が増えたのと同じか?

352 :デフォルトの名無しさん:2012/10/21(日) 00:46:26.95 .net
>>350
> 罵倒を目的とした文章で代名詞の頻度が上がるのは、脳に良くない変化が起きていることを現すから気をつけた方がいい。

そんなデータはありませんwww
大丈夫?


353 :デフォルトの名無しさん:2012/10/21(日) 01:30:13.87 .net
ボケ老人風文体わろす

354 :デフォルトの名無しさん:2012/10/21(日) 02:33:32.41 .net
実行環境の制約(機器であったり、OSであったり、その会社の規則だったり)で
ポータブルなスクリプトを書かなければならないことはあるだろうけど、
制約によってモダンPerlで書かなければならないってことは現実にあるんだろ
うか?

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

モダンPerlは結局のところ単なる自己満足なのだろうか?回答を求む。

355 :デフォルトの名無しさん:2012/10/21(日) 02:48:51.74 .net
> ポータブルなスクリプトを書かなければならないことはあるだろうけど
お前のポータブルの意味って何?
新しいPerlを入れればいいだけだろ。

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

ポータブルとは関係ない。


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

正直モダンPerlって呼ばれてるような書き方をしてはいけないなんて制約がある方が特殊すぎ

357 :デフォルトの名無しさん:2012/10/21(日) 14:23:20.43 .net
自分の書くプログラムのスタイルなら、モダンだろうとクラシックだろうと好きに書けばよい。
でも、モダンPerl!モダン!モダン!って言う連中って、CPANとかのライブラリを使って書くことを
モダンだと言ってることが多い。

ライブラリを自分で抱えるのでなく、システムに入れろっていうのは横暴だし無理だろう。
すでに作られているシステムに、あとからCPANライブラリを追加したら、
既存のPerlスクリプト全ての再検証必要となるからね

358 :デフォルトの名無しさん:2012/10/21(日) 14:57:36.30 .net
どんなモジュール追加したらそんな大げさなことになるんだよ。

359 :デフォルトの名無しさん:2012/10/21(日) 15:03:26.42 .net
今のモダンPerlの世界は
perlbrew + cpanminus + local::lib を使って
システムに入れずに最新Perlを使うのです。

360 :デフォルトの名無しさん:2012/10/21(日) 20:00:42.97 .net
『はじめてのPerl』にlocal::libとcpanmが出てくる時代になりました。

361 :デフォルトの名無しさん:2012/10/31(水) 01:25:45.68 .net
書いたときにモダンなのは当たり前だろう
モダン推しは時間軸の視点が抜け落ちているんだな

362 :デフォルトの名無しさん:2012/11/04(日) 13:29:05.31 .net
>>358
Encodeモジュールのようなモジュールだろ
まあ、あえて名指しはしないけどな

363 :デフォルトの名無しさん:2012/11/04(日) 17:39:50.59 .net
なんでEncodeモジュールを追加しただけで
再検証が必要になるんだ?

Encodeモジュールは最近のPerlには標準搭載されてるだろ。
まさか最新のPerlで動かないコード書いてるのか?

364 :デフォルトの名無しさん:2012/11/06(火) 01:19:20.40 .net
>>318 >>319
フリーソフトはそもそも AS IS だからサポート切れとかはない
今までのどのらくだ本にも最初に書いてある

で、強要だの押し付けただのってしたことあったっけ?

365 :デフォルトの名無しさん:2012/11/06(火) 17:24:09.46 .net
>>364
http://perldoc.perl.org/perlpolicy.html#MAINTENANCE-AND-SUPPORT

366 :デフォルトの名無しさん:2012/11/06(火) 23:57:40.03 .net
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

367 :デフォルトの名無しさん:2012/11/07(水) 00:29:49.79 .net
好きなだけ弄ればいいさ。
誰も止めやしない。

368 :デフォルトの名無しさん:2012/11/07(水) 01:58:26.48 .net
Jcode,pmてまだまだ使われてるの?
さすがに require jcode はないよねー

369 :デフォルトの名無しさん:2012/11/07(水) 21:36:21.96 .net
まだまだ現役です。だって使いやすいんだもん。

370 :デフォルトの名無しさん:2012/11/07(水) 21:58:36.93 .net
Inline CとPerlとの
XSUB変換がperlgutの必須必要事項だと
会社の上司に言われたのですが、最後の

READMEに乗ってる
ようにmakeコマンドが生成されません。基本は
h2xs -A -n ExtModuleを実行し、種々の
実行環境を整えます。
参考URL:
http://d.hatena.ne.jp/perlcodesample/20100809/1278596435

371 :デフォルトの名無しさん:2012/11/07(水) 22:03:15.28 .net
どう説明しようかな

372 :デフォルトの名無しさん:2012/11/07(水) 22:04:16.52 .net
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "ppport.h"


MODULE = ExtModule PACKAGE = ExtModule

int
twice (x)
int x;
CODE:
RETVAL = x * 2;
OUTPUT:
RETVAL

上記を保存したのちに、makefile.plを事項しますが
Writing Makefile for ExtModule
Writing MYMETA.yml
というログを残すだけでmakeファイルらしき物は一向に
生成されません。

373 :デフォルトの名無しさん:2012/11/07(水) 22:06:14.66 .net
ちなみに
コマンドプロンプトから

..
159 Changes
3,555 ExtModule.c
276 ExtModule.xs
lib
29,569 Makefile
864 Makefile.PL
97 MANIFEST
502 MYMETA.yml
187,518 ppport.h
1,211 README
t
のディレクトリが成立しています

374 :デフォルトの名無しさん:2012/11/07(水) 22:08:46.56 .net
>>372
事項ではなくて、実行であります。
タイプミスすんまそん

375 :デフォルトの名無しさん:2012/11/07(水) 23:24:53.47 .net
メタな問題が発生しているとだけ回答しておく

376 :デフォルトの名無しさん:2012/11/07(水) 23:28:00.83 .net
Makefile.PLはこの作業を自動化するmakeファイルを生成してくれます。
↑これが原因か
何とも罪作りな記事だな
そのページのコメント欄に質問として書いちゃえよ

377 :デフォルトの名無しさん:2012/11/07(水) 23:29:47.33 .net

※1 これはWindowsではうまく動かない可能性があります。

378 :デフォルトの名無しさん:2012/11/08(木) 07:22:49.06 .net
初歩的なミスを
した物のどの記事もWin系なのかUni系
なのかわからん記事ばかりで

一応
WindowにGnuWin32を通した物の

make: *** `makefile' に必要なターゲット `C:\Perl\libConfig.pm' を make するルー
ルがありません. 中止.

なんてエラーが
返って来る。結局Windowユーザーは
Xsubpp覚えなくてもいいってことか。

379 :デフォルトの名無しさん:2012/11/09(金) 00:56:41.22 .net
Xsubppによる利便性の低下、な

380 :デフォルトの名無しさん:2012/11/09(金) 12:27:18.50 .net
>>379
これだから2cherはクズ

381 :デフォルトの名無しさん:2012/11/09(金) 15:38:32.61 .net
新聞じゃないんだからw

382 :デフォルトの名無しさん:2012/11/11(日) 22:47:24.71 .net
先生!makeファイルがmakeされません!

383 :デフォルトの名無しさん:2012/11/11(日) 23:40:24.23 .net
sudo apt-get install make

384 :デフォルトの名無しさん:2012/11/12(月) 09:00:12.42 .net
active perlだと、今はコンパイラも付いてくるからそれを使う。
makeはdmakeを使う。

385 :デフォルトの名無しさん:2012/11/14(水) 00:00:27.32 .net
彼女がメイク中でした。



(高見盛に激似です)

386 :デフォルトの名無しさん:2012/11/17(土) 20:22:53.85 .net
DOSこいっ

387 :デフォルトの名無しさん:2012/11/18(日) 01:18:35.04 .net
文字列がtest_1やtest_2やtest_3のように
test_○のような形になっているかを正規表現で調べるにはどうすればいいんですか?
○の中は数字のみです

388 :デフォルトの名無しさん:2012/11/18(日) 02:26:28.96 .net
$str =~ /\Atest_\d\z/

389 :デフォルトの名無しさん:2012/11/19(月) 11:30:45.47 .net
>>387←正規表現スレじゃなくてここできいてるこの基地害なに?

390 :デフォルトの名無しさん:2012/11/25(日) 00:36:01.64 .net
あげ

391 :デフォルトの名無しさん:2012/11/25(日) 00:36:59.73 .net
モダン厨のすくつ

392 :デフォルトの名無しさん:2012/11/25(日) 00:38:10.24 .net
さらに一文字減らせた!

($d,$m,$y)=(localtime)[3..5];printf "%04d"."-%02d"x2,1900+$y,$m+1,$d


print localtime->ymd

に対抗してコードを減らし中。

($d,$m,$y)=(localtime)[3..5];printf("%04d-%02d-%02d",1900+$y,$m+1,$d)
($d,$m,$y)=(localtime)[3..5];printf "%04d-%02d-%02d",1900+$y,$m+1,$d
($d,$m,$y)=(localtime)[3..5];printf "%04d"."-%02d"x2,1900+$y,$m+1,$d

393 :デフォルトの名無しさん:2012/11/25(日) 00:38:50.82 .net
printfの後のスペースなくても動いた!

($d,$m,$y)=(localtime)[3..5];printf"%04d"."-%02d"x2,1900+$y,$m+1,$d

394 :デフォルトの名無しさん:2012/11/25(日) 00:44:06.73 .net
そんなに短さにこだわるなら、無理やりprintfつかなくていいんじゃね?
sprintf馬鹿に感化されたのか知らんが。

($d,$m,$y)=(localtime)[3..5];printf"%04d"."-%02d"x2,1900+$y,$m+1,$d
($d,$m,$y)=(localtime)[3..5];print 1900+$y,"-",$m+1,"-",$d

395 :デフォルトの名無しさん:2012/11/25(日) 00:49:11.82 .net
おっと馬鹿が勝手に条件変えてきたぞ

396 :デフォルトの名無しさん:2012/11/25(日) 00:51:05.56 .net
>>394
print localtime->ymd;

これでいいんじゃね?

useまで入れたとしても短い。

use Time::Piece;print localtime->ymd;
($d,$m,$y)=(localtime)[3..5];print 1900+$y,"-",$m+1,"-",$d

397 :デフォルトの名無しさん:2012/11/25(日) 09:16:00.99 .net
せめてPOSIX。

use POSIX;
print strftime("%Y-%m-%d", localtime);

398 :デフォルトの名無しさん:2012/12/02(日) 11:20:23.79 .net
どうせすぐ古くなるんだから。保守するのに時間軸の視点は必要だぞ。

399 :デフォルトの名無しさん:2012/12/09(日) 14:19:16.53 .net
ポータブルPerlとかモジュールなしPerlとか

400 :デフォルトの名無しさん:2012/12/09(日) 15:03:54.83 .net
struct tfield *を保持する
MyTypeをブレースしたマジック変数を作りたい。
以下の(中略)のXSソースを使ってPerl側から


Hoge*な struct tfield *head[30]をハッシュに
よって閲覧するにはどうしたら良いか。そして、
マジックをRETVALにアクティブにするはどうればよいか具体的に述べよ。

struct tfield {
struct tfield *left[30];
int num;
char str[30];
struct tfield *right[30];
};
struct tfield *talloc(void)
{
return ((struct tfield *)malloc(sizeof(struct tfield )));
}

401 :デフォルトの名無しさん:2012/12/09(日) 15:04:52.27 .net
MODULE = MyTypePACKAGE = MyType

HV*
DataList()
PREINIT:
struct tfield *p,*head[30];
CODE:
hash=newHV();
sv=newSV(0);
ref=newRV_noinc((SV*)newHV());
sv_setref_pv(ref,"main::Tie",head);

sv_setsv(sv,sv_2mortal(newRV_noinc((SV *)hash)));
sv_bless(sv,gv_stashpv("MyType",TRUE));

sv_magic((SV* )hash,SvIV(SvRV(ref)),PERL_MAGIC_hints,NULL,0);

if(mg_find(SvRV(sv),PERL_MAGIC_hints)!=NULL)
printf("PERL_MAGIC_hintsp\n");
p=mg_find(SvRV(sv),PERL_MAGIC_hints)->mg_obj;

RETVAL=hash;

OUTPUT:
RETVAL

402 :デフォルトの名無しさん:2012/12/09(日) 15:10:51.49 .net
ちなみに環境はActive PerlでWindows7を使っています

403 :デフォルトの名無しさん:2012/12/09(日) 15:13:07.96 .net
なお、提出期限は本日中とする。

404 :デフォルトの名無しさん:2012/12/09(日) 20:41:15.31 .net
確かRETVALて
マジック変数だよな。Perl側にアウトライン
した時に恐らくマジックに変異してるジャマイカ?

そして、またXSに入りINT2PTRで閲覧しよう
とする。うんで、マジックが掛かってるとキズかず
隠蔽された構造体にアプローチしようとしてとする。

上手く考えが定まらず、マジックやら
文法そのものやらに、あっちやこっち浮気し
まくってたらいつの間にやら難題に押しつぶされそうになってた。

もう資料の少ないマジックに手をださないから
RETVALに代入した後の処置を教えください。

405 :デフォルトの名無しさん:2012/12/11(火) 00:35:47.74 .net
つーか、スレまちがい

406 :デフォルトの名無しさん:2013/10/12(土) 16:10:02.36 .net
今から学ぶならやっぱPerlよりPythonなのかなあ?

407 :デフォルトの名無しさん:2013/10/12(土) 21:02:22.21 .net
>>406
りょうほういっとけ

408 :デフォルトの名無しさん:2014/01/05(日) 23:44:28.13 .net
>>406
さすがにrubyやphpならともかく、pythonはナイわ

409 :デフォルトの名無しさん:2014/01/06(月) 16:11:01.27 .net
解析するならPythonじゃね?
クラックコンテスト上位者はみんなPython使いのようだし。

410 :デフォルトの名無しさん:2014/01/06(月) 16:12:58.25 .net
間違えた、ハッキングコンテスト。

411 :デフォルトの名無しさん:2014/01/17(金) 01:37:55.47 .net
Django使うの以外にPython使う理由が見つからない

412 :デフォルトの名無しさん:2014/01/17(金) 08:52:36.67 .net
倍幅文字を含んだ文字列を端末にテーブル状に整形して表示したいのですが,

==================================
# ソースの文字コード: utf8
printf "%04s\n", 'ab';
{
  use utf8;
  printf "%04s\n", 'あ';
}
{
  no utf8;
  printf "%04s\n", 'あ';
}
===================================
00ab
000あ
0あ

use utf8 だと文字数でカウントしてるようなので
倍幅文字を含んだ行と含まない行とでズレてしまいます.

no utf8 だとバイトでカウントしているようなので
やはりズレてしまいます.

端末上に上手く整形して表示する方法はないものでしょうか?

非モダン質問箱の方は質問できる雰囲気ではなかったので
こちらで質問させて頂きました.

413 :デフォルトの名無しさん:2014/01/17(金) 14:45:12.15 .net
my $文字幅合計=0;
my @文字群 = split //, $文字列;
for my $i(0 .. $#文字群){
$文字幅合計+=((unpack('C*', $文字群[$i]) - 30)*(unpack('C*', $文字群[$i]) - 127) < 0) ? 1 : 2;
}

文字のバイト列が31(\x1f)から126(\x7e)なら1でそれ以外は2を返す

414 :デフォルトの名無しさん:2014/01/17(金) 14:52:43.34 .net
>>411
生粋のWeb脳って気持ち悪い

415 :デフォルトの名無しさん:2014/01/17(金) 17:55:39.71 .net
ゴミ

416 :デフォルトの名無しさん:2014/01/17(金) 21:47:20.63 .net
そういうのもうあるみたい
ttps://github.com/kaz-utashiro/MBPrintf

417 :デフォルトの名無しさん:2014/01/18(土) 19:55:51.97 .net
与えられた文字列から適当な数値を求めたいんだけど
標準関数で簡単にやるにはなにかいい方法ある?

418 :デフォルトの名無しさん:2014/01/18(土) 21:05:51.45 .net
せめて10レスくらい読めよ
$ perl -le 'print for unpack q{C*}, q{もじ}'
227
130
130
227
129
152

419 :デフォルトの名無しさん:2014/01/18(土) 21:11:44.49 .net
>>418
お前やっぱ頭良くないんだな

420 :デフォルトの名無しさん:2014/01/18(土) 21:13:59.31 .net
joinすりゃいいだけじゃん

421 :デフォルトの名無しさん:2014/01/18(土) 21:17:28.94 .net
>>418
それだと文字列が長い時に困るんだよね

422 :デフォルトの名無しさん:2014/01/18(土) 21:17:41.63 .net
そこまで書かなきゃいけなかった?

423 :デフォルトの名無しさん:2014/01/18(土) 21:21:14.21 .net
>>422
いいから早く消えろってことだよ
やんわり言ったら分からなかった?

424 :デフォルトの名無しさん:2014/01/18(土) 21:26:46.26 .net
>>422
ウザ杉

425 :デフォルトの名無しさん:2014/01/18(土) 21:27:09.30 .net
>>421
BigInt付けるか、他の方法を考えるかしたら?
文字列じゃなくて、変数ってんならアドレスとかの方法もあるけど、

426 :デフォルトの名無しさん:2014/01/18(土) 21:28:17.27 .net
あっちで釣りの続きしてればいいのに

427 :デフォルトの名無しさん:2014/01/18(土) 21:29:11.08 .net
>>425
何で上から目線なの?
自己顕示欲満たしてやってんだから嫌なら答えるなよ。

428 :デフォルトの名無しさん:2014/01/18(土) 21:31:14.66 .net
>>425
基地害のお客様はこちらへお引き取りください。

http://toro.2ch.net/test/read.cgi/tech/1385039352/

429 :デフォルトの名無しさん:2014/01/18(土) 21:32:59.96 .net
そもそもこんなところで質問してあーだこーだ言わないと使えないんだったら、
Rubyをサクッと学習してやったほうが早い。

430 :デフォルトの名無しさん:2014/01/18(土) 21:33:11.61 .net
嬉しそうだなあ、、、

431 :デフォルトの名無しさん:2014/01/18(土) 21:38:18.15 .net
>>426
バーカ

432 :デフォルトの名無しさん:2014/01/18(土) 21:39:58.39 .net
嬉しそうだな、、、

433 :デフォルトの名無しさん:2014/01/18(土) 23:17:08.53 .net
配列の配列を戻り値にしたいんだけど
どうしたらいい?

434 :デフォルトの名無しさん:2014/01/18(土) 23:21:00.50 .net
そういう場合は配列のリファレンスを使う

435 :デフォルトの名無しさん:2014/01/18(土) 23:47:42.99 .net
自演キモw

436 :デフォルトの名無しさん:2014/01/19(日) 00:03:33.90 .net
Perl厨の自演って分かりやすいな。
文章構成能力がないから、短文で一問一答w

437 :デフォルトの名無しさん:2014/01/19(日) 08:36:16.42 .net
お前の自演の方もなかなか解りやすいぞ、PHP厨

438 :デフォルトの名無しさん:2014/01/19(日) 14:34:32.39 .net
糞言語の糞スレ

439 :412:2014/01/19(日) 20:39:49.50 .net
>>413
制御文字を除外するために文字が特定範囲にあるか調べる方法がテクいです

>>416
同じことを思ってる人はいるものですね.
使ってみた限りでは問題なく調整してくれるみたいです.
\p{East_Asian_Width} で定義されてるかどうか等で判定しているので
半角カナもちゃんと幅1で計算されます.


MBPrintf.pm の方を使って printf を置き換えることにしました.
HTMLとかにして出力するしかないかなと思っていたところ
さくっと printf を置換えするだけで綺麗に出力できそうなので
大変助かりました. 質問してみて良かったです.
レスありがとうございました.

440 :デフォルトの名無しさん:2014/01/19(日) 20:47:27.99 .net
>>439
やっぱ馬鹿なんだな
お前みたいな奴が日本のIT産業をダメにしてんだよ

441 :デフォルトの名無しさん:2014/01/19(日) 23:18:27.65 .net
同じこと考えるも何も、日本でPerl広めたのはこの人だよ

442 :デフォルトの名無しさん:2014/01/20(月) 01:59:57.20 .net
>>439=無知の極み

443 :デフォルトの名無しさん:2014/01/20(月) 02:09:18.33 .net
受け答えのレベルから推察するとシフトJISを使うことを思いついていない気がする

444 :デフォルトの名無しさん:2014/01/20(月) 04:37:59.99 .net
Perl以前の知能の問題なんだろw

445 :デフォルトの名無しさん:2014/01/20(月) 06:18:02.59 .net
コマンドラインで使う前提での質問なのにシフトJISってw
質問すら読解する能力無いだろ

ほんとにWebProgに帰れよドアホ

446 :デフォルトの名無しさん:2014/01/20(月) 10:35:12.20 .net
ゴミは黙ってろ

447 :デフォルトの名無しさん:2014/01/20(月) 17:02:27.54 .net
>>445
草生やしてんじゃねーよ。
半笑いのつもりか?
半笑いでバカをアピールする>>445哀れ。

448 :デフォルトの名無しさん:2014/01/20(月) 19:07:10.73 .net
連レスかまして無知晒すから、解りやすいぞPHP厨

449 :デフォルトの名無しさん:2014/01/20(月) 22:18:42.87 .net
キチスレ

450 :デフォルトの名無しさん:2014/01/24(金) 19:52:20.84 .net
Config::INI とかTiny とかのライブラリで
コメント行は ; になっているけど
これを # にするようにできるライブラリはある?

451 :デフォルトの名無しさん:2014/01/24(金) 19:55:55.11 .net
>>450
ある。
回答きたんだからさっさと消えてね。

452 :デフォルトの名無しさん:2014/01/24(金) 20:05:16.41 .net
>>450
ないよ

453 :デフォルトの名無しさん:2014/01/24(金) 20:33:39.02 .net
>>450
ここが参考になる
ttp://to-a.ru/LEeAgi

454 :デフォルトの名無しさん:2014/01/24(金) 20:46:52.82 .net
>>450
ナイアルヨ

455 :デフォルトの名無しさん:2014/01/25(土) 15:26:50.61 .net
その程度も自分で調べられないとか頭悪いんだろうな
調べたら3分かかからなかったけどな

456 :デフォルトの名無しさん:2014/01/25(土) 23:28:51.18 .net
このスレって何人いるんだろう?

457 :デフォルトの名無しさん:2014/01/26(日) 02:01:56.35 .net
日本人だと思う

458 :デフォルトの名無しさん:2014/01/26(日) 02:47:37.23 .net
おまえあれだろさっきまでなぞなぞスレにいただろ

459 :デフォルトの名無しさん:2014/01/26(日) 04:20:51.88 .net
うまいw

460 :デフォルトの名無しさん:2014/01/26(日) 17:46:42.97 .net
>>454 は中国人かも知れんぞ

461 :デフォルトの名無しさん:2014/01/26(日) 19:06:15.38 .net
日本人ですだよ

462 :デフォルトの名無しさん:2014/01/26(日) 19:27:54.97 .net
ニーハオ!
パンニハムハサム ザパニーズニダアルヨ!
ショーグンサマ バンザイ!
テポドン バンザイ!

463 :デフォルトの名無しさん:2014/02/05(水) 19:25:52.75 .net
文字列が二つあって、その比較をしたい
共通1 差分1 共通2 差分2 共通3
みたいな感じで、2箇所まで差分を抽出したい

現実的な速度で動くうまい方法ないかな

464 :デフォルトの名無しさん:2014/02/05(水) 19:28:44.02 .net
>>463
他人に頼る前提で始めるような馬鹿には無理。

465 :デフォルトの名無しさん:2014/02/05(水) 19:37:38.58 .net
>>463
はぁ?
自分でやったけど何秒かかって、これが何秒以内に終わるようにとかも書けねーの?
本当にお前ゴミだな
リアルでもどうせその調子なんだろ
リアルでもゴミだと思われてるけど気付いてる?

466 :デフォルトの名無しさん:2014/02/05(水) 19:44:06.43 .net
自分で試すことすらしない猿未満の低能には言うだけ無駄
猿ですら目的達成のために試行錯誤するのに

467 :デフォルトの名無しさん:2014/02/05(水) 19:54:20.78 .net
$str1 = 'aaabbbcccdddeee';
$str2 = 'aaafffcccgggeee';

$test = $str1 . "\t" . $str2;
$test =~ /(.+)(.+?)(.+)(.+?)(.+)\t\1(.+?)\3(.+?)\5/;
$c1 = $1;
$d11 = $2;
$c2 = $3;
$d12 = $4;
$c3 = $5;
$d21 = $6;
$d22 = $7;

print "$c1 $d11 $c2 $d12 $c3\n";
print "$c1 $d21 $c2 $d22 $c3\n";

結果
aaa bbb ccc ddd eee
aaa fff ccc ggg eee

こんなのはすぐに思い付くと思う
ところがこれは、文字列の長さが100文字とかでもう遅すぎて使えなくなる

468 :デフォルトの名無しさん:2014/02/05(水) 19:57:49.18 .net
こういうのを見るたびに
足りないのは知識やスキルではなく羞恥心なんだなと思う

469 :デフォルトの名無しさん:2014/02/05(水) 21:11:10.78 .net
>>467
ここはごみ捨て場ではありません。

470 :デフォルトの名無しさん:2014/02/05(水) 21:26:16.47 .net
2つの文字列を文字ごとに分解して2つの配列を作ってから↓
ttp://perldoc.jp/docs/modules/Algorithm-Diff-1.15/Diff.pod

471 :デフォルトの名無しさん:2014/02/05(水) 22:05:27.01 .net
実に頭の悪そうな回答がきたなw

472 :デフォルトの名無しさん:2014/02/05(水) 22:39:45.84 .net
diffは多少一致してない部分があってもいい、みたいな曖昧な判定をするから、
余計にややこしいんだよな

473 :デフォルトの名無しさん:2014/02/05(水) 23:42:17.25 .net
うちのLarryに何か用かい?

474 :デフォルトの名無しさん:2014/02/06(木) 01:46:47.51 .net
おれならxor使うけどね

475 :デフォルトの名無しさん:2015/02/07(土) 15:14:06.33 ID:yYV1uKlQ.net
ネットで検索する時は単語をスペースで区切ってそのANDで結果を得るけど、
同じことを正規表現でやりたい時はどう書けばいい?

476 :デフォルトの名無しさん:2015/02/26(木) 19:17:26.46 ID:0RIBJGtF.net
「$s が hello と world の両方にマッチする」なら、単に

$s =~ /hello/ && $s =~ /world/

と書くだけじゃないの?質問がよく分からないのだけれども

477 :デフォルトの名無しさん:2015/02/26(木) 20:48:44.94 ID:G3LqtZtx.net
>>475
あえて無理やり正規表現のみでやるなら否定先読みを使う

if( /(hoge|piyo).*(?!\1)(hoge|piyo)/ ){ print "成功\n"; }

478 :デフォルトの名無しさん:2015/02/26(木) 21:43:04.63 ID:dwtaxn6g.net
否定の先読みなんかせんでも
print ‘foobar’ if /(?:foo.*?bar|bar.*?foo)/ ;
で良いんじゃねーのか

479 :デフォルトの名無しさん:2015/02/26(木) 21:54:30.24 ID:RGF9/3q7.net
入力がスペース区切りの文字列なんだよ

480 :デフォルトの名無しさん:2015/02/27(金) 00:27:41.82 ID:xTYPuOZ2.net
仮に検索エンジンみたいなのを書くにしても
何を対象にするのかとか、検索単位とかを決めてもらわんと書きづらいぞ
「同じこと」の通り「対象:Webサイト、単位:ページ」ならGoogleに投げりゃ済むし

481 :デフォルトの名無しさん:2015/02/27(金) 00:34:35.35 ID:dW0+IHnO.net
検索対象も文字列に決まってるだろ
正規表現でのマッチングだっつってるんだから

逃げてないで考えてみれ

482 :デフォルトの名無しさん:2015/02/27(金) 01:46:02.77 ID:xTYPuOZ2.net
>>481
文字列?
テキストでもファイルでもなく?
それって何に使うんだろか…結局、目的は何よ?って話だよ
もしかしたらもっと良い方法があるんじゃ?と勘ぐってしまうのよどうしても

483 :デフォルトの名無しさん:2015/02/27(金) 06:35:52.51 ID:dW0+IHnO.net
またよく判らん屁理屈を
検索の単位が文字列に対してで、それがどこから来たかは問題にならないだろ
まあ、大抵はファイルからだろうけど

で、ファイルならこんなツールがあるよ、みたいな感じで本題から逃げたいのが見え見え

484 :デフォルトの名無しさん:2015/02/27(金) 09:44:40.27 ID:xTYPuOZ2.net
>>483
いやまあ、文字列に対してなら

my $hit = 1;
for my $ptn (split(" ",$search)) {
$s =~ /$ptn/ or $hit = 0;
}

こんなんで出来ると思うけど、こんなんで本当に良いのか?
後出し条件とか大量に出てきそうな感じがするんだが

485 :デフォルトの名無しさん:2015/02/27(金) 20:22:44.34 ID:JIR4zlR2.net
お前は、「ワンライナーでどうやりますか」って質問に
スクリプト作成して答えるのか?

「正規表現でどうやりますか?」って質問には、
普通に正規表現で答えりゃいいだろうが。
実際、質問への答えは、
>>476->>478で終了してる。

後出しを心配するなら実際に後出しされてから
盛大に罵倒しろよ

486 :デフォルトの名無しさん:2015/02/28(土) 15:03:31.15 ID:6vZKnEo0.net
あえて制限をつけてパズルとして解くならともかく
現実的な解としては >>476 で十分だよな

487 :デフォルトの名無しさん:2015/02/28(土) 16:50:40.78 ID:05aMjvqG.net
元々の要求はただのスペース区切りだから、パラメータ数は不定で、
パラメータ抽出して、その全部に対してマッチングを繰り返すという当たり前の処理になる

でも、そんなことは最初から判っているのでわざわざ聞く筈がない

スペース区切りの文字列をそのまま使ってマッチングがしたいなら、
残念ながらperlの正規表現でそんなことは出来ない、が答えとなる

488 :デフォルトの名無しさん:2015/02/28(土) 17:32:00.47 ID:JKlRGoUv.net
本物のコミュ障だなぁ
粘着されてる>>475が、可哀想だわ。

489 :デフォルトの名無しさん:2015/02/28(土) 17:35:55.35 ID:e1yM9CPU.net
質問者のレベルまで勝手に想定するし、、、

>>475から読み取れるのは、拡大解釈しても
「ワンセンテンスの正規表現で書くにはどうしたらいい?」
程度だろーに

490 :デフォルトの名無しさん:2015/02/28(土) 19:58:12.22 ID:HemDgo4Q.net
◯正規表現で、AND検索の実装って、どうやんの?
×正規表現で、「スペースを使って」AND検索の実装って、どうやんの?

「わざわざ聞く筈がない」まで、分かってんなら、
自分の解釈の仕方が間違ってないか、
自問しろよ

491 :デフォルトの名無しさん:2016/01/10(日) 13:39:26.30 ID:/ndDSiBm.net
971 名前:名無しさん@七周年[] 投稿日:2006/11/11(土) 00:56:10 ID:M8+ahUZV0
自称スーパープログラマー某

強烈加齢臭
メール見ない メール無視
ドキュメント見ない ドキュメント無視
説明聞かない 説明無視
話聞かない 話無視
ガム→むっちゃー むっちゃー むっちゃー むっちゃー
煎餅→バリバリバリバリバリバリ
菓子パン→モグモグモグモグモグモグモグモグモグモグ
カップアイス→むっちゃー むっちゃー ペロペロペロペロ

フロアすべてに響き渡る 超ばかでかいくしゃみ 当然手でおさえない

異音と異振動
ドスーン!ドスーン! ドカーン!ドカーン! バコーン!バコーン! ズドン!ズドン!
机が近いとマウスポインターが飛ぶ 誤操作誘発
書類だしたりしまうだけでドカンドカン

30秒ごとに口と鼻から異音
ふんっっ!    ふんっっ!   

備品破壊 貸与P C 破壊 他人のもの破壊

奴の作ったスクリプトとプログラムは使えない バグ製造機

電話や共有携帯電話 キーボードが油ベタベタ
奴に電話とPCとコンソールは触らせてはいけない

492 :デフォルトの名無しさん:2016/01/10(日) 17:45:28.72 ID:lr/f1ZoA.net
Perl 5 version 16の正規表現で、地の文の一部としてマッチさせたいときに
バックスラッシュでエスケープせねばならない文字の一覧を教えてください
文字集合[ ]の内外で違うとか、文脈依存があればそれも知りたいです

493 :デフォルトの名無しさん:2016/01/10(日) 22:39:51.49 ID:iK/aBQIt.net
何をしたいのか知らないけど
http://perldoc.jp/index/core
で疑問のほとんどは解決すると思う。

まあ、エスケープすべき文字を知りたいということならそれは「英数字以外」だ。
\Q と quotemeta 関数について調べてみてほしい。

494 :デフォルトの名無しさん:2016/01/11(月) 19:10:22.91 ID:JutXF6Cv.net
>>493
ありがとうございます。
質問の動機は単に手で正規表現を書くときエスケープすべきかどうか
悩ましかったから(実際には「+」や「:」や「#」とか「[ ]」の外の「-」はエスケープ無しでも通っていそう)
だったからですが、エスケープして無害ということであればそうします

それはそうとしてquotemeta便利杉、

495 :デフォルトの名無しさん:2016/01/23(土) 00:11:45.16 ID:ACxJywqs.net
すまん

Perl 6使った奴おるか

496 :デフォルトの名無しさん:2016/01/23(土) 06:03:31.81 ID:mGQek17v.net
>>495
おるけど?

まだ後10年は掛る。
触る必要無し

処理速度とか早くなってんのかも知れんけど、
起動が遅くて、使い物にならん。
挙動もバギー、docも揃ってない。
止事無き事情から、アルファ版を正式版として
リリースしただけじゃね?

497 :デフォルトの名無しさん:2016/02/07(日) 22:53:45.48 ID:zQAcaA+r.net
外部コマンドの話が出てて思い出したけど、
外部コマンドを実行するときに任意の文字列を外部コマンドの引数として渡したい場合、
Linux環境でエスケープすべき文字は?
シングルクォートとバックスラッシュだけエスケープして、それをシングルクォートで括ればOK?

498 :デフォルトの名無しさん:2016/02/09(火) 22:03:18.36 ID:390QsJXI.net
なんかPerl 5.16.1のウィンドーズ版のUTF-8対応は中途半端な希ガス、
use utf8;としてUTF-8でソースコードを書いても
open()のファイル名とかsystem()に与えるコマンド文字列とかが'shiftjis'(正確には'cp932')のままだし、
コマンド引数も'shiftjis'(正確には'cp932')のままだし、
なんでああなんですかね…

499 :デフォルトの名無しさん:2016/02/09(火) 23:41:10.97 ID:J9+y92l0.net
dankogaiがのらりくらりうまく回避しちゃうからじゃない?
俺はもうperlでsjis処理するのはあきらめた。

500 :デフォルトの名無しさん:2016/02/12(金) 00:23:06.63 ID:kq1OODWj.net
いろいろ面倒なんで、俺は use utf8; を使わないことにしたよ。

501 :デフォルトの名無しさん:2016/02/13(土) 14:58:53.06 ID:vq3C3FT5.net
>>497
シェルを経由するのならシェルのマニュアルを読みなさいとしか言えない。
bash の場合なら「定義」の項のメタ文字と「クォート」の項。
シングルクォートなら大体大丈夫なはずだけど。
そういう心配をしなきゃならないならシェルを呼ばない方が無難。
シェル経由でなければシステムコールするだけだから。

502 :デフォルトの名無しさん:2016/02/14(日) 22:17:05.33 ID:ctVTXhCg.net
>>497
もしかして、普段は Windows 使ってるからコマンドラインを作って渡す方法しか知らないとかそういうこと?

503 :デフォルトの名無しさん:2016/02/14(日) 22:28:48.47 ID:d+6VipxK.net
思い付きで気軽にコマンドライン作って出力をキャプチャできるのがLLの良いところなのにね。

504 :デフォルトの名無しさん:2016/02/15(月) 12:21:34.14 ID:9WjYXC66.net
>>503
助けてあげる気が無いなら引っ込んでてくれないか?

505 :デフォルトの名無しさん:2016/02/15(月) 15:10:01.24 ID:8Z92Uy24.net
>>497
" " 内では、「$(変数展開) \ `(コマンド置換) !(ヒストリ)」が展開される。
' ' 内では、展開されない。
\ は直後の1文字の機能を無効化する

メタキャラクタ・特殊文字なら、他にも多数。
? * > >> < << | ~ & など

ただし、「! ~」は、bashのみ

506 :デフォルトの名無しさん:2016/02/16(火) 03:32:48.12 ID:y+ZjOqCo.net
モダンPerl入門 増補改訂版(仮)
http://codezine.jp/book/modernperl2

507 :デフォルトの名無しさん:2016/02/16(火) 21:30:09.30 ID:MTIgWlq3.net
刊行日: 2014年1月予定

508 :デフォルトの名無しさん:2016/02/17(水) 00:23:01.67 ID:wnysiCN2.net
なんと!もう発売されていましたか!

509 :デフォルトの名無しさん:2016/02/23(火) 20:40:57.84 ID:RqQoWDN5.net
これからPerlを学ぶメリットってある?

510 :デフォルトの名無しさん:2016/02/23(火) 21:43:14.01 ID:Oh6h4g2T.net
いっぱーぃぁる
いっぱーぁある
いっぱーぁる
いっぱーる

511 :デフォルトの名無しさん:2016/02/24(水) 02:40:25.37 ID:lkPqYQmC.net
UNIXの歴史をエッセンスにしてUNIX以外でも使えるようにした言語だから学ぶ価値はある。
おれの場合はWindows上で毎日使ってる。慣れの問題もあるが他の言語だとこうはいかない。

512 :デフォルトの名無しさん:2016/02/24(水) 02:47:53.12 ID:RDH9smV+.net
他の言語もWindowsで使えるだろ

513 :デフォルトの名無しさん:2016/02/24(水) 05:22:56.15 ID:0U45vlYv.net
バージョンをきにしなくていいなら、Perlは、Windows 2000のパソコンでもつかえる。
現在のRubyは、インストーラがうごかない。インストーラがうごいても、実行時にDLLがどうのこうのいってエラー
Pythonも同様だろう、インストールがめんどくさいのは、損ですよ

Ruby, PythonでもCygwinならいけるかも
Cygwinがきらいなひとは、こまります

514 :デフォルトの名無しさん:2016/02/24(水) 05:26:37.80 ID:0U45vlYv.net
C, Perlならイヤなおもいをしなくていい

515 :デフォルトの名無しさん:2016/02/26(金) 20:40:22.77 ID:S1uVBK59.net
今時Cigwinなんて使ってるやついるの?
使う理由が見当たらないんだけど…。

516 :デフォルトの名無しさん:2016/02/26(金) 21:57:44.67 ID:dBO2xm/m.net
>>515
Windowsでコマンドラインを使うときに
一番便利な道具だよ。

517 :デフォルトの名無しさん:2016/02/26(金) 23:40:31.20 ID:5TeMxoC2.net
>>515
cygwinはインストールが楽でいいんだよ

518 :デフォルトの名無しさん:2016/02/27(土) 21:54:12.18 ID:EDqxACn8.net
>>516
その使い方こそがもう洋ナシなんじゃないの?

519 :デフォルトの名無しさん:2016/02/28(日) 07:42:58.32 ID:0vKPLMUN.net
>>518
おまえさん、何でム板にいんの?
WebProg板の住人の発言だったら、まだ分るけどさ。

520 :デフォルトの名無しさん:2016/02/28(日) 11:25:02.81 ID:jJK+500Y.net
>>516
cygwin+Perlでできて、バッチファイル(cmd.exe)+Perlでできないこととは…?

521 :デフォルトの名無しさん:2016/02/28(日) 11:39:02.77 ID:w1saw6Ta.net
>>520
その場合、Perlの部分は同じ。違うのは cmd.exe と bash (またはzsh) なので
コマンドプロンプトで出来ないこととは、シェルとシェルスクリプトの実行ということになる。

つまりbash(zsh)の快適な操作性が、cmd.exeにはない。
LinuxやMacで動くシェルスクリプトがcmd.exeでは動かない。

522 :デフォルトの名無しさん:2016/02/28(日) 22:48:20.46 ID:Ozi57itY.net
パスに日本語使わない運用ならね
でもそれって制限きついよね?仕事で使うのはまず無理だな

523 :デフォルトの名無しさん:2016/02/28(日) 23:03:09.55 ID:w1saw6Ta.net
そういやcygwinはファイル名に日本語ついていても
ちゃんと動くよな。凄いことだよな。

>>522
お前何の話してんのー?

524 :デフォルトの名無しさん:2016/02/29(月) 21:02:02.19 ID:VLQsoBHX.net
>>519
個人環境なら好きにやればいいんじゃない?

525 :デフォルトの名無しさん:2016/07/18(月) 23:24:13.82 ID:RVsoZVBC.net
ロブ・パイク語録。
>「UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている」 - 1991年ごろ
(中略)
>「そういった日々は過ぎ去り、賛辞は Perl にもたらされた」 - [7] 単機能ツールについて
賛辞は Perl にもたらされた!

526 :デフォルトの名無しさん:2016/08/18(木) 07:54:36.84 ID:VLXPL8iW.net
>>525
25年前の話だからな。
25年も経てば、SMAPも結成して6人から5人になり解散する。

527 :デフォルトの名無しさん:2017/04/14(金) 21:43:32.26 ID:zXRfLbO9.net
win7でactiveperl
`コマンド` からの応答をファイルに書き出したい
テキストならうまくいくけど、バイナリで失敗する
書き出し用のファイルはbinmodeにしてるので、受取側がおかしい
binmode STDIN
にはしてるけど変わらないみたい

C:> コマンド > file.bin
でリダイレクトすると成功するので、コマンド自体はちゃんと動いてる

何が悪いんだろう

528 :デフォルトの名無しさん:2017/04/14(金) 22:10:00.52 ID:w+Tu3XlB.net
どういう具合に失敗するんだ?
バイナリをテキストとして解釈するのか?

529 :デフォルトの名無しさん:2017/04/14(金) 22:32:15.06 ID:zXRfLbO9.net
バイナリエディタとか無いから詳しくは判らないけど、
pptファイルを開こうとしても怒られる

530 :デフォルトの名無しさん:2017/04/15(土) 15:32:32.25 ID:40tq7pz4.net
再現する最小コード書けや
バイナリエディタもフリーのあるやろ

531 :デフォルトの名無しさん:2017/04/15(土) 15:37:15.38 ID:4y1tBhnC.net
フリーソフトを勝手にインストールできない

532 :デフォルトの名無しさん:2017/04/15(土) 15:50:50.88 ID:40tq7pz4.net
exe単体のもあるしそれさえアウトでも家の環境で再現させられるだろ
つか業務関連なら会社で聞けば

533 :デフォルトの名無しさん:2017/04/15(土) 16:02:38.46 ID:4y1tBhnC.net
知らないなら黙ってればいいのに

何かバイナリを標準出力に吐くコマンドなら何でも試せる筈
なかなかそういうサンプルが無いけど

534 :デフォルトの名無しさん:2017/04/15(土) 19:42:34.21 ID:klGQGN6C.net
いいからお前の環境で再現するコードを書けよ

535 :デフォルトの名無しさん:2017/04/15(土) 20:14:19.75 ID:4y1tBhnC.net
これだけの情報で判らないならコード見ても判らないよ

binmode STDIN;
$result = `SomeCom.exe`;
open $out, '>', 'outfile.bin';
binmode $out;
print $result;

これだとNGで、
C:> SomeCom.exe > outfile.bin
これならOKになる

536 :デフォルトの名無しさん:2017/04/15(土) 20:28:40.15 ID:X2azyrMV.net
binmode指定しないとダメなの?

537 :デフォルトの名無しさん:2017/04/15(土) 21:14:47.45 ID:klGQGN6C.net
>>535
どう見ても標準出力に吐いてるんだけどそのコードで再現することは当然確認したんだよね?

538 :デフォルトの名無しさん:2017/04/15(土) 23:58:48.07 ID:j4gmMNAx.net
STDINは関係ない
パイプをバイナリモードにしろ

539 :デフォルトの名無しさん:2017/04/16(日) 00:22:01.12 ID:h3ZKvGOL.net
open $in, '-|', 'SomeCom.exe';
binmode $in;
$result = <$in>;

こんな感じか
` ` を使う限り解決できない?

540 :デフォルトの名無しさん:2017/04/16(日) 00:23:16.22 ID:h3ZKvGOL.net
あ、違う
@result に受けて結合か
そこでもまた改行コードが何かしそうな不安が

541 :デフォルトの名無しさん:2017/04/17(月) 21:59:30.64 ID:MMDneckh.net
>>538が正解でした
ちなみに、結果を変数に受ける必要はなくて、
入力から出力にそのまま流す方がスマート

542 :デフォルトの名無しさん:2017/04/23(日) 22:19:57.91 ID:RpWO8O1f.net
答えを知ってる人はシンプルにいきなり正解のみを示すんだよな

で、必要な知識のない人が見当違いのことをいろいろ書いて掻き回す

543 :デフォルトの名無しさん:2018/02/16(金) 06:37:50.13 ID:W1XJdyx1.net
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆

544 :デフォルトの名無しさん:2018/02/16(金) 20:54:02.63 ID:YSXjevvC.net
あれ?そういやこのスレは消化されないまま残ってたの?ちょっと前に63箱目が1000になったんだけど。
じゃあ新スレ立てずにそのままここ使う?

545 :デフォルトの名無しさん:2018/02/17(土) 13:11:36.41 ID:m8W4h2UJ.net
>>544 ここで良いんじゃない?

Windows7 で ActivePerl 5.16.3 を使っているんだけど、改行が CR LF (0D 0A) のファイルを
<> で読み込むと、行末が LF (0A) だけになる。これはなぜに?

546 :デフォルトの名無しさん:2018/02/17(土) 13:45:31.82 ID:wW66TFqR.net
>>545
ストリームがテキストモードだからでしょ。
それがイヤならbinmodeすれば?

547 :デフォルトの名無しさん:2018/02/17(土) 14:32:59.21 ID:m8W4h2UJ.net
>>546 サンクス。できたできた。

548 :デフォルトの名無しさん:2018/02/19(月) 12:04:01.90 ID:9O6KBvIf.net
63箱目のテンプレこぴっとく

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

このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
荒らしはスルー推奨。

"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、
Perlの奥深さについて皆で語り合い、追求してまいりましょう。

www.perl.org/get.html
Download Latest Stable Source (5.18.2)

▼前スレ

549 :デフォルトの名無しさん:2018/02/20(火) 08:19:10.59 ID:Zrzi4SG9.net
>>548

CGIの話題もム板でいい筈じゃ?
WEBプログラミング板に該当スレが無くなったってのが、理由だったような。

後は、下記を修正。

www.perl.org/get.html
Download Latest Stable Source (5.26.1)

▼前スレ
Perlについての質問箱 63箱目
http://mevius.5ch.net/test/read.cgi/tech/1392820583/

550 :デフォルトの名無しさん:2018/02/20(火) 09:05:34.87 ID:67uqfrCT.net
これが次スレになったのね。
おいらもそうだが、
最近、スレが立てられなくなった人が多いのかな?

551 :デフォルトの名無しさん:2018/02/20(火) 10:46:08.66 ID:vE/Q7KOY.net
>>549
もしやあなたはCGIとPerlの区別がつかない人?

552 :デフォルトの名無しさん:2018/03/03(土) 15:00:12.27 ID:y3R+TCM+.net
websocketをやってみたいんですが、Net::WebSocketというのとProtocol::WebSocketというのが検索で掛かります。
どっちを使うのでしょうか

553 :デフォルトの名無しさん:2018/03/03(土) 15:02:25.59 ID:y3R+TCM+.net
サーバにしたいです

554 :デフォルトの名無しさん:2018/03/03(土) 18:32:08.00 ID:9T1Mlbb8.net
Mojolicious

555 :デフォルトの名無しさん:2018/03/05(月) 16:53:07.80 ID:vyqV3ojD.net
>>554
フレームワークは勉強の為に避けようと思います。

556 :デフォルトの名無しさん:2018/03/05(月) 18:51:20.07 ID:p13q4iUt.net
正直websocketやるのにPeal選ぶ意味は無い気がする
やりたいってんなら止めないけど
node.jsとかgoでいいような
適材適所というか

557 :デフォルトの名無しさん:2018/03/06(火) 11:48:05.65 ID:tpILJMN5.net
汎用的なものが作れないかと思っています。
スピードを求めるならjavaで作ろうと思います。

558 :デフォルトの名無しさん:2018/03/07(水) 00:30:44.98 ID:RIrp8kCR.net
とりあえずやってみれば。
ダメなら乗り換えれば。

559 :デフォルトの名無しさん:2018/03/18(日) 10:31:45.09 ID:cNEg10A5.net
perlでサーバーAで計算した値をサーバーBに送り表示することってできますか?
できるならどうやるんですか?
できればモジュールなくても使える方法がいいです。

560 :デフォルトの名無しさん:2018/03/18(日) 11:47:09.15 ID:JGqM6rnc.net
サーバーAで計算した値をサーバーBに送るとはどういうことか、何に表示したいのか
perlの前にここを明らかにした方がいい

561 :デフォルトの名無しさん:2018/03/18(日) 12:33:37.42 ID:cNEg10A5.net
>>560
もっとわかりやすいように質問変更する
サーバーAでログインIDとパスワード入力して
サーバーBに置いてあるユーザー情報と比較してログイン成功なら
サーバーAにログイン成功だと言う情報を送りたい
こういうこと

562 :デフォルトの名無しさん:2018/03/18(日) 13:33:56.77 ID:JGqM6rnc.net
use HTTP::Tiny; # v5.14から標準モジュール

my $response = HTTP::Tiny->new->post_form('サーバーBのURL', {id => $id, password => $password});

if ($response->{success}) {
  print '成功';
}
else {
  print '失敗';
}

----------
AからBに問い合わせてその結果をAで使うならこんな感じで行けるんじゃない

563 :デフォルトの名無しさん:2018/03/18(日) 17:24:24.80 ID:kbqiSgza.net
ぜんぜんわかりやすくない。
「ログイン」といってもいろいろ。

Webサイトについてだったら、WWW::Mechanizeとかそういう?

https://www.google.co.jp/search?q=perl+mechanize

564 :デフォルトの名無しさん:2018/03/18(日) 19:37:28.90 ID:z/qjkhKV.net
perl関係ないな
仕様のはなしからだろ

565 :デフォルトの名無しさん:2018/03/18(日) 20:51:03.76 ID:Cc3+LG/u.net
鯖へのログインなのか、それともHTMLページ等でのログインなのかも分からん

566 :デフォルトの名無しさん:2018/03/30(金) 12:35:13.04 ID:5tmqHLck.net
Perlのソケット通信にて、とあるAPIへのリクエストに対して送られてきた全応答を全て取得した上で処理をしたいと思っています。

たとえば簡単な例だと
応答データ例:(00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10);
データは00〜FF全てを含み、終了は6連続"00 00 00 00 00 00"になった場合となります。
==
my $data = <$socket>; # data => 00 01 02 03 04 05 06 07 08 09 0a
my $data2 = <$socket>; # pending....
==
$/ = \x5;
my $data = <$socket>; # data => 00 01 02 03 04 05
my $data2 = <$socket>; # pending....
==
のように、$/に当たるデータで停止してしまいます。$data2は待てど暮らせど進みません。
また6バイトで1組なので、sysread($socket,$buf,6)や$socket->recv($buf,6,0)、recv($socket,$buf,6,0)
といった方法もしてみましたが、これら全てpending...状態で1こちらも待てど暮らせど進みませんでした。
一括で取得する方法はありませんでしょうか。

567 :デフォルトの名無しさん:2018/03/30(金) 12:48:02.51 ID:TlFsJGTt.net
>>566
ノンブロッキングのソケットってできなかったっけ?
fcntl()で指定するんだったような気がするが。
まあでもこの辺はOSによって微妙に違うかも知れないのでよく調べてみて。

で、ブロックしないようにしておいて受信したやつをとにかく全部読んで最後に \0 が6つあるかどうか見ると。

568 :デフォルトの名無しさん:2018/03/30(金) 13:25:36.98 ID:5tmqHLck.net
>>567
ありがとう
試してみた感じとまらなくなりました。
助かりました。

569 :デフォルトの名無しさん:2018/03/30(金) 20:15:44.88 ID:1Iia3Fde.net
while(1) {
  PROC1;
  if (COND) {
    last;
  }
  PROC2;
}

こんなような処理を、while(1)とかlastとか使わずにスマートに書けない?

570 :デフォルトの名無しさん:2018/03/30(金) 20:22:24.29 ID:x2Z4e+RC.net
>>569
PROC1はCONDの値を返さないってこと?

571 :デフォルトの名無しさん:2018/03/30(金) 20:50:04.69 ID:1Iia3Fde.net
想定してる例では返さないけど、返す前提じゃないと一般論にならない

572 :デフォルトの名無しさん:2018/03/30(金) 20:55:20.44 ID:dOU2138G.net
>>568
non-blocking にするとデータが何もきてない時にほとんど素通りするので
selectとか使って自分で待たせることを忘れずに。そうしないと入力待ち
ループが物凄く早く回ってしまい無駄にCPUタイムを食うことになる。

573 :デフォルトの名無しさん:2018/04/14(土) 09:32:20.00 ID:3ZAO+EKI.net
x が100000〜100500 なら y=1000
100501〜100700 なら y=1001
100701〜120000 なら y=1002

みたいな感じになってるとする
xはある範囲を全部埋めていて、yはある範囲で連続

で、xが与えられた時にyを求めたい
どんなデータ構造にするのが一番効率的だろう

574 :デフォルトの名無しさん:2018/04/14(土) 14:29:40.83 ID:lJIoGN24.net
Perl関係無いような…
俺だったらxのfrom値をキーにハッシュ作って値にy入れるかなぁ

575 :デフォルトの名無しさん:2018/04/16(月) 09:41:27.92 ID:h6scVdPk.net
>>573
単純な計算ではxからyは求められないようだね。だったら配列にxの下限とyの値のペアを入れといて比較かな。
こんなやつね。どう比較するかは分かると思うので省略。

my @a = (
[100000, 1000],
[100501, 1001],
[100701, 1002],
.
.
.
);

ハッシュ使うとxの値を比較する時に全てのキーを引き出してソートしてから行う必要があって、それだと余計に遅くなると思う。

しかし全てを配列に入れておいて頭から全て比較することが現実的とは思えないほど多い場合(何万件もあるとか)は、もうPerlでやるのは止めてRDBに繋いでやった方が良いかも知れない。
(xの上限、下限、yの値をただ入れる表を作ってxの方はインデックス作っておいて簡単なselectをする)。
そうすると何も考える必要がなくなって楽だ。DBはsqliteが軽くていいぞ。その場合DBIモジュールとDBD::SQLiteモジュールが必要。

576 :デフォルトの名無しさん:2018/04/16(月) 12:33:04.08 ID:qlfABgAK.net
0, 501, 701, 1001, 1301,

x のfrom 値で、2分探索木にする。
各ノードが、y 値を持つ

577 :デフォルトの名無しさん:2018/04/16(月) 19:16:06.77 ID:jtdCSi5V.net
yを0から999までに単純化して、
下限だけ入れた配列を毎回0から見つかるまで舐める

という実装にしたら、余裕で一瞬で終わるので、これで十分だった

個人でDBが要るようなケースって、まず無い気がする

578 :デフォルトの名無しさん:2018/04/16(月) 19:54:02.09 ID:Njbya+hs.net
>>577
ちなみに、DBを使ったことある?

個人的には、個人用途でもあれば便利。
保存関連がかなり楽になる。

579 :デフォルトの名無しさん:2018/04/16(月) 20:29:20.27 ID:jtdCSi5V.net
仕事でaccess使ったくらいだけど、
規模的にはテキストでも全然構わないレベルだった

excelと連動させたいからそういう手段が選べないだけで、
個人なら最初からexcelそのものを使わない

580 :デフォルトの名無しさん:2018/04/17(火) 09:50:37.14 ID:CpeCFbdf.net
扱うデータが多くて一々考えるのが面倒な時は使ってみると良い。

581 :デフォルトの名無しさん:2018/04/17(火) 18:45:22.69 ID:O41FhP2w.net
データの規模よりは、構造の複雑さだろうな
いろんな属性がいっぱいくっついてて、それらが相互に関連してるようなデータを
テキストベースで作るのはなかなか大変

で、個人でそんなデータを扱う機会はやっぱり無い
家計簿をコンビニ別に統計を出したいとか、そんなことは思わないし、
そうできるようにデータ入力するのが面倒すぎて挫折する

582 :デフォルトの名無しさん:2018/04/17(火) 20:55:41.70 ID:jy0h/NRq.net
こんな単純なデータ構造のものをDBにしたら遅くなるのは目に見えてる
単純に2つの配列か、独立してるのが嫌なら、2つの要素を持つオブジェクトの配列でいいだろ

583 :デフォルトの名無しさん:2018/04/17(火) 21:07:35.33 ID:O41FhP2w.net
しまうのはそれでいいけど、検索できんだろ

数が莫大になっても短時間で検索できるようにしまっといてくれるのがDBのいいところ
でも高々1万とかならリニアで十分
100万とかあると探索アルゴリズムが威力が効いてくる

584 :デフォルトの名無しさん:2018/04/17(火) 21:08:16.86 ID:IUYvc0m6.net
小規模だと遅くなるだろうな。

585 :デフォルトの名無しさん:2018/04/17(火) 21:19:21.97 ID:O41FhP2w.net
小規模だとどちらも体感0秒だから変わらない

586 :デフォルトの名無しさん:2018/04/18(水) 02:06:34.84 ID:yJ81KmRv.net
>>585
DB使って、どういうキーでクエリー出すの?
俺は詳しくないから考え方だけでいいので教えて
・x>=キーのものの中からMINを取って、それのyを出力?
・x>=キー and 次のレコードのx<キー?(次のレコードって見れるのかは知らんけど)
・x,yの他にx2として範囲の最後をデータとして追加しておき、x<=キー and x2<キー?
何かベストマッチな方法がありそうだけどね
(上記の方法ではとてもDBの検索が効率よくいけるとは思えんので)

587 :デフォルトの名無しさん:2018/04/18(水) 03:06:20.17 ID:kaO6I25j.net
単純にSELECT y FROM hoge WHERE x BETWEEN a AND bで
実態はSQL側で最適化してくれるよ
データを扱うことに特化した高級言語な訳だし

個人的にはDB使うかどうかって、
データの流動性(?)がポイントな気がする
弄る機会が多ければ多いほど恩恵受けられる訳だから

588 :デフォルトの名無しさん:2018/04/18(水) 03:22:30.21 ID:yJ81KmRv.net
>>587
BETWEEN a AND bって、aからbの間ってことじゃなかったっけ?
x=100502の場合のyを求めるのにどう書くの?
BETWEEN 100502 AND 100502でいいんだっけ?

589 :デフォルトの名無しさん:2018/04/18(水) 03:27:30.58 ID:yJ81KmRv.net
これって例えば、10000から11000の間にあるデータxを全部抽出したい場合とかに使うものなのでは?

590 :デフォルトの名無しさん:2018/04/18(水) 03:58:19.16 ID:yJ81KmRv.net
>>586の例って全部おかしかったので書き直しとく
・MAX(x<=100502)
・x<=100502 and (次のレコードのx)?>100502
・x<=100502 and x2>=100502

591 :デフォルトの名無しさん:2018/04/18(水) 11:34:48.13 ID:gg2GabAw.net
表は x の最大と最小(xmin,xmax)と y をただ入れといて select y from xytbl where x between xmin and xmax みたいにすればいいじゃん。
xmin + 1 が次の xmax と一致するので無駄があるが xmin, xmax にインデックス作っておけば多分速くはなるだろう。
どうしても無駄をなくしたい場合は xmin と y だけにして xmax はビュー作ってそちらであるかのように見せかけておくか、または複雑になるが一つのSQL文にするかだ。

592 :デフォルトの名無しさん:2018/04/19(木) 02:32:23.49 ID:h5gs+kbl.net
>>591
何を言ってるのか不明
表にxminとyしかないのなら、xは使えないだろ
また、[x,y,xmin,xmax]=
([100000,1000,100000,100500], [100501,1001,100501,100700], [100701,1002,100701,120000],…)
ってことで
select y from xytbl where x between xmin and xmax
なら全レコードがマッチするよ

593 :デフォルトの名無しさん:2018/04/19(木) 03:01:26.91 ID:h5gs+kbl.net
between句は、
SELECT カラム名 , ... FROM テーブル名 WHERE カラム BETWEEN 値1 AND 値2;

SELECT カラム名 , ... FROM テーブル名 WHERE カラム >= 値1 AND カラム <= 値2;
と書くのと同等の機能

select y from tbl01 where x between 100000 and 110000
なら
select y from tbl01 where x >= 100000 and x<=110000
と同じってこと

594 :デフォルトの名無しさん:2018/04/19(木) 12:07:08.87 ID:SbGYlqelo
>>576に同意。
>>573の問題は、範囲が被らなく、変更されないならば、二分探索法で十分速い。

595 :デフォルトの名無しさん:2018/04/19(木) 10:18:42.11 ID:XRkJ53+o.net
>>592
うまく伝わらなかったかな?考えてることは多分同じだよ。
例えば以下のようにするの(以下はSQLiteでのSQL)。

create table xytbl (xmin, xmax, y);
insert into xytbl (xmin, xmax, y)
values (100000, 100500, 1000), (100501, 100700, 1001), (100701, 120000, 1002);
create table xtbl (x);
insert into xtbl (x) values (9999), (100300), (100502), (118000), (120100);
select x, y from xytbl, xtbl where x between xmin and xmax;

ここでは xtbl に x の値だけ並べて入れておいて後でまとめて selectして x, y 両方出している。

596 :デフォルトの名無しさん:2018/04/19(木) 10:19:56.20 ID:T9/zIgZR.net
ごめんびとうぃーん言い出しっぺだけどダメだね
感覚と言うかノリだけで書いてしまった
実際書くと即だめじゃんってなるやつ

597 :デフォルトの名無しさん:2018/04/19(木) 10:22:29.59 ID:XRkJ53+o.net
PerlからDBI経由でDBアクセスするならxtbl不要でxの部分はprepareで'?'にしておいてexecuteで実際の値を渡せば良い。

598 :デフォルトの名無しさん:2018/04/19(木) 10:28:26.42 ID:T9/zIgZR.net
真面目に今考えた結果
Select y From hoge Where ? < x Order by x Desc Limit 1;
で多分取れる

599 :デフォルトの名無しさん:2018/04/23(月) 17:03:26.38 ID:YcjqEwjB.net
$$で取得するプロセスIDはどんな環境でも最大4桁までですか?

600 :デフォルトの名無しさん:2018/04/23(月) 17:19:28.43 ID:AJxfAl3T.net
>>599
んなこたなかろう。Linuxで ps -fe とかやれば5桁ぐらいのが沢山出てくるぞ。
かといって最大5桁で作って安心してはいけない。
将来的に変わるかも知れないしLinux以外ではもっと桁数あるかも知れないからな。

601 :デフォルトの名無しさん:2018/05/01(火) 17:33:53.54 ID:Jzi33zXB.net
全く初歩的な質問ですいません
ググってみたのですがそのものズバリの例を見つけることができませんでした。
やりたいことは、連装配列に配列を入れて取り出すことです。
最後の出力行が [2] となることを意図していますが、出力は
[]  となり、ワーニングもでています。
配列を入れたつもりの連装配列の要素が配列とは認識されていないようです。
この場合どのように書けば、所期の結果が得られるでしょうか?

$ perl -v

This is perl 5, version 18, subversion 2 (v5.18.2) built for x86_64-linux-gnu-thread-multi
(with 46 registered patches, see perl -V for more detail)
〜後半略〜

$ cat sample.pl

my %hasy01;
my @array01;

@array01=(2,4,6,8);
$hash01{"name"}=@array01;

printf( "[%s]\n", $array01[0] );
printf( "[%s]\n", $hash01{"name"}[0] );

$ perl -w sample.pl
[2]
Use of uninitialized value in printf at sample.pl line 9.
[]

602 :デフォルトの名無しさん:2018/05/01(火) 17:45:53.43 ID:4WtZiQYp.net
$hash01{"name"}=\@array01;

こうやるんだよ

603 :デフォルトの名無しさん:2018/05/01(火) 17:54:36.04 ID:tWpDsj7U.net
>>601
$hash01{"name"}=[@array01];

でも可

604 :デフォルトの名無しさん:2018/05/01(火) 17:57:41.47 ID:Jzi33zXB.net
>>602
おお、うまくいきました。
ありがとうございます。

605 :デフォルトの名無しさん:2018/05/01(火) 21:28:23.40 ID:J+iCny9E.net
>>603
リストのリファレンスかコピーかでまったく別物なので注意。

606 :デフォルトの名無しさん:2018/05/01(火) 21:42:46.89 ID:4WtZiQYp.net
デリファレンス側もちょっと不満があるな

printf( "[%s]\n", ${$hash01{"name"}}[0] );
こうか
printf( "[%s]\n", $hash01{"name"}->[0] );
こうがいい

607 :デフォルトの名無しさん:2018/05/02(水) 02:19:06.16 ID:bQ3xZw0Z.net
>>605
目的用途に応じて意識的に書き分ける

>>606
}{][の間の->は略せるので
printf("[%s]\n", $hash01{"name"}[0]);

が良いかと

608 :デフォルトの名無しさん:2018/05/02(水) 08:00:00.39 ID:lnsF+QsJ.net
#自分ならこうするかな
my $hash01;
my @array01;

@array01=(2,4,6,8);

$hash01 = {
name => \@array01 ,
foo => \@array01 ,
bar => \@array01 ,
# .... 多分こういうふうに増えるだろうし
};

printf( "[%s]\n", $h->{name}->[0] ); # -> があると目が滑りにくい!

609 :デフォルトの名無しさん:2018/05/05(土) 20:27:28.60 ID:yJAqb+uF.net
正規表現でマッチした部分を$1,$2などで取り出すけど
$いくつまであるかわからない場合$1,$2...$nをまとめて配列に入れる方法ってどうやるんですか?

610 :デフォルトの名無しさん:2018/05/05(土) 21:54:57.88 ID:ddSxgz72.net
>>609
ttp://perldoc.jp/docs/perl/5.22.1/perlrequick.pod#Extracting32matches
>リストコンテキストでは、グループ化付きのマッチング /regex/ は マッチングした値のリスト ($1,$2,...) を返します。 従ってこれは以下のように書き換えられます
> ($hours, $minutes, $second) = ($time =~ /(\d\d):(\d\d):(\d\d)/);

ttp://perldoc.jp/docs/perl/5.22.1/perlrequick.pod#More32matching
>リストコンテキストでは、//g はマッチングしたグループのリストを返します; グループ化の指定がなければ、正規表現全体にマッチングするリストを返します。 従って
> @words = ($x =~ /(\w+)/g);

611 :デフォルトの名無しさん:2018/05/05(土) 22:30:46.21 ID:BVQmyJFO.net
そういえば$10まで行って困ったこと一度もないな

612 :デフォルトの名無しさん:2018/05/06(日) 12:36:15.67 ID:Bse1bLkg.net
>>611
え?困らんだろ。普通に $10 とか $11 とか書けば良いだけだし。

613 :デフォルトの名無しさん:2018/05/06(日) 13:41:43.10 ID:1K09Bg92.net
Perl のことだとは言ってないな。正規表現の話なら 9 までしか使えない方が多数派だ。Perl でさえ昔はそうだった。
まあ、そういう話なら $10 ではなく \10 と書くべきかもしれないが。

614 :デフォルトの名無しさん:2018/05/06(日) 18:20:08.93 ID:Bse1bLkg.net
いやこのスレは「Perl についての質問箱」なわけで・・・

615 :デフォルトの名無しさん:2018/05/15(火) 01:25:39.67 ID:bz5cqKe9.net
ユーザ定義関数のリファレンスを変数に代入しておき、そのリファレンス変数を
参照することによって関数を呼び出すことができます。たとえばこんな感じに。
sub s { $_[0]+1 }
$r = \&s;
print $r->(1)."\n";

$ perl usr.pl
2

それでは、popやshift、printなどの組み込み関数についても、リファレンスを変数に代入しておき、変数を参照することによって組み込み関数を呼び出すことができないか方法を探しています。

しかしCOREやCORE::GLOBAL名前空間を使ってできないか、ためしてみましたがうまくいきません。たとえば

$r = \CORE::print;
#print "$r\n";
print $r->(3.14, "\n");

を実行すると

Not a CODE reference at 〜.pl line 3.

となります。

$r = \CORE::GLOBAL::print;
#print "$r\n";
print $r->(3.14, "\n");

を実行しても

Not a CODE reference at 〜.pl line 3.

となってしまします。何かいい方法をご存知でしたら教えてくださいませ。

616 :デフォルトの名無しさん:2018/05/15(火) 07:18:03.41 ID:PvTz5h0y.net
ユーザー定義関数だと\&でやってるのにCOREは\&でやってないのはなんで?

617 :615:2018/05/15(火) 23:35:25.73 ID:fP8R1+3G.net
>>616
\&CORE もためしたけれど

$r = \&CORE::print;
print "$r\n";
$r->(3.14, "\n");

実行すると

Undefined subroutine &CORE::print called at 〜.pl line 3.
CODE(0x3919c)

となるのよ。
できなことなのかね…

618 :デフォルトの名無しさん:2018/05/16(水) 00:12:42.68 ID:uHifQt6J.net
ttps://perldoc.perl.org/CORE.html
COREパッケージの関数もリファレンスを取得したり別名を定義することができる(pushなど)
ただし一部はベアワードでしか呼び出せない(printなど)

>組み込み関数についても、リファレンスを変数に代入しておき、変数を参照することによって組み込み関数を呼び出すことができないか
結論: ものによる

619 :615:2018/05/16(水) 01:13:39.26 ID:N7L5seGg.net
>>618
ありがとう。

620 :デフォルトの名無しさん:2018/05/16(水) 04:01:32.31 ID:5FKSCtlR.net
無名関数のリファレンスを使えば。

621 :615:2018/05/16(水) 07:58:19.21 ID:lqxKAjJz.net
>>620
そうすれば機能的に可能だけれど、
ユーザ関数のコードがワンクッション間に入るので
パーフォマンス的にみて、
できれば組み込み関数を直接、第一級関数としてクロージャーなどに
使えないか調べていた、ってわけですのよ

622 :デフォルトの名無しさん:2018/05/20(日) 02:13:22.75 ID:QVTwsNDJ.net
https://log.perl.org/2018/05/goodbye-search-dot-cpan-dot-org.html

search.cpan.orgが6月に終了だと。
mcpan使ってねってことだけど、終焉を感じるなぁ…

623 :デフォルトの名無しさん:2018/05/23(水) 19:29:13.97 ID:Au5e7VGg.net
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

U85LY

624 :デフォルトの名無しさん:2018/05/23(水) 21:28:50.98 ID:/p8qS87L.net
意味もなく、関係ない変数を bless

625 :デフォルトの名無しさん:2018/05/24(木) 12:17:56.05 ID:62mXzMMG.net
bless
それは祝福

626 :デフォルトの名無しさん:2018/05/26(土) 02:04:34.60 ID:NxLTutQ0.net
God bless you!

627 :デフォルトの名無しさん:2018/05/26(土) 06:15:15.44 ID:qdFYQfps.net
さすがにリファレンスですらない変数だと怒られた
でも、勝手に作った偽オブジェクトを食わせたりはできる

他の言語はそのへんの安全装置はどうなってるんだろう

628 :デフォルトの名無しさん:2018/05/26(土) 11:44:11.22 ID:nibGH99w.net
blessは、オブジェクトにパッケージを関連付けるだけだろ。
どんな「安全装置」が必要なのか?

ちなみに、RubyもJavaScriptも、動的に後からメソッドとか足し放題だな。
まあ、スクリプト言語としては残念でもないし当然。

629 :デフォルトの名無しさん:2018/05/26(土) 11:59:50.95 ID:qdFYQfps.net
メソッドを足すのと、コンストラクタが生成してないものを使うのは全然違うだろ

630 :デフォルトの名無しさん:2018/05/26(土) 15:30:59.65 ID:NxLTutQ0.net
Pod::PerldocJp という日本語 perldoc を cpanm 使ってインストールしてみたが、root でないとエラーが出て動かない(Linux 環境ね)。

$ perldocjp perldocjp
Error stat on '/tmp/.perldocjp/perldocjp.pod': そのようなファイルやディレクトリはありません at /usr/local/share/perl5/Pod/PerldocJp.pm line 78.
$

root になるとちゃんと出てくる。ただし sudo perldocjp perldocjp ではダメで、 sudo su - とかで root でログインした状態で perldocjp perldocjp とするとちゃんと動く。
実行時の環境変数 LANG は一般ユーザもroootも ja_JP.UTF-8 になっている。


これ Linux でインストールしてみてうまく行った人いる?


Pod::PerldocJpとperldocjpコマンドについての日本語での説明はここね。
http://search.cpan.org/~ishigaki/Pod-PerldocJp-0.18/perldocjp

631 :デフォルトの名無しさん:2018/06/03(日) 15:51:19.96 ID:F3uiBXX1.net
5.28まだ?

632 :デフォルトの名無しさん:2018/06/08(金) 21:09:03.47 ID:JtDK6GNM.net
例えばファイル名を入れて関数を呼んで、
処理結果を入れた配列なりのリファレンスを戻り値で返す
別のファイル名で同じ関数を呼んで、結果のリファレンスを別の変数で受ける

それで普通に動くんだけど、
なぜ同じ関数のmyで宣言した変数が違うオブジェクトを指しているのか、
なぜ古い方は消えてしまわないのか、
そもそもいつまで残ってるのか、
みたいな部分が何となく不安

参照カウントの仕組みを理解しても、やっぱり不安

633 :615:2018/06/09(土) 01:53:50.05 ID:dh6JCgcP.net
>>632
気持ちはなんとなく分かるけど、
こういう人に対して何と言って分かりやすく説明したら
よりよいかは
少し考えてしまうな…

634 :デフォルトの名無しさん:2018/06/09(土) 05:26:23.38 ID:uYb8xFM5.net
大丈夫。参照されなくなったやつは自動で消える。

635 :デフォルトの名無しさん:2018/06/09(土) 08:22:42.99 ID:VVS81UdD.net
消えないことに対する不安じゃないんだよな

肉体は既に滅びているけど、どこかにある名簿にまだ名前があるお陰で、
辛うじて魂だけまだ現世に留まってる感じ

リファレンスを戻り値で受けるんじゃなくて、
自分で宣言した変数のリファレンスを引数で渡して、
そこに入れて貰う方式なら安心できる
意味は同じなんだけど

636 :デフォルトの名無しさん:2018/06/09(土) 08:45:10.02 ID:ngqKHOqq.net
strdupの仕様の気持ち悪さ
無名関数のリファレンスの気持ち悪さ
みたいなやつなら、俺も感じる

637 :デフォルトの名無しさん:2018/06/09(土) 17:49:06.89 ID:uYb8xFM5.net
うーん。しかし、そういうのは言語を実現する環境の実装にバグがあるかどうかの問題だよなあ。
そのバグを気にするならどんな言語も使えなくなるのでは?コンパイルする言語でもバグってて
変なコード作られたら終わりだしなあ。

638 :デフォルトの名無しさん:2018/06/09(土) 19:13:31.22 ID:sS73Mbwb.net
信頼性の話じゃないだろ。
言ってしまえば、リファレンスとかオブジェクトとか、なんかふわふわしてて、なんとなく納得がいかん、てだけ。

感覚的には慣れの話でしかないと思うけど、どうしてもというなら、C++でもやってみればいいのでは。
newとかヒープとかを把握できれば、実はぜんぜんふわふわしてないことが理解できるはず。

余計に混乱するかもしらんけども。w

639 :デフォルトの名無しさん:2018/06/09(土) 19:58:15.52 ID:VVS81UdD.net
C言語で関数内にstatic変数を持ってて、
そこに何か格納してそのポインタを返す、みたいな仕組みなら安心する

何回呼んでも同じポインタが返ってきて、前回の内容は保存されていない
だから必要なら呼んだ側の責任で保存しとかないといけない
家がない子はいない

perlのsub内のmy変数のリファレンスも見かけはそれと似てるけど、
実際の動作が全然違って、実体は動的に生成される
じゃあC言語のauto変数みたいなもんかというと、関数が終わってもスコープを抜けない
かといってずっと存在する訳でもなくて「要らなくなったら消える」というルールが人智を超える

うまく動くように出来てるんだから、怖がらずに飛んでみろ的な

640 :デフォルトの名無しさん:2018/06/09(土) 20:16:55.67 ID:vLAdQtfD.net
もはや信じるか否かという宗教的問題か?

641 :デフォルトの名無しさん:2018/06/09(土) 20:29:44.29 ID:VVS81UdD.net
変数の寿命なんて本来はコードから静的に判るものだったのに、
それを動的にする代わりに管理を手放して機械に任せることにした
それはなかなかのパラダイムシフトである筈なのに、
オブジェクト指向のデータ隠蔽とセットで隠蔽されてあんまり気にしてない

コンストラクタさんに任せとけば全部うまくやってくれるから

642 :デフォルトの名無しさん:2018/06/10(日) 02:37:37.78 ID:3IVbSRGy.net
>>639
人智は超えないだろ…

643 :デフォルトの名無しさん:2018/06/10(日) 05:50:21.80 ID:eOmqsLdO.net
>>639
それだとマルチスレッドの時に困るわけだな。呼び出し側でバッファ作ってそのポインタを渡すという手もあるが、
量が動的に変化する場合はそれだけでは実現できない。で、malloc() 使うわけだが、そうするとどこかで必ず
free() する必要が出てくる。これが煩わしいので自動でなんとかならないかと色々やってるのが今時の言語。
とはいっても Perl は30年以上前に作られた言語だけどね。

644 :デフォルトの名無しさん:2018/06/10(日) 18:45:28.50 ID:vU7l4ry5.net
Perl++

645 :デフォルトの名無しさん:2018/06/10(日) 18:52:31.32 ID:7xflXXzg.net
個人環境をMariaDBに代えてみたけど
DBD::MariaDBがgithubにしかなくてMySQLに戻したわ(´・ω・`)
こういうとこ困るなー枯れてると

646 :デフォルトの名無しさん:2018/06/10(日) 23:05:19.73 ID:A0irmCxf.net
MySQL用で動きそうなもんだが。
実際、数年前だけどRubyでは使えた。

647 :デフォルトの名無しさん:2018/06/11(月) 00:28:21.09 ID:giD/kjqV.net
それは枯れてないのでは

648 :デフォルトの名無しさん:2018/06/11(月) 13:01:10.20 ID:FLjqN/A3.net
枯れてるって、不具合とか掘り尽くされて安定してるって言ういい意味と
動きが無いって言う悪い意味の両面がある気が

649 :デフォルトの名無しさん:2018/06/11(月) 13:04:00.52 ID:FLjqN/A3.net
>>646
my.conf的な(my.confではない)、恐らくMySQLにあってまりあDBに無いファイル読みにいってこける。
たぶん簡単に修正できるけど、CPAN取得ファイルは弄りたくないから様子見にしたわ

650 :デフォルトの名無しさん:2018/06/11(月) 17:12:02.09 ID:ah84zYcK.net
>>648
IT系で後者の意味では普通使わない。
「枯れる ソフトウェア」などでググってみ。

651 :デフォルトの名無しさん:2018/06/11(月) 17:21:23.85 ID:FLjqN/A3.net
>>650
この場合「枯れる 言語」のが適切だと思うけど…
俺は文脈でどっちの意味でも使ってたわ

652 :デフォルトの名無しさん:2018/06/11(月) 19:02:34.25 ID:HvQh9O78.net
不具合が枯れたなら分かるけど、動きがないはよくわからん。
ユーザー数は関係ないってこと?C言語はどっち?

653 :デフォルトの名無しさん:2018/06/11(月) 19:30:59.90 ID:giD/kjqV.net
%cat = (%hash1, %hash2);
みたいにするとハッシュが結合できる
keys %cat でkeyの配列が取得できる

でも、keys (%hash1, %hash2)
とすると怒られる
keys {%hash1, %hash2}
ならいけるけど、5.12では通らない

どうすれば

654 :デフォルトの名無しさん:2018/06/11(月) 21:05:27.50 ID:HvQh9O78.net
(keys %hash1, keys %hash2)かなあ

655 :デフォルトの名無しさん:2018/06/11(月) 21:25:55.72 ID:C5cAV0Rs.net
それだけだと同じキーがあった場合に2つ出て来るのでもう一捻り必要ということになるんだろうな。

こうかねえ?

keys map { $_ => 1 } keys %hash1, keys %hash2

656 :デフォルトの名無しさん:2018/06/11(月) 21:27:28.65 ID:bgvsbZyV.net
>>653

$cat a.pl
use strict;
my %h0 = ( a => 1, b => 2);
my %h1 = ( b => 3, c => 4);
print( keys( %{ +{ %h0 , %h1 }}),"\n");
$perl a.pl
acb
$
$# できるといえばできるけど、君がやってるやり方をおすすめするよ。その方が余計なバグを防止できる。

657 :デフォルトの名無しさん:2018/06/11(月) 21:37:24.11 ID:giD/kjqV.net
怒られる方法が何故悪いのかがよく判らんのだよな
普通に無名のハッシュになるんじゃないのかと思うんだけど、
> Type of argument to keys on reference must be unblessed hashref or arrayref
hashでもarrayでもない何かのリファレンスになってる?

658 :デフォルトの名無しさん:2018/06/11(月) 21:46:36.09 ID:C5cAV0Rs.net
{}で括ってるからhashrefと思ったとか

659 :デフォルトの名無しさん:2018/06/11(月) 23:58:04.20 ID:kxBy2s6A.net
keys()が引数にリファレンスをとれるようになったのは最近(でもないけど)だから、曽野せいなんでは。
>>657

660 :デフォルトの名無しさん:2018/06/11(月) 23:59:00.05 ID:kxBy2s6A.net
>>656は、わざわざデリファレンスしてるし。

661 :デフォルトの名無しさん:2018/06/12(火) 00:01:02.77 ID:DCSlzX2w.net
%hash1 = (a => 1, b => 2);
%hash2 = (c => 3, d => 4);
$ref = (%hash1, %hash2);
print $ref;

さて、何が表示されるでしょう?

662 :デフォルトの名無しさん:2018/06/12(火) 02:21:03.71 ID:zyhS8Ljg.net
perl -e "use Data::Dumper; %hash1 = (a => 1, b => 2); %hash2 = (c => 3, d => 4); $ref = (\%hash1, \%hash2); print Dumper($ref);"

663 :656:2018/06/12(火) 13:02:00.90 ID:0nDO7HX7.net
>>660
つっこみありがとう。もう長いこと Perl 使ってるからね、そこはデリファレンスしたいんだよ。
そもそも Perl4 にはリファレンスが無かったんだ。
C でも関数ポインタ使うときは (*p)() みたいな書き方してるよ。

664 :デフォルトの名無しさん:2018/06/13(水) 02:19:57.94 ID:mK+NhzCY.net
>>661
2/8 と出た。何が出てるんだこれ?

665 :デフォルトの名無しさん:2018/06/13(水) 06:32:37.33 ID:a9+2+9qX.net
>>661
通常はそこはリスト値に展開されて %hash2 の要素のどれかが全体のスカラ値になるはずだけど、そうなってないね。
その仕様は公式ドキュメントのどこに書かれてるの?
通常の評価をしてもらうにはどう書けばいいの?

666 :デフォルトの名無しさん:2018/06/13(水) 07:40:41.18 ID:3GuASBgR.net
>>664
5.26からは挙動が変わったので注意
ttp://perldoc.jp/docs/perl/5.26.0/perl5260delta.pod#scalar40-37hash41-32return32signature32changed

>>665
リスト値が展開されてから代入されるのではなく
左辺がスカラコンテキスト -> リストの一番右側の値が代入される -> %hashをスカラコンテキストで評価
と思われ

667 :デフォルトの名無しさん:2018/06/13(水) 10:44:03.43 ID:a9+2+9qX.net
ありがとう。perldata は読んでたけど理解できてなかった。

668 :デフォルトの名無しさん:2018/06/15(金) 22:18:58.35 ID:Cep0TxDe.net
正規表現のマッチ結果って、どこかのデフォルト変数に入ってないの?
($match1, $match2) = ($1, $2);
とやる代わりに、
($match1, $match2) = @_;
みたいにやりたい

669 :デフォルトの名無しさん:2018/06/15(金) 22:34:53.18 ID:+TY+tyj1.net
リストコンテキストで評価すれば$1とか使わず代入できる
($hours, $minutes, $second) = ($time =~ /(\d\d):(\d\d):(\d\d)/);

ttp://perldoc.jp/docs/perl/5.22.1/perlretut.pod#Extracting32matches

670 :デフォルトの名無しさん:2018/06/16(土) 06:32:34.79 ID:CnQY4Co9.net
>>668-669
もしくは %+ と %-
http://perldoc.jp/docs/perl/5.24.1/perlvar.pod#Variables32related32to32regular32expressions

671 :デフォルトの名無しさん:2018/06/16(土) 06:48:42.62 ID:QsFR7Mzm.net
インデックスだけ渡されてもなー

672 :デフォルトの名無しさん:2018/06/16(土) 13:31:25.59 ID:CnQY4Co9.net
>>671
@+・@- と勘違いしてないか?
http://perldoc.jp/docs/perl/5.22.1/perlretut.pod#Named32backreferences

673 :デフォルトの名無しさん:2018/06/16(土) 14:40:46.76 ID:QsFR7Mzm.net
どうやっても、($1, $2)に相当するような配列は、自分で作らないと無いんだけど、
そもそもそのやり方は便利なのか? という問題があって

括弧の数を左から数えて、挿入したら間違えずにずらして、というやり方は、
どう考えても避けるべきテクニックなので、わざわざ改良版でそんな方法を
準備したりはしない

674 :デフォルトの名無しさん:2018/06/17(日) 02:57:43.02 ID:rS3/QTqY.net
>>669
ちょっと捻ってこうすると配列に入るね。

@t = ($time =~ /(\d\d):(\d\d):(\d\d)/);

で、マッチしなければ @t には何も入らないので if (@t) { マッチした時の処理 } のように書ける。

675 :デフォルトの名無しさん:2018/06/17(日) 04:40:03.87 ID:rS3/QTqY.net
if の中に突っ込んじゃえば見た目が元とあまり変わらなくなるな。

if (my @t = $time =~ /(\d\d):(\d\d):(\d\d)/) {
 # このブロックに入った場合は @t[0..2] に値が入っている。
}

676 :デフォルトの名無しさん:2018/06/17(日) 09:21:55.81 ID:jBtDb+3n.net
それが常套手段
でも、次の行で使うためだけにテンポラリの変数を命名して、
ということを避ける手段が大抵はあるのに、この場合は無さそうなのが気になる

677 :デフォルトの名無しさん:2018/06/17(日) 16:50:23.88 ID:YZJ2jt3n.net
気にするな。

678 :デフォルトの名無しさん:2018/06/17(日) 17:15:26.48 ID:1gNDCUDy.net
リストのスライスを使えばいいんじゃないかなあ。

679 :デフォルトの名無しさん:2018/06/17(日) 17:43:24.21 ID:jBtDb+3n.net
もう括弧を数えるのはやめようぜ、ということなのだろう
$1, $2 の代わりの配列があったとしても、数えないといけないのは同じなので、
明示的にラベルを付けて書くのが人間的

680 :デフォルトの名無しさん:2018/06/17(日) 21:23:30.12 ID:hnLcPBvl.net
あー。まあそうかな。

681 :デフォルトの名無しさん:2018/07/04(水) 17:49:09.45 ID:XD9RzW/r.net
使ってる Perl が 24.1 になったんだけど、どこかで do の仕様変わった?
do('.state')
がエラーになるんだが。
@INC に '.' を加えれば見つけてくれるけど
do('./.state')
と書いとくべきだったよ。

682 :デフォルトの名無しさん:2018/07/04(水) 21:00:50.16 ID:pO2eBJuX.net
それは do の仕様が変わったんではなく、@INC の仕様が変わったんだな。

683 :デフォルトの名無しさん:2018/07/04(水) 21:36:23.59 ID:k7IkWFxo.net
@_ とタイプしようとしても必ずミスする
下手すると、`\ になる

684 :デフォルトの名無しさん:2018/07/04(水) 22:16:13.94 ID:gFgZc5FG.net
WCG

685 :デフォルトの名無しさん:2018/07/04(水) 23:54:26.65 ID:pO2eBJuX.net
>>683
いっそ `\ とタイプするよう心がけたらミスで @_ となる率が上がったりして。

686 :681:2018/07/05(木) 06:47:48.29 ID:xxuahHpW.net
>>602
ありがとう。perl5241delta だったんだね。
@INC でなく do を探してたからわからなかったよ。

687 :681:2018/07/05(木) 06:50:01.14 ID:xxuahHpW.net
ごめん、>>602 でなく >>682 ね。

688 :デフォルトの名無しさん:2018/07/06(金) 00:12:17.27 ID:sx2dCES6.net
質問じゃないけど、愚痴なんで聞き流してください。

Perlが好きなんですが、モジュールを使って実践サンプルが多いんが、つくって覚えるだけなんで
すごいさみしいです。

Perlのモジュールプログラムは最高に面白いのに、なんであの本だけなんですかね?

あと、PythonのTKinterも好きだけど、全然出てない。

689 :デフォルトの名無しさん:2018/07/06(金) 08:01:08.76 ID:MZPdd74D.net
今回のプロジェクトは大掛かりだったので、
自分で使う用のツールを大量に作った

こういうの好き

690 :デフォルトの名無しさん:2018/08/11(土) 13:47:45.26 ID:DaBLZ7U5.net
perlの話でもなんでもないけど、再帰呼び出しの話

あるディレクトリから下の階層構造について、再帰的に調べたい
その時に、そのターゲットのディレクトリからの相対パスで出力させたい
それを再帰呼び出しを使ってやらせようとすると、
最初: ターゲット
次: ターゲット/file1
次の次: ターゲット/file1/file11
次の次の次: ターゲット/file1/file11/file111
が調べる対象で、単純に受け取った相対パスに対して
ターゲット/相対パス/ファイル名
を調べればいい訳ではないし、再帰的に渡す相対パス名も、
相対パス/ファイル名
と決め打ちすると最初だけ例外がある

何かスマートにやる方法は無いもんかなと
いっそフルパスで扱って、後から文字列置換でターゲット部分だけ削るという方法もあるけど

691 :デフォルトの名無しさん:2018/08/11(土) 14:01:06.83 ID:4zfRZVUI.net
>>690
台無しなこというと、ディレクトリ以下のファイルを列挙するシェルコマンドとプロセス通信したほうが速い。

692 :デフォルトの名無しさん:2018/08/11(土) 14:16:49.10 ID:DaBLZ7U5.net
再帰しなくてよくなるだけで、相対パスの問題は解決しないというか、
より遠のくような

693 :デフォルトの名無しさん:2018/08/11(土) 15:52:58.06 ID:edehoOie.net
Perlの話をするが、File::Findモジュールを使えば。

694 :デフォルトの名無しさん:2018/08/11(土) 20:53:56.37 ID:4zfRZVUI.net
>>693
まさにFile::Findが遅い。シェルコマンドとプロセス間通信読み取りしたほうがいい。
具体的には以下のようなシェルコマンドをパイプ読み取りするといい。

unixの場合: find [path] -type f
windowsの場合: dir /B /S /A:-D [path]

695 :デフォルトの名無しさん:2018/08/11(土) 21:20:05.57 ID:DaBLZ7U5.net
まさにそんな感じになった

dir の結果になんかハングルとかSJISじゃないものが混じってて、
それをそのままbatファイルに吐いて、
batファイルを見ても・・・みたいに化けてても、
実行させるとちゃんと正常に動作する

何作ってたかというと、差分バックアップツール
tarコマンドでできそうで試したけどうまくいかないので作ったった

全ファイルのタイムスタンプ一覧を保存しておいて、
2代目からは差分だけのアーカイブを作る
消えてるファイルを削除する為のbatファイルも一緒に生成

696 :デフォルトの名無しさん:2018/08/11(土) 23:09:00.44 ID:v5OekXOz.net
Perlの話から外れるが、おらは差分バックアップにはrsyncに--backupオプションつけて使ってる。

697 :デフォルトの名無しさん:2018/08/11(土) 23:21:12.60 ID:DaBLZ7U5.net
windowsにもあればいいんだけど

差分バックアップツールそのものはいろいろあるんだよな
っていうか、windowsそのものにも内蔵されてたような

バックアップのデータをバックアップ対象のシステムと同じとこに置いててもあんまり意味ないので、
単一のアーカイブとしてクラウドかどっかに置きたい
しかも、専用ファイル形式とかでなくて、何もインストールせずに解凍するだけでリストアしたい
とか考えると条件に合うツールがなかなか無くて、
それでいて作るのはそんなに難しくもなさそうなので、自分で作るかと

698 :デフォルトの名無しさん:2018/08/12(日) 05:27:13.10 ID:YGBUsYMx.net
rsyncは、Windowsでもつかえるぞ。

699 :デフォルトの名無しさん:2018/08/12(日) 05:29:09.82 ID:5MmmYY5A.net
Windows でバックアップというと xcopy や robocopy だろうな。
rsync も動くんじゃないか? Cygwin や WSL 上の Ubuntu とかなら確実に動くと思うが。

700 :デフォルトの名無しさん:2018/08/12(日) 06:37:38.09 ID:I0JtNgg1.net
rsyncっていうかrdiffかな

rdiffの出力形式がどんなのか知らないけど、
リストア時にもrdiffが必要だというなら避けたい

ただのzipなりtarなりのアーカイブを順に上書き展開するだけでいい状態にしておかないと、
リストアが必要な事態になった時には多分リストア用のツールも無い

701 :615:2018/08/12(日) 14:53:20.30 ID:em9BUun6.net
>>697
robocopy

702 :デフォルトの名無しさん:2018/08/12(日) 15:08:29.76 ID:I0JtNgg1.net
だからミラーを作りたい訳じゃないって

ミラーも実はあるけど
そっちはもっと頻度の高いバックアップ用で、
物理的に別のドライブなら同時に壊れる確率は低いだろうという考え

そうじゃなくて、PC一式盗まれた/津波で流された/証拠物件として押収された、等の為に、
まるきり新規から昨日の作業環境を復元したい時の為に、
最低限の情報をクラウドに置いてある

それは特定のディレクトリ以下まるごとのアーカイブでいいんだけど、
サイズが巨大になるので2代目以降は差分で済ませたいというのがそもそもの動機

703 :615:2018/08/12(日) 16:11:04.49 ID:em9BUun6.net
>>702
find 特定のディレクトリ以下まるごとアーカイブしたdir -type f -ptin0 | xargs -0 md5sum -b | sort -k2 > md5_tree_orig.out

で生成した md5_tree_orig.out を保持しておき、

md5sum --quiet -c その後更新を受けた上記dir md5_tree_orig.out

で追加/削除/更新されたファイルを検出しリストアップ
とか

704 :デフォルトの名無しさん:2018/08/12(日) 16:17:29.70 ID:I0JtNgg1.net
まあ、そんなようなことをタイムスタンプの比較だけでやらせた

リストアップまでは簡単で、差分のアーカイブの作成と、
ファイルが減ってたらリストア側からも減らす仕組みが面倒なんだけど
動かしてみると空のディレクトリが生成されてなかったり

705 :デフォルトの名無しさん:2018/08/12(日) 18:42:09.50 ID:YGBUsYMx.net
信頼性の不安とか動作確認のめんどさとか考えたら、rsync/robocopyにしたほうがいいんじゃないの?
どうしても差分だったらrdiff-backupとか?

706 :デフォルトの名無しさん:2018/08/12(日) 19:21:31.28 ID:I0JtNgg1.net
ミラーは既にやってるからもう要らない
差分のアーカイブを作ってネットに保存するというのをやりたいだけ

勧めるとしたらtarのバックアップ機能で、まさに差分だけのアーカイブを
作る機能があるんだけど、windowsに移植した人が更新時間とアクセス時間とか
あのへんを失敗してるみたいで、試したのは使えないビルドだった

707 :615:2018/08/12(日) 21:24:20.34 ID:YC+nt/a3.net
mtimeに基づいて更新されたファイルだと判定する方法は、
アーカイブから抽出した古い日付のファイルを見落とすので
抜けが起きる可能性があるよ

708 :デフォルトの名無しさん:2018/08/12(日) 21:35:27.48 ID:Q5PU7gst.net
よし、cygwinを導入してcygwinのtar使おうぜ。

709 :デフォルトの名無しさん:2018/08/12(日) 21:37:14.43 ID:I0JtNgg1.net
makeじゃないんだから
イコールでなければ当然更新対象

でもなー
意図的にタイムスタンプを保持したまま修正する、みたいなことを
あちこちでやってるんだよな

710 :デフォルトの名無しさん:2018/08/12(日) 21:43:05.49 ID:TfFR22LF.net
tar.exe はWindows10だと標準で入るらしい。

「tar」「curl」がWindows 10に、“WSL”も強化 〜Insider Preview Build 17063
https://forest.watch.impress.co.jp/docs/news/1097996.html
2017年12月20日 15:17

711 :デフォルトの名無しさん:2018/08/12(日) 21:58:15.81 ID:I0JtNgg1.net
新しき皮袋に古き酒を

712 :デフォルトの名無しさん:2018/08/12(日) 22:20:57.53 ID:6ZKYHExR.net
λ where curl
C:\Windows\System32\curl.exe

λ where tar
C:\Windows\System32\tar.exe

ホンマや

713 :デフォルトの名無しさん:2018/08/21(火) 07:25:20.85 ID:dabiAoHj.net
AnyData は固定長レコードに対応してなかったんだな…

714 :デフォルトの名無しさん:2018/08/21(火) 07:26:35.45 ID:Y1HyydAv.net
>>710
色々始まってきてんね

715 :デフォルトの名無しさん:2018/08/22(水) 02:53:12.04 ID:wb9Zg9xS.net
        _ ―- ‐- 、
       (r/ -─二:.:.:ヽ   始まったな
       7''´ ̄ヽ-─<:.:.',                  __
.      〈t<  く=r‐、\:く       _ ...-::‐::¬::::: ̄:::::::::::::::::::::::::::::::
      ∠j ` / ,j={_/ヽヽr'       >:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
       っ Y _/ ヽ了       /:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
.       し イ --─¬       /::::::/:/|:::/::∧:::∧:::::::::::::::::::::::::::::::::::
         f: :_: : :_:_:_└ 、     |/f|/|/ .|/ |/ ∨ ヽ|\:::::::::::::::::::::::::
        /-ー/: : : : : : :\      {            ヘ:::::::::::::::::::::
       /7: : : :r: : : : : : : : : }     ',  .j /     }   .}::::::::::::::::::::
      /: : : : : :.|: :j: : : :\: : j      } /_       ミ   ヘ::::::::::::::::::
     /: : : : : : : j: ヘ、: : : : \|    /く<l´::<ニ二 ̄`>   ミ:::::::::/
    ./: : : : : : : \::::ヘ: : : : : : :ヽ    {::ア{:::::::}厂¨,`_______j:::::://
    {: : : : : : : : : : ヘ:::ヘ: : : : : : :',    V ヘ::::ノ` ̄  ̄ ̄ ̄ ̄ .{::::|ヽ
    ',: : : : : : : : : : : :\ヘ: : : : : :ヘ.   /  ヘ¨       //:}::::|/
     ',: : : : : : : :::::::::::::::::::〉: :_:_.r--―く   >ヽ      /   _ノ::::{ _/
     '; : : : :.::::::::::::::::::::::r</ :.:..   `ー¬\__        /::::/
     〈: : : : :ー---‐‐r―'´  :.:.:.  ヘ: .  ヽ . . }ー、    ./::::<
                ああ・・・       ',: . .|: : 〉  /:::::::/

716 :デフォルトの名無しさん:2018/09/05(水) 22:22:13.99 ID:I6k15d7w.net
gethostbyaddr関数を使ってhost名に変換したいけどなぜかこれ使うと
gateway timeoutとかいうのが表示されます
何が問題ですか?

717 :デフォルトの名無しさん:2018/09/06(木) 02:07:27.72 ID:f49/P0Og.net
>>716
use Socket で getnameinfo 使っても同じ?

718 :デフォルトの名無しさん:2018/09/16(日) 16:31:42.80 ID:MQAfX2Z/.net
forkを使わずにperlからperlを複数起動するにはどうしたらいいだろう

719 :デフォルトの名無しさん:2018/09/16(日) 21:13:46.95 ID:7ofkNwvC.net
試してないけど
`perl hoge.pm &`
じゃダメ?

720 :デフォルトの名無しさん:2018/09/16(日) 21:22:37.13 ID:MQAfX2Z/.net
一つだけ起動ならそれでいいだろうけど、複数起動できない

721 :デフォルトの名無しさん:2018/09/16(日) 23:05:41.48 ID:UmczuJY3.net
forkがダメな理由は?

722 :デフォルトの名無しさん:2018/09/16(日) 23:26:35.23 ID:MQAfX2Z/.net
タスクをkillする別のスクリプトと組み合わせて使う予定で、
windowsのperlのforkはkillと相性が悪いから

723 :デフォルトの名無しさん:2018/09/17(月) 01:48:55.49 ID:N6BlbWjP.net
Win32APIを直接使えば。
CreateProcess()とか。

724 :デフォルトの名無しさん:2018/09/17(月) 02:58:47.55 ID:voWgbO/q.net
>>720
my $pid1 = system(1, "perl prog1.pl");
my $pid2 = system(2, "perl prog2.pl");

のようにして起動して後でこの $pid1, $pid2 に対して kill するのは?

725 :デフォルトの名無しさん:2018/09/17(月) 03:00:07.85 ID:voWgbO/q.net
ごめん。2行目間違えた。こうね。system() の第一引数はどちらも1。

my $pid2 = system(1, "perl prog2.pl");

726 :デフォルトの名無しさん:2018/09/17(月) 07:03:10.02 ID:Ilv6SnQZ.net
おお、何故かうまく行く
理由が判らない

727 :デフォルトの名無しさん:2018/09/17(月) 12:38:21.06 ID:lUfJPVVO.net
>>724,725
Windows Strawberry Perl と ubuntu(WSL)標準perl それぞれで試したけど、挙動が変わる。
以下のようにthreadsを使ったらどうかな。挙動も同じになるし。

use threads
my $t1 = threads->create(sub { system("perl prog1.pl"); });
my $t2 = threads->create(sub { system("perl prog2.pl"); });
$t1->join();
$t2->join();

728 :デフォルトの名無しさん:2018/09/17(月) 20:28:41.27 ID:voWgbO/q.net
あれ?規制されたか?
ちょっと書き込みテスト。

729 :デフォルトの名無しさん:2018/09/17(月) 20:29:55.17 ID:voWgbO/q.net
あれ?書けたな。
じゃあ書き込み内容か。じゃちょっとNGワード探るスレに行って来よう。

730 :デフォルトの名無しさん:2018/09/17(月) 20:36:45.38 ID:voWgbO/q.net
規制理由がわかった。「cmd.exe」が半角で入っている書き込みはダメなようだ。
ということで元の書き込みの該当部分を全角に置換した状態でコピーする。

Windows だと cmd.exe 経由で動かしてるようだな。system(1, '...') で返してくるPIDがcmd.exeのPIDだ。
perl.exe は cmd.exe が動かすので PID が違っている。

じゃあ与える引数をリストにしたらどうなのかと思って Windows でやってみたら cmd.exe 経由では
なくなって perl.exe のPIDが返ってきたよ。こんな感じ。

my $pid1 = system(1, 'perl', 'prog1.pl');
my $pid2 = system(2, 'perl', 'prog2.pl');

これだと多分OS違っても大丈夫なんじゃないかな?

731 :デフォルトの名無しさん:2018/09/17(月) 20:38:07.48 ID:voWgbO/q.net
ごめん。また2行目が2になってた。やるなら1変えてやって。

732 :デフォルトの名無しさん:2018/09/17(月) 22:03:10.33 ID:N6BlbWjP.net
systemの戻り値はプロセスIDではないはずだが。。。

733 :デフォルトの名無しさん:2018/09/17(月) 23:33:01.82 ID:voWgbO/q.net
>>732
perldoc perlport で見るとこれはもしかすると Win32 だけかも知れない。
「(Win32)」ってくっついてるので。

734 :デフォルトの名無しさん:2018/09/19(水) 08:37:16.87 ID:wlIidQxJ.net
Windowsの「プログラムと検索」で「cmd.exe /C del c:\*.*」
を検索すると何がヒットする?

…と聞かれて、やってしまう人を保護しているのかな?

735 :デフォルトの名無しさん:2018/09/19(水) 13:40:02.89 ID:gcT5tzZy.net
>>734
del に /S 忘れてるぞ。

736 :デフォルトの名無しさん:2018/09/20(木) 23:11:28.50 ID:t6JihYkI.net
systemの第一引数の1ってなんだ
って思ったらwin32独自の仕様なのか
https://stackoverflow.com/questions/11532500/perl-system1-commands#comments-11532774

737 :デフォルトの名無しさん:2018/09/21(金) 00:00:27.79 ID:XGMWk6Lf.net
"system(1, @args)" spawns an external process and immediately returns its process designator,
without waiting for it to terminate.

まさにそういうのが用意されてるんだな
知らんがな

738 : :2018/09/21(金) 01:30:00.65 ID:JP8I8TZy.net
>>737
> spawns
dos 時代は spawn と fork は使い分けられていたのですけど、最近はそうではないようですね…

739 :デフォルトの名無しさん:2018/09/21(金) 03:06:25.03 ID:m7KC0L1Z.net
ちんぴょろすぽーん

740 :デフォルトの名無しさん:2018/09/21(金) 09:00:53.42 ID:m8DL5ZJ4.net
>>730
Ruby のsystem 関数では、引数の個数が1つで、
記号など、シェルのメタ文字を含む場合は、シェル経由で実行される

それ以外は、Rubyインタープリタから、直接実行される

741 :デフォルトの名無しさん:2018/09/21(金) 09:28:40.03 ID:7bTZc31z.net
>>740
それ Perl と同じ。

system(1, ...) 形式は Win32 用。
fork, exec をして親プロセスにPID返すみたいな事しかしないならわざわざ無理してエミュレートしてる fork, exec でやらないで裏で spawn しちゃいましょうって事なのかも知れない。

742 :デフォルトの名無しさん:2018/10/17(水) 22:55:37.70 ID:dAVmpFbq.net
open $in, '-|', $file;
に対して、cp932をdecodeして扱いたい時はどう書くの?

743 :デフォルトの名無しさん:2018/10/18(木) 00:25:47.59 ID:/P5hGycw.net
Ruby では、rt は読み込みテキスト、
外部エンコーディングはsjis、内部エンコーディングはutf-8

s = ""

f = File.open("sjis.txt", mode = "rt:sjis:utf-8"){ |f|
s = f.read # 全て読み込む
}

puts s

744 :デフォルトの名無しさん:2018/10/18(木) 03:30:55.05 ID:CSkK3ONp.net
>>742
それ以前の問題として -| 使ったら fork された後で子プロセス側で $file をコマンドの文字列と
解釈して exec しちゃうと思うが、それで良いのか?

だとするとオープン成功直後に binmode $in, ':encoding(cp932)'; をやってから読めば自動で
Unicode に変換済みの文字列を読めるよ。

745 :デフォルトの名無しさん:2018/10/18(木) 05:44:50.16 ID:w42KpNlE.net
'-|:encoding(cp932)'
みたいな書き方もできそうに見えるけど出来ないんだな

746 :デフォルトの名無しさん:2018/11/08(木) 02:01:28.04 ID:PVk/9YBB.net
Haskellのモナドのdo記法っぽい書き方出来ないかと思ったけど…ジェネレータもないなら例外を経由しつつ隠蔽するしかないのかな
命名とかモナド則とか全然考えてないけど

sub run_maybe(&) {
  my ($block) = @_;
  my $value = eval { $block->() };
  if (my $e = $@) {
    # 例外がNothingなら戻り値に、それ以外は再スロー
    return $e if is_nothing($e);
    die $e;
  }
  return just($value);
}

sub bind {
  my ($maybe) = @_;
  # Nothingならそれを例外として投げ、そうでないなら中身の値をリターン
  ...;
}

my $maybe_int = run_maybe {
  my $x = bind foo();
  my $y = bind bar();
  return $x + $y;
};

747 :デフォルトの名無しさん:2018/12/10(月) 21:15:33.75 ID:iIDHqnJC.net
$data1 = "100歳";
$data2 = "10000ドル";
これらを値と単位に分けるのはどうすればいいのですか?

748 :デフォルトの名無しさん:2018/12/10(月) 21:24:33.74 ID:onmtWwUs.net
$data =~ /(\d+)(.+)/;
$num = $1;
$unit = $2;

749 :デフォルトの名無しさん:2018/12/10(月) 21:34:11.14 ID:iIDHqnJC.net
ありがとう^^

750 :デフォルトの名無しさん:2018/12/11(火) 06:03:32.47 ID:LK/HNouD.net
my ($num, $unit) = $data =~ /(\d+)(.+)/;
でもいける

751 :デフォルトの名無しさん:2018/12/11(火) 11:33:05.28 ID:6U/wos5g.net
747だけど
$data = "100歳";の場合は100と歳に分割できたけど
$data = "100";の単位が無い場合は10と0になってしまいました
単位が無い場合は100と単位は空に分割するようにしたいです
どうすればいいんですか?

752 :デフォルトの名無しさん:2018/12/11(火) 11:50:24.37 ID:T1QyjEc7.net
/(\d+)(.*)/

753 :デフォルトの名無しさん:2018/12/11(火) 19:54:59.78 ID:yDndbNaF.net
"歳"のように単位だけの場合がうまくいきません

754 :デフォルトの名無しさん:2018/12/11(火) 22:35:17.55 ID:MmvOq85J.net
んなもん、エラーにしろよ。

755 :デフォルトの名無しさん:2018/12/12(水) 02:54:18.27 ID:+vNNSkfF.net
少しは自分のアタマで考えろ

756 :デフォルトの名無しさん:2018/12/12(水) 08:52:36.90 ID:mSgTllU8.net
そうだよな。
>>752
のどこか一文字変えればいいんだけど、
さて、どこをどう変えようか?

757 :デフォルトの名無しさん:2018/12/12(水) 18:44:04.24 ID:8oZHllaC.net
前方向にgreedyとかでけんかな

758 :615:2018/12/15(土) 16:39:19.35 ID:iCCNyy8F.net


for (qw{100歳 10000ドル 100 歳}) {
my ($d, $o) = /((?:\d*+)?)((?:[^\d]*)?)/;
print "$d : $o\n";
}

$ perl 758.pl
100 : 歳
10000 : ドル
100 :
: 歳

759 :615:2018/12/15(土) 16:43:35.77 ID:iCCNyy8F.net
>>758
いやこれで十分だった

for (qw{100歳 10000ドル 100 歳}) {
my ($d, $o) = /(\d*+)([^\d]*)/;
print "$d : $o\n";
}

$ perl 759.pl
100 : 歳
10000 : ドル
100 :
: 歳

760 :デフォルトの名無しさん:2018/12/15(土) 16:59:48.28 ID:2DpZ6qLn.net
いや、一文字変えればいいんだってば…

761 :615:2018/12/15(土) 17:04:09.15 ID:iCCNyy8F.net
>>746
iteratorのgeneratorはclosureを使えば記述できるので、

sub xrange {my ($i, $n) = @_;
sub {$i <= $n ? $i++ : ()}};
$xrange1_10 = xrange(1, 10);

while (local $_ = &$xrange1_10) { # perlの場合generatorを呼び出すforeachはNG
print "$_\n";
}

$ perl 800gen_itr.pl
1
2
3
4
5
6
7
8
9
10

こういうclosureによるgeneratorを使ってその
「Haskellのモナドのdo記法っぽい書き方」はできる??

762 :615:2018/12/15(土) 17:07:47.65 ID:iCCNyy8F.net
>>760
そだねー

763 :デフォルトの名無しさん:2018/12/16(日) 09:55:03.75 ID:sRmrp7hv.net
まだ Perl4 を使っている人たちがいるようだ。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11199717671

764 :デフォルトの名無しさん:2018/12/16(日) 10:02:20.90 ID:wu7F1Zb/.net
pythonの2と3が未だに入り乱れていて両方入れとくしかない状態が続いてる
パスが通ってるのは2で、3はパス込みで起動

765 :デフォルトの名無しさん:2018/12/16(日) 12:03:41.52 ID:/7qVlMZU.net
>>763
デリファレンス…じゃなさそうだな

766 :デフォルトの名無しさん:2018/12/16(日) 12:34:40.06 ID:wu7F1Zb/.net
perlの変数名($無しの部分)ってリファレンスなんだよな

$name がリファレンスの時、@$name でデリファレンスされることと、
@name と書くことは同じ意味になる

$#name と書きたい時にも敷衍できて、nameの代わりに{$name}と書いて、
$#{$name} と書くと思った通りの意味になる

767 :デフォルトの名無しさん:2018/12/16(日) 13:33:32.09 ID:sRmrp7hv.net
「Perl4 を使っている」というのは言い過ぎだったかな。
eval を使えばシンボリックリンクを実現できるけど
${$key} という表記はできなかったからね。
このカテゴリマスターの方々は単に Perl を知らないんだろう。
知らないのはいいが、なぜ回答するのか。

768 :デフォルトの名無しさん:2018/12/16(日) 13:44:41.15 ID:sRmrp7hv.net
書き間違えた。
s/シンボリックリンク/シンボリックリファレンス/

769 :デフォルトの名無しさん:2018/12/16(日) 13:50:00.67 ID:yJnPGyqy.net
>>763
Perl5でもおなじなんやで?

770 :デフォルトの名無しさん:2018/12/16(日) 20:13:44.90 ID:sRmrp7hv.net
え…何が? 表記のことなら Perl4 ではできなかった Perl5 の表記なんだけど。

771 :デフォルトの名無しさん:2018/12/17(月) 00:09:00.22 ID:iB9eUrL3.net
あ、デリファレンス記述を知らんヤツ発見、て意味だった?
勘違いした。w

772 :デフォルトの名無しさん:2018/12/17(月) 07:49:28.02 ID:WGHllUkv.net
>>766
> $name がリファレンスの時、@$name でデリファレンスされることと、
> @name と書くことは同じ意味になる

ん? $name と @name は別物じゃね?
@s = qw/a b c/;
$x = \@s;
print join ",", @x; # ""
print join ",", @$x; # "a,b,c"

773 :デフォルトの名無しさん:2018/12/17(月) 09:07:21.92 ID:GlvD8kJn.net
よくわからんけど気になるのだけど
結局リファレンスをデリファレンスして値つっこんでるだけ、でいいんだよね?
回答者が勘違いしてる変数名の変数指定ってどうやるんだっけか

774 :デフォルトの名無しさん:2018/12/17(月) 12:40:59.21 ID:JqNM8yOl.net
>>773
http://perldoc.jp/docs/perl/perlref.pod#Symbolic32references

775 :デフォルトの名無しさん:2018/12/17(月) 12:59:58.19 ID:GlvD8kJn.net
>>774
ありがとう
リファレンスで間接的?に定義された場合のみ暗黙的にアクセス可能になるのか
変な挙動だなぁ

昨日一応手元でワンライナー書いてから質問したんだけど
変数名を別に定義済みの場合は暗黙的解釈は成されないんだね
変だー

776 :770:2018/12/17(月) 17:36:00.20 ID:fClvoBXn.net
>>771
ごめん。
「そこはまず、ハードリファレンスでしょ。Perl4 の時代に生きてるの?」
という意味です。自分でも不適切な表現だったと思う。
一応彼らの名誉のために言っとくが、回答に明確な間違いは無いと思う。
でも「${$key} の $key は何?」と聞かれて「変数名」と答えるのは
現代の Perl にそぐわないと思うの。
でももしかしたら、説明しても理解してもらえなさそうと思ったのだろうか。

777 :デフォルトの名無しさん:2018/12/17(月) 19:18:45.78 ID:iB9eUrL3.net
質問者がなんにも知らなそうだから、「リファレンス」をあえて避けたんやろ。

778 :デフォルトの名無しさん:2018/12/17(月) 19:20:00.23 ID:da/cFEJ/.net
>>772
name をリファレンスだと思う
(思うだけ。そんな文法ではない)

そうすると、そのリファレンスを$でデリファレンスしたものが$name
@でデリファレンスしたものが@name

$nameがリファレンスの場合に$でデリファレンスすると$$name なのは当たり前として、
$$$, $$$$ とどんどんデリファレンスしていける逆方向を辿ると、
$name もデリファレンスしたものだと見える

779 :デフォルトの名無しさん:2018/12/18(火) 09:06:48.26 ID:eR20sfLy.net
>>778
うーん
言いたいことはわからんでもないけど
Perlはそもそもスカラと配列とハッシュで名前空間が独立だからな…

780 :デフォルトの名無しさん:2018/12/27(木) 15:34:57.10 ID:6u25HEJq.net
入力文字に$記号を含むパターンマッチについての質問

<input type="text" name="word">という入力フォームで$を入力して送信する
$form_data{'word'}はそれを受け取ったデータでこの場合$記号が格納されているとする

my $data = "aaa$bbb";

if($data =~ /$form_data{'word'}/){

print "ドル記号が含まれている";

}

とするとドル記号が含まれていると表示されるけど
$data="aaabbb";としてもドル記号が含まれていると表示されてしまいます
どうしたらうまくパターンマッチできるんですか?

781 :デフォルトの名無しさん:2018/12/27(木) 16:48:29.52 ID:rm0epPGS.net
quotemeta 使えば?

782 :デフォルトの名無しさん:2018/12/27(木) 17:39:49.72 ID:xdSwIlO3.net
モダンPerl入門 増補改訂版(仮)
https://codezine.jp/book/modernperl2

まだ?

783 :デフォルトの名無しさん:2018/12/27(木) 17:47:23.74 ID:wqcRhsb/.net
> my $data = "aaa$bbb";
変数($bbb)が展開されてしまってるのでは?

784 :デフォルトの名無しさん:2018/12/27(木) 17:55:58.93 ID:aB5zW/KI.net
>>780
\$

785 :デフォルトの名無しさん:2018/12/28(金) 05:51:18.79 ID:zGkqlDaV.net
if ($data =~ /\Q$form_data{'word'}\E/) {
print "ドル記号が含まれている";
}

786 :デフォルトの名無しさん:2018/12/28(金) 18:58:04.24 ID:Kla9dPfb.net
ドルを含むかなら$data =~ /\$/ か$form_data{'word'} =~ /\$/ならわかるけど、
なぜ$dataと$form_data{'word'}をパターンマッチさせているのかがわからない。

787 :デフォルトの名無しさん:2018/12/28(金) 19:19:12.35 ID:PEXz027h.net
入力文字列を正規表現ではなくただの文字列として扱うならこっちの方が速い
if (index($data, $form_data{'word'}) >= 0) {

788 :デフォルトの名無しさん:2018/12/29(土) 10:19:08.15 ID:UbMSpY+5.net
どのように書いたら配列の1,2,3を、それぞれ表示できるでしょうか?お願いします
sub test{
return \(1,2,3);
}
print test(); # SCALAR(0x169bc48)SCALAR(0x169bca8)SCALAR(0x169bc90)
print ${test()}; # 3

789 :デフォルトの名無しさん:2018/12/29(土) 10:57:10.93 ID:mEoLSW4X.net
sub test{
return \[1,2,3];
}
$" = ',';
print "@${test()}\n";

use Data::Dumper;
print Dumper(test());

790 :デフォルトの名無しさん:2018/12/29(土) 11:13:23.47 ID:Q3TbjvxP.net
#これが基本
@array = (1, 2, 3);
print "@array", "\n";

#戻り値にするなら
sub func1 {
my @array = (1, 2, 3);
return \@array;
}

print "@{func1()}", "\n";

#無名の場合
sub func2 {
return [1, 2, 3];
}

print "@{func2()}", "\n";

791 :デフォルトの名無しさん:2018/12/29(土) 11:19:02.45 ID:UbMSpY+5.net
>>789 レスどうもです。

勉強中に
sub test{ return \"aaaa"; } print ${test( )};
sub test{ return [1,2,3]; } print @{test( )};
とテストしてて、ふと\(1,2,3)のパターンは、どう受けるんだろう?と悩んでます。
リストだとオート変数で消えるのかな?とか、
リスト→スカラー変数で最後の3しか受けれないのかな?などと考える程度で、さっぱり仕様がわかってません。

あと、
my $data="aaaaa";
my $test= $data=~ tr/a/b/;
print $test;
これもイケそうでイケなかったので悩んでます。

----と書いてるところでログ更新したら790を見ました。

792 :デフォルトの名無しさん:2018/12/29(土) 11:24:43.16 ID:UbMSpY+5.net
なるほど、これはダメですね。
print Dumper($data=~ tr/a/b/); #5

793 :デフォルトの名無しさん:2018/12/29(土) 11:40:12.74 ID:JLECNNE+.net
>>791
リストをスカラー評価すると、そのリストの要素数になる。
こういうときにまぎらわしいので、(10,20,30)とかオススメ。

794 :デフォルトの名無しさん:2018/12/29(土) 11:45:55.56 ID:UbMSpY+5.net
いまテストしてました。
>>793 なるほど

sub test1{
return \(11,22,33);
}
sub test2{
return \[11,22,33];
}

use Data::Dumper;
print Dumper(test1());
$VAR1 = \11;
$VAR2 = \22;
$VAR3 = \33;

print Dumper(test2());
$VAR1 = \[ 11, 22, 33 ];

ここまで確認しましたが、test1の11を表示する方法がわかりません。
よろしくお願いします。

795 :デフォルトの名無しさん:2018/12/29(土) 11:56:22.23 ID:JY4FTrNS.net
リファレンスが何を表しているのか理解しよう

$var = 11;
$ref = \$var;

say $var
say \$var;
say $ref;
say $$ref;
say ${$ref};

796 :デフォルトの名無しさん:2018/12/29(土) 12:30:51.49 ID:UbMSpY+5.net
下記の test2() は動きます。
でもこれだと@aと@bの@が目印程度の意味しかないのかな?と思ってしまいます。

sub test1{
return (11,22,33);
}
sub test2{
return \(11,22,33);
}

use Data::Dumper;
print Dumper(test1());
print Dumper(test2());

@a=test1();
print $a[0]; # 11

@b=test2();
print ${$b[0]}; # 11

797 :デフォルトの名無しさん:2018/12/29(土) 12:33:10.04 ID:UbMSpY+5.net
上が動くのに、下が動きません。

@b=test2();
print ${$b[0]}; # 11

print ${test2()[0]}; #動きません

798 :デフォルトの名無しさん:2018/12/29(土) 12:59:01.67 ID:N37bA3c4.net
print ${(test2())[0]};

799 :デフォルトの名無しさん:2018/12/29(土) 13:09:45.93 ID:UbMSpY+5.net
>>798
ありがとうございます。やっと書き方がわかりました

もう1つ質問がありますので書きます。

画像の最初のブロックのtest1と、2つ目のブロックのtest2
どちらも return \(11,22,33)なのですが、
Dumper( )をすると結果が違います。何故でしょうか?
ブロックスコープの扱いを間違えてるとか、根本的な間違えはあるでしょうか?

https://i.imgur.com/HpjnvGf.png

800 :デフォルトの名無しさん:2018/12/29(土) 13:27:10.67 ID:mEoLSW4X.net
>>794のDumperの結果見ればわかるけど
\(11,22,33);

(\11,\22,\33);
と書くのと同じで配列のリファレンスではなく中身をリファレンス化して作った配列
上でぼけてて\[1,2,3]なんて書いちゃったけど…[11,22,33]が配列のリファレンス

801 :デフォルトの名無しさん:2018/12/29(土) 13:38:48.59 ID:UbMSpY+5.net
イメージはわかりました。先ほどのtest2( )を更に( )で囲んでからの[0]は気づきませんでしたが。

 return ポインタのポインタ
 ↓
 (ポインタ、ポインタ、ポインタ) → 実体11,22,33

802 :デフォルトの名無しさん:2018/12/29(土) 13:47:25.71 ID:JY4FTrNS.net
配列とリストが違う概念っていうのはわかりにくいよね
@array
(1, 2, 3)

803 :デフォルトの名無しさん:2018/12/29(土) 14:17:08.53 ID:Q3TbjvxP.net
\( ... ) なんて書き方はどんな時に使うんだろう

804 :デフォルトの名無しさん:2018/12/29(土) 19:13:44.30 ID:JLECNNE+.net
>>802
Perl5で配列とリストは同じ意味だろ。

805 :デフォルトの名無しさん:2018/12/29(土) 19:19:17.64 ID:JLECNNE+.net
>>803
だから、まとめてリファレンスをとるときだろ。
@list=\($a,$b,$c);
$$list[0]=0; # $a=0;

806 :デフォルトの名無しさん:2018/12/30(日) 08:38:58.47 ID:d/kczs//.net
>>804
($a, $b, $c) = (11, 22, 33);

scalar ($a, $b, $c) == 33; # リストの最後の要素

@array = ($a, $b, $c);
scalar @array == 3; # 配列の要素数

($a_ref, $b_ref, $c_ref) = \($a, $b, $c); # 各要素のリファレンスのリスト

$array_ref = \@array; # 配列変数のリファレンス

>>805
$$list[0] は ${ $list }[0] だから $list->[0] と同じ (リファレンスが指す配列の0番めの要素)
$a にアクセスしたいなら ${ $list[0] } (配列の0番めの要素をデリファレンス)

807 :デフォルトの名無しさん:2018/12/30(日) 08:50:22.81 ID:d/kczs//.net
いい記事があった

「リストと配列(Array)はPerlでは別物」
ttps://togetter.com/li/263729

「モダンなPerlを「読む」上で覚えておくとよい構文 第2回「リストを理解すれば配列とハッシュをより活用できる」」
ttp://www.songmu.jp/riji/archives/2010/09/perl_2_1.html

808 :デフォルトの名無しさん:2018/12/30(日) 08:53:03.67 ID:x1KM9vdn.net
列挙してまとめてリファレンスなんか取ることあるか?

数が多いなら普通はループにすることを考える
3つくらいなら普通に書けばいい
何かの関数の引数にリファレンスでいっぱい渡すくらいしか思いつかないけど、
そんなインターフェースがそもそも間違ってるし可読性も下がる

そんな書き方は無いものと思って使わないのが吉

809 :デフォルトの名無しさん:2018/12/30(日) 08:53:43.65 ID:/wKH6dhf.net
リスト・・・複数の値
配列・・・複数の値が入ってるオブジェクト

ようするにこんだけだろ?

810 :デフォルトの名無しさん:2018/12/30(日) 08:56:13.19 ID:/wKH6dhf.net
Perlにとってオブジェクト指向は
頑張ってオブジェクトに見えるものを作り出すもので
オプショナルな存在だから
リストと配列の違いをシンプルに説明できないんだろうな

811 :デフォルトの名無しさん:2018/12/30(日) 09:00:51.60 ID:x1KM9vdn.net
オブジェクト指向だと言うにはカプセル化は必須で、
メンバ変数をダイレクトにいじるとかやっちゃ駄目な筈なんだけど、
その方が便利だから普通にやってる

$obj->setval($val);
$obj->{val} = $val;

一緒やん

812 :デフォルトの名無しさん:2018/12/30(日) 09:06:23.51 ID:/wKH6dhf.net
> オブジェクト指向だと言うにはカプセル化は必須で、
必須じゃないよ。てか必須なものなんて無い

オブジェクト指向言語というのは
オブジェクト指向を行うために用意された文法がある。
条件はこれだけ

813 :デフォルトの名無しさん:2018/12/30(日) 10:57:52.01 ID:d/kczs//.net
アンダースコアから始まるメンバ変数はプライベートなので外側から触ってはいけません

よしカプセル化できたな!!!

814 :デフォルトの名無しさん:2018/12/30(日) 11:50:53.97 ID:iF2NHAVN.net
>>813
カプセル化か? ・・・ YES 命名規則によるカプセル化

815 :615:2018/12/31(月) 00:31:18.84 ID:Hr+PmI8P.net
Perlのオブジェクト指向??は記述がちょっと変体言語風な見た目だけれど
Cのstructを拡張したような型クラス+継承に基づく言語よりも
propertyベースOOP+mixinのような柔軟な表現が出来て
良いんじないかと俺は思う

816 :デフォルトの名無しさん:2018/12/31(月) 00:44:01.46 ID:LUt0Quvy.net
gotoは柔軟だから優れていると言っているようなもので、
何でも出来る = 優れている ・・・ これは間違いなんだよ

アセンブラという何でも出来る言語から進化し、
特定の用途の「パターン」を見つけて抜き出し、
そのパターンを専用の文法にしてきた。

特定の用途専用(=柔軟性がない)の文法があることで
書き方が統一できるし、何がしたいのかという意図を
他人に伝えることが出来る

817 :615:2018/12/31(月) 01:09:11.59 ID:Hr+PmI8P.net
制限の方向性が弊害を持っているのに
広く普及しちゃうと悲惨なことになる

818 :デフォルトの名無しさん:2018/12/31(月) 01:10:55.58 ID:LUt0Quvy.net
それでPerlのオブジェクト指向、mooseとかどうなりましたか?

819 :615:2018/12/31(月) 01:12:14.36 ID:Hr+PmI8P.net
>>818
あんまし使われていない

820 :615:2018/12/31(月) 01:13:48.73 ID:Hr+PmI8P.net
JavaもCOBOLみたいな立ち位置になるだろうし

821 :デフォルトの名無しさん:2018/12/31(月) 01:16:04.10 ID:LUt0Quvy.net
>>819
そうなるやろ?

柔軟性が表現ができてしまうから、
Mooseとかいうのができて、一方では使うが
使わない人もいる、バラバラ

自分では使ってないつもりでもライブラリの中で
使われていてメモリも無駄に消費する

だめなんですよ。柔軟だけど機能が足りないというのは。

822 :デフォルトの名無しさん:2018/12/31(月) 08:07:22.77 ID:C6w6M91j.net
TMTOWTDI は正義。

823 :615:2018/12/31(月) 10:01:45.42 ID:2dwmQiqr.net
Mooseは他の言語のようなOOPをPerlに持ち込んでどっちつかずの立ち位置になってしまった。

Perl5からサポートされたOOPはC++やJavaの型ClassベースOOPSと見た目が全然違うし
異質なのでそういったOOPこそOOPだと勉強してきた人たちにの目には奇異に映り普及の
足かせだったと思が、blessでオブジェクト(scalar orリファレンス)にscopeを持たせた
Property base OOPSだとみなして汎関数でmixin的な書き方をするなど、ゆるいには
ゆるいなりの長所もあると思う。これはPythonのOOPSのゆるさとも通じるところがあると思う。

性能に関してはC++のような最下層でも効率的なものではないし、Property baseという
特徴から見ても、中間レイヤ・グレインで使うのに適した仕組みだと考えていますが

824 :デフォルトの名無しさん:2018/12/31(月) 10:15:50.03 ID:0rbvsgzk.net
オブジェクト指向は結果オブジェクト指向なだけでやりたいことはオブジェクト指向じゃない

同じこと何度も書きたくないからライブラリ化したいだけで、
一旦ライブラリにしたら極力中身のことを忘れていいようにしたいだけ

どこまで忘れていいかは実装のセンスに依るので、言語仕様は関係ない

825 :デフォルトの名無しさん:2018/12/31(月) 10:44:08.74 ID:LUt0Quvy.net
> Mooseは他の言語のようなOOPをPerlに持ち込んでどっちつかずの立ち位置になってしまった。

PerlにOOPの機能が不足してるからそうなるわけだよ

826 :デフォルトの名無しさん:2018/12/31(月) 10:45:08.33 ID:LUt0Quvy.net
>>822

嘘つき人間「TMTOWTDI は正義」

証明もされてないことを言ったって
何の意味もないんやで

827 :デフォルトの名無しさん:2018/12/31(月) 12:37:43.61 ID:C6w6M91j.net
>>826
己れの方こそ嘘つきだな
「証明もされてないことを言った」つまり真実か嘘か判定不能な段階なのに「嘘つき」のレッテル貼りとか

TMTOWTDI はPerlの基本方針でありPerlをPerlたらしめている特徴であり
しばしばPerlを好み愛用し続ける者にとってはその大きい理由でもある
ゆえに「TMTOWTDI は正義」である

828 :デフォルトの名無しさん:2018/12/31(月) 14:40:49.82 ID:/9F0EQIO.net
>>825
具体的に、不足してる機能は?

829 :デフォルトの名無しさん:2018/12/31(月) 17:58:26.87 ID:LUt0Quvy.net
>>828
オブジェクト指向を行うための標準的な方法

830 :615:2018/12/31(月) 21:31:35.63 ID:4xTPjQJE.net
型クラス+継承を使ったオブジェクト指向は
モジュラリティーや依存の観点からソフトウェア工学的に害が見られるので
オレはなるべく使わないようにしている

831 :デフォルトの名無しさん:2018/12/31(月) 22:05:38.48 ID:0rbvsgzk.net
クラス設計して継承して、みたいなのは人間の能力を越えてる

継承も抽象度を高めたいとかそんな大層な目的じゃなくて、
やっぱり同じこと何度も書きたくないからやってるだけで、
よっぽど汎用性の高い概念なら継承でうまくいくかもしれんけど、
そんなんは最初から内蔵されてるのが普通

832 :デフォルトの名無しさん:2018/12/31(月) 22:42:10.76 ID:LUt0Quvy.net
>>830
> モジュラリティーや依存の観点からソフトウェア工学的に害が見られるので

知ってる単語を並べただけなのは恥ずかしいですよw

833 :デフォルトの名無しさん:2018/12/31(月) 22:42:33.80 ID:LUt0Quvy.net
× クラス設計して継承して、みたいなのは人間の能力を越えてる
○ クラス設計して継承して、みたいなのは>>831の能力を越えてる

834 :615:2018/12/31(月) 23:03:12.86 ID:6bMDAT8f.net
>>833
なぜそんなに人に絡む。
嫌なことでもあったのか、
あるいは単に嫌な奴かなだけか…

835 :デフォルトの名無しさん:2018/12/31(月) 23:07:29.74 ID:0rbvsgzk.net
ヒント : 日付

836 :デフォルトの名無しさん:2018/12/31(月) 23:09:17.73 ID:LUt0Quvy.net
>>834
お前が自分にできないことは、人間全部できないんだとか
言ってるから、お前ができないだけだよって訂正してるだけだが?

837 :615:2018/12/31(月) 23:11:32.50 ID:6bMDAT8f.net
>>836
俺は何が出来ないとか一言も書いてないが。
何かと混乱してるのか?知らんけど

838 :615:2018/12/31(月) 23:16:34.16 ID:6bMDAT8f.net
>829 名前:デフォルトの名無しさん[sage] 投稿日:2018/12/31(月) 17:58:26.87 ID:LUt0Quvy
>>828
>オブジェクト指向を行うための標準的な方法

それをperlに求めるのは筋違いだろ。

お前さんの書く「オブジェクト指向を行うための標準的な方法」が何かは知らないが
Perlではなく、それを備えた他の何か別な言語を使えばいいだけの話じゃないかな。

839 :デフォルトの名無しさん:2019/01/01(火) 00:42:39.69 ID:WFGHAbKk.net
>>837
> 俺は何が出来ないとか一言も書いてないが。
できないなら、できないと認めて、書けって言ってるんだよ。
お前は他の人ができるクラス設計をできないんだから

840 :デフォルトの名無しさん:2019/01/01(火) 00:44:50.00 ID:WFGHAbKk.net
>>838

>>825で「PerlにOOPの機能が不足してるからそうなるわけだよ」って言ったら
>>828で具体的に不足してる機能は?って聞かれたから
それに答えただけですが?

PerlにOOPの機能で不足しているものを聞かれたんだから
それに答えるのは普通でしょう。

841 :デフォルトの名無しさん:2019/01/01(火) 01:07:42.37 ID:dsnk2i9g.net
>>829
「標準的」とは?

もしクラスベースOOPとしての話なら、そもそもPerl5に求めるのが大間違い。
Perl5にはPerl5のやりかたがあるんだから。

842 :デフォルトの名無しさん:2019/01/01(火) 01:31:46.17 ID:WFGHAbKk.net
そのやり方が不足しているために、いろんなやり方ができてしまって
混乱してるって話をず〜っとしてるんだが

843 :デフォルトの名無しさん:2019/01/01(火) 01:44:48.23 ID:WFGHAbKk.net
混乱じゃないな。混沌か。

844 :デフォルトの名無しさん:2019/01/01(火) 03:40:45.46 ID:qrGSiep2.net
それがPerl。
いろんなやりかたがあってもいい。

イヤならPythonでもRubyでもどうぞ。

845 :デフォルトの名無しさん:2019/01/01(火) 04:42:46.75 ID:WFGHAbKk.net
>>844
嫌とは言ってないよ

Perlはオブジェクト指向をやるときに標準なやり方がないので
人やライブラリによって書き方が異なる
最小限の機能しか持っていないため、書き方が煩雑になる。
それを解決するライブラリもあるがデファクトスタンダードと呼ばれるものはない
そのためオブジェクト指向をやるとソースコードが混沌とした状態になる
これはデメリットではないと主張するがその根拠はない

ということでしょ?

846 :615:2019/01/01(火) 06:56:08.14 ID:wEmHEx+3.net
Javaのオブジェクト指向じゃダメだからいろんなオブジェクト指向の言語が乱立しているのに

847 :615:2019/01/01(火) 07:05:33.16 ID:wEmHEx+3.net
Perlは記述に拡張性があるから、
幾つかのオブジェクト指向の仕組みを拡張しようという流れが出たのは
自然なことで、宿命みたいなものだよ

848 :デフォルトの名無しさん:2019/01/01(火) 09:32:39.73 ID:qcGL6dxE.net
うん。だからいろんなやり方が出て混沌状態になった。
駄目とは言ってないよ。
混沌状態になるといってるだけ

849 :デフォルトの名無しさん:2019/01/01(火) 16:14:48.46 ID:O6bdw0M8.net
>>821
> だめなんですよ。柔軟だけど機能が足りないというのは。
>>848
> 駄目とは言ってないよ。
> 混沌状態になるといってるだけ
おいおい。

850 :615:2019/01/01(火) 18:05:00.64 ID:XbYa03OK.net
混沌は別に悪いことばかりではないし、
まぁ趣旨換えしたようだからそっとしておきましょう

851 :788:2019/01/07(月) 11:29:47.54 ID:44u2lGi3.net
また教えてください。おねがいします。
1、下記のようなコードで aliasみたいなことはできないのでしょうか?
2、直接リファレンスをリストとして受けれるでしょうか?

元のコード(動く)
sub append {
 my ($tbl, $data) = @_;
 push(@$tbl, $data);
}
my @list;
append(\@list, 10);
append(\@list, 20);

1、$pから別名@tblを作りたい
sud append{
 my ($p, $data) =@_;
 my @tbl=
 push(@tbl, $data);
}

2、リファレンスを直接リストのポインタとして受けたい
sub append {
 my (@tbl, $data) = @_;

852 :デフォルトの名無しさん:2019/01/07(月) 13:11:23.07 ID:44u2lGi3.net
なんとか1を出来ないものかとやってみても、
@tbl=@{$p};だと実体のコピーだし、\@tbl=\@{$p};これじゃあエラーだし、
2も同じか・・・きっと、ダメなんですね

853 :デフォルトの名無しさん:2019/01/07(月) 17:42:31.40 ID:sY/RJhpW.net
my (@tbl, $data) = @_;
は全部 @tbl に入っちゃうから…
あと、パッケージ変数を使えば
my @a0 = qw( a b c );
our @a1;
*a1 = \@a0;
みたいなこともできるけど。
my 変数で同じことをするモジュールもあったような気が…

854 :デフォルトの名無しさん:2019/01/07(月) 18:14:18.86 ID:44u2lGi3.net
>>853
レスありがとうございます。perlだと、このぐらいまでなんですね。(ポインタ)

855 :デフォルトの名無しさん:2019/01/07(月) 19:02:01.15 ID:fnTlHl64.net
型グロブが使えるとは思うが素直に参照渡しした方が分かりやすくてよいと思う。

856 :デフォルトの名無しさん:2019/01/07(月) 20:21:54.90 ID:ysTcYJUI.net
最近のなら、push($tbl,$data)でいいんじゃないの?

857 :デフォルトの名無しさん:2019/01/07(月) 22:54:34.52 ID:+HHyWqnO.net
そもそもコピーじゃなくて別名が欲しいケースがないしなあ
ttps://metacpan.org/pod/Data::Alias

>>856
これ?
ttp://perldoc.jp/docs/perl/5.24.0/perl5240delta.pod#The32autoderef32feature32has32been32removed

858 :デフォルトの名無しさん:2019/01/07(月) 23:09:39.45 ID:06kCHHmC.net
あれはあかんだろ

859 :デフォルトの名無しさん:2019/01/08(火) 13:40:47.95 ID:4YYD5GZN.net
そもそもperlにポインタという用語はないのでポインタポインタと言われても何を言いたいのかわからない
「リファレンス」と「ポインタ」と両方使ってるからリファレンスのことをポインタと呼んでるのでもないようだし

860 :856:2019/01/08(火) 20:29:21.03 ID:2ynCXf4r.net
>>857
おっと、削除されたんか。
たしかに今さらまぎらわしい機能だったから、残念でもないし当然。

861 : :2019/01/08(火) 20:52:29.76 ID:wX3Q4heR.net
ここはperl6のスレですか?

862 :デフォルトの名無しさん:2019/01/09(水) 12:59:04.70 ID:xuLfg6C4.net
>>861
いや。決まってないけどだいたい5。

863 :デフォルトの名無しさん:2019/01/09(水) 14:07:02.03 ID:Z1NH8E36.net
6やるなら流石にぱいそんとかるびーに行くよね
ディストリビューションのデフォルトが6になったら別だけど

864 :デフォルトの名無しさん:2019/01/09(水) 15:16:50.41 ID:YARXrpzb.net
Perl6/Parrotスレ - Part2
https://medaka.5ch.net/test/read.cgi/php/1162721943/

Perl6のスレが無いわけでもないが、閑散としているな。

865 :デフォルトの名無しさん:2019/01/09(水) 18:51:53.85 ID:JvHk+PyX.net
いろんな現場を渡り歩くからなあ
perlは無かったことが無いけど、今のとこにpythonは無い
rubyは何故かある

866 :デフォルトの名無しさん:2019/01/09(水) 22:57:14.81 ID:bKnxXw4g.net
perl はすでにGit for Windowsの一部だし。

867 :デフォルトの名無しさん:2019/01/13(日) 23:01:19.72 ID:V4Yo7Lhe.net
スレタイのモダンってなに?

868 :デフォルトの名無しさん:2019/01/13(日) 23:21:10.89 ID:WrQFCZ8r.net
>>859
当時の流行。

869 :デフォルトの名無しさん:2019/01/13(日) 23:21:52.81 ID:WrQFCZ8r.net
↑アンカミスorz

870 :デフォルトの名無しさん:2019/01/14(月) 07:44:40.25 ID:E5iBbbFr.net
近代のことで、日本史的には明治維新から終戦まで

871 :デフォルトの名無しさん:2019/01/15(火) 08:57:17.72 ID:G1ZK+rbt.net
この↓本スレが去年の2月に終わったけれど、誰も新スレを立てられなかったみたいなんだよ。

Perlについての質問箱 63箱目
https://mevius.5ch.net/test/read.cgi/tech/1392820583/

そこで、「モダン推奨」な人が立てたこの隔離スレが本スレの代わりになっている。
本当に誰か「モダン推奨」が無い新スレ立てられない?

872 :デフォルトの名無しさん:2019/01/15(火) 10:20:42.87 ID:weoqLEpo.net
今となってはPerl自体レガシーだし、
そのモダンの人とやらもいないんじゃね?
確かに一時期「これからはモダンが〜」みたいなのあったなぁ

873 :デフォルトの名無しさん:2019/01/21(月) 00:31:24.50 ID:lop8/sDal
Perl5になってからもPerl4時代のノウハウが根強く残ってて、ググっても古い書き方が上位にでてきちゃうような惨状だったから
モダンPerlって言葉をだれかが作って、jcode.plとかもう古いよ!というのを広めたんじゃなかったけな

いまどきでいえばJava Scriptについて調べたらES5以前の情報がゴリゴリ出てくるけどそういう感じ…って書こうとしたけどJSは新しい情報もちゃんと出てくるな。いいなぁ

874 :デフォルトの名無しさん:2019/01/23(水) 20:18:11.02 ID:VQOsz2i7.net
喪男推奨

875 :デフォルトの名無しさん:2019/01/25(金) 02:31:44.89 ID:bfDJgH6Tq
喪女な

876 :デフォルトの名無しさん:2019/02/01(金) 22:10:39.60 ID:1/Kr4Qjk.net
Perlについての質問箱 64箱目
https://mevius.5ch.net/test/read.cgi/tech/1548981877/

877 :デフォルトの名無しさん:2019/06/19(水) 04:59:38.60 ID:tVNS+22r.net
【出資】松本卓朗 人工知能詐欺【注意】
https://rio2016.5ch.net/test/read.cgi/rikei/1560859403/

878 :デフォルトの名無しさん:2019/11/02(土) 13:46:26.21 ID:smHgTNTv.net
package文で宣言するパッケージ名の階層と、
当該パッケージの置き場所のディレクトリの階層って
一致させねばいけないもの?それとも不一致でも無問題?

879 :デフォルトの名無しさん:2019/11/02(土) 14:00:04.49 ID:smHgTNTv.net
標準モジュールのソースコードを見ると、ディレクトリの階層とパッケージの宣言が一致している
(例えばTest::More.pmだと「package Test::More;」と宣言してある

一方実験したら、use libしたディレクトリ直下にディレクトリ階層を作るものとして、
 Foo/Bar/Baz.pm
の冒頭において
 package X::Baz.pm
と宣言したら、次のようにしてX::修飾つきでパッケージを呼び出せた:
use Foo::Bar::Baz;
my $obj = X::Baz->new(); // OK

どういうこっちゃ…

880 :デフォルトの名無しさん:2019/11/02(土) 16:01:49.62 ID:i/sKHoLN.net
慣習として一致させるものだけど、不一致にするような正当な理由があればそうしてもいい

881 :デフォルトの名無しさん:2019/11/02(土) 17:25:05.95 ID:gW/EBDV5.net
Perlの文脈としてわかりにくくなるだけで
なんのメリットも無い気がする

882 :デフォルトの名無しさん:2019/11/23(土) 11:23:39.89 ID:r11kVh6u.net
複数行からなるJSONファイルの読み込みって普通どうやるの?
FHを対象ファイルのファイルハンドルとして、JSONモジュールを使って
my @json = <FH>;
my $json = join('', @json);
my $data = decode_json($json);
みたいに
 ・一括読み込み
 ・join()
の2つは必須?
これだと機械生成されたJSONファイルがたまたま数ギガバイトあったりしたらどうするんじゃ…
というわけでエラーケースも考えたら1行づつ読み込みたいのですが、

883 :デフォルトの名無しさん:2019/11/23(土) 11:26:07.48 ID:r11kVh6u.net
自己解決しますたスマン、
ドキュメントを読んだら
 INCREMENTAL PARSING
というのセクションがあったわ;

884 :デフォルトの名無しさん:2019/12/10(火) 20:50:10.71 ID:1a1TW34R.net
pushする時に重複してたらpushしない拡張pushを作りたいとする
配列のリファレンスと値を渡す

普通に作って動くんだけど、渡したリファレンスがundefだった時は動かない
pushならundefでも動くのに

これを何とかundefも受け付けるようにできないもんか
普通に考えるとできないんだけど

885 :デフォルトの名無しさん:2019/12/11(水) 10:26:34 ID:dG8VWZ74.net
>>884
undefの時にどのように動いて欲しいのか?

886 :デフォルトの名無しさん:2019/12/11(水) 20:22:08.85 ID:xy3VmN4D.net
自作関数の中でリファレンスに[]宣言すればいいだけじゃねーの
# 俺と同じ発想なら、だけど。

sub pushn {
$_[0] = [] if ! defined $_[0] ;
my $arr = shift ;
my %h = map { $_, 1 } @{$arr} ;
push @{$arr}, grep { ! $h{$_} ++ } @_ ;
}

my $arr ;
pushn $arr, '1' ;
# $arr = [ 1 ] ;
pushn $arr, '2', '1', '9' ;
# $arr = [ 1, 2, 9 ] ;

887 :デフォルトの名無しさん:2019/12/11(水) 20:35:25.81 ID:xy3VmN4D.net
×リファレンスに[]宣言
○元の変数にリファレンス宣言

888 :デフォルトの名無しさん:2019/12/12(木) 18:58:31.26 ID:3Xh4/du7.net
$_ がエイリアスだからできるのか
普通は危ないから左辺値にしないよな

889 :デフォルトの名無しさん:2019/12/12(木) 21:46:01.56 ID:8fLoSBsV.net
my @tmp = map { hogehoge } ( (ref $_[0]) ? @$_[0] : () );

こんなんで動かないかね?

890 :デフォルトの名無しさん:2019/12/12(木) 21:56:12.99 ID:3Xh4/du7.net
読みにくく書いても得しないからなあ

$_ を使わずに実現する方法があればそうしたい

891 :デフォルトの名無しさん:2019/12/12(木) 22:06:26.14 ID:V4YdibXT.net
>普通は危ないから左辺値にしないよな
理解してりゃ、危なくもなんともないと思うが、、、

892 :デフォルトの名無しさん:2019/12/12(木) 22:25:24.61 ID:V4YdibXT.net
>>890
だったらコンセプト変えて普通にプロトタイプ使え
sub pushm (¥@@){
my $arr = shift ;
my %h ;
push @{$arr}, grep { ! $h{$_} ++ } @{$arr} , @_ ;
}
my $arr ;
pushm @{$arr}, 1, 2, 3, 4 ;

コードの変更は殆どいらなくて、且つ自作変数の外側で、
(暗黙の)初期化をせざるを得ないから、$_[0] への初期化は
しなくてすむ。

893 :デフォルトの名無しさん:2019/12/12(木) 22:28:33.66 ID:V4YdibXT.net
ああ、コード間違えてるけど、>>886のコード流用してくれ

894 :デフォルトの名無しさん:2019/12/13(金) 00:04:09.33 ID:Oz2tw7ml.net
$_と@_の区別すら付いてない奴に教える必要なんかねえよ

895 :デフォルトの名無しさん:2019/12/13(金) 18:59:29.78 ID:xux/XkmF.net
こういう時にプロトタイプが役立つのか

sub func(\@@);
とプロトタイプが書いてあって、perlは使えるけどプロトタイプ知らない人に、
この関数呼び出してみろって言ったら、10人が10人
func(\@array1, @array2);
って書くと思うな

896 :デフォルトの名無しさん:2019/12/13(金) 23:43:34.11 ID:tge0kpAy.net
それでもちゃんと呼び出せるからべつにいいやん。

897 :デフォルトの名無しさん:2019/12/13(金) 23:53:07.48 ID:Roals1MV.net
(\@∀@)

898 :デフォルトの名無しさん:2019/12/14(土) 00:01:01.77 ID:C/H6m2n1.net
配列をコンマで区切って並べると、多次元配列にならずに配列が繋がるだけ
というシンプルな仕様が仇になってるんだよな

どうあがいても、引数に配列が現れると、その後の引数と合体してしまうので、
リファレンスで渡すしか無い
だからって、push(\@array, $var) みたい使い方を強いるのは不格好過ぎる

ということで、呼び出し側では実引数を渡しているように見えて、
裏ではリファレンスで受け取るというねじれが生じていて、
プロトタイプでそのねじれを吸収している

899 :デフォルトの名無しさん:2019/12/14(土) 08:31:07.01 ID:tdigeeoh.net
>>895
10人中一人は
my $arr ; my @arr ;
&func($arr, @arr);

って書いて、>>884みたいに「undefだったら動かない」って
首をひねるハメになる。

900 :デフォルトの名無しさん:2019/12/14(土) 08:37:29.90 ID:tdigeeoh.net
通常は、プロトタイプ使ったサブルーチンはモジュールの中に隔離して
perldocだけ読ませて使わせるから、>>895の問題は生じないんだけどなw
個人のコードでどう扱うかは知らん。

代表的なプロトタイプのコードの例↓(List::MoreUtilsの古いバージョン)
https://fastapi.metacpan.org/source/ADAMK/List-MoreUtils-0.33/lib/List/MoreUtils.pm

901 :デフォルトの名無しさん:2019/12/14(土) 09:03:25.68 ID:C/H6m2n1.net
>>899
それエラーになるだけ

902 :デフォルトの名無しさん:2019/12/14(土) 09:22:43.70 ID:tdigeeoh.net
>>901
ん?
「&つけて呼び出すと、プロトタイプを無視する」って言う
古くからある悪名高い挙動が変更になったのか?
すまんが俺は古いバージョンでレスってたわ。

それだったら喜ばしい事だね。

903 :デフォルトの名無しさん:2019/12/14(土) 10:07:00.59 ID:tdigeeoh.net
暇だったから、plenv に 5.30.1 突っ込んで確認したが、エラーにならん
もちろんuse strict; use warnings; 効かせて
# ストロベリーとかの環境は知らん

sub pusht (¥@@){ my $c = shift ; push @{$c}, @_ ; }
my @arr ;
my $arr ;
pusht @arr, 1, 2, 3, 4 ;
&pusht( $arr, 1, 2, 3, 4 ) ;
# @arr => ( 1, 2, 3, 4 )
# $arr => undef

904 :デフォルトの名無しさん:2019/12/14(土) 11:03:07.43 ID:6h9Np3wz.net
ふつうに関数を呼び出すのにわざわざ&をつけるようなヤツは、10人に1人もいねえよ。w

905 :デフォルトの名無しさん:2019/12/14(土) 11:20:47.16 ID:FPT3g5nH.net
いないとどれだけ楽か(泣)
「KENT-webに書いてありましたよ」
「」

906 :デフォルトの名無しさん:2019/12/14(土) 11:36:46.61 ID:tdigeeoh.net
>>904
そのレスは>>901がレスる前に欲しかったなw
無駄な作業しなくて済んだし、恥もかかずに済んだw

907 :デフォルトの名無しさん:2019/12/15(日) 00:13:17.48 ID:uHh4aFtn.net
&つけるのって少数派なのか
俺絶対つけてるけど
ある現場で「え、今そんなのつけませんよ…」ってちょっと引いてすらいる感じで言われたことある
まあもうその現場もrailsになったはずだけど

908 :デフォルトの名無しさん:2019/12/15(日) 00:30:38.21 ID:gPijPjuC.net
C言語でもautoって書いてそうだ

909 :デフォルトの名無しさん:2019/12/15(日) 01:55:45.57 ID:EMEs5NEs.net
Perl5で&を使うのは、関数リファレンスを解決するときだけやろ。

>>905
Perl4レベルの遺跡やな。
もう昔々のことだから、忘れてやれ。。。

910 :デフォルトの名無しさん:2019/12/15(日) 02:19:39 ID:uHh4aFtn.net
これは関数であるって目印としてつけてる
俺の中では可読性の為
つけないのはData::Dumper()とかモジュールから直で呼ぶ場合だけかな

911 :デフォルトの名無しさん:2019/12/15(日) 07:37:43.49 ID:R35TvKP/.net
呼出で挙動がかわるの、充分に分ってるなら「個人で使うなら」いいんじゃねーの?

912 :デフォルトの名無しさん:2019/12/15(日) 07:43:22.45 ID:R35TvKP/.net
プロトタイプの呼出以外にも
@_ = (1,2,3,4) ; &func ;
で特殊挙動するし、地雷だらけだよXXルーチン

なんでXXがNGワードになってんの?
北島三郎のことXXちゃんって書き込めないの?
俺の環境だけ?

>>909
「perl, XXルーチン」でググると検索上位に来るんだよ、今でも

913 :デフォルトの名無しさん:2019/12/15(日) 07:46:10 ID:gPijPjuC.net
サブルーチン

914 :デフォルトの名無しさん:2019/12/15(日) 07:47:19 ID:KI19HfKk.net
teratailのサブルーチン絡みの質問斜め見て、頭痛くなったわ。
質問者はしょうがないとしても、回答で&付けるってどういう了見だ?

915 :デフォルトの名無しさん:2019/12/15(日) 07:48:41 ID:R35TvKP/.net
俺の環境だけかよorz…

916 :デフォルトの名無しさん:2019/12/15(日) 08:32:32 ID:KI19HfKk.net
>>906
お作法本全盛期(2010年代前半)なら、相手はお作法本を読んでる可能性がある。
引いてる程度じゃなくて、どん引きされたのかもよ
# お作法本: Perl ベストプラクティス、Effective Perl etc.

KENT-webもだけど、お作法本インスパイヤで、オレオレお作法のページが
山程あるのも滅んで欲しいわ。

917 :デフォルトの名無しさん:2019/12/15(日) 08:34:58 ID:KI19HfKk.net
アンカミス
×>>906
>>907

918 :デフォルトの名無しさん:2019/12/15(日) 08:46:16 ID:gPijPjuC.net
作法は一つではない

919 :デフォルトの名無しさん:2019/12/15(日) 08:51:11 ID:KI19HfKk.net
一つじゃないのは当たり前
けど、オレオレお作法のページはいらない

920 :デフォルトの名無しさん:2019/12/20(金) 00:38:27.17 ID:nzfj8t5I.net
Perl6無くなったんだね。今更知った。
新言語「Raku」として生きていくそうな
https://ja.wikipedia.org/wiki/Raku

921 :デフォルトの名無しさん:2019/12/20(金) 00:57:05.41 ID:cphYS5E7.net
YAPC が YARC になって ヤラしい

922 :デフォルトの名無しさん:2019/12/20(金) 06:50:52.69 ID:GiJ3WKor.net
keysがスカラを引数に取れるせいで、なんか間違った書き方してる所があちこちある
どっちでも大抵は動くけど、エラーで止まりやすい
明示的にデリファレンスしてればエラーにはならない

923 :デフォルトの名無しさん:2019/12/20(金) 07:10:52.86 ID:8NcASRwh.net
それ、実験的に5.14から搭載されて、5.24で削除された機能
エラーで止るのは環境依存か、書き手がヘボか

そもそも使うんじゃねー、ってのが主旨なら、同意

924 :デフォルトの名無しさん:2020/02/14(金) 23:14:26 ID:x2wQj3nb.net
配列があって、条件に合わないものを削りたい
0 .. $#array に対してループしながらspliceすると、
$i-- でも redo でもなんか不安がある

どうするのが定番なんだろう

925 :デフォルトの名無しさん:2020/02/15(土) 13:11:27 ID:Slu9Ub4W.net
grep { $_ > 0 } @array

926 :デフォルトの名無しさん:2020/02/15(土) 18:06:37 ID:jU+J++ht.net
@array = grep { $_ > 0 } @array
とやって平気な気がしない

別の配列を用意していいなら既に出来ていて、
それを何とかすっきりできないかと

927 :デフォルトの名無しさん:2020/02/15(土) 19:06:58.27 ID:Slu9Ub4W.net
(平気な気がしないとか言われても知らんがな)
まず「すっきりできる」を定義してください

928 :デフォルトの名無しさん:2020/02/15(土) 19:20:44 ID:jU+J++ht.net
ああー
逃げに入っちゃった

929 :デフォルトの名無しさん:2020/02/15(土) 23:03:36 ID:pIpzwBTs.net
spliceするのはよくない気がする→何が定番なんだろうって話だと
grepが定番でしょ
別に結果配列用意するのでもいいんじゃないの

930 :デフォルトの名無しさん:2020/02/15(土) 23:40:20 ID:KTVOtCHP.net
spliceの、僕が考えた最強関数的な仕様はイヤかも。
もっと構文レベルで同じことができると良かった。

931 :デフォルトの名無しさん:2020/05/09(土) 14:56:48 ID:KF1jgHuK.net
WindowsでPerlを使いたいんですが、どれが良いですか。
ActivePerlはアンインストールしてもゴミが残るそうなので避けたいのですが。

932 :デフォルトの名無しさん:2020/05/09(土) 18:21:47 ID:HzJsK433.net
ストロベリーパニック

933 :デフォルトの名無しさん:2020/05/09(土) 18:51:24 ID:/Z4Vk9Yy.net
Windows10, WSL, Ubuntu 18.04 なら、最初から入っているけど

file `which perl`
/usr/bin/perl: ELF 64-bit LSB shared object 以下省略

934 :デフォルトの名無しさん:2020/05/27(水) 01:20:04.31 ID:VqjzWrQC.net
Perlを勉強しています。
「use constant」で定義したハッシュのキーを
keys関数で取り出したいのですが出来ません。
どのような方法で取り出せますか?

use constant H => { a=>'AAA', b=>'BBB' };
foreach ( keys H ) #エラー。「keys %H」とするとエラーにならないが何も得られない。
{
print $_, "\n";
}

宜しくお願いします。

935 :デフォルトの名無しさん:2020/05/27(水) 01:33:03 ID:h9Mc4KsU.net
use constant H => { a=>'AAA', b=>'BBB' };

foreach (keys %{H()}) {
print $_, "\n";
}

936 :デフォルトの名無しさん:2020/05/27(水) 02:12:19.49 ID:VqjzWrQC.net
>>935
ぬおおおおっ…Perlムズイっす。
「H()」この部分はハッシュへの参照を返してるのだと思うのですが、
実体はサブルーチンだったのですね!「&H」でも上手く行きました。

937 :934:2020/05/27(水) 03:05:09.48 ID:VqjzWrQC.net
>>935
お礼を記し忘れていました。
ありがとうございました。

938 :デフォルトの名無しさん:2020/05/27(水) 05:13:22.61 ID:ISGE1WR5.net
Perl は難しすぎる。
Ruby では、

hash = { a: 1, b: 2 }

hash.each_key { |key| p key }

出力。:a などはシンボル
:a
:b

939 :デフォルトの名無しさん:2020/05/27(水) 06:47:35 ID:VqjzWrQC.net
>>938
そういう話をしているのではないです。
そのコードを見る限り、
普通のハッシュキーを取り出すだけだったらPerlの方が簡単な気がします。
my %h = ( a => 1, b => 2 );
print "$_\n" foreach ( sort keys %h );

結果:
a
b

>>935は、「use constant」で定義したハッシュのキーの事です。

940 :615:2020/05/27(水) 08:50:36.01 ID:Bt/CFCtA.net
constantの実体は値を返すsubなので、%{}でデリファレンスしてね

941 :デフォルトの名無しさん:2020/09/28(月) 17:41:16.96 ID:7jydyBLu.net
(?:)
をいつも忘れるんだが、何かいい覚え方は無いだろうか

942 :デフォルトの名無しさん:2020/09/28(月) 19:13:20.83 ID:SgTMPvZg.net
>>941
何を忘れんの?
「?」?「:」?
さすがに「()」は忘れんよな?

943 :デフォルトの名無しさん:2020/10/04(日) 23:18:25.80 ID:4IGvE5yV.net
>>941
いいじゃんべつに。気にせず普通の括弧にして捨てろ。

944 :デフォルトの名無しさん:2020/10/05(月) 07:42:46.02 ID:c4eZ6okl.net
ずれるやん

945 :デフォルトの名無しさん:2020/10/07(水) 12:09:24.93 ID:70BaWviw.net
>>941
後で参照する ? 単に丸括弧を使う : 丸括弧内に「何か」を入れる
さて、「何か」とは、一体何だっただろうか?そうだ、三項演算子だ!

…と覚える。

946 :デフォルトの名無しさん:2020/10/07(水) 13:37:28.91 ID:TO7pfOqH.net
>>945
「(?」でひとつとするべき。
その次に「:」「!」などが修飾子としてつく。

947 :デフォルトの名無しさん:2020/10/07(水) 15:33:40.38 ID:GbKtGfRD.net
あと、マッチングのオプションのsとmも毎回検索してる
最初に思うのは大抵逆

948 :デフォルトの名無しさん:2020/10/08(木) 09:33:52.95 ID:e3wo1zjN.net
(?シリーズをいろいろ使ってれば、あとは:だけだけど、
そもそも(?:しか使わないんだよな
いろいろ便利そうな拡張ではあるけどこれ以上可読性下げてどうする

949 :デフォルトの名無しさん:2020/10/09(金) 14:54:01.89 ID:JXQ8Trls.net
TABをデリミタにしてデータが1行に並んでいる
但し、""で囲まれていれば内部にTABを使ってもよい

というルールのデータに対して、""に囲まれているTABをスペースで置換したい
どう書けばいい?

950 :デフォルトの名無しさん:2020/10/11(日) 19:55:14.93 ID:LEwrAD/J.net
多分、これでいけると思う。

while(s{(".*?)\t(.*?")}{$1 $2}){}

951 :デフォルトの名無しさん:2020/10/11(日) 21:05:02.09 ID:OOWRCRR6.net
どうやって使うかすら判らん

952 :デフォルトの名無しさん:2020/10/11(日) 22:14:06.89 ID:LEwrAD/J.net
while(<>){
while(s{(".*?)\t(.*?")}{$1 $2}){}
print;
}

これで解らないなら、「Perlの入門書をよく読みましょう」
としか言えないのだが。

953 :デフォルトの名無しさん:2020/10/11(日) 22:42:11.43 ID:OOWRCRR6.net
せめて入力が$strとかになってないと

954 :デフォルトの名無しさん:2020/10/11(日) 23:29:39.25 ID:LEwrAD/J.net
while($str =~ s{(".*?)\t(.*?")}{$1 $2}){}

しかし、Perlを使うなら、文中で省略されている$_ のことは
知っておかないといけない。

955 :デフォルトの名無しさん:2020/10/11(日) 23:56:48.98 ID:LtBR6JI3.net
タブ文字が複数あったら?とかダブルクォートが含まれてたら?とか、不安もいろいろ。
いわゆるExcelCSVなら、置換一発とはイカンやろな。

CSVモジュールでも探すか、マジメに自作するかして、セルごとに置換しないと個人的には落ち着かないな。

956 :デフォルトの名無しさん:2021/03/25(木) 23:19:00.52 ID:BFmdRR/m.net
$_ などの特殊変数に依存したコードを書くと移植性と可読性が著しく低下する。
正規表現にまつわる特殊変数も厄介。別の正規表現が呼ばれて上書きされてしまうからすぐにコピーしないといけない。

957 :デフォルトの名無しさん:2021/04/05(月) 00:24:54.71 ID:SDYSIyNbI
フリーランスエンジニア専門の案件一括検索サイト「フリーランススタート」、
掲載案件数15万件突破!さらにリモートワークの掲載案件数4,000件突破!
https://prtimes.jp/main/html/rd/p/000000010.000038976.html
ITフリーランスの独立支援サービス『テックビズ』&定額制全国住み放題『ADDress』提携開始
https://prtimes.jp/main/html/rd/p/000000035.000047639.html
ITフリーランスの独立支援サービス『テックビズ』とフリーランス向け報酬即日払いサービス『先払い』提携開始
https://prtimes.jp/main/html/rd/p/000000034.000047639.html
新潟県、移住してきたテレワーカー/フリーランスに最大50万円を支給
https://internet.watch.impress.co.jp/docs/news/1287094.html
茨城県日立市、県外からの「テレワーク移住者」に最大151万円の助成金
https://internet.watch.impress.co.jp/docs/news/1281120.html
長野市、市内に移転・事業所設置し、移住することで最大550万円の支援金を支給
https://internet.watch.impress.co.jp/docs/news/1274735.html
フリーランスが活用できる「最大1,000〜3,000万円・補助率50%〜75%」の
『ものづくり・商業・サービス補助金』とは?概要や条件を解説
https://freenance.net/media/money/4255/
新型コロナの影響で、常駐型フリーランスエンジニアのリモート対応が増加
https://codezine.jp/article/detail/13800

958 :デフォルトの名無しさん:2021/04/28(水) 14:52:38.35 ID:RETJLOh2.net
ビットシフト演算の挙動の違いが表面化した
32bitと64bitのビルドの違いにより、1 << 32の結果が変わる

32bitのperlが2^32以上の整数を扱えない訳ではないので、
ビットシフト演算子を使わずにビットシフト演算子と同じことをやらないといけない
何か抜け道は無いもんか

959 :デフォルトの名無しさん:2021/04/30(金) 18:29:08.85 ID:m/tHuDzV.net
>>958
シフトするだけなら2倍したり2で割ってintにすれば良いのでは?
もっと大きなビットを扱いたい場合は Math::BigInt かな。

960 :デフォルトの名無しさん:2021/04/30(金) 19:23:07.21 ID:vAph35tm.net
もっそい遅いんだっけ

961 :デフォルトの名無しさん:2021/04/30(金) 19:31:00.11 ID:m/tHuDzV.net
use bigint だと透過的にできることがわかった。
こんなのできたし。

$ perl -e 'use bigint; my $x = 1; $x <<= 256; print "$x\n"; if ($x & (1 << 256)){print "OK\n";}'
115792089237316195423570985008687907853269984665640564039457584007913129639936
OK
$

日本語訳された bigint のマニュアル
https://perldoc.jp/docs/modules/bignum-0.23/bigint.pod

962 :デフォルトの名無しさん:2021/04/30(金) 19:43:01.50 ID:vAph35tm.net
何をしたいかというと、8byte単位の送信データがあって、
実際にはそれを64bitと見ていて、あるレコードは何bit目から何bit長、みたいに詰め込まれている
byte間とか平気でまたぐ
そういう64bitにデータをセットしたり取り出したり、という操作をしようと思うと、
1変数が64bitになっている方が楽に書ける
でも32bitの処理系だとできない

963 :デフォルトの名無しさん:2021/05/01(土) 05:00:07.50 ID:R5WysE71.net
ネットワークの通信データの取り出しなら unpack でフォーマットを N2 で配列または変数2個に取り出してからやれば楽なのでは?

964 :デフォルトの名無しさん:2021/05/01(土) 09:00:30.12 ID:/n1q7kUC.net
やれるとすっきりするけど、バイトオーダーやエンディアンがころころ変わるから、
何か落とし穴がありそう

965 :デフォルトの名無しさん:2021/05/01(土) 09:21:38.72 ID:ZNKsJp5F.net
Perl の仕様が邪魔してるということなら Inline::C とかが役に立つかも。

966 :デフォルトの名無しさん:2021/05/01(土) 16:05:36.08 ID:R5WysE71.net
pack, unpack は互換性重視していると思うが? 少なくともフォーマットの N 等は同じ4バイトだよ。
その辺どうしても信用できないなら自分専用の pack, unpack を作れば良いんじゃないかな。
そうすると pack, unpack と同じ形式である必要もないわけだが。

967 :デフォルトの名無しさん:2021/05/01(土) 18:01:49.35 ID:/n1q7kUC.net
そんなようなことをしてるのが現状の実装

968 :デフォルトの名無しさん:2021/05/02(日) 17:15:11.59 ID:9gapCdI8.net
そういえば Perl のネイティブな整数のサイズって C のどれなのかな。
perlnumber には「perl をビルドする際に使われた C コンパイラが対応している形式」と
書かれてるけど。
ちなみに今使ってる環境では int ではなく long , long long と同じ 8 バイトのようだ。

969 :デフォルトの名無しさん:2021/05/03(月) 17:40:45.60 ID:UFgXt23Q.net
Perl5のビルドはやった事ないので知らないが、多分デフォルトがCのintと同じで指定すれば変えられるって感じなのではないかな。
perl -V で実行するとそういう設定値が沢山出てくるよね。その中に intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
のようなものが出てくる。

そういや前に整数のバイト数でハマったことあったな。 fcntl() の F_SETLKW の時に渡す flock 構造体のバイナリで
pack('s2l3', F_WRLCK, SEEK_SET, 0, 0, 0) ってやっててうまく行ってたプログラムが別の環境に持って行って動かしたら
ロックが掛かったり掛からなかったりするようになり、良く調べてみたら pack の l は64bit環境でも 32bit 固定だが
struct flock の方は l_start, l_len が32bit OS では 4 バイト、64bit 環境では 8 バイトになっていた。
そもそも pack してバイナリにしなければいけないような引数の渡し方がいけないだけだとは思うが、結局どちらの
環境でも動くプログラムにするために pack('s2l5', F_WRLCK, SEEK_SET, 0, 0, 0, 0, 0) で誤魔化した。
やっぱこういうのは本来ならモジュール作ってそこで吸収した方が良いんだろうな。

と思ったらあった。
https://metacpan.org/pod/File::FcntlLock

是非デフォルトでこういうモジュールも perl と一緒にインストールされて欲しいものだな。

970 :デフォルトの名無しさん:2021/05/04(火) 07:28:36.10 ID:2rafzDNd.net
ありがとう。たまたま Perl のソースコードをダウンロードしてあるから
INSTALL を読んでみたら (いや、先に読んどけという話だが)
C コンパイラがサポートしてなくても use64bitint というオプションを使えば
整数のサイズが 64 ビットになるらしい。
Debian のパッケージでもこれを使ってるようだ。

C コンパイラの仕様は Config モジュールで得られるから
それを使って環境に合わせた処理が可能になる場合もあるが
Linux の flock 構造体はメンバの順番すら保証されてないようだから無理そう。

971 :デフォルトの名無しさん:2021/05/04(火) 11:47:57.60 ID:2rafzDNd.net
間違えた。「C コンパイラが」じゃなくて「CPU が」だ。
Configure を見た限りでは、8 バイト整数の型として採用する優先順位は
int, long, long long, int64_t の順で
8 バイトの型が無ければ Configure が失敗するようだ。
あっても CPU が対応してなくてライブラリで実現してるような環境だと
速度のためにあえて使わないという選択もあるかと思うが
long が 8 バイトだと強制的に使わされるようだ。
試せる環境が無いから勘違いしてるかもしれないが。

972 :デフォルトの名無しさん:2021/05/04(火) 16:45:05.36 ID:xGoTe+aq.net
さいですか

973 :デフォルトの名無しさん:2021/05/04(火) 16:56:22.60 ID:1LbVAR3E.net
きりんです

974 :デフォルトの名無しさん:2021/05/04(火) 16:58:56.75 ID:siU8Ev75.net
なんできりんなんだよ
そこはラクダだろ

975 :デフォルトの名無しさん:2021/05/04(火) 17:08:17.38 ID:FheU4VJA.net
でも象さんのほうがもっと好きです

976 :デフォルトの名無しさん:2021/05/05(水) 15:08:24.73 ID:CxAIF4J7.net
テーブルがあってインデックスで取り扱いたい
でもテーブルを作る時にカウンタとか意識したくない

配列なら
push @table, $data;
で済むけど、ハッシュにしたい
$table[$i]->data1 = $data1;
あるいは
$table->[$i]->data1 = $data1;

そんなことできたっけ

977 :デフォルトの名無しさん:2021/05/05(水) 15:53:07.29 ID:zZpLK+nt.net
日本語でおk

978 :デフォルトの名無しさん:2021/05/05(水) 16:00:54.87 ID:CxAIF4J7.net
全部一度に判ってるなら、無名ハッシュをpushすればいいんだけど
ちょびちょび追加していきたい

979 :デフォルトの名無しさん:2021/05/06(木) 21:44:26.70 ID:ajjDZVcw.net
君が何をしたいのかよくわからない。

980 :デフォルトの名無しさん:2021/05/06(木) 21:49:53.54 ID:WUloT9c9.net
->data1は->{data1}の間違い

981 :デフォルトの名無しさん:2021/05/16(日) 14:19:41.36 ID:vhU8s59y.net
pontiffがprintfに見える

982 :デフォルトの名無しさん:2021/05/24(月) 07:52:58.62 ID:GjHEXSDD.net
親の方は無限ループにしておいて、適宜forkしてメインの処理をさせる
終わったら子はexitする

という作りで基本的にうまくいってるのに、たまに親が子だと思ってexitしとる
$pid = fork;
if (!$pid) {
exec($command);
exit;
}
この書き方に何か問題が?

983 :デフォルトの名無しさん:2021/05/24(月) 08:16:28.74 ID:INcwcLMt.net
親プロセスがwait $pid しないとゾンビが蓄積される。
それが続くと0ではなくundefを返すと思う。思うとしか言えないのはperldocに書かれてないから。
defined $pid でundefと0を区別する必要あり。
$!にResource temporarily unavailableのようなエラーが渡されるのでたぶんそう。
なのでちゃんと親プロセスがwait $pidすれば回避できる。

984 :デフォルトの名無しさん:2021/05/24(月) 08:19:17.40 ID:INcwcLMt.net
訂正。
perldoc -f forkにfork失敗時にundefを返すことが書かれてたわ

985 :デフォルトの名無しさん:2021/05/24(月) 08:22:50.85 ID:GjHEXSDD.net
やっぱり失敗してるんだよな
リトライするように直して試してみてるとこ

どういう理由で失敗するんだ?
activeperl

986 :デフォルトの名無しさん:2021/05/24(月) 13:11:06.83 ID:SHUy6n38.net
windows版のforkもどきだからじゃないの?

987 :デフォルトの名無しさん:2021/05/24(月) 13:35:57.27 ID:INcwcLMt.net
macOSでも起きるよ

988 :デフォルトの名無しさん:2021/05/24(月) 13:56:03.81 ID:GjHEXSDD.net
今たまたま何かのリソースが全部埋まってて、一瞬待ってくれたら準備できるよ
なんだったら、リトライは隠蔽してくれて良さそうなもんなのに
IO関係はみんなそうなってる

989 :デフォルトの名無しさん:2021/05/24(月) 16:23:07.38 ID:mQhym/iw.net
Perlはかなりの低レイヤーでも使われることがあるからな。
そんな冗長にはできんやろ。

そもそも、ぜんぜんwaitpid()しなかったらいずれ困るんだから、早くエラーになったほうがまし。

990 :デフォルトの名無しさん:2021/05/25(火) 22:10:30.48 ID:z8jztsTP.net
activeperlで
forkで返るpidがマイナスの値なんだけど、
Win32::Process::List で GetProcesses して得られるものとは別物なの?

991 :デフォルトの名無しさん:2021/05/25(火) 22:38:53.48 ID:/Axm+K1V.net
>>990
かもね。
聞く前にドキュメントを読め!

https://docs.activestate.com/activeperl/5.28/perl/perlfork.html

992 :デフォルトの名無しさん:2021/05/25(火) 22:59:31.10 ID:z8jztsTP.net
疑似プロセスIDは、OSのプロセスIDとは別物なのか

要は、forkで分岐したプロセスがまだ生きてるかどうか親から周期的に監視したいんだけど
waitすると親が止まってしまうのでどうしたもんか

993 :デフォルトの名無しさん:2021/05/25(火) 23:54:54.75 ID:/Axm+K1V.net
別スレッドでsystem()ではアカンのか?

994 :デフォルトの名無しさん:2021/05/26(水) 07:17:11.86 ID:niBt7hlg.net
スレッド使ったことない

995 :デフォルトの名無しさん:2021/05/26(水) 08:32:40.50 ID:VVGa10VW.net
perlのスレッドは標準IOやパイプの取り扱いが難しい、というか動きが怪しい

996 :デフォルトの名無しさん:2021/05/26(水) 09:53:00.68 ID:+WmbAELr.net
シェルスクリプトではkill -0 PIDでプロセスが生きてるか調べられる!
そういう用途にはシェルスクリプトを使うべき!

997 :デフォルトの名無しさん:2021/05/26(水) 09:53:29.06 ID:+WmbAELr.net
ユーチューバーのKENTとかも言ってる!

998 :デフォルトの名無しさん:2021/05/26(水) 10:20:29.11 ID:niBt7hlg.net
GetProcessesでpython.exeを見つければだいたい目的は達成するんだけど、
他に使ってる人がいると間違う

999 :デフォルトの名無しさん:2021/05/26(水) 10:37:03.92 ID:VVGa10VW.net
実行バイナリやシェルコマンドをP言語スクリプトから呼び出すソリューションが最も汎用性が高い
古事記にもそう書いてある

1000 :デフォルトの名無しさん:2021/05/26(水) 10:40:21.49 ID:+WmbAELr.net
そこもちゃんとユーチューバーのKANTのサロンで言ってる!って
語尾に付けないと

1001 :デフォルトの名無しさん:2021/05/26(水) 10:48:36.67 ID:VVGa10VW.net
このスレ、消費に9年以上かかってるとか盛者必衰の理をあらわしてて草

1002 :デフォルトの名無しさん:2021/05/26(水) 11:00:06.47 ID:+WmbAELr.net
9年か・・・。Perlもずいぶんと長生きだね。

次スレ

【古典的モダン】Perlについての質問箱 51箱目
https://mevius.5ch.net/test/read.cgi/tech/1621994129/

1003 :デフォルトの名無しさん:2021/05/26(水) 11:35:56.72 ID:a7TiWa6C.net
質問してもええか? ええのんか?

1004 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1004
248 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★