Perlについての質問箱 ..
[2ch|▼Menu]
215:デフォルトの名無しさん
20/02/19 01:02:36 mEonuRdN.net
>>214
PerlやRubyなら、わざわざ関数にはしないかな。
その場でハッシュにつめてキーだけ使うとかかなりふつうだから。

216:デフォルトの名無しさん
20/02/19 01:53:16.69 IHihvCy5.net
ここ人いたんだ

217:デフォルトの名無しさん
20/02/19 02:27:13 +yXfQCpG.net
オワコンだとかすたれた言語だとか言われるけどまだまだ使われてるから

218:デフォルトの名無しさん
20/02/19 04:28:09.35 UqnCT+lt.net
>>200
いや。わかる。
君もそのうちわかるようになるよ。

219:デフォルトの名無しさん
20/02/19 05:39:50.97 6o0SSmsW.net
>>215
そしてコメント書くぐらいなら関数にしろ

220:デフォルトの名無しさん
20/02/19 09:01:28.79 pJACNDga.net
他人にわかってもらいたくないんだろう。

221:デフォルトの名無しさん
20/02/19 09:31:49.80 oZi5GQ/y.net
ほら、こんなコードで実現できるんやで、
なにやってるか一見わからんやろ
説明しよか?
みたいに言いたくなったら、それは可読性が悪い証拠

222:デフォルトの名無しさん
20/02/19 12:23:16.28 CZsThdPw.net
Perl慣れしていない人の事を考える必要があるなら
標準モジュールの List::Util で uniq を使えばいいし、
URLリンク(perldoc.perl.org)
何らかの理由で標準モジュールや XS が使えないなら
Pure-perl 実装を CPAN から拾ってくればいいし、
URLリンク(metacpan.org)
実際 List::Util::PP::uniq() の中身はその手法だぞ。
URLリンク(metacpan.org)
sub uniq (@) {
  my %seen;
  my $undef;
  my @uniq = grep defined($_) ? !$seen{$_}++ : !$undef++, @_;
  @uniq;
}

223:デフォルトの名無しさん
20/02/19 16:51:28 /J962Gym.net
perl使い生きてた

224:デフォルトの名無しさん
20/02/19 18:36:12.61 X6PQVyJY.net
勉強になるというか、どこで学んだの

225:デフォルトの名無しさん
20/02/19 19:52:56.93 SoQYbBiO.net
>>219
書かないから心配するな!
1+1と同じレベルだからな!

226:デフォルトの名無しさん
20/02/19 20:07:21 pJACNDga.net
そういう思想の馬鹿しかおらんからperlは廃れたんだよ。

227:デフォルトの名無しさん
20/02/19 20:07:27 zh3CM0eN.net
if (defined $table{$var}) {
 $var = $table{$var};
}

みたいな処理
「何か」に対して判定した結果に従ってその「何か」を採用する

何かを2回書くのが嫌な時の逃げ方は何だろう

228:デフォルトの名無しさん
20/02/19 20:12:42 1DPeZovD.net
リストの要素数を得るために空リストに代入するのも慣用句と読んでいいかな?
$n = (() = <*>);
みたいの。

229:デフォルトの名無しさん
20/02/19 21:01:35 zh3CM0eN.net
要素数なんてどうせループにしか使わないので、
そんなのを取得しない解決がきっとエレガント
pythonの何でもイテレータ思想はきっと正しい

230:デフォルトの名無しさん
20/02/19 21:35:36 bGX6osz8.net
>>227
これはあるね しばし考えるんだけど結局一時変数を使う
構造によっては$_が使える時もあるんだけどまれだなあ

231:デフォルトの名無しさん
20/02/19 21:45:00.08 mEonuRdN.net
>>226
じゃあRubyやらC#やらも滅びるんやな。w
ハッシュのある言語ではあたりまえのイディオムやろが。

232:デフォルトの名無しさん
20/02/20 00:34:37 bivTkZxZ.net
まあ最近の言語は便利な標準メソッド呼べば終わりって感じだからね
Perlは標準モジュールの範囲だけでやろうとすると結構面倒

233:デフォルトの名無しさん
20/02/20 00:35:55 1VYpL0NG.net
スレに人が来ていてオジサンうれしいよ

234:デフォルトの名無しさん
20/02/20 01:29:24 bivTkZxZ.net
最近はPerlのことを喋ると謎の軍団が叩きに来るからな
ネット上で喋れる場所がなくなった
迫害されてる気分

235:デフォルトの名無しさん
20/02/20 13:15:43.08 fXEOX4Gg.net
Perl/Tk は使い物にならん。プログラムが大きくなると動かないでやんのw
Perl/Qt を推進していくべき。
ここの人はPerlでGUIを使ったりしてる?

236:デフォルトの名無しさん
20/02/20 15:23:29 Gm5IubjH.net
Windows限定だが、Win32-GUIを使ってるよ。
インストールして、次のバッチファイルを走らせると、
細かい具体例のデモが見れる。
C:\Perl\site\bin\win32-gui-demos.bat

237:デフォルトの名無しさん
20/02/20 17:36:38 Nllb9nDe.net
>>231
そうではなくて独自の記号にコンテキスト毎に意味を詰め込む様な言語思想のこと言ってるんだがね。

238:デフォルトの名無しさん
20/02/20 18:47:26 CqCGFBWH.net
入力も出力もテキストで完結してるのがいい

と思ってたけど、最近excelデータを入出力に使い出した

239:デフォルトの名無しさん
20/02/20 20:33:42 0HRLUjae.net
短絡論理演算子を使うという方法もあるが、お気に召すかどうかは知らん。

240:デフォルトの名無しさん
20/02/20 20:44:08.31 CqCGFBWH.net
>>227の例だと
$var = $table{$var} or $var
で概ね動くけど、空文字列なんかが入ってた時に誤動作する
判別はdefinedしか無いとして、それでも書ける短絡評価とは

241:デフォルトの名無しさん
20/02/20 21:36:24.51 uxa6Suua.net
defined-or使うだけじゃないの?
$var = $table{$var} // $var;

