Perlについての質問箱 64箱目

■ このスレッドは過去ログ倉庫に格納されています
2019/02/01(金) 09:44:37.18ID:1/Kr4Qjk
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板: https://medaka.5ch.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.28.1)

▼前スレ
Perlについての質問箱 61箱目
http://toro.5ch.net/test/read.cgi/tech/1381561905/
Perlについての質問箱 62箱目
http://toro.5ch.net/test/read.cgi/tech/1385039352/
Perlについての質問箱 63箱目
https://mevius.5ch.net/test/read.cgi/tech/1392820583/
2020/03/08(日) 01:34:31.02ID:rEU5WeDw
>>283
>>284
流れ的にWSLの話やぞ?
286デフォルトの名無しさん
垢版 |
2020/03/08(日) 01:44:53.18ID:DyTj6VlC
>>285
勝手に流れ変えるなよw
>>280がwslって言いだしてwslじゃ不便もあるって話だろ?
2020/03/08(日) 05:59:45.97ID:P20sq25k
>>284
何が不便なのかわからない。

関連付けの設定をするのが面倒な ”だけ” か?
ならやっぱりWSLでいいだろ。

関連付けの設定方法がわからないんですは
プログラマやめれのレベルだからな
2020/03/08(日) 06:00:52.67ID:P20sq25k
>>286
だからWSLでクリップボード使えるし、
関連付け設定を自分でやればWSL上のスクリプトを動かせる
2020/03/08(日) 07:36:51.62ID:nyv63FmX
explorerから.plファイルを起動すると、カレントディレクトリのファイルに対して処理、
みたいなこともできる?
2020/03/08(日) 08:33:18.06ID:P20sq25k
できるだろうな。plファイルだけでできるかもしれんし、
簡単なラッパースクリプトが必要になるかもしれんが大した問題じゃない。
Windows特有の問題にぶち当たることのほうが大変だから
2020/03/08(日) 08:55:09.38ID:nyv63FmX
readdir は何の文字コードで返ってくるの?
2020/03/08(日) 09:09:34.43ID:P20sq25k
OSは文字コード変換なんてことは行わない。
そんなものが行われるとしたら、それはお前が
使ってる言語とライブラリがやってる。
ようはお前はPerlを知らんのだ
2020/03/08(日) 09:19:17.63ID:nyv63FmX
答えられなくなるとキレるっていうw

cygwinとの互換性で困った問題いろいろは起きそうな感じだな
win8.1のサポートが終わった頃に思い出したら使ってみよう
2020/03/08(日) 09:27:52.75ID:P20sq25k
知らないやつほど他人のせいにする。
2020/03/08(日) 11:23:41.93ID:2fZbJlty
全部 emacs の中でやれば実質的にクリップボードは使えるし
実行も emacs の中でできる。マウスを使わずにキーボードだけで
すべて完結するが
2020/03/08(日) 22:14:47.52ID:z5WqTo29
windows使っててマウス使わないなんてありえん
2020/03/08(日) 22:39:04.77ID:gXtOMf8r
WSLってクリップボード使えるの?
use Clipboardでいける?
今はどうなってるか知らんが知らんがcygwinは無理だったんで/dev/clipboard読み書きするラッパー書いてたな
2020/03/09(月) 14:08:24.97ID:OgnIoX0o
>>296
マウスを使うのは権利であって義務ではないからなあ
ゆっくりとプログラミングをしたいのてあればどうぞご自由に
2020/03/09(月) 14:59:05.01ID:eblk0ZGB
さすがにキモイw
300デフォルトの名無しさん
垢版 |
2020/03/09(月) 19:42:54.58ID:aF4+X/eL
>>288
これマジ?
エクスプローラからWSL上のperlファイルが見えてダブルクリックでWSLのperlで実行できんの?
2020/03/09(月) 21:51:11.95ID:1P2a1qpP
無理でしょ
それぞれに違うファイルシステムになってる
参照はできるようになってるというだけ
windows上の/usr/binって何だよ
302デフォルトの名無しさん
垢版 |
2020/03/09(月) 22:34:27.73ID:aF4+X/eL
だよね
ちょっと信じて損した
2020/03/09(月) 23:01:39.93ID:d25zd4do
アホが見〜る〜ブタのケ〜ツ〜
2020/03/10(火) 01:54:02.54ID:Lezaa9m7
>>300
> エクスプローラからWSL上のperlファイルが見えて
普通ほぼすべてのファイルが見える
見えないのは/procとか/sysとか特殊なものだけ

