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/18(火) 20:25:02.62ID:2VKhUmei
それは慣用句なので割と判る
コメントくらい付けるけど
2020/02/18(火) 20:32:09.78ID:KQgsUf00
result = list(set(LIST))

pythonのほうが圧倒的に簡単
2020/02/18(火) 21:09:43.77ID:lAgti/Dg
>>200
これでなんでソートされるの?
2020/02/18(火) 21:10:15.76ID:Z1cJ/QMX
>>200
それじゃあソートできてないだろ

my @result = sort grep !$temp{$_}++, @list;
2020/02/18(火) 21:32:52.05ID:v/AIhdlf
>>202
sort 使わずに sort できるなんて凄いな。
206デフォルトの名無しさん
垢版 |
2020/02/18(火) 21:34:51.09ID:55IHv/fO
>>203
>>204
ゴメンソートは関係無かった。

uniqしたくて、検索したらこれが出てきたんだけど、自分で作るなら
for文で回してif文でチェックしてpushで配列に入れる。まあ、どんな言語でも動くやつね。

パッとこのコードが書けるんならいいけど、ここで時間を掛けたくないよね。
2020/02/18(火) 21:48:33.85ID:3v1Ek71E
普通のfor文で書けばよくね?w
2020/02/18(火) 21:53:35.14ID:2VKhUmei
機能がはっきりしてるから、sub uniqか何かを作って言語仕様かのように書く
きっと既にあるから、コピペで済む
2020/02/18(火) 22:00:21.17ID:3v1Ek71E
まあ余程の理由がない限り普通はList::Util使うね
2020/02/18(火) 22:14:59.19ID:2AC9Ct1n
ワンライナーカッケー病なんだろ
2020/02/18(火) 22:20:53.62ID:KQgsUf00
ハッシュを使ってカウントするなんてperlの定石なんだが
入門書のハッシュ解説で必ず載ってるぞ
2020/02/18(火) 23:17:41.56ID:aJeTcUgK
>>209
普通は>>204でしょ
モジュールは精査して本当に必要なものしか入れない
まあ現場次第だと思うが
213デフォルトの名無しさん
垢版 |
2020/02/19(水) 00:10:20.47ID:XDqysw2e
>>200
Rubyだとuniqが使えるが配列の集合演算でもできる。
result = list | []
2020/02/19(水) 00:43:04.19ID:6o0SSmsW
実装は面白くても実際の所普段の仕事では
わかりやすいインターフェースの関数にするから
そういう点で差はでないというね。
2020/02/19(水) 01:02:36.28ID:mEonuRdN
>>214
PerlやRubyなら、わざわざ関数にはしないかな。
その場でハッシュにつめてキーだけ使うとかかなりふつうだから。
2020/02/19(水) 01:53:16.69ID:IHihvCy5
ここ人いたんだ
2020/02/19(水) 02:27:13.60ID:+yXfQCpG
オワコンだとかすたれた言語だとか言われるけどまだまだ使われてるから
218デフォルトの名無しさん
垢版 |
2020/02/19(水) 04:28:09.35ID:UqnCT+lt
>>200
いや。わかる。
君もそのうちわかるようになるよ。
2020/02/19(水) 05:39:50.97ID:6o0SSmsW
>>215
そしてコメント書くぐらいなら関数にしろ
2020/02/19(水) 09:01:28.79ID:pJACNDga
他人にわかってもらいたくないんだろう。
2020/02/19(水) 09:31:49.80ID:oZi5GQ/y
ほら、こんなコードで実現できるんやで、
なにやってるか一見わからんやろ
説明しよか?

みたいに言いたくなったら、それは可読性が悪い証拠
2020/02/19(水) 12:23:16.28ID:CZsThdPw
Perl慣れしていない人の事を考える必要があるなら
標準モジュールの List::Util で uniq を使えばいいし、
https://perldoc.perl.org/List/Util.html#uniq

何らかの理由で標準モジュールや XS が使えないなら
Pure-perl 実装を CPAN から拾ってくればいいし、
https://metacpan.org/search?q=List%3A%3AUtil

実際 List::Util::PP::uniq() の中身はその手法だぞ。
https://metacpan.org/release/List-Util-MaybeXS/source/lib/List/Util/PP.pm

sub uniq (@) {
  my %seen;
  my $undef;
  my @uniq = grep defined($_) ? !$seen{$_}++ : !$undef++, @_;
  @uniq;
}
2020/02/19(水) 16:51:28.60ID:/J962Gym
perl使い生きてた
2020/02/19(水) 18:36:12.61ID:X6PQVyJY
勉強になるというか、どこで学んだの
2020/02/19(水) 19:52:56.93ID:SoQYbBiO
>>219
書かないから心配するな!
1+1と同じレベルだからな!
2020/02/19(水) 20:07:21.32ID:pJACNDga
そういう思想の馬鹿しかおらんからperlは廃れたんだよ。
2020/02/19(水) 20:07:27.51ID:zh3CM0eN
if (defined $table{$var}) {
 $var = $table{$var};
}

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