242:デフォルトの名無しさん
20/02/20 22:00:38.63 0HRLUjae.net
アンカー入れ忘れたのによく分かってくれたな。ありがとう。

243:デフォルトの名無しさん
20/02/20 22:37:06 CqCGFBWH.net
そんな演算子知らん

244:デフォルトの名無しさん
20/02/20 23:16:35.88 NRacWxGd.net
null合体演算子は最近の流行りやぞ?

245:デフォルトの名無しさん
20/02/21 01:54:46.68 dQ0Yz//t.net
//流行ってる気がしない。
新しい機能を積極的に使う人はそもそもperlを使わないのではないか。
断固外氏のブログのネタにしかなってなさそう。

246:デフォルトの名無しさん
20/02/21 02:18:25 YvRUEPlL.net
5.8じゃ使えないからね
それだけで使わない理由になる

247:デフォルトの名無しさん
20/02/21 03:26:53.00 6/adwu75.net
細かいけど優先度は// > = > orだよ

248:デフォルトの名無しさん
20/02/21 03:54:06.99 6/adwu75.net
>>227と等価なのは>>241
この例はdefinedだったから適用できるのね
判定が任意だとするとやはり2度書くしかないかね 例えば
if ($table{$var} % 3) {
 $var = $table{$var};
}
perlは同一値への参照と解釈して2回読みにはいかないという気の利いたことはしないだろうね
エクセプション入ったら変わる可能性あるしね

249:デフォルトの名無しさん
20/02/21 03:58:30.72 6/adwu75.net
//=の逆バージョンあったらいいなとはたまに思うね
そこまで必要性ないという判断でないのだろうけども

250:デフォルトの名無しさん
20/02/21 07:05:24 TnPEnehp.net
$table{$var} が $_ に入るような無害な処理をしておいて、
$var = $_ % 3 ? $_ : $var
と等価なシンタックスシュガーで処理する
みたいなことができれば

251:デフォルトの名無しさん
20/02/21 09:05:21.00 KvZFDIbR.net
2回読みたくないというのがどういうレベルでの事か分からんが
ソースコードの見た目だけならサブルーチンに押し込めばどうとでも
#!/usr/bin/perl -w
use strict;
use Scalar::Util qw(looks_like_number);
sub dp {
  defined $_[0] ? "d[$_[0]]" : 'u[]';
}
sub if_true(&$$) {
  local $_ = pop;
  $_[1] = $_ if &{$_[0]};
}
my %table = ('' => 1, 0 => 2, a => 3, b => 4, c => 0, d => '', e => undef);
for my $var (sort keys %table) {
  print dp($var), dp($table{$var});
  if_true { looks_like_number($_) && $_ % 3 } $var => $table{$var};
  print " => var[$var]\n";
}

252:デフォルトの名無しさん
20/02/21 09:57:55 PzVMR7sv.net
サブルーチンとか甘え。謎の記号を使って魔法のようなコードを書くのがPerlの醍醐味。可読性は悪

253:デフォルトの名無しさん
20/02/21 12:24:11 TKnLlA6x.net
>>235
昔々 Perl/Tk 使おうと思ったが日本語対応が出来てなくて止めたことがある。
それ以来 Perl で GUI はやってない。

254:デフォルトの名無しさん
20/02/21 14:01:10.98 OOdvSVAe.net
絶対やらないけど
$_ % 3 and $var = $_ for $table{$var};

255:デフォルトの名無しさん
20/02/21 15:45:08.67 ooEapY6E.net
>>253
それ、5.6以前の話?記憶が曖昧だけど、utf8に対応した5.6あたりから、Tkで日本語使えたような気がするけど。

256:デフォルトの名無しさん
20/02/21 18:15:13 TKnLlA6x.net
>>255
忘れた。20年ぐらい前だったかな?

257:デフォルトの名無しさん
20/02/22 22:24:09.42 pvGxmVZm.net
裏でずっと何かしてるスクリプトを走らせておきたい
ActivePerlのウィンドウが出るのが嫌なので、wperlを起動してウィンドウを出さない
でも、wperlを起動する為のbatファイルのウィンドウがずっと出てる
batファイル以外のいい起動方法はないだろうか

258:デフォルトの名無しさん
20/02/22 22:46:33 KpqdZij5.net
>>257
start "" "wperl ..."

259:デフォルトの名無しさん
20/02/22 22:47:18 +QQ7ccWr.net
ショートカットでよくね?

260:デフォルトの名無しさん
20/02/22 23:01:19 pvGxmVZm.net
wperl以降を""で括ると動かないけど、無くせば動いた
これでサーバ監視ができる

261:デフォルトの名無しさん
20/02/23 06:57:52.64 6djC7Yo0.net
Linuxなら何も考えずにできるが・・・

262:デフォルトの名無しさん
20/02/23 07:18:43.14 u5LzmB/p.net
pingが通るようにしてしまえばwindowsでもそういうのは既にある

263:デフォルトの名無しさん
20/02/23 12:43:19 1MmoNroU.net
>>261
シェルからふつうに起動したら、親プロセスとの関連でトラブルが発生するところはどちらも同じ。
というか、むしろLinuxのほうがわかりにくくてひどい。
disownとかnohupとか知ってるか?

264:デフォルトの名無しさん
20/02/24 04:42:11.62 jrwZftYn.net
知ってるよ。

265:デフォルトの名無しさん
20/02/25 12:21:34 Z4NIrtJK.net
>>260
何か使い方間違ってない?
次のようなコマンドで、普通に通るぞ。
wperl.exe "C:\utp\foobar.PL" "C:\foo\bar.txt"

266:デフォルトの名無しさん
20/02/25 23:35:33.10 Vpd+P02x.net
>>265
>>258

267:デフォルトの名無しさん
20/03/05 09:29:31 hJr+GlCd.net
ブラウザでは普通に見られる楽天市場の商品ページ
(item.rakuten.co.jp/shop_mei/a012345/)を get 出来なくなった。
ユーザーエージェントやらリファラはイジってみたけど

