X



Perlについての質問箱 63箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2014/02/19(水) 23:36:23.29
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板: http://kohada.2ch.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.18.2)

▼前スレ
Perlについての質問箱 61箱目
http://toro.2ch.net/test/read.cgi/tech/1381561905/
Perlについての質問箱 62箱目
http://toro.2ch.net/test/read.cgi/tech/1385039352/
0952デフォルトの名無しさん
垢版 |
2018/01/08(月) 16:46:09.77ID:QsqxlxVF
そのbatファイルをタスク登録(ログオン時実行)とかにしとけば自動実行されるしね
0954デフォルトの名無しさん
垢版 |
2018/01/23(火) 09:36:50.60ID:vYqw+N7N
open(ロック用ファイルハンドル,ロック用ファイル);
flock(ロック用ファイルハンドル,2);
unlink(ロック用ファイル);
close(ロック用ファイルハンドル);  #ロック解除

このようにロックを解除する前にロック用ファイルを削除するのは何か問題ありますか?
ロック解除したあとにロック用ファイルを削除するとロックに隙間ができるので
0955デフォルトの名無しさん
垢版 |
2018/01/23(火) 10:33:50.77ID:ytLWcXDj
>>954
flock使うならファイル削除しなきゃいいんだよ。そうすれば隙間はできない。
ファイル削除したいならopenの時のモードで O_EXCL | O_CREAT も指定しておいてエラーが出るかどうかで判別する。
エラーなくオープンできたら成功で、必要な処理が終わったらファイルをクローズする。
ただしこの方法はUNIX系OS以外では通用するかどうかわからないのと、NFS越しのファイルでは使えないかも知れない。
NFS越しでも使えるファイルロックは多分fcntl()のF_SETLKとかだろうと思う(しかしこれもまたOSしだいだ)。
0956デフォルトの名無しさん
垢版 |
2018/01/23(火) 10:34:51.22ID:ytLWcXDj
ごめん。訂正。

ファイルクローズするではなくて削除だ。
0957デフォルトの名無しさん
垢版 |
2018/01/23(火) 12:02:42.65ID:N8Mjx+M1
>>954
flockで相互排他する場合普通はファイル削除しない
削除で隙間はできない。但し別プロセスがファイル作成するなら
隙間が生じるように感じるかもしれない
0958デフォルトの名無しさん
垢版 |
2018/01/23(火) 12:28:01.19ID:f+jO8q2F
>>957
感じるではなくロックとして機能しないよね?
0959デフォルトの名無しさん
垢版 |
2018/01/23(火) 19:08:17.77ID:N8Mjx+M1
>>958
ファイルシステムから見ると削除して作成すると、同じファイル名でも別ファイルになる
排他処理は同じファイルを使ってるもの同士なら出来る
例えばopenしたものをずっと使い続けるプロセス同士なら、削除された後でも相互排他が出来る
0961デフォルトの名無しさん
垢版 |
2018/01/23(火) 22:04:43.15ID:ZqrAOfGF
あ、ずっとオープンしっぱなしならその後削除されても大丈夫ってことか。
それはそうだな。なんか危うさを感じるが。
0962デフォルトの名無しさん
垢版 |
2018/01/30(火) 21:14:29.11ID:SNmuV+Ws
ヒアドキュメントをファイルに出力する時に、

