[過去ログ] Perlについての質問箱 64箱目 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
438: 2020/05/30(土)01:44 ID:UYDx2q8r(2/2) AAS
人間がエディトするファイルは付ける
人間がエディトしないファイルは付けないんじゃないの?
439(2): 2020/05/30(土)01:51 ID:h49XlInt(1/4) AAS
運用においては、実行ファイルの実装方法なんかどうでもいい。
むしろ、実装方法を変えたら、ファイル名も変わるほうがはるかに害悪。
たとえば、シェルスクリプトをPerl スクリプトに変えただけで、そのスクリプトを使っているところをすべて変更しないといけなくなる。
440(3): 2020/05/30(土)03:26 ID:k7WMMDxu(1) AAS
昔々 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はそれを実行しようとする(実際に実行できるかどうかは
ファイルの内容による)。
441(1): 2020/05/30(土)08:54 ID:Noe/rV9t(1) AAS
拡張子が無くても判定できるようにすればいいんじゃないの? Emacs みたいに。
442: 2020/05/30(土)12:16 ID:h49XlInt(2/4) AAS
>>441
つ fileコマンド
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に答えてから。
上下前次1-新書関写板覧索設栞歴
あと 535 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.027s