> ダブルクリックでWSLのperlで実行できんの?
ファイルが見えてるんだから当然ダブルクリックできる。
もちろん関連付けは必要だがな。
それをWSL内で実行するのもWSLを使わずに実行するのも
関連付けの設定次第
2020/03/10(火) 01:55:43.39ID:Lezaa9m7
ググれば普通に見つかる

Windows Subsystem for Linux でダブルクリックで sh ファイルを実行する
https://dskjal.com/PC/run-sh-on-bash-on-ubuntu-on-windows.html

Windows 10のbashのコマンドをGUIから起動させるには?
http://kako.com/blog/?p=16372
2020/03/10(火) 02:35:30.61ID:iN6KW/Ct
WSL2は、Windows側のファイル属性とかちゃんとふつうにあつかえるようになったんか?
WSL1のときは完全別物で、全然ダメやったが。
2020/03/10(火) 03:13:18.94ID:8QcyJ6p0
WSL1もWSL2も同じ。Linuxのファイル属性として正しく扱えるようになった。
Windowsのファイル属性をLinuxアプリが正しく扱えることはありえないから
逆の発想でLinuxとして正しく扱える方向に舵をとった。
Linuxアプリから正しく扱えないなら意味ないでしょ?
2020/03/10(火) 03:17:19.61ID:8QcyJ6p0
そもそもファイル属性はWindowsの方が高機能で
Linuxは、いろいろ拡張入れたら別だが
基本のファイル属性はUNIX初期の頃から変わって無くてかなり貧弱。
Windowsの高機能なファイル属性をそのLinuxにマッピングすることは出来ない。
逆にLinuxのファイル属性を全てWindows側に持たせることは可能
こうすることで全てのWindowsのファイルをLinuxで正しく扱えるようになった。
2020/03/10(火) 04:18:19.87ID:/bE8vLVb
漏れは、Ruby のバージョンマネージャー、rbenv をWSL, Ubuntu 18.04 に入れた。
これで、Linux 側に、好きなバージョンのRubyを入れられる

Windows 10 側には、VSCode を入れて、拡張機能のRemote WSL を入れる

これが基本!
2020/03/10(火) 04:23:54.01ID:qHN38Ccx
windowsでも開発できそうだなー
2020/03/10(火) 12:00:40.16ID:tTiB+rjP
DBIの動作についてお聞きしたいことがあります。

my $dbh = DBI->connect(接続情報);
my $sql = 'パラメータ付きクエリ';

my $ret1 = $dbh->selectrow_arrayref($sql, undef, 'A');
my $ret2 = $dbh->selectrow_arrayref($sql, undef, 'B');

my $sth = $dbh->prepare($sql);

my $ret3 = $dbh->selectrow_arrayref($sth, undef, 'A');
my $ret4 = $dbh->selectrow_arrayref($sth, undef, 'B');

このようなコードで$ret1と$ret2には'A', 'B'それぞれのパラメータを使用した結果が入るのですが、$ret3は$ret4と同じ'B'を使用した結果になってしまいます。
selectrow_arrayrefに同じステートメントハンドラを渡して複数回実行すると、リファレンス実体が最後に実行した結果で上書きされてしまうような雰囲気でした。