268:デフォルトの名無しさん
20/03/05 12:43:29 eb4C0HQQ.net
active perl の ppm がなくなっていろんなモジュールが動かないのだが、困ってるの俺だけ?
ググっても誰も文句言ってないな

269:デフォルトの名無しさん
20/03/05 12:50:46.42 WFS2X5DF.net
>>268
>>142 でオレが文句を言ったが。
結局、一生5.22 を使い続けることにした。

270:デフォルトの名無しさん
20/03/05 14:56:24.55 NI6SkVuR.net
新しめのバージョン追ってる人はもう大半がactive perl捨ててstrawberry perlに移住したんじゃね

271:デフォルトの名無しさん
20/03/05 20:36:47 HImUaDHG.net
つい最近ppm使ったような

272:デフォルトの名無しさん
20/03/06 00:11:57 Wxp9Lzi1.net
strawberry perl なら cpan インストーラ、もう少しまともに動くのか。
明日、試してみる。

273:デフォルトの名無しさん
20/03/06 08:49:13 20KFjtwq.net
URLリンク(community.activestate.com)

5.26以前なら、ppmは使えないことはないけど、「保守はしない」ということだね。

274:デフォルトの名無しさん
20/03/06 09:25:47 7w4EZP5c.net
>>268
WSLでLinuxそっくり環境の中で普通のPerl使うかOS丸ごとLinuxにしてしまえば悩むことはなくなる。

275:デフォルトの名無しさん
20/03/06 13:37:53 OG/dFmOQ.net
macという手も

276:デフォルトの名無しさん
20/03/06 13:53:08 YSIXaKl0.net
visual studioインストールして普通にビルドすれば?
Makefileちょっと変更してnmake叩くだけだよ

277:デフォルトの名無しさん
20/03/06 18:40:33.19 JNQJmFQ4.net
>>274
MSYS2のがええで。
WSLは別物。

278:デフォルトの名無しさん
20/03/06 19:44:20.68 /FgvtXba.net
もう Perl6 でラクになれよ

279:デフォルトの名無しさん
20/03/06 23:38:47.92 nrb1VEEF.net
strawberry perl をインストールしたけど、いろんなモジュールをまたゼロから入れなきゃいけないと思ったらヤル気なくなってとりあえず active perl に戻した。
次は active perl のディレクトリを調べて同じモジュールを strawberry perl にインストールするバッチファイル作んないと。

280:デフォルトの名無しさん
20/03/07 06:00:24.07 Q6Yn3ttH.net
>>279
そんな時代はもう終わってるぞ。
Windows版のPerlは使わない。WSLを使ってLinux版を使う
Perlのバージョンはplenvで管理し、いろんなモジュールは(俺が知っているときと変わってないなら)
cpanやcpanmあたりでプロジェクトごとに簡単にインストールする。
ソースコードをgitで管理してるとして、新しくプロジェクトに参加するなら、
plenvでperl入れて、git cloneしてモジュール入れるコマンド(cpanm?忘れたw)を叩くだけだ。

281:デフォルトの名無しさん
20/03/07 08:04:07.87 GE9TyCQC.net
で、どうやってwindowsから動かすんだ?

282:デフォルトの名無しさん
20/03/07 13:07:09 nxiojuUK.net
>>280
クリップボード使えない
アイコンダブルクリックで実行できない
オタクは自分の世界に閉じこもってシコシコやってろよバカ

283:デフォルトの名無しさん
20/03/07 18:28:23 jD3HBeI4.net
> クリップボード使えない
使える

> アイコンダブルクリックで実行できない
CLIでアイコンって何言ってるの?

284:デフォルトの名無しさん
20/03/08 01:15:11.77 DyTj6VlC.net
perlのスクリプトファイルが関連付けされてたらアイコンダブルクリックで実行できるんだけどね

285:デフォルトの名無しさん
20/03/08 01:34:31 rEU5WeDw.net
>>283
>>284
流れ的にWSLの話やぞ?

286:デフォルトの名無しさん
20/03/08 01:44:53 DyTj6VlC.net
>>285
勝手に流れ変えるなよw
>>280がwslって言いだしてwslじゃ不便もあるって話だろ?

287:デフォルトの名無しさん
20/03/08 05:59:45 P20sq25k.net
>>284
何が不便なのかわからない。

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

関連付けの設定方法がわからないんですは
プログラマやめれのレベルだからな

288:デフォルトの名無しさん
20/03/08 06:00:52 P20sq25k.net
>>286
だからWSLでクリップボード使えるし、
関連付け設定を自分でやればWSL上のスクリプトを動かせる

289:デフォルトの名無しさん
20/03/08 07:36:51.62 nyv63FmX.net
explorerから.plファイルを起動すると、カレントディレクトリのファイルに対して処理、
みたいなこともできる?

290:デフォルトの名無しさん
20/03/08 08:33:18.06 P20sq25k.net
できるだろうな。plファイルだけでできるかもしれんし、
簡単なラッパースクリプトが必要になるかもしれんが大した問題じゃない。
Windows特有の問題にぶち当たることのほうが大変だから

291:デフォルトの名無しさん
20/03/08 08:55:09 nyv63FmX.net
readdir は何の文字コードで返ってくるの?

292:デフォルトの名無しさん
20/03/08 09:09:34.43 P20sq25k.net
OSは文字コード変換なんてことは行わない。
そんなものが行われるとしたら、それはお前が
使ってる言語とライブラリがやってる。
ようはお前はPerlを知らんのだ

293:デフォルトの名無しさん
20/03/08 09:19:17.63 nyv63FmX.net
答えられなくなるとキレるっていうw
cygwinとの互換性で困った問題いろいろは起きそうな感じだな
win8.1のサポートが終わった頃に思い出したら使ってみよう

294:デフォルトの名無しさん
20/03/08 09:27:52.75 P20sq25k.net
知らないやつほど他人のせいにする。

