[過去ログ] Perlについての質問箱 64箱目 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
443(1): 2020/05/30(土)13:18 ID:9sn/rA++(1) AAS
>>439
運用のために保守は犠牲にするんですか?
444: 2020/05/30(土)13:58 ID:h49XlInt(3/4) AAS
>>443
実装の変更は、保守の範囲ではない。
二次開発かな?w
445(2): 2020/05/30(土)15:56 ID:CwCZ2prN(1) AAS
>>440
シェバン知らず?
446: 2020/05/30(土)18:54 ID:h49XlInt(4/4) AAS
>>445
>>440はその前の話やろ。
シェバンがあるだけで、テキストファイルが勝手に起動されたら恐ろしいわ。w
447: 2020/05/30(土)19:43 ID:GvMJ9/EG(1) AAS
>>432
おじいちゃん(´・ω・`)
448: 2020/05/31(日)02:15 ID:MeZ7svrP(1) AAS
言語変えて作り直すって、俺の感覚ではシステム置き換えのイメージだわ
コンパイル済みのバイナリならともかく、スクリプト言語動かすって環境づくりも入るじゃん
449: 2020/05/31(日)02:44 ID:pTVQa+4z(1/2) AAS
>>445
>>440に書いてあること読んでないだろ。
450(1): 2020/05/31(日)03:40 ID:qe5b9Icc(1) AAS
その前って何?
だからシェバン使えば拡張子なんか使う必要はないってことだよ?
>>439みたいな書き換えはいらないってことを言ってる
あと自演して書き込みは見苦しいぞ
451: 2020/05/31(日)04:22 ID:fhA8y4ka(1) AAS
読解力理解力がなくて、複数から指摘されたからって、自演扱いで返すとは見苦しいぞ。
452: 2020/05/31(日)05:26 ID:pTVQa+4z(2/2) AAS
>>450
それ何のOSでの話?
453(1): 2020/06/11(木)19:05 ID:5cioSHJn(1/3) AAS
「local $| = 1;」と言う記述見たんですけど、
「$|」の局所化って意味あるのでしょうか?
ただ単に「$| = 1;」と等価であり「local」を記述しても無駄な気がするんですけど、
私の勘違いでしょうか?
「local $| = 1;」とやることで、
そのファイルの出力だけみたいな感じになるのですか?
となると、
同プロセスなのに標準出力バッファが出力毎に別個に用意されてる事になってしまいますよね?
分かるかた教えてください。
454(1): 2020/06/11(木)19:32 ID:zOJFiWlV(1/2) AAS
>>453
スコープを抜けたときに、もとの値に戻る。
455: 2020/06/11(木)19:37 ID:YKNmcAQr(1) AAS
横からだけど知らなかった…
毎回もとの値別変数で退避してた
456(1): 2020/06/11(木)19:53 ID:L2GhQgnz(1/2) AAS
なんとなく直感的にグローバル変数だけだと思ってた
だから元の値を退避しておくという発想の方が自然
わざわざぶつけて便利に使おうという発想はいずれバグる
457: 2020/06/11(木)20:13 ID:5cioSHJn(2/3) AAS
>>454
レスありがとうございます。
「もとの値に戻る」と言う事は、a.plから参照される異なるスコープのb.pmがあり、
b.pmに「local $| = 1;」の記述があった場合、
b.pmに定義されたサブルーチンが呼び出される毎に、
「$| = 1;」と同等の処理が行われ、
戻る際には元の値がセットされるのでしょうか?
それとも、スコープによって異なる「$|」を、
標準出力側でスコープ毎に切り替えてるという事でしょうか?
458(1): 2020/06/11(木)20:24 ID:L2GhQgnz(2/2) AAS
printする度に今見えてる$|が渡ってるんだろうな
459: 2020/06/11(木)21:09 ID:5cioSHJn(3/3) AAS
>>458
まぁ、そうですよね。無駄な処理になるし後者ですよね。
(OOP的に言うと、スコープ毎のインスタンスを参照的な)
ありがとうございました。
460: 2020/06/11(木)22:40 ID:zOJFiWlV(2/2) AAS
>>456
Perlにあっては「わざわざ」ではない。
localはダイナミックスコープ、my/ourはレキシカルスコープであることは意識しておくべき。
461(4): 2020/06/12(金)02:39 ID:TN61WwYv(1/4) AAS
宜しくお願いします。
$1をクリアしたい場合は「'' =~ /()/;」等として
無駄なマッチングをして空文字列を設定しないとダメですか?
数億件のデータを捌く際とか、めちゃくちゃタイムロスになりますよね?
皆様はどうされてるのでしょう?
462(1): 461 2020/06/12(金)02:41 ID:TN61WwYv(2/4) AAS
>>461
↑に追記です。
$2以降のクリアも含めてお願いします。
最適な解を頂ければ幸いです。
463(1): 540 2020/06/12(金)02:51 ID:OceO7BHX(1) AAS
>>461
まず、scalar変数の場合
=()はできない
=''や""は明示的に空文字列を設定することになる
なので既存変数をクリア、というか不定状態に設定するには
= undef;
あるいは数値を設定するためのシンボルを値0に戻すには
= 0;
undefは値として評価されれれば0,文字列として評価割れれば空文字列''が返った
(と思う)
464(2): 2020/06/12(金)03:17 ID:O2sQpJVa(1/3) AAS
答えではないのだけれど、そういう場面に遭遇したことがないんだよね
簡単でいいのでどんな時に必要なのかしら?
465(1): 461 2020/06/12(金)03:24 ID:TN61WwYv(3/4) AAS
>>463
あの…すみません。
スカラー値の評価の話をしている訳ではありません。
$1や$2や$3と言った特殊変数の値をクリアをする方法を聞いています。
これらの特殊変数に値を代入したらエラーになります。
引き続き>>461-462のベストな解をお待ちしています。
宜しくお願いします。
466(2): 461 2020/06/12(金)03:52 ID:TN61WwYv(4/4) AAS
>>464
計 数億件のデータがあり、
それぞれにはCのラベルのような項目名がありまして、
それに続く文字列がその項目の値になるのですが、
(例えば「name: value…\n」な感じです)
これを一時的にDBに収めるためnameをキーとしてライブラリに渡したいんです。
一般的に思いつく方法としては、
「if( $ln =~ /^(パターン)外部リンク:g){ func( $1, $ln ); … }」
とすれば良いのですが、
なにせ件数が多いので、無駄な条件文を省きたいのです。
(条件文は処理が重いので)
検証実測値では1日以上の処理速度差がでるかもなのです。
(他にも同等の処理があるのでかなり省ける感じがするんです)
func()は、キーや値が未定義値もしくは空値であれば、
なにも処理をせず抜けるので、
$1がクリアできればif文を無くすことが出来ます。
そこで思いついたのが、
>>461の「'' =~ /()/;」ですが、これでは本末転倒です。
と言うのが経緯です。
467: 2020/06/12(金)04:05 ID:Cyxf//AW(1/2) AAS
>>465
そもそも、$nはマッチしたときのみ参照する変数であるから、わざわざリセットする必要がない。
if (m/(.*)/) {
say $1;
}
これ以上の回答は>>464に答えてから。
468: 2020/06/12(金)04:13 ID:Cyxf//AW(2/2) AAS
あら、いきちがった。。。
そういう話であれば、気にするな、ってところやろ。w
オレの感覚では、ifで判定して関数を呼び出さないほうが速そうだと思うがなあ。
Perlの処理としては、関数からすぐ戻ると言っても、呼び出しもそこからの戻りもそんなに軽くはなかったような。
「かも」とか言ってないで、真剣ならまず計測してみろ。
469: 2020/06/12(金)05:15 ID:O2sQpJVa(2/3) AAS
説明してくれたけど、やっぱイマイチ分からん
$1をクリアして無条件でfunc( $1, $ln )を呼び出したい、ということかしら
その時funcは通過するだけ、と
パフォーマンスを気にするならやっぱり $1 && func( $1, $ln )とかの方がいいと思うけどな
多分、何か事情があるのでしょう。
美しくはないけど'' =~ /()/;なら誤差の範疇と思いますよ。
数値としてはベンチマークで
470: 2020/06/12(金)05:31 ID:P559B0Rd(1/3) AAS
$1をやめる選択肢は?
($label) = $ln =~ /^(パターン)外部リンク:;
func($label, $ln);
471: 2020/06/12(金)05:32 ID:P559B0Rd(2/3) AAS
あ、/ 多い……
472: 2020/06/12(金)05:38 ID:O2sQpJVa(3/3) AAS
答えじゃないんだけどさ、
$x = $ln =~ /^(パターン):/ && $1
これで以降は$xを使う、とか。
上下前次1-新書関写板覧索設栞歴
あと 530 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.020s