Perl 5.10.1 & DBI 1.609の環境と、Perl 5.16.3 & DBI 1.642の環境で試してどちらも同じ結果になったのですが、こういうものなのでしょうか…。
2020/03/10(火) 13:47:10.63ID:nryxofxk
>>305
アホか?
バッチファイルでwsl起動してその中で実行してるだけじゃん
レジストリ編集の方もパワーシェルに引数渡してwsl起動してるだけだ
これじゃあcygwin使ってやるのとなんら変わっとらん
2020/03/10(火) 14:03:39.54ID:0m+9gBGV
>>312
あのさ、おまえ頭悪いよ?
目的を一番ラクに実現する方法が
目の前にあるというのにそれを使わないのはアホだろ
ネイティブのPerlを使えばいい
今更PerlのWindows移植版なんかいらんよ。
Windows移植版なんてcygwinと何も変わらん
2020/03/10(火) 15:17:13.04ID:qHN38Ccx
>>311
試してみたけど確かに同じ配列が変えるね
オライリーのDBI本見たらそう書いてあった
selectrow_arrayって方を使ってリストコンテキストで受けるといいみたい
2020/03/10(火) 15:22:16.39ID:tTiB+rjP
>>314
やはりそうですか…
selectrow_hashrefを使うと$sqlでも$sthでも'A', 'B'それぞれの結果が返るので、selectrow_arrayrefだけ期待と違う動作をしている気がします。(バグ?)
2020/03/10(火) 15:28:19.27ID:qHN38Ccx
>>315
バグというか仕様だと思う
作者の書いたオライリー本にも書いてあったから意図的なはず
今更変更できないからこのままになってるんだろうね
2020/03/10(火) 15:39:16.84ID:tTiB+rjP
>>316
なるほど。
それでは今後、selectrow_arrayrefは注意して使うようにしたいと思います。
ありがとうございました。
2020/03/10(火) 15:58:50.16ID:SCW8qISh
>>313
へー
バッチファイル作ったりトリッキーな関連付けまでしないと動かないのが一番楽な方法ねー
cygwinで全く同じことができるしwin移植版perlならそのまま実行できちゃうんだけどね
ところでエクスプローラからどうやったらwsl内のファイルが見えるんだい?
319デフォルトの名無しさん
垢版 |
2020/03/10(火) 16:50:47.58ID:lAAHr9o2
>>311
selectrow_arrayref は最初の1行しか返さないからということはない?
320デフォルトの名無しさん
垢版 |
2020/03/10(火) 16:52:18.68ID:lAAHr9o2
ぐえ。リロード忘れたらとっくに話が終わっていて間に沢山の書き込みが
2020/03/10(火) 20:10:42.81ID:UzsfbeET
BOOKOFFに100円で売っていたPerl/CGI辞典によると、
selectrow_array:先頭行
selectcol_arrayref:最初のフィールド
selectall_arrayref:すべて
2020/03/10(火) 23:18:16.01ID:gGR9Cwad
>>318
Windows版Perl使って
Windowsで動かないーってやるより、
安心して使えるバッチファイルを使ったほうがシンプル
2020/03/10(火) 23:32:00.36ID:Z32YaYnf
いやいやw
WSLならバッチファイルなんか使わなくてもエクスプローラーからダブルクリックでWSL上のスクリプトを直接実行できるんでしょ?
やり方教えてよ
windows版perlならバッチファイルなんか使わなくてももちろん出来るからねw
それとwindows版perlだと何が動かないのかな〜?
2020/03/10(火) 23:37:16.41ID:9jB6JpZx
バッチファイルとかっていったい何歳の爺さんなんだよ
2020/03/10(火) 23:42:56.03ID:tP5E2IWo
>>323
普通に、wsl.exe+スクリプトファイルのショートカットを作るだけ
2020/03/10(火) 23:51:09.20ID:Z32YaYnf
>>325
やってることはバッチファイルと同じじゃん
327デフォルトの名無しさん
垢版 |
2020/03/11(水) 00:05:26.96ID:5FVYO8f6
Ruby でも、MSYS2/MINGW は、日本語でバグル・日本語入力できない。
一方、WSL は、日本語でバグらない!

WSL が出たから、次第に、Windows 版のRuby Installer は、使われなくなっていく

それに、VSCode の拡張機能、Remote WSL が出たから、
Windows 10 では、Ubuntu 18.04 が標準になる

プロジェクトも、Windows 側のC: ドライブじゃなくても、
Linux 側に置いて、Remote WSL でアクセスできるので、本番環境に近い