295:デフォルトの名無しさん
20/03/08 11:23:41 2fZbJlty.net
全部 emacs の中でやれば実質的にクリップボードは使えるし
実行も emacs の中でできる。マウスを使わずにキーボードだけで
すべて完結するが

296:デフォルトの名無しさん
20/03/08 22:14:47 z5WqTo29.net
windows使っててマウス使わないなんてありえん

297:デフォルトの名無しさん
20/03/08 22:39:04 gXtOMf8r.net
WSLってクリップボード使えるの?
use Clipboardでいける?
今はどうなってるか知らんが知らんがcygwinは無理だったんで/dev/clipboard読み書きするラッパー書いてたな

298:デフォルトの名無しさん
20/03/09 14:08:24.97 OgnIoX0o.net
>>296
マウスを使うのは権利であって義務ではないからなあ
ゆっくりとプログラミングをしたいのてあればどうぞご自由に

299:デフォルトの名無しさん
20/03/09 14:59:05 eblk0ZGB.net
さすがにキモイw

300:デフォルトの名無しさん
20/03/09 19:42:54.58 aF4+X/eL.net
>>288
これマジ?
エクスプローラからWSL上のperlファイルが見えてダブルクリックでWSLのperlで実行できんの?

301:デフォルトの名無しさん
20/03/09 21:51:11.95 1P2a1qpP.net
無理でしょ
それぞれに違うファイルシステムになってる
参照はできるようになってるというだけ
windows上の/usr/binって何だよ

302:デフォルトの名無しさん
20/03/09 22:34:27 aF4+X/eL.net
だよね
ちょっと信じて損した

303:デフォルトの名無しさん
20/03/09 23:01:39.93 d25zd4do.net
アホが見〜る〜ブタのケ〜ツ〜

304:デフォルトの名無しさん
20/03/10 01:54:02 Lezaa9m7.net
>>300
> エクスプローラからWSL上のperlファイルが見えて
普通ほぼすべてのファイルが見える
見えないのは/procとか/sysとか特殊なものだけ

> ダブルクリックでWSLのperlで実行できんの?
ファイルが見えてるんだから当然ダブルクリックできる。
もちろん関連付けは必要だがな。
それをWSL内で実行するのもWSLを使わずに実行するのも
関連付けの設定次第

305:デフォルトの名無しさん
20/03/10 01:55:43 Lezaa9m7.net
ググれば普通に見つかる

Windows Subsystem for Linux でダブルクリックで sh ファイルを実行する
URLリンク(dskjal.com)

Windows 10のbashのコマンドをGUIから起動させるには?
URLリンク(kako.com)

306:デフォルトの名無しさん
20/03/10 02:35:30.61 iN6KW/Ct.net
WSL2は、Windows側のファイル属性とかちゃんとふつうにあつかえるようになったんか?
WSL1のときは完全別物で、全然ダメやったが。

307:デフォルトの名無しさん
20/03/10 03:13:18 8QcyJ6p0.net
WSL1もWSL2も同じ。Linuxのファイル属性として正しく扱えるようになった。
Windowsのファイル属性をLinuxアプリが正しく扱えることはありえないから
逆の発想でLinuxとして正しく扱える方向に舵をとった。
Linuxアプリから正しく扱えないなら意味ないでしょ?

308:デフォルトの名無しさん
20/03/10 03:17:19 8QcyJ6p0.net
そもそもファイル属性はWindowsの方が高機能で
Linuxは、いろいろ拡張入れたら別だが
基本のファイル属性はUNIX初期の頃から変わって無くてかなり貧弱。
Windowsの高機能なファイル属性をそのLinuxにマッピングすることは出来ない。
逆にLinuxのファイル属性を全てWindows側に持たせることは可能
こうすることで全てのWindowsのファイルをLinuxで正しく扱えるようになった。

309:デフォルトの名無しさん
20/03/10 04:18:19.87 /bE8vLVb.net
漏れは、Ruby のバージョンマネージャー、rbenv をWSL, Ubuntu 18.04 に入れた。
これで、Linux 側に、好きなバージョンのRubyを入れられる
Windows 10 側には、VSCode を入れて、拡張機能のRemote WSL を入れる
これが基本!

310:デフォルトの名無しさん
20/03/10 04:23:54 qHN38Ccx.net
windowsでも開発できそうだなー

311:デフォルトの名無しさん
20/03/10 12:00:40 tTiB+rjP.net
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の環境で試してどちらも同じ結果になったのですが、こういうものなのでしょうか…。

312:デフォルトの名無しさん
20/03/10 13:47:10 nryxofxk.net
>>305
アホか?
バッチファイルでwsl起動してその中で実行してるだけじゃん
レジストリ編集の方もパワーシェルに引数渡してwsl起動してるだけだ
これじゃあcygwin使ってやるのとなんら変わっとらん

313:デフォルトの名無しさん
20/03/10 14:03:39.54 0m+9gBGV.net
>>312
あのさ、おまえ頭悪いよ?
目的を一番ラクに実現する方法が
目の前にあるというのにそれを使わないのはアホだろ
ネイティブのPerlを使えばいい
今更PerlのWindows移植版なんかいらんよ。
Windows移植版なんてcygwinと何も変わらん

314:デフォルトの名無しさん
20/03/10 15:17:13.04 qHN38Ccx.net
>>311
試してみたけど確かに同じ配列が変えるね
オライリーのDBI本見たらそう書いてあった
selectrow_arrayって方を使ってリストコンテキストで受けるといいみたい

315:デフォルトの名無しさん
20/03/10 15:22:16 tTiB+rjP.net
>>314
やはりそうですか…
selectrow_hashrefを使うと$sqlでも$sthでも'A', 'B'それぞれの結果が返るので、selectrow_arrayrefだけ期待と違う動作をしている気がします。(バグ?)

316:デフォルトの名無しさん
20/03/10 15:28:19 qHN38Ccx.net
>>315
バグというか仕様だと思う
作者の書いたオライリー本にも書いてあったから意図的なはず
今更変更できないからこのままになってるんだろうね

