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/
177デフォルトの名無しさん
垢版 |
2020/02/11(火) 17:50:45.15ID:ix+UlUL8
すまん。リロード忘れて間に他の書き込みが挟まった。Perl6の話ね。
2020/02/11(火) 18:26:47.40ID:FJnR5oDj
ロゴもどうなんだ
2020/02/11(火) 22:24:33.99ID:kUx05S+X
>>176
少なくとも、もうPerlでは無いと言うことだ
Perlの系譜にある別言語だね
180デフォルトの名無しさん
垢版 |
2020/02/12(水) 01:53:33.21ID:CB9IiDBv
YouTuberは「最強の職業」である理由。
https://www.youtube.com/watch?v=XjV3Nb0-hgA
【事例付き】YouTuberは最強の副業である件について。
https://www.youtube.com/watch?v=wB8hNuNVoIw&;t=267s
【初心者向け】YouTubeの始め方・稼ぎ方を徹底解説!
https://www.youtube.com/watch?v=YEw-a8qlADM
「YouTubeなんていつか稼げなくなる」という主張を論破する。
https://www.youtube.com/watch?v=VatNILApW4U
収益化から丸1年!YouTubeでいくら稼いだか公開。
https://www.youtube.com/watch?v=-zQxuQqZ5eA&;t=103s
その動画で月商○○万!? YouTubeで稼ぐ裏技的アプローチ。
https://www.youtube.com/watch?v=7I4APU_6i9o&;t=433s
【貧者の工夫で戦え】ガラケーだっていい。YouTube始めるのにパソコンはいらない!
https://www.youtube.com/watch?v=jYdWfjjzD7Y
【第一回】SNS、YouTube、ブログで稼ぐ方法を、丁寧に解説します!
https://www.youtube.com/watch?v=erNiLOncDnY
2020/02/12(水) 07:13:33.96ID:ZjDcS8oe
元から別言語定期
2020/02/12(水) 10:59:57.05ID:urwrbVLd
Python もそのくらいやって欲しい。
2020/02/12(水) 16:01:22.42ID:SF/q3PcI
Rakuは設計当初からオプショナルな型システムあるし
numpyっぽい操作が言語組み込みだったり
いろいろ早すぎた
2020/02/13(木) 01:14:31.03ID:on7ESczL
当初はすごいと思ったけど今見ると糞仕様だな
185デフォルトの名無しさん
垢版 |
2020/02/15(土) 12:59:07.78ID:8m1Cr/X/
ハッシュの配列とかも簡単にできるもんね。
perlで作ったプログラムをC++で作り直すと思うとゾッとするw
2020/02/15(土) 14:49:16.24ID:av6eWd5V
ハッシュの配列とかスクリプト言語の類ならどれも同じようにできる。
Perlがだめなのは、スカラとリストの二つが存在することだな
同じ書き方をしても、使い方で意味が変わってしまう。
変わるだけならともかく違う解釈で動いてしまうからバグのもとに鳴る。
2020/02/15(土) 16:00:24.43ID:CBuE7ub7
>>186
リストは使わずに全部リファレンスでやった方がいろいろ安全だよ
2020/02/15(土) 16:25:27.75ID:33mO6l2/
なるほどそうかもしらん
2020/02/15(土) 18:59:30.30ID:jU+J++ht
$aと@aが区別されるので調子に乗って、
$a->[0][0][0] と一緒に $a も使ってバグる
190デフォルトの名無しさん
垢版 |
2020/02/16(日) 20:31:14.76ID:7RTwZ9VV
まあ、自分で作るには兆便利だけど人のプログラムの修正やメンテはやりたくないなw
やっぱ、C言語ぐらい厳しくないとプロ用は無理だよね。
2020/02/17(月) 00:50:46.53ID:qx2LCmQN
Cは厳しさが足りない!
2020/02/17(月) 09:02:59.28ID:3xf/X3D3
他人が書いたものばかりでなく、1年前ぐらいに自分が書いたものを
修正しようとして、「なにやってんの?これ」と思う。
自分自身のために、「しつこいぐらいにコメントを入れる」を心がけてるよ。
2020/02/17(月) 10:26:17.75ID:DZOr9dsV
それ以前にコメントがなくてもわかるようなコードにしてるよ
2020/02/17(月) 13:13:07.93ID:ZZZ2hHJ7
マクロなコードは読んで意味がわかるものにするのは当然として
コメントはビジネスロジックと言うか、フローの説明じゃね
2020/02/17(月) 13:17:02.86ID:5usMQUGr
書いてあることを説明する必要はない。
コメントで書くのは、なぜこんなフローにしたかだ
2020/02/17(月) 13:21:56.88ID:ZZZ2hHJ7
ミクロだわ恥ずかしい(´・ω・`)
2020/02/17(月) 15:20:38.00ID:wTmXuXv8
一見すると何やってんだか分からなくてもよく辿るとスゲエなこれ天才じゃねって思うことある
自分が書いたんだけどね
2020/02/17(月) 20:40:48.55ID:Y4S6wB9m
書くのも読むのも全然困らないようなコードしか書かないのが理想

難解な処理は、きっともっとシンプルに解決できる
2020/02/17(月) 22:34:20.51ID:qx2LCmQN
現実はそうではない。
200デフォルトの名無しさん
垢版 |
2020/02/18(火) 20:13:13.66ID:55IHv/fO
my @result = grep !$temp{$_}++, @list;

凄げーよね、@listをuniqにソートするコードだって。
パールならではだよね。
普通なにしてるかわからんよw
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叩くだけだよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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