Windows/Linux のファイルのアクセス権限の違いに、困らない!
2020/03/11(水) 00:38:23.60ID:3jaBr8Hp
ルビーならそうだろうねw
2020/03/11(水) 00:53:43.36ID:FWSDJbu9
>>326
それで実現できるだろ
しかも完全にちゃんと動くPerlで
2020/03/11(水) 01:05:10.04ID:zcf0ykb5
ハア?
WSLはwindows版perlより楽できるんじゃないの?
なんでわざわざそんな面倒なことすんの?
それとエクスプローラからWSLのファイルが見えてそれをダブルクリックで実行できるって話はどうなったの?
2020/03/11(水) 01:17:13.67ID:M00P+dL8
WSLはあくまでLinux的システムなアプリであって、Windows側とはやっぱり高い壁がある、と思っとくほうが安全やろ。
332327
垢版 |
2020/03/11(水) 01:47:27.51ID:EKM5ywjJ
Ruby なら、WSL から、1-liner で、
Rubyで作られた遅いウェブサーバー、WEBrick が起動する

index.html が、Windows 側のC: ドライブにあるとすると、
cd /mnt/c/〜 で、Windows側へ移動して、

または、index.html が、linux 側のドライブにあるとすると、cd で、そこへ移動して、

ruby -run -e httpd . -p 8080

これで、Windows側のブラウザで見れる
http://localhost:8080

つまり、プロジェクトが、Windows/Linux側のどちらにあっても、Windows側のブラウザで見れる
2020/03/11(水) 02:27:57.69ID:M00P+dL8
Webサーバーを経由すれば、ファイルが地球の裏側にあってもふつうに見れるなー。w
334327
垢版 |
2020/03/11(水) 04:58:50.64ID:EKM5ywjJ
Linux 側のフォルダ内を公開した、Linux側のサーバーに対して、