317:デフォルトの名無しさん
20/03/10 15:39:16 tTiB+rjP.net
>>316
なるほど。
それでは今後、selectrow_arrayrefは注意して使うようにしたいと思います。
ありがとうございました。

318:デフォルトの名無しさん
20/03/10 15:58:50 SCW8qISh.net
>>313
へー
バッチファイル作ったりトリッキーな関連付けまでしないと動かないのが一番楽な方法ねー
cygwinで全く同じことができるしwin移植版perlならそのまま実行できちゃうんだけどね
ところでエクスプローラからどうやったらwsl内のファイルが見えるんだい?

319:デフォルトの名無しさん
20/03/10 16:50:47.58 lAAHr9o2.net
>>311
selectrow_arrayref は最初の1行しか返さないからということはない?

320:デフォルトの名無しさん
20/03/10 16:52:18.68 lAAHr9o2.net
ぐえ。リロード忘れたらとっくに話が終わっていて間に沢山の書き込みが

321:デフォルトの名無しさん
20/03/10 20:10:42.81 UzsfbeET.net
BOOKOFFに100円で売っていたPerl/CGI辞典によると、
selectrow_array:先頭行
selectcol_arrayref:最初のフィールド
selectall_arrayref:すべて

322:デフォルトの名無しさん
20/03/10 23:18:16.01 gGR9Cwad.net
>>318
Windows版Perl使って
Windowsで動かないーってやるより、
安心して使えるバッチファイルを使ったほうがシンプル

323:デフォルトの名無しさん
20/03/10 23:32:00 Z32YaYnf.net
いやいやw
WSLならバッチファイルなんか使わなくてもエクスプローラーからダブルクリックでWSL上のスクリプトを直接実行できるんでしょ?
やり方教えてよ
windows版perlならバッチファイルなんか使わなくてももちろん出来るからねw
それとwindows版perlだと何が動かないのかな〜?

324:デフォルトの名無しさん
20/03/10 23:37:16 9jB6JpZx.net
バッチファイルとかっていったい何歳の爺さんなんだよ

325:デフォルトの名無しさん
20/03/10 23:42:56.03 tP5E2IWo.net
>>323
普通に、wsl.exe+スクリプトファイルのショートカットを作るだけ

326:デフォルトの名無しさん
20/03/10 23:51:09.20 Z32YaYnf.net
>>325
やってることはバッチファイルと同じじゃん

327:デフォルトの名無しさん
20/03/11 00:05:26.96 5FVYO8f6.net
Ruby でも、MSYS2/MINGW は、日本語でバグル・日本語入力できない。
一方、WSL は、日本語でバグらない!
WSL が出たから、次第に、Windows 版のRuby Installer は、使われなくなっていく
それに、VSCode の拡張機能、Remote WSL が出たから、
Windows 10 では、Ubuntu 18.04 が標準になる
プロジェクトも、Windows 側のC: ドライブじゃなくても、
Linux 側に置いて、Remote WSL でアクセスできるので、本番環境に近い
Windows/Linux のファイルのアクセス権限の違いに、困らない!

328:デフォルトの名無しさん
20/03/11 00:38:23.60 3jaBr8Hp.net
ルビーならそうだろうねw

329:デフォルトの名無しさん
20/03/11 00:53:43 FWSDJbu9.net
>>326
それで実現できるだろ
しかも完全にちゃんと動くPerlで

330:デフォルトの名無しさん
20/03/11 01:05:10.04 zcf0ykb5.net
ハア?
WSLはwindows版perlより楽できるんじゃないの?
なんでわざわざそんな面倒なことすんの?
それとエクスプローラからWSLのファイルが見えてそれをダブルクリックで実行できるって話はどうなったの?

331:デフォルトの名無しさん
20/03/11 01:17:13 M00P+dL8.net
WSLはあくまでLinux的システムなアプリであって、Windows側とはやっぱり高い壁がある、と思っとくほうが安全やろ。

332:327
20/03/11 01:47:27 EKM5ywjJ.net
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側のブラウザで見れる
URLリンク(localhost:8080)

つまり、プロジェクトが、Windows/Linux側のどちらにあっても、Windows側のブラウザで見れる

333:デフォルトの名無しさん
20/03/11 02:27:57 M00P+dL8.net
Webサーバーを経由すれば、ファイルが地球の裏側にあってもふつうに見れるなー。w

334:327
20/03/11 04:58:50 EKM5ywjJ.net
Linux 側のフォルダ内を公開した、Linux側のサーバーに対して、

Windows 側のブラウザのlocalhost で見れるんだよ!!

335:デフォルトの名無しさん
20/03/11 09:27:01 AZbrV/6V.net
>>319
>>321
返信ありがとうございます。
すみませんが、selectrow_arrayrefが最初の1行しか返さないということは知っています。
そうではなく、結果(リファレンス)を変数に入れてから再度同じステートメントハンドラでselectrow_arrayrefを使用すると、リファレンス実体の方が書き換わってしまうので、1回目の結果が失われてしまうということを言いたかったのですが…。
サンプルとして'パラメータ付きクエリ'と書きましたが、複数行を返さない単純な「SELECT ?」でも再現します。

336:デフォルトの名無しさん
20/03/11 09:44:35.82 LRW51TqV.net
なるほど。

337:デフォルトの名無しさん
20/03/11 20:46:52 M00P+dL8.net
>>335
同じ変数を使い回しまくって、パフォーマンスを落とさないためやないの?
GCのないPerlならたいしてかわらんやろけど。

338:デフォルトの名無しさん
20/03/11 21:49:34.54 gWo/n1eo.net
>332
ウェブサーバーならbusyboxでよくね?w
数MBのメモリで動作する

339:デフォルトの名無しさん
20/03/11 23:17:22.77 k/ve+D91.net
>>335
クエリ結果を保持してるのはステートメントハンドラオブジェクトの方でパフォーマンス優先のためにその内部変数のリファリンスを返すのが*_arrayrefって考えればいいかな
んでselectrow_arrayrefの第1引数に文字列を渡したときは内部で毎回prepareされるので後から実行しても書き変わらないと

