Perlについての質問箱 63箱目at TECH
Perlについての質問箱 63箱目 - 暇つぶし2ch1000:普通はファイル削除しない 削除で隙間はできない。但し別プロセスがファイル作成するなら 隙間が生じるように感じるかもしれない



1001:デフォルトの名無しさん
18/01/23 12:28:01.19 f+jO8q2F.net
>>967
感じるではなくロックとして機能しないよね?

1002:デフォルトの名無しさん
18/01/23 19:08:17.77 N8Mjx+M1.net
>>968
ファイルシステムから見ると削除して作成すると、同じファイル名でも別ファイルになる
排他処理は同じファイルを使ってるもの同士なら出来る
例えばopenしたものをずっと使い続けるプロセス同士なら、削除された後でも相互排他が出来る

1003:デフォルトの名無しさん
18/01/23 20:56:31.43 wO1dM6nx.net
>>969
3つ以上のプロセスで必ず破綻するように思うが。
いや2つでも2回目でダメになるか。

1004:デフォルトの名無しさん
18/01/23 22:04:43.15 ZqrAOfGF.net
あ、ずっとオープンしっぱなしならその後削除されても大丈夫ってことか。
それはそうだな。なんか危うさを感じるが。

1005:デフォルトの名無しさん
18/01/30 21:14:29.11 SNmuV+Ws.net
ヒアドキュメントをファイルに出力する時に、
print $out <<"EOC";
ならokで、
print $out << "EOC";
だと駄目なのは何故?

1006:デフォルトの名無しさん
18/01/31 01:11:29.08 ajZ2gLGd.net
>>972
<< はビットシフト演算子でもあるので、優先順位的に
$out << "EOC" として解釈されちゃうから…?
print $out (<< "EOC"); や print << "EOC"; で通るならそうだと思う。

1007:デフォルトの名無しさん
18/01/31 01:46:30.10 PKL4UNme.net
<<の直後が空白文字だと空白文字自体が識別子とみなされる
と、とある本に書いてあった

1008:デフォルトの名無しさん
18/01/31 03:10:45.37 ajZ2gLGd.net
<<964
URLリンク(perldoc.jp)
> <<EOF
<略>
> 識別子がクォートされていない場合は、<< と識封ハ子の間に 空白を入れてはいけません。
> (もし空白を入れると、空識別子として扱われます; これは有効で、 最初の空行にマッチ
> するようになります。)
昔は
print <<;
document here.
print "foo";
みたいにできたけど、今これやると警告が出る。<<""; なら OK。
#!/usr/bin/perl -w
use strict;
sub E { print "\n6\n" }
open my $out, '>&STDOUT' or die $!;
print $out <<"";
1
print $out (<< 'E', "3\n", <<'');
2
E
4
print $out << 'E'; # Argument "E" isn't numeric in left bitshift (<<)
"5"; # Useless use of a constant ("5") in void context
E

1009:デフォルトの名無しさん
18/01/31 09:25:45.73 H6iQ2Lk/.net
>>972
<<の直後のスペースの有無?
そりゃシェルスクリプトみたいな <<EOL のような何もクオートしない形式も許している都合でシェルの文法に合わせたからではないかな。

1010:デフォルトの名無しさん
18/01/31 09:27:00.94 H6iQ2Lk/.net
あ、すまん。リロードせずに書いてしまった。既に回答書かれてたな。

1011:デフォルトの名無しさん
18/01/31 19:05:43.73 vCtk0IVE.net
スペース空けるの禁止ならそれでいいんだけど、
ファイルハンドラが無いならスペースがあってもokなのが納得行かない

1012:デフォルトの名無しさん
18/02/01 07:25:10.05 Msx4nr7P.net
気持ちは分からなくもないが、変数の場合はしょうがない。>>973 に書かれてるとおりだ。

1013:デフォルトの名無しさん
18/02/01 12:35:16.66 Msx4nr7P.net
誰もつっこまないが、
$out->print( << "EOC");
と書けばいいと思う。
bless されてない場合は昔は
use IO::Handle;
が必要だったが今では
perl -e 'STDOUT->print("abc")'
なんてこともできる。
個人的には、ファイルハンドルの後に , があるというアホな間違いをせずに�


1014:マむというところで助かっている。



1015:デフォルトの名無しさん
18/02/02 07:43:01.24 .net
ヒアドキュメントなんてプログラムを読みにくくする諸悪の根源

1016:愛知人
18/02/02 12:10:04.50 .net
Wikipediaの12桁トリップの生成スクリプトで12桁以上のトリップキーの変換が5chの結果と合いません。どうすれば合いますか。

1017:デフォルトの名無しさん
18/02/03 08:12:51.87 hZgGNvq2.net
Archive::Rar を使って、中身のファイルサイズを取得するにはどうすれば
無理なら、代わりに何を使えばいい?

1018:デフォルトの名無しさん
18/02/03 09:38:14.14 nCUOym6+.net
rar コマンドをインストールしてないから CPAN でソースコードを見ただけだが、List を呼べば rar の出力をパースして list に入れてくれるみたいだよ。
試してないから勘違いしてるかもしれないけど、使ってるならソースコードの List, _AddToList 辺りを読めばいいかも。

1019:デフォルトの名無しさん
18/02/03 10:13:43.25 hZgGNvq2.net
Listはファイル名一覧しか渡してくれないんだよな