Windows 側のブラウザのlocalhost で見れるんだよ!!
2020/03/11(水) 09:27:01.95ID:AZbrV/6V
>>319
>>321
返信ありがとうございます。
すみませんが、selectrow_arrayrefが最初の1行しか返さないということは知っています。
そうではなく、結果(リファレンス)を変数に入れてから再度同じステートメントハンドラでselectrow_arrayrefを使用すると、リファレンス実体の方が書き換わってしまうので、1回目の結果が失われてしまうということを言いたかったのですが…。
サンプルとして'パラメータ付きクエリ'と書きましたが、複数行を返さない単純な「SELECT ?」でも再現します。
336デフォルトの名無しさん
垢版 |
2020/03/11(水) 09:44:35.82ID:LRW51TqV
なるほど。
2020/03/11(水) 20:46:52.86ID:M00P+dL8
>>335
同じ変数を使い回しまくって、パフォーマンスを落とさないためやないの?
GCのないPerlならたいしてかわらんやろけど。
2020/03/11(水) 21:49:34.54ID:gWo/n1eo
>332
ウェブサーバーならbusyboxでよくね?w
数MBのメモリで動作する
2020/03/11(水) 23:17:22.77ID:k/ve+D91
>>335
クエリ結果を保持してるのはステートメントハンドラオブジェクトの方でパフォーマンス優先のためにその内部変数のリファリンスを返すのが*_arrayrefって考えればいいかな
んでselectrow_arrayrefの第1引数に文字列を渡したときは内部で毎回prepareされるので後から実行しても書き変わらないと
2020/03/12(木) 01:40:41.53ID:i54BE1kH
>>304
よくもこんな大嘘をw
2020/03/12(木) 01:44:08.97ID:NTVlQfwP
第一引数に$sth渡せるんだって思ったね
文字列しか渡したことないし
Perlはいまだに知らないことがある
2020/03/12(木) 09:49:43.58ID:05BordF4
>>339
そうですね。
DBI.pmで第1引数がリファレンス(ステートメントハンドラ)ならそのまま使用、そうでなければprepareしているところまではわかったのですが、その後の流れは同じのようでしたし、Driver.xstまで解析するのはやめておきました(^^;)
343デフォルトの名無しさん
垢版 |
2020/03/12(木) 16:51:12.87ID:XWa7Kkjq
>>340
そういう時は
How dare you?
と言う。
344デフォルトの名無しさん
垢版 |
2020/03/12(木) 16:52:32.93ID:XWa7Kkjq
あ、記号まつがえた。
2020/03/12(木) 17:18:02.38ID:+5N6GCV3
関連付けの仕組みを知らない人がいるのかな?
単にレジストリに、この拡張子はこのコマンドで実行するって書くだけなんだけど
2020/03/12(木) 17:18:57.67ID:+5N6GCV3
つまりcmd。exeから実行できるものは全て
同じやり方で関連付け作れるってことね
2020/03/12(木) 18:12:19.10ID:XQbCK6u3
それはただの起動のしくみでしかない。
実際の動作は高い壁で分離されてるといって過言でないものをいっしょくたにはできまい。
2020/03/12(木) 18:48:34.51ID:U4j5Oz8o
>>347
理由は?
2020/03/12(木) 18:49:23.71ID:U4j5Oz8o
そもそもダブルクリックできるなんて
起動の仕組みなんだから、起動の仕組みでしか無いと言われても
その話をしてるんですよとしか言いようがないがw
2020/03/12(木) 19:40:41.23ID:kpO7RyNn
だからエクスプローラからWSLにあるファイル見る方法教えてくれってw
2020/03/12(木) 19:47:21.76ID:IWxDU6vM
それは見れる \\wsl$
エクスプローラからしか見れないのが問題
2020/03/12(木) 19:57:44.60ID:MY0SLzQz
グレタちゃんもアナルパールを使ってます
2020/03/12(木) 20:49:28.83ID:U4j5Oz8o
ダブルクリックてエクスプローラーの話じゃん
エクスプローラーから見れるなら、ダブルクリックして開ける。
その証拠にテキストファイルだって開けるだろ
2020/03/12(木) 22:39:56.96ID:MY0SLzQz
グレタちゃんに僕のパイソンを貸してあげたい
2020/03/14(土) 18:16:47.41ID:jx2yED/o
active perlのcryptのsaltにasciiでない文字を渡すと止まるんだけど何で?
2020/03/14(土) 19:34:39.97ID:RPa5riWU
WSLつかえ
2020/03/14(土) 22:58:59.61ID:eh0BX5+5
>>355
理由を聞いてどうするんや?
文字コードとかややこしいから、対応してないんやろ。
2020/03/14(土) 23:16:24.90ID:5TZ0Uf7y
分からんのなら黙ってろやチンカス
359デフォルトの名無しさん
垢版 |
2020/03/14(土) 23:39:11.11ID:9VuyfYoc
暗号化って、base64 とかだろ。
ascii だけだろ

Ruby なら、こういうやつだろ

module SecureRandom
https://docs.ruby-lang.org/ja/latest/class/SecureRandom.html
2020/03/14(土) 23:44:18.11ID:jx2yED/o
keyの方は何でもokなんだけどな
2020/03/15(日) 03:21:52.90ID:ey4TMar/
>>358
わかってもなにもできんくせに
ゴミクズ
2020/03/15(日) 18:38:42.70ID:8dswEreI
グレタちゃんのクリトリスは100カラットのルビー
2020/03/16(月) 09:00:22.83ID:m2o8L3Qu
>>355
ここに書き込む前に、perldocを嫁
If using crypt on a Unicode string (which potentially has characters with
codepoints above 255), Perl tries to make sense of the situation by
trying to downgrade (a copy of) the string back to an eight-bit byte string
before calling crypt (on that copy). If that works, good.
If not, crypt dies with Wide character in crypt .

おそらく、crypt はPOSIXの仕様に合わせているから、こうなるのではないかと思う。
2020/03/16(月) 19:53:11.24ID:jMV62GuM
128-255を渡しても止まるんだけどね
エラーが出るとかじゃなくて異常終了する
仕様だとは思い難い
2020/03/16(月) 20:07:47.98ID:O3TrJAsg
「異常終了」じゃなくて、「die」してるんちゃううんか?
>>363にもそう書いてあるやろ。