340:デフォルトの名無しさん
20/03/12 01:40:41 i54BE1kH.net
>>304
よくもこんな大嘘をw

341:デフォルトの名無しさん
20/03/12 01:44:08 NTVlQfwP.net
第一引数に$sth渡せるんだって思ったね
文字列しか渡したことないし
Perlはいまだに知らないことがある

342:デフォルトの名無しさん
20/03/12 09:49:43 05BordF4.net
>>339
そうですね。
DBI.pmで第1引数がリファレンス(ステートメントハンドラ)ならそのまま使用、そうでなければprepareしているところまではわかったのですが、その後の流れは同じのようでしたし、Driver.xstまで解析するのはやめておきました(^^;)

343:デフォルトの名無しさん
20/03/12 16:51:12.87 XWa7Kkjq.net
>>340
そういう時は
How dare you?
と言う。

344:デフォルトの名無しさん
20/03/12 16:52:32.93 XWa7Kkjq.net
あ、記号まつがえた。

345:デフォルトの名無しさん
20/03/12 17:18:02.38 +5N6GCV3.net
関連付けの仕組みを知らない人がいるのかな?
単にレジストリに、この拡張子はこのコマンドで実行するって書くだけなんだけど

346:デフォルトの名無しさん
20/03/12 17:18:57.67 +5N6GCV3.net
つまりcmd。exeから実行できるものは全て
同じやり方で関連付け作れるってことね

347:デフォルトの名無しさん
20/03/12 18:12:19 XQbCK6u3.net
それはただの起動のしくみでしかない。
実際の動作は高い壁で分離されてるといって過言でないものをいっしょくたにはできまい。

348:デフォルトの名無しさん
20/03/12 18:48:34 U4j5Oz8o.net
>>347
理由は?

349:デフォルトの名無しさん
20/03/12 18:49:23 U4j5Oz8o.net
そもそもダブルクリックできるなんて
起動の仕組みなんだから、起動の仕組みでしか無いと言われても
その話をしてるんですよとしか言いようがないがw

350:デフォルトの名無しさん
20/03/12 19:40:41 kpO7RyNn.net
だからエクスプローラからWSLにあるファイル見る方法教えてくれってw

351:デフォルトの名無しさん
20/03/12 19:47:21 IWxDU6vM.net
それは見れる \\wsl$
エクスプローラからしか見れないのが問題

352:デフォルトの名無しさん
20/03/12 19:57:44 MY0SLzQz.net
グレタちゃんもアナルパールを使ってます

353:デフォルトの名無しさん
20/03/12 20:49:28 U4j5Oz8o.net
ダブルクリックてエクスプローラーの話じゃん
エクスプローラーから見れるなら、ダブルクリックして開ける。
その証拠にテキストファイルだって開けるだろ

354:デフォルトの名無しさん
20/03/12 22:39:56.96 MY0SLzQz.net
グレタちゃんに僕のパイソンを貸してあげたい

355:デフォルトの名無しさん
20/03/14 18:16:47.41 jx2yED/o.net
active perlのcryptのsaltにasciiでない文字を渡すと止まるんだけど何で?

356:デフォルトの名無しさん
20/03/14 19:34:39.97 RPa5riWU.net
WSLつかえ

357:デフォルトの名無しさん
20/03/14 22:58:59.61 eh0BX5+5.net
>>355
理由を聞いてどうするんや?
文字コードとかややこしいから、対応してないんやろ。

358:デフォルトの名無しさん
20/03/14 23:16:24 5TZ0Uf7y.net
分からんのなら黙ってろやチンカス

359:デフォルトの名無しさん
20/03/14 23:39:11.11 9VuyfYoc.net
暗号化って、base64 とかだろ。
ascii だけだろ
Ruby なら、こういうやつだろ
module SecureRandom
URLリンク(docs.ruby-lang.org)

360:デフォルトの名無しさん
20/03/14 23:44:18.11 jx2yED/o.net
keyの方は何でもokなんだけどな

361:デフォルトの名無しさん
20/03/15 03:21:52.90 ey4TMar/.net
>>358
わかってもなにもできんくせに
ゴミクズ

362:デフォルトの名無しさん
20/03/15 18:38:42.70 8dswEreI.net
グレタちゃんのクリトリスは100カラットのルビー

363:デフォルトの名無しさん
20/03/16 09:00:22.83 m2o8L3Qu.net
>>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の仕様に合わせているから、こうなるのではないかと思う。

364:デフォルトの名無しさん
20/03/16 19:53:11.24 jMV62GuM.net
128-255を渡しても止まるんだけどね
エラーが出るとかじゃなくて異常終了する
仕様だとは思い難い

365:デフォルトの名無しさん
20/03/16 20:07:47.98 O3TrJAsg.net
「異常終了」じゃなくて、「die」してるんちゃううんか?
>>363にもそう書いてあるやろ。
トラップしたけりゃevalしろ。

366:デフォルトの名無しさん
20/03/16 20:22:32 jMV62GuM.net
die すると何かエラーメッセージ出しておとなしく終了するんじゃないのか?
windowsに怒られとるぞ

367:デフォルトの名無しさん
20/03/17 00:31:17 WzQFj8c+.net
この言語はなにが起こるかわからんので基本evalで囲わないとやってられませんね

368:デフォルトの名無しさん
20/03/17 00:59:40.01 DZYZalLc.net
トラップでevalってなんだっけ?w
Perlやめてから結構立つから忘れた。
なんかそんなのあったなwww
今?Perlからシェルスクリプトに回帰していますがなにか?

369:デフォルトの名無しさん
20/03/17 05:25:03.15 WzQFj8c+.net
>>368
これ
URLリンク(perldoc.jp)
eval BLOCKってやつ
try catchみたいなもん

