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/
探検
Perlについての質問箱 64箱目
■ このスレッドは過去ログ倉庫に格納されています
2019/02/01(金) 09:44:37.18ID:1/Kr4Qjk
389デフォルトの名無しさん
2020/03/29(日) 17:43:38.29ID:9AyQFVoq そういえば awk は DFA じゃなかったかな。
390デフォルトの名無しさん
2020/03/30(月) 00:14:28.89ID:mvvN5DTM perl の Memoize は関数全体に掛けるようですが、
ruby の @memo、javascript の memo の変数に掛けるのは新し目の使い方でしょうか
ruby の @memo、javascript の memo の変数に掛けるのは新し目の使い方でしょうか
391デフォルトの名無しさん
2020/03/30(月) 04:32:31.95ID:PdZ6Klrm392デフォルトの名無しさん
2020/03/30(月) 08:35:14.72ID:3FWyQXw7 NFA でなければならない理由がないなら DFA にするだけで速度 1000 倍は堅いかも。
でも Perl のままでも正規表現のチューニングは可能だ。まだやってないならね。
実際に使ってるパターンを見せてもらわないことにはなんとも言えないが。
でも Perl のままでも正規表現のチューニングは可能だ。まだやってないならね。
実際に使ってるパターンを見せてもらわないことにはなんとも言えないが。
393デフォルトの名無しさん
2020/03/31(火) 12:53:45.32ID:GaEXrIp5 >>388
普通にWSLを使えばいいだけでは?
普通にWSLを使えばいいだけでは?
394デフォルトの名無しさん
2020/03/31(火) 22:24:02.97ID:Z+pFaYZ2 win8.1のサポートが終わった頃に思い出したら使ってみよう
395デフォルトの名無しさん
2020/04/22(水) 13:25:13.88ID:gkB+0fgm @array = ($str =~ /(PAT1).+?(PAT2).+?(PAT3)/g);
みたいにすると、パターン3つ分が配列に入るけど、他にもマッチするとそれも続けて入る
できれば2次元配列になって欲しい
そんな技はある?
みたいにすると、パターン3つ分が配列に入るけど、他にもマッチするとそれも続けて入る
できれば2次元配列になって欲しい
そんな技はある?
396デフォルトの名無しさん
2020/04/22(水) 18:47:25.28ID:WLkEu+yG そういうことをする時のセオリーはスカラコンテキストで
$str =~ /\G$pat/g
$str =~ /\G$pat/g
397デフォルトの名無しさん
2020/04/22(水) 19:29:55.51ID:gkB+0fgm 可能?
$str = '1a2b3c1x1d2e3f1g2h3i';
を与えられて
[[a, b, c], [d, e, f], [g, h, i]]
を得るにはどうすれば
$str = '1a2b3c1x1d2e3f1g2h3i';
を与えられて
[[a, b, c], [d, e, f], [g, h, i]]
を得るにはどうすれば
398デフォルトの名無しさん
2020/04/22(水) 20:38:21.44ID:f6F85tCk my @arr = ();
while ($str =~ /\G.+?([a-z]).+?([a-z]).+?([a-z])/g) {
push @arr, [$1, $2, $3];
}
while ($str =~ /\G.+?([a-z]).+?([a-z]).+?([a-z])/g) {
push @arr, [$1, $2, $3];
}
399デフォルトの名無しさん
2020/04/22(水) 20:54:42.93ID:gkB+0fgm [[a, b, c], [x, d, e], [f, g, h]]
になっとるよ
になっとるよ
400デフォルトの名無しさん
2020/04/22(水) 20:56:31.77ID:gkB+0fgm でも判った
普通に$1使えばいいだけか
結果を一つずつスカラに取るんだと思ってた
普通に$1使えばいいだけか
結果を一つずつスカラに取るんだと思ってた
401デフォルトの名無しさん
2020/04/22(水) 21:01:22.02ID:gkB+0fgm /\G.*?1(.)2(.)3(.)/g
これがやりたかったこと
これがやりたかったこと
402デフォルトの名無しさん
2020/04/22(水) 21:27:03.82ID:gkB+0fgm 結局コードはあんまり変わらなくて、ループで
push @array, ($1, $2, $3)
にするか、後で
splice(@elements, 0, 3)
を使っていくかの違い
パターンを3つから4つに増やした時に、
$4を追加するか、3を4に増やすかのメンテはやっぱり必要
いきなり2次元配列が得られるスマートさからは劣る
push @array, ($1, $2, $3)
にするか、後で
splice(@elements, 0, 3)
を使っていくかの違い
パターンを3つから4つに増やした時に、
$4を追加するか、3を4に増やすかのメンテはやっぱり必要
いきなり2次元配列が得られるスマートさからは劣る
403デフォルトの名無しさん
2020/04/22(水) 21:30:34.59ID:WLkEu+yG どうやら今回は必要ないみたいだけど事前にグループの個数が
判らないという前提なら @- とか見ればいい。
あるいはグループに名前を付けて %+ を使えばいい。
全部ここに書いてあるよ。
https://perldoc.jp/pod/perlretut
判らないという前提なら @- とか見ればいい。
あるいはグループに名前を付けて %+ を使えばいい。
全部ここに書いてあるよ。
https://perldoc.jp/pod/perlretut
404デフォルトの名無しさん
2020/04/22(水) 21:32:10.06ID:f6F85tCk Perlで、とある配列を指定した要素数ごとに別の配列リファレンスに分割する処理をList::MoreUtilsモジュールで書き直してみた
https://perl48.hatenablog.com/entry/2018/08/19/005304
https://perl48.hatenablog.com/entry/2018/08/19/005304
405デフォルトの名無しさん
2020/04/22(水) 23:57:47.29ID:WLkEu+yG 名前を付けるような性格のものじゃなくて個数が変わる可能性があるなら
個数だけ与えてパターンを組み立てればいいよ。
$1,$2 とか書かなくても
map { ${$_}} 1 .. $n
で同じことができるし。
リストコンテキストで配列に入れてから splice する方がいいと思うならそうすればいい。
個数だけ与えてパターンを組み立てればいいよ。
$1,$2 とか書かなくても
map { ${$_}} 1 .. $n
で同じことができるし。
リストコンテキストで配列に入れてから splice する方がいいと思うならそうすればいい。
406デフォルトの名無しさん
2020/04/23(木) 08:13:25.78ID:7CKy0JPC 目指すのは、個数がいくつなのか人間が把握しなくていいコード
407デフォルトの名無しさん
2020/04/23(木) 08:30:38.98ID:IlZrBGCM できるでしょ。自分がスマートになってスマートなコードを書けばいい。
408デフォルトの名無しさん
2020/04/23(木) 12:10:21.89ID:2vqGx7d4 完全に数値って決まってるんなら、俺ならsplit使っちゃうな
@a = split /\d/, $str;
まあこんな単純な話じゃないんだろうけど
@a = split /\d/, $str;
まあこんな単純な話じゃないんだろうけど
409デフォルトの名無しさん
2020/05/01(金) 10:49:51.92ID:baJ3Dlo6 activeperlで
$res = `exefile $file`;
みたいなことをした時に、
コマンドプロンプトからスクリプトを起動するとちゃんと動く
でも、スクリプトをランチャーから起動するとno such fileになる
ファイル名が英数ならどちらもok
2byte文字が混じると挙動が変わる
起動の仕方によってパスの取り扱いとか変わる?
$res = `exefile $file`;
みたいなことをした時に、
コマンドプロンプトからスクリプトを起動するとちゃんと動く
でも、スクリプトをランチャーから起動するとno such fileになる
ファイル名が英数ならどちらもok
2byte文字が混じると挙動が変わる
起動の仕方によってパスの取り扱いとか変わる?
410デフォルトの名無しさん
2020/05/01(金) 12:19:28.98ID:baJ3Dlo6 あ、違う
2byte文字ではなくドライブの違いだった
ネットワークドライブにあるとアクセスできない
コマンドプロンプトからならできる
2byte文字ではなくドライブの違いだった
ネットワークドライブにあるとアクセスできない
コマンドプロンプトからならできる
411デフォルトの名無しさん
2020/05/01(金) 13:08:35.22ID:baJ3Dlo6 結局、ランチャーに管理者権限が付いてるのが原因
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
EnableLUA 1 -> 0
これで解決する
perl関係ない
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
EnableLUA 1 -> 0
これで解決する
perl関係ない
412デフォルトの名無しさん
2020/05/01(金) 13:13:09.83ID:9YL7RFP8 ランチャー自身か、ランチャーの起動方法がよくないんやろ。
ネットワークドライブの認証(ログオン)かそのタイミングがあやしい。
ネットワークドライブの認証(ログオン)かそのタイミングがあやしい。
413デフォルトの名無しさん
2020/05/01(金) 13:13:40.55ID:9YL7RFP8 あら、自己解決?
414デフォルトの名無しさん
2020/05/10(日) 19:19:00.31ID:gcVsfbhd 質問させてください。
WindowsでActivePerlを使っています。
perl で、あるファイルを、関連付けられたアプリケーションで開く
には、どのようにすればよろしいでしょうか?
例えば、xx_system('foo.txt') のようにすると、'.txt'に
関連つけられたアプリケーションで、'foo.txt'を開くような
動作を実現したいのですが。
WindowsでActivePerlを使っています。
perl で、あるファイルを、関連付けられたアプリケーションで開く
には、どのようにすればよろしいでしょうか?
例えば、xx_system('foo.txt') のようにすると、'.txt'に
関連つけられたアプリケーションで、'foo.txt'を開くような
動作を実現したいのですが。
415デフォルトの名無しさん
2020/05/10(日) 21:12:47.84ID:04IHVppx system(1, 'foo.txt');
416デフォルトの名無しさん
2020/05/10(日) 22:26:25.38ID:gcVsfbhd >>415
動きました。ありがとうございました。
動きました。ありがとうございました。
417デフォルトの名無しさん
2020/05/28(木) 11:01:17.93ID:5kmQgXWn 最近 python を使い始めたんだけど、使うほどに perl 凄げーって思う。
perlって細かいこと気にしないでも書けるって感じ。
まあ、 python に慣れてないってのもあるけどw
perlって細かいこと気にしないでも書けるって感じ。
まあ、 python に慣れてないってのもあるけどw
418デフォルトの名無しさん
2020/05/28(木) 12:00:57.19ID:yN32+nQR 細かいことを気にしないせいでバグの原因になるので、
きちっとしか書けないようにした
perlの不満を解消してもっと簡単に書けるようにしたのは、
rubyの方が正常進化だと思う
きちっとしか書けないようにした
perlの不満を解消してもっと簡単に書けるようにしたのは、
rubyの方が正常進化だと思う
419デフォルトの名無しさん
2020/05/28(木) 12:46:18.60ID:d4ggzNnr420デフォルトの名無しさん
2020/05/28(木) 12:49:38.27ID:MEC8WK3T Perl は、暗号のような記号が多いから、皆嫌う
Ruby は可読性を上げるために、それらの記号を無くそうとしている
Ruby は可読性を上げるために、それらの記号を無くそうとしている
421デフォルトの名無しさん
2020/05/28(木) 13:57:57.17ID:EGYBOXys422デフォルトの名無しさん
2020/05/28(木) 14:14:16.30ID:yN32+nQR マウスオーバーで判るようなものをいちいち書かなくても
423デフォルトの名無しさん
2020/05/28(木) 19:40:22.87ID:2jhnUESo PerlでIDEは使わないわな
424デフォルトの名無しさん
2020/05/28(木) 20:04:53.96ID:EYUPTTzW んなこたーない
425デフォルトの名無しさん
2020/05/28(木) 20:14:52.80ID:2jhnUESo いやいやPerl書いてるときマウス触らんでしょ
まあ人によるんだろうが
まあ人によるんだろうが
426デフォルトの名無しさん
2020/05/28(木) 20:21:04.17ID:yN32+nQR ロジックが逆だ
perlが型が判るからマウスを触らないのではなく、
マウスを触らないで作ったからマウスなしで型が判るようになってる
MT免許だからといってATに乗ってはいけない訳ではない
perlが型が判るからマウスを触らないのではなく、
マウスを触らないで作ったからマウスなしで型が判るようになってる
MT免許だからといってATに乗ってはいけない訳ではない
427デフォルトの名無しさん
2020/05/29(金) 20:28:53.39ID:Ey9K/+fw Perl の IDE って、どんなのがある?
Eclipse とか IntelliJ IDEA のプラグインで使えたとは思ったが、拡張子を .pl にしておかないと Perl だと判別してくれなくて
ただのテキストファイルと認識されちゃって使い辛いなと思ったことはあるが、もっとまともなのある?
Eclipse とか IntelliJ IDEA のプラグインで使えたとは思ったが、拡張子を .pl にしておかないと Perl だと判別してくれなくて
ただのテキストファイルと認識されちゃって使い辛いなと思ったことはあるが、もっとまともなのある?
428デフォルトの名無しさん
2020/05/29(金) 20:32:29.66ID:uRkXoYhe vscode + Perl::LanguageServer
429デフォルトの名無しさん
2020/05/29(金) 20:34:34.78ID:Bk25Bwk1 サクラエディタで十分なんですよ(´・ω・`)
430デフォルトの名無しさん
2020/05/29(金) 21:27:39.95ID:dZOo8Hm0 拡張子を ,pl にしないメリットってなんかある?
431デフォルトの名無しさん
2020/05/29(金) 21:28:20.85ID:Bk25Bwk1 実行ファイルはpl
モジュールはpm
そんな事も知らんのか(´・ω・`)
モジュールはpm
そんな事も知らんのか(´・ω・`)
432デフォルトの名無しさん
2020/05/29(金) 21:36:34.81ID:8nIWWcW2 perlはvimで書く。
お兄さんとの約束だよ。
お兄さんとの約束だよ。
433デフォルトの名無しさん
2020/05/29(金) 21:38:26.77ID:uRkXoYhe mattnさんはパンツ履いて
434デフォルトの名無しさん
2020/05/29(金) 23:37:14.00ID:GfVaVkMA435デフォルトの名無しさん
2020/05/30(土) 00:29:42.29ID:UYDx2q8r >>434
cとかshellとか拡張子をつけるのが普通なんじゃないの?
cとかshellとか拡張子をつけるのが普通なんじゃないの?
436デフォルトの名無しさん
2020/05/30(土) 00:31:15.77ID:pcDYqVj5 ソースは付ける
実行ファイルは付けない
スクリプトはソースよりも実行ファイル寄り
実行ファイルは付けない
スクリプトはソースよりも実行ファイル寄り
437デフォルトの名無しさん
2020/05/30(土) 00:42:58.21ID:h6ZQaP0H 拡張子つければ伝わるであろう情報を削るとか
一人で管理してるサーバならいいけど
そうじゃなきゃ害悪だと思う
一人で管理してるサーバならいいけど
そうじゃなきゃ害悪だと思う
438デフォルトの名無しさん
2020/05/30(土) 01:44:27.37ID:UYDx2q8r 人間がエディトするファイルは付ける
人間がエディトしないファイルは付けないんじゃないの?
人間がエディトしないファイルは付けないんじゃないの?
439デフォルトの名無しさん
2020/05/30(土) 01:51:00.93ID:h49XlInt 運用においては、実行ファイルの実装方法なんかどうでもいい。
むしろ、実装方法を変えたら、ファイル名も変わるほうがはるかに害悪。
たとえば、シェルスクリプトをPerl スクリプトに変えただけで、そのスクリプトを使っているところをすべて変更しないといけなくなる。
むしろ、実装方法を変えたら、ファイル名も変わるほうがはるかに害悪。
たとえば、シェルスクリプトをPerl スクリプトに変えただけで、そのスクリプトを使っているところをすべて変更しないといけなくなる。
440デフォルトの名無しさん
2020/05/30(土) 03:26:43.00ID:k7WMMDxu 昔々 MS-DOS (更にそれの元になった CP/M)はファイル名に固定で3文字の拡張子があり、
それによって実行ファイルかどうかを判定していて、Windows はそれを引き継いでいるので
拡張子を使っているだけ。
UNIX系OSはそもそも拡張子という概念はなく、実行ファイルは実行パーミッションのビットが
立っているかどうかで判定していた。C言語のソースに .c を付けたりはするが、あれは拡張子
ではなく接尾辞で主に人間やそれを読むコンパイラ等がファイルの種別をファイル名から判断
するためにある。だからOSから見たら .c の部分に特別な意味はなくファイル名の一部でしかない。
Windows だと例えば .exe のファイルなら .exe を抜いた拡張子なしのファイル名を指定して
OSに実行させる事は可能だが、これはOSが拡張子部分を特別扱いしているからだ。
UNIX系OSではそのような方法では実行できずファイル名を全て指定する必要がある。xxx.pl なら
xxx.pl と指定する必要があり xxx のみでは実行できない。その代わり実行パーミッションが立って
いればファイル名がどうであろうともOSはそれを実行しようとする(実際に実行できるかどうかは
ファイルの内容による)。
それによって実行ファイルかどうかを判定していて、Windows はそれを引き継いでいるので
拡張子を使っているだけ。
UNIX系OSはそもそも拡張子という概念はなく、実行ファイルは実行パーミッションのビットが
立っているかどうかで判定していた。C言語のソースに .c を付けたりはするが、あれは拡張子
ではなく接尾辞で主に人間やそれを読むコンパイラ等がファイルの種別をファイル名から判断
するためにある。だからOSから見たら .c の部分に特別な意味はなくファイル名の一部でしかない。
Windows だと例えば .exe のファイルなら .exe を抜いた拡張子なしのファイル名を指定して
OSに実行させる事は可能だが、これはOSが拡張子部分を特別扱いしているからだ。
UNIX系OSではそのような方法では実行できずファイル名を全て指定する必要がある。xxx.pl なら
xxx.pl と指定する必要があり xxx のみでは実行できない。その代わり実行パーミッションが立って
いればファイル名がどうであろうともOSはそれを実行しようとする(実際に実行できるかどうかは
ファイルの内容による)。
441デフォルトの名無しさん
2020/05/30(土) 08:54:37.07ID:Noe/rV9t 拡張子が無くても判定できるようにすればいいんじゃないの? Emacs みたいに。
442デフォルトの名無しさん
2020/05/30(土) 12:16:10.21ID:h49XlInt >>441
つ fileコマンド
つ fileコマンド
443デフォルトの名無しさん
2020/05/30(土) 13:18:31.04ID:9sn/rA++ >>439
運用のために保守は犠牲にするんですか?
運用のために保守は犠牲にするんですか?
444デフォルトの名無しさん
2020/05/30(土) 13:58:45.71ID:h49XlInt445デフォルトの名無しさん
2020/05/30(土) 15:56:11.11ID:CwCZ2prN >>440
シェバン知らず?
シェバン知らず?
446デフォルトの名無しさん
2020/05/30(土) 18:54:59.01ID:h49XlInt447デフォルトの名無しさん
2020/05/30(土) 19:43:41.34ID:GvMJ9/EG >>432
おじいちゃん(´・ω・`)
おじいちゃん(´・ω・`)
448デフォルトの名無しさん
2020/05/31(日) 02:15:32.98ID:MeZ7svrP 言語変えて作り直すって、俺の感覚ではシステム置き換えのイメージだわ
コンパイル済みのバイナリならともかく、スクリプト言語動かすって環境づくりも入るじゃん
コンパイル済みのバイナリならともかく、スクリプト言語動かすって環境づくりも入るじゃん
450デフォルトの名無しさん
2020/05/31(日) 03:40:37.55ID:qe5b9Icc451デフォルトの名無しさん
2020/05/31(日) 04:22:23.87ID:fhA8y4ka 読解力理解力がなくて、複数から指摘されたからって、自演扱いで返すとは見苦しいぞ。
452デフォルトの名無しさん
2020/05/31(日) 05:26:43.75ID:pTVQa+4z >>450
それ何のOSでの話?
それ何のOSでの話?
453デフォルトの名無しさん
2020/06/11(木) 19:05:11.82ID:5cioSHJn 「local $| = 1;」と言う記述見たんですけど、
「$|」の局所化って意味あるのでしょうか?
ただ単に「$| = 1;」と等価であり「local」を記述しても無駄な気がするんですけど、
私の勘違いでしょうか?
「local $| = 1;」とやることで、
そのファイルの出力だけみたいな感じになるのですか?
となると、
同プロセスなのに標準出力バッファが出力毎に別個に用意されてる事になってしまいますよね?
分かるかた教えてください。
「$|」の局所化って意味あるのでしょうか?
ただ単に「$| = 1;」と等価であり「local」を記述しても無駄な気がするんですけど、
私の勘違いでしょうか?
「local $| = 1;」とやることで、
そのファイルの出力だけみたいな感じになるのですか?
となると、
同プロセスなのに標準出力バッファが出力毎に別個に用意されてる事になってしまいますよね?
分かるかた教えてください。
454デフォルトの名無しさん
2020/06/11(木) 19:32:41.35ID:zOJFiWlV >>453
スコープを抜けたときに、もとの値に戻る。
スコープを抜けたときに、もとの値に戻る。
455デフォルトの名無しさん
2020/06/11(木) 19:37:09.97ID:YKNmcAQr 横からだけど知らなかった…
毎回もとの値別変数で退避してた
毎回もとの値別変数で退避してた
456デフォルトの名無しさん
2020/06/11(木) 19:53:05.96ID:L2GhQgnz なんとなく直感的にグローバル変数だけだと思ってた
だから元の値を退避しておくという発想の方が自然
わざわざぶつけて便利に使おうという発想はいずれバグる
だから元の値を退避しておくという発想の方が自然
わざわざぶつけて便利に使おうという発想はいずれバグる
457デフォルトの名無しさん
2020/06/11(木) 20:13:03.35ID:5cioSHJn >>454
レスありがとうございます。
「もとの値に戻る」と言う事は、a.plから参照される異なるスコープのb.pmがあり、
b.pmに「local $| = 1;」の記述があった場合、
b.pmに定義されたサブルーチンが呼び出される毎に、
「$| = 1;」と同等の処理が行われ、
戻る際には元の値がセットされるのでしょうか?
それとも、スコープによって異なる「$|」を、
標準出力側でスコープ毎に切り替えてるという事でしょうか?
レスありがとうございます。
「もとの値に戻る」と言う事は、a.plから参照される異なるスコープのb.pmがあり、
b.pmに「local $| = 1;」の記述があった場合、
b.pmに定義されたサブルーチンが呼び出される毎に、
「$| = 1;」と同等の処理が行われ、
戻る際には元の値がセットされるのでしょうか?
それとも、スコープによって異なる「$|」を、
標準出力側でスコープ毎に切り替えてるという事でしょうか?
458デフォルトの名無しさん
2020/06/11(木) 20:24:12.92ID:L2GhQgnz printする度に今見えてる$|が渡ってるんだろうな
459デフォルトの名無しさん
2020/06/11(木) 21:09:21.20ID:5cioSHJn460デフォルトの名無しさん
2020/06/11(木) 22:40:57.89ID:zOJFiWlV461デフォルトの名無しさん
2020/06/12(金) 02:39:58.45ID:TN61WwYv 宜しくお願いします。
$1をクリアしたい場合は「'' =~ /()/;」等として
無駄なマッチングをして空文字列を設定しないとダメですか?
数億件のデータを捌く際とか、めちゃくちゃタイムロスになりますよね?
皆様はどうされてるのでしょう?
$1をクリアしたい場合は「'' =~ /()/;」等として
無駄なマッチングをして空文字列を設定しないとダメですか?
数億件のデータを捌く際とか、めちゃくちゃタイムロスになりますよね?
皆様はどうされてるのでしょう?
462461
2020/06/12(金) 02:41:54.90ID:TN61WwYv463540
2020/06/12(金) 02:51:00.48ID:OceO7BHX >>461
まず、scalar変数の場合
=()はできない
=''や""は明示的に空文字列を設定することになる
なので既存変数をクリア、というか不定状態に設定するには
= undef;
あるいは数値を設定するためのシンボルを値0に戻すには
= 0;
undefは値として評価されれれば0,文字列として評価割れれば空文字列''が返った
(と思う)
まず、scalar変数の場合
=()はできない
=''や""は明示的に空文字列を設定することになる
なので既存変数をクリア、というか不定状態に設定するには
= undef;
あるいは数値を設定するためのシンボルを値0に戻すには
= 0;
undefは値として評価されれれば0,文字列として評価割れれば空文字列''が返った
(と思う)
464デフォルトの名無しさん
2020/06/12(金) 03:17:40.95ID:O2sQpJVa 答えではないのだけれど、そういう場面に遭遇したことがないんだよね
簡単でいいのでどんな時に必要なのかしら?
簡単でいいのでどんな時に必要なのかしら?
465461
2020/06/12(金) 03:24:01.31ID:TN61WwYv466461
2020/06/12(金) 03:52:20.68ID:TN61WwYv >>464
計 数億件のデータがあり、
それぞれにはCのラベルのような項目名がありまして、
それに続く文字列がその項目の値になるのですが、
(例えば「name: value…\n」な感じです)
これを一時的にDBに収めるためnameをキーとしてライブラリに渡したいんです。
一般的に思いつく方法としては、
「if( $ln =~ /^(パターン)://g ){ func( $1, $ln ); … }」
とすれば良いのですが、
なにせ件数が多いので、無駄な条件文を省きたいのです。
(条件文は処理が重いので)
検証実測値では1日以上の処理速度差がでるかもなのです。
(他にも同等の処理があるのでかなり省ける感じがするんです)
func()は、キーや値が未定義値もしくは空値であれば、
なにも処理をせず抜けるので、
$1がクリアできればif文を無くすことが出来ます。
そこで思いついたのが、
>>461の「'' =~ /()/;」ですが、これでは本末転倒です。
と言うのが経緯です。
計 数億件のデータがあり、
それぞれにはCのラベルのような項目名がありまして、
それに続く文字列がその項目の値になるのですが、
(例えば「name: value…\n」な感じです)
これを一時的にDBに収めるためnameをキーとしてライブラリに渡したいんです。
一般的に思いつく方法としては、
「if( $ln =~ /^(パターン)://g ){ func( $1, $ln ); … }」
とすれば良いのですが、
なにせ件数が多いので、無駄な条件文を省きたいのです。
(条件文は処理が重いので)
検証実測値では1日以上の処理速度差がでるかもなのです。
(他にも同等の処理があるのでかなり省ける感じがするんです)
func()は、キーや値が未定義値もしくは空値であれば、
なにも処理をせず抜けるので、
$1がクリアできればif文を無くすことが出来ます。
そこで思いついたのが、
>>461の「'' =~ /()/;」ですが、これでは本末転倒です。
と言うのが経緯です。
467デフォルトの名無しさん
2020/06/12(金) 04:05:50.63ID:Cyxf//AW468デフォルトの名無しさん
2020/06/12(金) 04:13:00.69ID:Cyxf//AW あら、いきちがった。。。
そういう話であれば、気にするな、ってところやろ。w
オレの感覚では、ifで判定して関数を呼び出さないほうが速そうだと思うがなあ。
Perlの処理としては、関数からすぐ戻ると言っても、呼び出しもそこからの戻りもそんなに軽くはなかったような。
「かも」とか言ってないで、真剣ならまず計測してみろ。
そういう話であれば、気にするな、ってところやろ。w
オレの感覚では、ifで判定して関数を呼び出さないほうが速そうだと思うがなあ。
Perlの処理としては、関数からすぐ戻ると言っても、呼び出しもそこからの戻りもそんなに軽くはなかったような。
「かも」とか言ってないで、真剣ならまず計測してみろ。
469デフォルトの名無しさん
2020/06/12(金) 05:15:54.75ID:O2sQpJVa 説明してくれたけど、やっぱイマイチ分からん
$1をクリアして無条件でfunc( $1, $ln )を呼び出したい、ということかしら
その時funcは通過するだけ、と
パフォーマンスを気にするならやっぱり $1 && func( $1, $ln )とかの方がいいと思うけどな
多分、何か事情があるのでしょう。
美しくはないけど'' =~ /()/;なら誤差の範疇と思いますよ。
数値としてはベンチマークで
$1をクリアして無条件でfunc( $1, $ln )を呼び出したい、ということかしら
その時funcは通過するだけ、と
パフォーマンスを気にするならやっぱり $1 && func( $1, $ln )とかの方がいいと思うけどな
多分、何か事情があるのでしょう。
美しくはないけど'' =~ /()/;なら誤差の範疇と思いますよ。
数値としてはベンチマークで
470デフォルトの名無しさん
2020/06/12(金) 05:31:29.45ID:P559B0Rd $1をやめる選択肢は?
($label) = $ln =~ /^(パターン)://;
func($label, $ln);
($label) = $ln =~ /^(パターン)://;
func($label, $ln);
471デフォルトの名無しさん
2020/06/12(金) 05:32:22.97ID:P559B0Rd あ、/ 多い……
472デフォルトの名無しさん
2020/06/12(金) 05:38:56.76ID:O2sQpJVa 答えじゃないんだけどさ、
$x = $ln =~ /^(パターン):/ && $1
これで以降は$xを使う、とか。
$x = $ln =~ /^(パターン):/ && $1
これで以降は$xを使う、とか。
473デフォルトの名無しさん
2020/06/12(金) 05:48:44.96ID:P559B0Rd え、array使わないの?
俺としては
($label) = $ln =~ /^(パターン):/;
func($label, $ln) if $label;
を推したい
俺としては
($label) = $ln =~ /^(パターン):/;
func($label, $ln) if $label;
を推したい
474デフォルトの名無しさん
2020/06/12(金) 07:57:32.00ID:kFexpNJ3 Ruby で特殊変数などは、スレッドローカル変数だから、
マルチスレッドでも共有しないから、安全だけど
特殊変数をクリアする必要など、考えたこともない
マルチスレッドでも共有しないから、安全だけど
特殊変数をクリアする必要など、考えたこともない
475デフォルトの名無しさん
2020/06/12(金) 09:26:27.43ID:Xic6e0Vs マッチに失敗してるのに古い$1を使ってしまって、
みたいなケースはちょいちょいあるな
それはクリアしてなかったからではなくて、失敗をトラップしてないバグ
みたいなケースはちょいちょいあるな
それはクリアしてなかったからではなくて、失敗をトラップしてないバグ
476デフォルトの名無しさん
2020/06/12(金) 13:25:45.07ID:Qkj+08r5477デフォルトの名無しさん
2020/06/12(金) 13:29:01.14ID:Qkj+08r5 速くしたいなら正規表現でマッチするかどうかなんてことやることそのものが間違いだとも思える。
同じPerl使うのであってもindex関数使うとか、他にやりようがあるんじゃないか?
同じPerl使うのであってもindex関数使うとか、他にやりようがあるんじゃないか?
478デフォルトの名無しさん
2020/06/12(金) 14:03:27.64ID:Xic6e0Vs 大量のデータを効率よく扱うのは、データベース構築するのが正解
個人が扱う範囲だと、テキストで持って全検索で困らないけど、
量が増えるとそのうち破綻する
個人が扱う範囲だと、テキストで持って全検索で困らないけど、
量が増えるとそのうち破綻する
479デフォルトの名無しさん
2020/06/12(金) 14:24:52.04ID:uUh54YqY >466
$ln =~ /^(パターン):|(.*?)/
にすると、「^(パターン):」にマッチしないときに$1を空文字にできる。
$ln =~ /^(パターン):|(.*?)/
にすると、「^(パターン):」にマッチしないときに$1を空文字にできる。
480デフォルトの名無しさん
2020/06/12(金) 14:50:38.25ID:uUh54YqY ただ、(試してはいないが)if文のオーバーヘッドより、
関数呼び出しのオーバーヘッドのほうが大きいと思うけどな。
関数呼び出しのオーバーヘッドのほうが大きいと思うけどな。
481デフォルトの名無しさん
2020/06/12(金) 15:40:26.50ID:bpI5hVyH そこまで速度に気にするならC++とかで書いた方がいい気がするね
482デフォルトの名無しさん
2020/06/17(水) 18:41:04.46ID:TVwLVBUa そんなデカいデータをよくパールでやるね。
C で書け。
C で書け。
483デフォルトの名無しさん
2020/06/28(日) 09:30:04.48ID:mI+4+ud7 https://developers.srad.jp/story/20/06/26/1324207/
> Perl 7が発表される。実質的にはPerl 5系のリネーム
> ストーリー by hylom 2020年06月26日 17時08分
> 現代における素人にはオススメできない言語 部門より
現代における素人にはオススメできない言語
…なら、文字列処理をやりたい素人は何を学べばいいの?
> Perl 7が発表される。実質的にはPerl 5系のリネーム
> ストーリー by hylom 2020年06月26日 17時08分
> 現代における素人にはオススメできない言語 部門より
現代における素人にはオススメできない言語
…なら、文字列処理をやりたい素人は何を学べばいいの?
484デフォルトの名無しさん
2020/06/28(日) 11:26:26.20ID:OE2OIMMC 5の後継なら7にする必要あるの?
485デフォルトの名無しさん
2020/06/28(日) 13:29:12.55ID:3gXsrtkR486デフォルトの名無しさん
2020/06/28(日) 18:17:09.91ID:UG2zXSFM お型付けできるようになったら嬉しいな
487デフォルトの名無しさん
2020/06/28(日) 19:55:20.21ID:DGGKS5Fb ついに後方互換捨てるのか!
488デフォルトの名無しさん
2020/07/02(木) 21:44:39.67ID:wuNvV9ki デフォルトの状態が変わるだけで
適宜オプションつければ後方互換も保てるらしいよ
Perlのこういうところ好きだわ
適宜オプションつければ後方互換も保てるらしいよ
Perlのこういうところ好きだわ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 経団連会長、日中は建設的対話を 経済3団体が高市首相と初会談も日中関係は話題に登らず… [BFU★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- 【映画】『クレヨンしんちゃん』 中国で公開延期 対日報復、エンタメに波及 [冬月記者★]
- Xのネトウヨは大体高齢独身。40過ぎて独身だと例外なく狂うって本当だったんだなと思う [805596214]
- 生活保護だけど30万円のPCの椅子買おうか迷ってる
- 日経時間外、5万円割れ 垂直落下始まる [402859164]
- 有識者「高市総理が発言を撤回したり、辞職するしかないと言っている人は、それで日中関係が今まで通りになると思ってる?」 [834922174]
- 女の子に生まれ変わったらやりたいこと🍓🍫💄❤ [856698234]
- ウッドデッキで調子こいてたやついたじゃん