トラップしたけりゃevalしろ。
2020/03/16(月) 20:22:32.11ID:jMV62GuM
die すると何かエラーメッセージ出しておとなしく終了するんじゃないのか?
windowsに怒られとるぞ
2020/03/17(火) 00:31:17.78ID:WzQFj8c+
この言語はなにが起こるかわからんので基本evalで囲わないとやってられませんね
2020/03/17(火) 00:59:40.01ID:DZYZalLc
トラップでevalってなんだっけ?w
Perlやめてから結構立つから忘れた。
なんかそんなのあったなwww

今?Perlからシェルスクリプトに回帰していますがなにか?
2020/03/17(火) 05:25:03.15ID:WzQFj8c+
>>368
これ
https://perldoc.jp/func/eval
eval BLOCKってやつ

try catchみたいなもん
2020/03/17(火) 08:02:58.85ID:sAGmKBfN
エラーが返るならtryできるだろうけど、試してみたら異常終了するようなもんも避けられるのか?
2020/03/17(火) 21:45:41.98ID:sAGmKBfN
https://i.imgur.com/T58MWmG.png
evalでもトラップできない
2020/03/18(水) 00:13:57.91ID:+5qWGdwM
man にはどう書いてあるの? Perl の crypt じゃなくて C のライブラリの方だよ。
2020/03/18(水) 01:56:55.56ID:jzX09kaS
WindowsだしActivePerlのようだし、何がおきてもふしぎじゃないな。w
2020/03/18(水) 09:12:43.24ID:SzV6uL92
Windows10、activeperl 5.20なんだけど、次のコードできちんと動く。何が問題なのか解らない。

$res = eval {crypt('aaa', 'ppp')};
print "1. $res\n";
$res = eval {crypt('aaa', 'あ')};
print "2. $res\n";
$res = crypt('aaa', 'ppp');
print "3. $res\n";
$res = crypt('aaa', 'あ');
print "4. $res\n";
__END__

1. ppFj4OYENOP9c
2. 縺VSnoxRf90hw
3. ppFj4OYENOP9c
4. 縺VSnoxRf90hw
2020/03/18(水) 19:35:06.32ID:iQ6PHWNN
Windows7とか?
2020/03/28(土) 10:30:07.37ID:gZJzrXqn
検索が遅い
いろんな条件に対してファイル全体を検索、ということをする時に、
OSのキャッシュに頼って毎回 `grep` する方が速い
メモリに読み込んで検索すると負ける
ループで$data[$i] =~ /$pattern/ した方がまだ速くて、
grep {/$pattern/} @data するともっと遅くなる

大量一括検索の高速化のテクニックみたいなの何かあるのかな
2020/03/28(土) 18:48:22.67ID:Cuxaq7bT
>>376
https://metacpan.org/search?q=grep
使った事ないが MCE::Grep 辺りは説明読む限り速そう
2020/03/28(土) 18:55:38.49ID:Cuxaq7bT
もっと基本的な話なら perlperf
https://perldoc.jp/docs/perl/perlperf.pod
2020/03/28(土) 19:23:29.33ID:gZJzrXqn
MCE::GrepはCPUの使用率は上がるけど遅くなった
grepよりは正規表現の処理のあたりが時間かかってるんだと思う

感覚的にはもっと高速でも全然おかしくない感じなのに
2020/03/28(土) 19:34:33.22ID:gZJzrXqn
100MBのファイルからパターンに合う行を全部抽出するのに1秒かかるくらいの感じ
で、パターンが250もあるから、コーヒーが飲めるくらい待たされる
2020/03/28(土) 20:00:38.86ID:L8+cmwNy
俺だったらgrepでやっちゃうなぁ
結果はファイル経由で
2020/03/28(土) 21:36:49.99ID:L89shHGR
>>376
qr//で事前に正規表現をコンパイルしてみたら?
2020/03/28(土) 21:55:00.53ID:gZJzrXqn
同じパターンで繰り返し検索するのではなくて、
いろんなパターンで同じ対象を検索するので、コンパイルはできない

でも、パターンのリストは実行前に確定しているので、
qrで作ったものを配列に持たせておけば速くなるだろうか
2020/03/28(土) 23:16:33.34ID:2U8ZKDy+
もはや perl の能力を超えているな
C とかで書いた方がいい
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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