370:デフォルトの名無しさん
20/03/17 08:02:58 sAGmKBfN.net
エラーが返るならtryできるだろうけど、試してみたら異常終了するようなもんも避けられるのか?

371:デフォルトの名無しさん
20/03/17 21:45:41.98 sAGmKBfN.net
URLリンク(i.imgur.com)
evalでもトラップできない

372:デフォルトの名無しさん
20/03/18 00:13:57 +5qWGdwM.net
man にはどう書いてあるの? Perl の crypt じゃなくて C のライブラリの方だよ。

373:デフォルトの名無しさん
20/03/18 01:56:55 jzX09kaS.net
WindowsだしActivePerlのようだし、何がおきてもふしぎじゃないな。w

374:デフォルトの名無しさん
20/03/18 09:12:43 SzV6uL92.net
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

375:デフォルトの名無しさん
20/03/18 19:35:06 iQ6PHWNN.net
Windows7とか?

376:デフォルトの名無しさん
20/03/28 10:30:07.37 gZJzrXqn.net
検索が遅い
いろんな条件に対してファイル全体を検索、ということをする時に、
OSのキャッシュに頼って毎回 `grep` する方が速い
メモリに読み込んで検索すると負ける
ループで$data[$i] =~ /$pattern/ した方がまだ速くて、
grep {/$pattern/} @data するともっと遅くなる
大量一括検索の高速化のテクニックみたいなの何かあるのかな

377:デフォルトの名無しさん
20/03/28 18:48:22.67 Cuxaq7bT.net
>>376
URLリンク(metacpan.org)
使った事ないが MCE::Grep 辺りは説明読む限り速そう

378:デフォルトの名無しさん
20/03/28 18:55:38.49 Cuxaq7bT.net
もっと基本的な話なら perlperf
URLリンク(perldoc.jp)

379:デフォルトの名無しさん
20/03/28 19:23:29.33 gZJzrXqn.net
MCE::GrepはCPUの使用率は上がるけど遅くなった
grepよりは正規表現の処理のあたりが時間かかってるんだと思う
感覚的にはもっと高速でも全然おかしくない感じなのに

380:デフォルトの名無しさん
20/03/28 19:34:33 gZJzrXqn.net
100MBのファイルからパターンに合う行を全部抽出するのに1秒かかるくらいの感じ
で、パターンが250もあるから、コーヒーが飲めるくらい待たされる

381:デフォルトの名無しさん
20/03/28 20:00:38.86 L8+cmwNy.net
俺だったらgrepでやっちゃうなぁ
結果はファイル経由で

382:デフォルトの名無しさん
20/03/28 21:36:49.99 L89shHGR.net
>>376
qr//で事前に正規表現をコンパイルしてみたら?

383:デフォルトの名無しさん
20/03/28 21:55:00.53 gZJzrXqn.net
同じパターンで繰り返し検索するのではなくて、
いろんなパターンで同じ対象を検索するので、コンパイルはできない
でも、パターンのリストは実行前に確定しているので、
qrで作ったものを配列に持たせておけば速くなるだろうか

384:デフォルトの名無しさん
20/03/28 23:16:33.34 2U8ZKDy+.net
もはや perl の能力を超えているな
C とかで書いた方がいい

385:デフォルトの名無しさん
20/03/28 23:24:04.96 ZQFwrOhU.net
パターンの内容にもよるが、flex で書いて Inline::C で呼ぶという方法もある。

386:デフォルトの名無しさん
20/03/28 23:25:40.33 7nefda3x.net
色んなパターンで?
grep -f でパターン読ませてやるのと同じか?

387:デフォルトの名無しさん
20/03/29 09:15:52.43 9AyQFVoq.net
素の Perl は NFA だけだから、どうしても速度的には不利になる。
パターンが250もあるなら尚更だ。
grep との差はPerl と C の差はもちろんあるだろうが
DFA でできるパターンなら、その差が大きいと思う。

388:デフォルトの名無しさん
20/03/29 09:42:19.51 aacnUCYv.net
linuxだったら素直にgrep呼べばいいだけだけど、
windowsだと素性が良くて高速なgrepを探すところでまず困難がある
さらに、grepに引数を渡すところにもエスケープ文字の困難があって、
結果の受け取りにも文字コードの困難が

389:デフォルトの名無しさん
20/03/29 17:43:38 9AyQFVoq.net
そういえば awk は DFA じゃなかったかな。

390:デフォルトの名無しさん
20/03/30 00:14:28 mvvN5DTM.net
perl の Memoize は関数全体に掛けるようですが、
ruby の @memo、javascript の memo の変数に掛けるのは新し目の使い方でしょうか

391:デフォルトの名無しさん
20/03/30 04:32:31 PdZ6Klrm.net
>>388
WSLのUbuntuだとどうなのだろうか?
あれ遅い?

392:デフォルトの名無しさん
20/03/30 08:35:14.72 3FWyQXw7.net
NFA でなければならない理由がないなら DFA にするだけで速度 1000 倍は堅いかも。
でも Perl のままでも正規表現のチューニングは可能だ。まだやってないならね。
実際に使ってるパターンを見せてもらわないことにはなんとも言えないが。

393:デフォルトの名無しさん
20/03/31 12:53:45.32 GaEXrIp5.net
>>388
普通にWSLを使えばいいだけでは?

394:デフォルトの名無しさん
20/03/31 22:24:02.97 Z+pFaYZ2.net
win8.1のサポートが終わった頃に思い出したら使ってみよう

395:デフォルトの名無しさん
20/04/22 13:25:13 gkB+0fgm.net
@array = ($str =~ /(PAT1).+?(PAT2).+?(PAT3)/g);
みたいにすると、パターン3つ分が配列に入るけど、他にもマッチするとそれも続けて入る
できれば2次元配列になって欲しい
そんな技はある?

396:デフォルトの名無しさん
20/04/22 18:47:25.28 WLkEu+yG.net
そういうことをする時のセオリーはスカラコンテキストで
$str =~ /\G$pat/g

397:デフォルトの名無しさん
20/04/22 19:29:55 gkB+0fgm.net
可能?

