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/
2019/11/26(火) 23:14:08.94ID:EA1DZQ5h
>>153

コメントありがとうございます。
今回やることはファイルに上書きしたくバックアップもいらなかったので -i で良いかなと思っていました。
ワンライナーはよくお世話になってるのですが、今回-sでperl内に変数として渡せることがわかり、ますます重宝しそうです。
2019/11/30(土) 17:02:59.68ID:hCKH6fU7
今日、学んだこと。

/^([a-c]){2}\1/
は 'abb' にはマッチできるが 'aba' にはマッチできない。
もちろん 'aaa' にはマッチできるが…要するに
/^([a-c]){2}\1/

/^([a-c])\1\1/
と同じではなかった。
2020/02/01(土) 09:03:36.56ID:qxbFBKGD
パターンの中で\1って使えるんや…
正規表現って普通「事前に」FSMにコンパイルされてからマッチングに使うるんじゃないの…?
バックトラックとかする高度な実装のやつはまた違うんかね
2020/02/01(土) 13:27:18.26ID:wtOh7v6m
>>156
¥1は、むしろパターンの中でしか使わない。外で使うときは$1のほう。
正規表現は、バックトラックがあたりまえ。しない実装なんかあるか?

いろいろ勘違いしてるぞ。
2020/02/02(日) 08:34:53.41ID:7b/FZYuN
>>157
話が通じなさそうで大変よろしい
2020/02/02(日) 13:46:05.69ID:9cWLJdKQ
s/(pattern)/\1/
という使い方をするもんだと思いこんでいて、謎のバグに悩んだ
2020/02/04(火) 19:17:18.71ID:64ds8brY
perl hacks買った
送料込み300円
2020/02/04(火) 19:49:23.22ID:53yGrLtS
買われてしまった。
モダンperl入門でも買おうかな
2020/02/05(水) 00:34:08.21ID:Yyzz6n+F
今さら「モダン」もないやろ。w
どうとでも好きに書いたらええがな。
2020/02/05(水) 04:02:23.57ID:rxl56Lqp
モダンとか死語だもんな
そういうワード使うしかなかった当時の状況もあるけど
164デフォルトの名無しさん
垢版 |
2020/02/05(水) 17:51:27.40ID:9nK7Yle0
死語かなあ?
2020/02/05(水) 21:33:12.52ID:SZWAnwkp
>>156
決定性有限オートマトンと非決定性有限オートマトンについて調べるといいぞ。
lex は前者で Perl は後者だ。
2020/02/05(水) 22:58:10.81ID:TkSDhbEE
そういやモダンperl入門の新刊どうなった?
2020/02/05(水) 23:00:15.23ID:TkSDhbEE
2014年1月予定か。たのしみやで。
2020/02/06(木) 00:10:26.01ID:UIZEnib+
perlの最新本って、これくらいだろ
初めてのPerl 第7版 2018/01/20
Effective Perl 第2版 2015/02/17
2020/02/06(木) 00:14:16.79ID:m/3X75FJ
クリスマスまでにはperl6の本が山のように出版されるからな
2020/02/06(木) 00:24:20.95ID:T14/xjtC
ドラマ「3000回目のクリスマス」
2020/02/06(木) 00:30:59.99ID:6QnB4wyK
Perl6無くなったんじゃなかったっけ?
2020/02/06(木) 14:10:21.68ID:EPBtHi1S
ちっちゃくRakuって書くんじゃない?
2020/02/10(月) 22:55:04.23ID:hYCIpnsp
非決定性有限オートマトンは決定性有限オートマトンに変換できる
ていうか両者の能力は同じ(正規言語止まり
2020/02/10(月) 23:09:15.59ID:O7nANUNm
ゲーデル?
2020/02/11(火) 08:07:12.06ID:RnNFx+rl
んまーできると言っても状態数の爆発を伴うこともあるので
非決定性有限オートマトンのままにしといて入力が来たときに探索(バックトラック)で解決、
というのもアリっていやーアリ
176デフォルトの名無しさん
垢版 |
2020/02/11(火) 17:49:46.25ID:ix+UlUL8
名前変えたんだよね?やっぱ違いがありすぎて紛らわしいから変えたのか?
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 はやってない。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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