何かを2回書くのが嫌な時の逃げ方は何だろう
2020/02/19(水) 20:12:42.87ID:1DPeZovD
リストの要素数を得るために空リストに代入するのも慣用句と読んでいいかな?
$n = (() = <*>);
みたいの。
2020/02/19(水) 21:01:35.09ID:zh3CM0eN
要素数なんてどうせループにしか使わないので、
そんなのを取得しない解決がきっとエレガント
pythonの何でもイテレータ思想はきっと正しい
2020/02/19(水) 21:35:36.75ID:bGX6osz8
>>227
これはあるね しばし考えるんだけど結局一時変数を使う
構造によっては$_が使える時もあるんだけどまれだなあ
2020/02/19(水) 21:45:00.08ID:mEonuRdN
>>226
じゃあRubyやらC#やらも滅びるんやな。w

ハッシュのある言語ではあたりまえのイディオムやろが。
2020/02/20(木) 00:34:37.37ID:bivTkZxZ
まあ最近の言語は便利な標準メソッド呼べば終わりって感じだからね
Perlは標準モジュールの範囲だけでやろうとすると結構面倒
2020/02/20(木) 00:35:55.90ID:1VYpL0NG
スレに人が来ていてオジサンうれしいよ
2020/02/20(木) 01:29:24.69ID:bivTkZxZ
最近はPerlのことを喋ると謎の軍団が叩きに来るからな
ネット上で喋れる場所がなくなった
迫害されてる気分
235デフォルトの名無しさん
垢版 |
2020/02/20(木) 13:15:43.08ID:fXEOX4Gg
Perl/Tk は使い物にならん。プログラムが大きくなると動かないでやんのw
Perl/Qt を推進していくべき。

ここの人はPerlでGUIを使ったりしてる?
2020/02/20(木) 15:23:29.96ID:Gm5IubjH
Windows限定だが、Win32-GUIを使ってるよ。
インストールして、次のバッチファイルを走らせると、
細かい具体例のデモが見れる。
C:\Perl\site\bin\win32-gui-demos.bat
2020/02/20(木) 17:36:38.86ID:Nllb9nDe
>>231
そうではなくて独自の記号にコンテキスト毎に意味を詰め込む様な言語思想のこと言ってるんだがね。
2020/02/20(木) 18:47:26.22ID:CqCGFBWH
入力も出力もテキストで完結してるのがいい

と思ってたけど、最近excelデータを入出力に使い出した
2020/02/20(木) 20:33:42.77ID:0HRLUjae
短絡論理演算子を使うという方法もあるが、お気に召すかどうかは知らん。
2020/02/20(木) 20:44:08.31ID:CqCGFBWH
>>227の例だと
$var = $table{$var} or $var
で概ね動くけど、空文字列なんかが入ってた時に誤動作する

判別はdefinedしか無いとして、それでも書ける短絡評価とは
2020/02/20(木) 21:36:24.51ID:uxa6Suua
defined-or使うだけじゃないの?
$var = $table{$var} // $var;
2020/02/20(木) 22:00:38.63ID:0HRLUjae
アンカー入れ忘れたのによく分かってくれたな。ありがとう。
2020/02/20(木) 22:37:06.65ID:CqCGFBWH
そんな演算子知らん
2020/02/20(木) 23:16:35.88ID:NRacWxGd
null合体演算子は最近の流行りやぞ?
2020/02/21(金) 01:54:46.68ID:dQ0Yz//t
//流行ってる気がしない。
新しい機能を積極的に使う人はそもそもperlを使わないのではないか。
断固外氏のブログのネタにしかなってなさそう。
2020/02/21(金) 02:18:25.95ID:YvRUEPlL
5.8じゃ使えないからね
それだけで使わない理由になる
2020/02/21(金) 03:26:53.00ID:6/adwu75
細かいけど優先度は// > = > orだよ
2020/02/21(金) 03:54:06.99ID:6/adwu75
>>227と等価なのは>>241
この例はdefinedだったから適用できるのね
判定が任意だとするとやはり2度書くしかないかね 例えば
if ($table{$var} % 3) {
 $var = $table{$var};
}
perlは同一値への参照と解釈して2回読みにはいかないという気の利いたことはしないだろうね
エクセプション入ったら変わる可能性あるしね
2020/02/21(金) 03:58:30.72ID:6/adwu75
//=の逆バージョンあったらいいなとはたまに思うね
そこまで必要性ないという判断でないのだろうけども
2020/02/21(金) 07:05:24.88ID:TnPEnehp
$table{$var} が $_ に入るような無害な処理をしておいて、
$var = $_ % 3 ? $_ : $var
と等価なシンタックスシュガーで処理する
みたいなことができれば
2020/02/21(金) 09:05:21.00ID:KvZFDIbR
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";
}
2020/02/21(金) 09:57:55.58ID:PzVMR7sv
サブルーチンとか甘え。謎の記号を使って魔法のようなコードを書くのがPerlの醍醐味。可読性は悪
253デフォルトの名無しさん
垢版 |
2020/02/21(金) 12:24:11.67ID:TKnLlA6x
>>235
昔々 Perl/Tk 使おうと思ったが日本語対応が出来てなくて止めたことがある。
それ以来 Perl で GUI はやってない。
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で実行できんの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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