$str = '1a2b3c1x1d2e3f1g2h3i';
を与えられて
[[a, b, c], [d, e, f], [g, h, i]]
を得るにはどうすれば

398:デフォルトの名無しさん
20/04/22 20:38:21.44 f6F85tCk.net
my @arr = ();
while ($str =~ /\G.+?([a-z]).+?([a-z]).+?([a-z])/g) {
  push @arr, [$1, $2, $3];
}

399:デフォルトの名無しさん
20/04/22 20:54:42 gkB+0fgm.net
[[a, b, c], [x, d, e], [f, g, h]]
になっとるよ

400:デフォルトの名無しさん
20/04/22 20:56:31 gkB+0fgm.net
でも判った
普通に$1使えばいいだけか
結果を一つずつスカラに取るんだと思ってた

401:デフォルトの名無しさん
20/04/22 21:01:22 gkB+0fgm.net
/\G.*?1(.)2(.)3(.)/g
これがやりたかったこと

402:デフォルトの名無しさん
20/04/22 21:27:03 gkB+0fgm.net
結局コードはあんまり変わらなくて、ループで
push @array, ($1, $2, $3)
にするか、後で
splice(@elements, 0, 3)
を使っていくかの違い

パターンを3つから4つに増やした時に、
$4を追加するか、3を4に増やすかのメンテはやっぱり必要
いきなり2次元配列が得られるスマートさからは劣る

403:デフォルトの名無しさん
20/04/22 21:30:34.59 WLkEu+yG.net
どうやら今回は必要ないみたいだけど事前にグループの個数が
判らないという前提なら @- とか見ればいい。
あるいはグループに名前を付けて %+ を使えばいい。
全部ここに書いてあるよ。
URLリンク(perldoc.jp)

404:デフォルトの名無しさん
20/04/22 21:32:10 f6F85tCk.net
Perlで、とある配列を指定した要素数ごとに別の配列リファレンスに分割する処理をList::MoreUtilsモジュールで書き直してみた
URLリンク(perl48.hatenablog.com)

405:デフォルトの名無しさん
20/04/22 23:57:47 WLkEu+yG.net
名前を付けるような性格のものじゃなくて個数が変わる可能性があるなら
個数だけ与えてパターンを組み立てればいいよ。
$1,$2 とか書かなくても
map { ${$_}} 1 .. $n
で同じことができるし。
リストコンテキストで配列に入れてから splice する方がいいと思うならそうすればいい。

406:デフォルトの名無しさん
20/04/23 08:13:25 7CKy0JPC.net
目指すのは、個数がいくつなのか人間が把握しなくていいコード

407:デフォルトの名無しさん
20/04/23 08:30:38.98 IlZrBGCM.net
できるでしょ。自分がスマートになってスマートなコードを書けばいい。

408:デフォルトの名無しさん
20/04/23 12:10:21.89 2vqGx7d4.net
完全に数値って決まってるんなら、俺ならsplit使っちゃうな
@a = split /\d/, $str;
まあこんな単純な話じゃないんだろうけど

409:デフォルトの名無しさん
20/05/01 10:49:51 baJ3Dlo6.net
activeperlで
$res = `exefile $file`;
みたいなことをした時に、
コマンドプロンプトからスクリプトを起動するとちゃんと動く
でも、スクリプトをランチャーから起動するとno such fileになる
ファイル名が英数ならどちらもok
2byte文字が混じると挙動が変わる

起動の仕方によってパスの取り扱いとか変わる?

410:デフォルトの名無しさん
20/05/01 12:19:28 baJ3Dlo6.net
あ、違う
2byte文字ではなくドライブの違いだった
ネットワークドライブにあるとアクセスできない
コマンドプロンプトからならできる

411:デフォルトの名無しさん
20/05/01 13:08:35 baJ3Dlo6.net
結局、ランチャーに管理者権限が付いてるのが原因

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
EnableLUA 1 -> 0
これで解決する
perl関係ない

412:デフォルトの名無しさん
20/05/01 13:13:09 9YL7RFP8.net
ランチャー自身か、ランチャーの起動方法がよくないんやろ。
ネットワークドライブの認証(ログオン)かそのタイミングがあやしい。

413:デフォルトの名無しさん
20/05/01 13:13:40 9YL7RFP8.net
あら、自己解決?

414:デフォルトの名無しさん
20/05/10 19:19:00.31 gcVsfbhd.net
質問させてください。
WindowsでActivePerlを使っています。
perl で、あるファイルを、関連付けられたアプリケーションで開く
には、どのようにすればよろしいでしょうか?
例えば、xx_system('foo.txt') のようにすると、'.txt'に
関連つけられたアプリケーションで、'foo.txt'を開くような
動作を実現したいのですが。

415:デフォルトの名無しさん
20/05/10 21:12:47 04IHVppx.net
system(1, 'foo.txt');

416:デフォルトの名無しさん
20/05/10 22:26:25.38 gcVsfbhd.net
>>415
動きました。ありがとうございました。

417:デフォルトの名無しさん
20/05/28 11:01:17 5kmQgXWn.net
最近 python を使い始めたんだけど、使うほどに perl 凄げーって思う。
perlって細かいこと気にしないでも書けるって感じ。
まあ、 python に慣れてないってのもあるけどw

418:デフォルトの名無しさん
20/05/28 12:00:57.19 yN32+nQR.net
細かいことを気にしないせいでバグの原因になるので、
きちっとしか書けないようにした
perlの不満を解消してもっと簡単に書けるようにしたのは、
rubyの方が正常進化だと思う

419:デフォルトの名無しさん
20/05/28 12:46:18.60 d4ggzNnr.net
>>418
use strict;
use warnings;

420:デフォルトの名無しさん
20/05/28 12:49:38 MEC8WK3T.net
Perl は、暗号のような記号が多いから、皆嫌う

Ruby は可読性を上げるために、それらの記号を無くそうとしている


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

1228日前に更新/240 KB
担当:undef