1020:デフォルトの名無しさん
18/02/03 10:20:52.21 hZgGNvq2.net
-alldata を指定すれば、->{size} で見えるのか
どうせやってるのは、rar.exe の出力を読んでテキスト解析してるだけなので、
似たようなことを自前でやった

1021:デフォルトの名無しさん
18/02/03 14:48:15.33 nCUOym6+.net
マニュアルには書かれてなかったのか……まあ、信頼性の低い方法だしね。

1022:デフォルトの名無しさん
18/02/04 11:13:30.15 22FJuDW8.net
出力される表の形式に似せたファイル名とかにすると、多分騙されるんだろうな

1023:デフォルトの名無しさん
18/02/09 18:18:02.60 U+AwHosU.net
>>981
KENT WEBの見にくさを見てから言ってくれ

1024:デフォルトの名無しさん
18/02/09 20:07:25.83 VqU2EMqO.net
ヒヤー

1025:デフォルトの名無しさん
18/02/09 20:21:39.58 67QUQBJT.net
他言語弄るとき、まずヒアドキュメント探すつっても過言じゃ無いんだが…

1026:デフォルトの名無しさん
18/02/09 20:58:36.22 .net
>>989
printはもっと読みにくいに決まってるだろ
テンプレートしかあり得ん

1027:デフォルトの名無しさん
18/02/09 21:23:05.06 ukY4fsl4.net
   here => <<~EOM
   インデント
   出来る
   EOM
これ出来るようになって昔書いたソースが結構綺麗になった

1028:デフォルトの名無しさん
18/02/13 11:06:08.61 b5aNFBbA.net
ソースにhereドキュメントが多量に含まれてる時点で
キレイじゃねーよw

1029:デフォルトの名無しさん
18/02/13 21:01:03.94 .net
それな

1030:デフォルトの名無しさん
18/02/13 21:31:52.97 RM6vxbUw.net
ヒアドキュメントはうまくやると配布するファイルをプログラムのファイル一つにまとめられる。
そういうのは何かのプログラムのインストーラやアップデータには良いかも知れない。

1031:デフォルトの名無しさん
18/02/14 01:07:32.41 eq6pqk6J.net
全てのスクリプト言語には、ファイルを一つに結合する機能と
コードを圧縮暗号化する機能が必要な気がする
JSにあるアレね

1032:デフォルトの名無しさん
18/02/14 02:24:43.93 kFW7p5Uz.net
SQL使うときだなヒアドキュメントは
ORM嫌い

1033:デフォルトの名無しさん
18/02/14 09:08:25.15 1w/9kxzB.net
ああ。そういやSQL文に使ったなあ。
長くなるのが普通だもんなあれって。

1034:デフォルトの名無しさん
18/02/14 13:42:37.08 eEfPvNoj.net
$str = <<'EOF';
エスケープの必要性から解放されたい場合もあるんだよなあ。
これに相当することを C でやるには別ファイルに分けて Makefile で
str_escaped : str_raw
sed 's/\([\"\\]\)/\\\1/g ; s/^/\"/ ; s/$/\"/ ;' < str_raw > str_escaped
みたいにして C の方で
str[] =
#include "str_escaped"
とする必要がある。Perl は本当に便利だ。
EOF

1035:デフォルトの名無しさん
18/02/14 13:50:00.92 L6K2VJP2.net
Pealで正規表現なら、デミリタ変えるだけでいいじゃん
可読性下がるけど
$hoge =~ m!/!;!g;
みたいな

1036:デフォルトの名無しさん
18/02/14 19:56:29.61 JCOq4GRt.net
終わりを示す文字列にQEDを使う

1037:デフォルトの名無しさん
18/02/14 20:05:36.90 eq6pqk6J.net
それが厨二病

1038:990
18/02/14 22:39:20.53 eEfPvNoj.net
>>1001
何を言いたいのかさっぱり解らないが、ひょっとして >>1000 に興味持ってくれた?
そうだとしてもやっぱり何を言いたいのかさっぱり解らないのだが。
ちなみに Perl と C を比較してるのであって、sed は関係無いよ。
「これに相当すること」の「これ」とは >>1000 全体を Perl コードとして実行した結果のことで、正規表現は何の関係も無い。
大筋としては
・元のテキストはエスケープなどの加工をしないでおきたい。
・エスケープが必要な場合でも目視と手作業なんて論外。自動化したい。
・実行時に別ファイルから読むのではなくプログラムに埋め込みたい。
という前提があって Perl と C でそれぞれどのように実現するかという話だ。
Perl にいくつもあるクォーティングの正確な仕様、Makefile の仕様、C の言語仕様を知ってる人向けだから無理しなくてもいいよ。
>>1000 に対してじゃなかったのならごめんね。自意識過剰だったね。

1039:デフォルトの名無しさん
18/02/15 09:02:00.83 8SUVFt/S.net
> 自意識過剰だったね。
そのとおりだろうなw

1040:デフォルトの名無しさん
18/02/15 23:40:07.21 .net
Perlコードでもレスでも変わらない真実
ぎっしり長文書くやつは無能

1041:デフォルトの名無しさん
18/02/15 23:41:00.25 8SUVFt/S.net
短文なら有能!俺とか!

1042:デフォルトの名無しさん
18/02/16 10:21:33.25 OW1usLwi.net
俺も俺も

1043:デフォルトの名無しさん
18/02/16 18:54:42.22 ZDCA61/e.net
die;

1044:デフォルトの名無しさん
18/02/16 20:51:22.93 YSXjevvC.net
ひでぶ

1045:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 1457日 21時間 15分 0秒

1046:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch