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/02/21(金) 14:01:10.98ID:OOdvSVAe
絶対やらないけど
$_ % 3 and $var = $_ for $table{$var};
2020/02/21(金) 15:45:08.67ID:ooEapY6E
>>253
それ、5.6以前の話?記憶が曖昧だけど、utf8に対応した5.6あたりから、Tkで日本語使えたような気がするけど。
256デフォルトの名無しさん
垢版 |
2020/02/21(金) 18:15:13.09ID:TKnLlA6x
>>255
忘れた。20年ぐらい前だったかな?
2020/02/22(土) 22:24:09.42ID:pvGxmVZm
裏でずっと何かしてるスクリプトを走らせておきたい
ActivePerlのウィンドウが出るのが嫌なので、wperlを起動してウィンドウを出さない
でも、wperlを起動する為のbatファイルのウィンドウがずっと出てる
batファイル以外のいい起動方法はないだろうか
2020/02/22(土) 22:46:33.37ID:KpqdZij5
>>257
start "" "wperl ..."
2020/02/22(土) 22:47:18.24ID:+QQ7ccWr
ショートカットでよくね?
2020/02/22(土) 23:01:19.35ID:pvGxmVZm
wperl以降を""で括ると動かないけど、無くせば動いた
これでサーバ監視ができる
261デフォルトの名無しさん
垢版 |
2020/02/23(日) 06:57:52.64ID:6djC7Yo0
Linuxなら何も考えずにできるが・・・
2020/02/23(日) 07:18:43.14ID:u5LzmB/p
pingが通るようにしてしまえばwindowsでもそういうのは既にある
2020/02/23(日) 12:43:19.44ID:1MmoNroU
>>261
シェルからふつうに起動したら、親プロセスとの関連でトラブルが発生するところはどちらも同じ。
というか、むしろLinuxのほうがわかりにくくてひどい。
disownとかnohupとか知ってるか?
264デフォルトの名無しさん
垢版 |
2020/02/24(月) 04:42:11.62ID:jrwZftYn
知ってるよ。
2020/02/25(火) 12:21:34.80ID:Z4NIrtJK
>>260
何か使い方間違ってない?
次のようなコマンドで、普通に通るぞ。
wperl.exe "C:\utp\foobar.PL" "C:\foo\bar.txt"
2020/02/25(火) 23:35:33.10ID:Vpd+P02x
>>265
>>258
2020/03/05(木) 09:29:31.48ID:hJr+GlCd
ブラウザでは普通に見られる楽天市場の商品ページ
(item.rakuten.co.jp/shop_mei/a012345/)を get 出来なくなった。
ユーザーエージェントやらリファラはイジってみたけど
2020/03/05(木) 12:43:29.56ID:eb4C0HQQ
active perl の ppm がなくなっていろんなモジュールが動かないのだが、困ってるの俺だけ?
ググっても誰も文句言ってないな
2020/03/05(木) 12:50:46.42ID:WFS2X5DF
>>268
>>142 でオレが文句を言ったが。
結局、一生5.22 を使い続けることにした。
2020/03/05(木) 14:56:24.55ID:NI6SkVuR
新しめのバージョン追ってる人はもう大半がactive perl捨ててstrawberry perlに移住したんじゃね
2020/03/05(木) 20:36:47.91ID:HImUaDHG
つい最近ppm使ったような
2020/03/06(金) 00:11:57.41ID:Wxp9Lzi1
strawberry perl なら cpan インストーラ、もう少しまともに動くのか。
明日、試してみる。
2020/03/06(金) 08:49:13.30ID:20KFjtwq
https://community.activestate.com/forums/ppm

5.26以前なら、ppmは使えないことはないけど、「保守はしない」ということだね。
274デフォルトの名無しさん
垢版 |
2020/03/06(金) 09:25:47.73ID:7w4EZP5c
>>268
WSLでLinuxそっくり環境の中で普通のPerl使うかOS丸ごとLinuxにしてしまえば悩むことはなくなる。
2020/03/06(金) 13:37:53.57ID:OG/dFmOQ
macという手も
2020/03/06(金) 13:53:08.52ID:YSIXaKl0
visual studioインストールして普通にビルドすれば?
Makefileちょっと変更してnmake叩くだけだよ
2020/03/06(金) 18:40:33.19ID:JNQJmFQ4
>>274
MSYS2のがええで。
WSLは別物。
2020/03/06(金) 19:44:20.68ID:/FgvtXba
もう Perl6 でラクになれよ
2020/03/06(金) 23:38:47.92ID:nrb1VEEF
strawberry perl をインストールしたけど、いろんなモジュールをまたゼロから入れなきゃいけないと思ったらヤル気なくなってとりあえず active perl に戻した。
次は active perl のディレクトリを調べて同じモジュールを strawberry perl にインストールするバッチファイル作んないと。
2020/03/07(土) 06:00:24.07ID:Q6Yn3ttH
>>279
そんな時代はもう終わってるぞ。

Windows版のPerlは使わない。WSLを使ってLinux版を使う
Perlのバージョンはplenvで管理し、いろんなモジュールは(俺が知っているときと変わってないなら)
cpanやcpanmあたりでプロジェクトごとに簡単にインストールする。

ソースコードをgitで管理してるとして、新しくプロジェクトに参加するなら、
plenvでperl入れて、git cloneしてモジュール入れるコマンド(cpanm?忘れたw)を叩くだけだ。
2020/03/07(土) 08:04:07.87ID:GE9TyCQC
で、どうやってwindowsから動かすんだ?
2020/03/07(土) 13:07:09.85ID:nxiojuUK
>>280
クリップボード使えない
アイコンダブルクリックで実行できない
オタクは自分の世界に閉じこもってシコシコやってろよバカ
2020/03/07(土) 18:28:23.07ID:jD3HBeI4
> クリップボード使えない
使える

> アイコンダブルクリックで実行できない
CLIでアイコンって何言ってるの?
284デフォルトの名無しさん
垢版 |
2020/03/08(日) 01:15:11.77ID:DyTj6VlC
perlのスクリプトファイルが関連付けされてたらアイコンダブルクリックで実行できるんだけどね
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
ダブルクリックてエクスプローラーの話じゃん
エクスプローラーから見れるなら、ダブルクリックして開ける。
その証拠にテキストファイルだって開けるだろ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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