print $out <<"EOC";
ならokで、
print $out << "EOC";
だと駄目なのは何故?
0963デフォルトの名無しさん
垢版 |
2018/01/31(水) 01:11:29.08ID:ajZ2gLGd
>>962
<< はビットシフト演算子でもあるので、優先順位的に
$out << "EOC" として解釈されちゃうから…?
print $out (<< "EOC"); や print << "EOC"; で通るならそうだと思う。
0964デフォルトの名無しさん
垢版 |
2018/01/31(水) 01:46:30.10ID:PKL4UNme
<<の直後が空白文字だと空白文字自体が識別子とみなされる
と、とある本に書いてあった
0965デフォルトの名無しさん
垢版 |
2018/01/31(水) 03:10:45.37ID:ajZ2gLGd
<<964
http://perldoc.jp/docs/perl/perlop.pod#Regexp32Quote-Like32Operators
> <<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
0966デフォルトの名無しさん
垢版 |
2018/01/31(水) 09:25:45.73ID:H6iQ2Lk/
>>962
<<の直後のスペースの有無?
そりゃシェルスクリプトみたいな <<EOL のような何もクオートしない形式も許している都合でシェルの文法に合わせたからではないかな。
0967デフォルトの名無しさん
垢版 |
2018/01/31(水) 09:27:00.94ID:H6iQ2Lk/
あ、すまん。リロードせずに書いてしまった。既に回答書かれてたな。
0968デフォルトの名無しさん
垢版 |
2018/01/31(水) 19:05:43.73ID:vCtk0IVE
スペース空けるの禁止ならそれでいいんだけど、
ファイルハンドラが無いならスペースがあってもokなのが納得行かない
0969デフォルトの名無しさん
垢版 |
2018/02/01(木) 07:25:10.05ID:Msx4nr7P
気持ちは分からなくもないが、変数の場合はしょうがない。>>963 に書かれてるとおりだ。
0970デフォルトの名無しさん
垢版 |
2018/02/01(木) 12:35:16.66ID:Msx4nr7P
誰もつっこまないが、
$out->print( << "EOC");
と書けばいいと思う。
bless されてない場合は昔は
use IO::Handle;
が必要だったが今では
perl -e 'STDOUT->print("abc")'
なんてこともできる。
個人的には、ファイルハンドルの後に , があるというアホな間違いをせずに済むというところで助かっている。
0971デフォルトの名無しさん
垢版 |
2018/02/02(金) 07:43:01.24
ヒアドキュメントなんてプログラムを読みにくくする諸悪の根源
0972愛知人
垢版 |
2018/02/02(金) 12:10:04.50
Wikipediaの12桁トリップの生成スクリプトで12桁以上のトリップキーの変換が5chの結果と合いません。どうすれば合いますか。
0973デフォルトの名無しさん
垢版 |
2018/02/03(土) 08:12:51.87ID:hZgGNvq2
Archive::Rar を使って、中身のファイルサイズを取得するにはどうすれば
無理なら、代わりに何を使えばいい?
0974デフォルトの名無しさん
垢版 |
2018/02/03(土) 09:38:14.14ID:nCUOym6+
rar コマンドをインストールしてないから CPAN でソースコードを見ただけだが、List を呼べば rar の出力をパースして list に入れてくれるみたいだよ。
試してないから勘違いしてるかもしれないけど、使ってるならソースコードの List, _AddToList 辺りを読めばいいかも。
0976デフォルトの名無しさん
垢版 |
2018/02/03(土) 10:20:52.21ID:hZgGNvq2
-alldata を指定すれば、->{size} で見えるのか

どうせやってるのは、rar.exe の出力を読んでテキスト解析してるだけなので、
似たようなことを自前でやった
0977デフォルトの名無しさん
垢版 |
2018/02/03(土) 14:48:15.33ID:nCUOym6+
マニュアルには書かれてなかったのか……まあ、信頼性の低い方法だしね。
0978デフォルトの名無しさん
垢版 |
2018/02/04(日) 11:13:30.15ID:22FJuDW8
出力される表の形式に似せたファイル名とかにすると、多分騙されるんだろうな
0979デフォルトの名無しさん
垢版 |
2018/02/09(金) 18:18:02.60ID:U+AwHosU
>>971
KENT WEBの見にくさを見てから言ってくれ
0980デフォルトの名無しさん
垢版 |
2018/02/09(金) 20:07:25.83ID:VqU2EMqO
ヒヤー
0982デフォルトの名無しさん
垢版 |
2018/02/09(金) 20:58:36.22
>>979
printはもっと読みにくいに決まってるだろ
テンプレートしかあり得ん
0983デフォルトの名無しさん
垢版 |
2018/02/09(金) 21:23:05.06ID:ukY4fsl4
   here => <<~EOM
   インデント
   出来る
   EOM

これ出来るようになって昔書いたソースが結構綺麗になった
0985デフォルトの名無しさん
垢版 |
2018/02/13(火) 21:01:03.94
それな
0986デフォルトの名無しさん
垢版 |
2018/02/13(火) 21:31:52.97ID:RM6vxbUw
ヒアドキュメントはうまくやると配布するファイルをプログラムのファイル一つにまとめられる。
そういうのは何かのプログラムのインストーラやアップデータには良いかも知れない。
0987デフォルトの名無しさん
垢版 |
2018/02/14(水) 01:07:32.41ID:eq6pqk6J
全てのスクリプト言語には、ファイルを一つに結合する機能と
コードを圧縮暗号化する機能が必要な気がする
JSにあるアレね
0989デフォルトの名無しさん
垢版 |
2018/02/14(水) 09:08:25.15ID:1w/9kxzB
ああ。そういやSQL文に使ったなあ。
長くなるのが普通だもんなあれって。
0990デフォルトの名無しさん
垢版 |
2018/02/14(水) 13:42:37.08ID:eEfPvNoj
$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
0991デフォルトの名無しさん
垢版 |
2018/02/14(水) 13:50:00.92ID:L6K2VJP2
Pealで正規表現なら、デミリタ変えるだけでいいじゃん
可読性下がるけど

$hoge =~ m!/!;!g;

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

ぎっしり長文書くやつは無能
0998デフォルトの名無しさん
垢版 |
2018/02/16(金) 10:21:33.25ID:OW1usLwi
俺も俺も
1000デフォルトの名無しさん
垢版 |
2018/02/16(金) 20:51:22.93ID:YSXjevvC
ひでぶ
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 1457日 21時間 15分 0秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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