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/
0002デフォルトの名無しさん垢版2014/02/19(水) 23:37:34.89
【本】
初めてのPerl 第6版(リャマ)[2012年07月 発行]
http://www.oreilly.co.jp/books/9784873115672/

続・初めてのPerl 改訂第2版 [2013年08月 発行]
http://www.oreilly.co.jp/books/9784873116280/

マスタリングPerl [2009年03月 発行]
http://www.oreilly.co.jp/books/9784873113975/

もっと自在にサーバを使い倒す 業務に役立つPerl [2012年4月11日発売]
http://gihyo.jp/book/2012/978-4-7741-5025-3

モダンPerl入門 [2009/2/10]
http://www.amazon.co.jp/exec/obidos/ASIN/4798119172/secodezine-22/
モダンPerl入門 増補改訂版(仮)[2014年1月予定]
http://codezine.jp/book/modernperl2

Perl CPANモジュールガイド [2011/4/8]
http://www.amazon.co.jp/dp/486267108X

【オンラインマニュアル】
最新のドキュメント: http://search.cpan.org/dist/perl/
perldoc.jp: http://perldoc.jp/
perldoc.perl.org: http://perldoc.perl.org/
0003デフォルトの名無しさん垢版2014/02/19(水) 23:38:16.54
[少し古めの良書]

プログラミングPerl 第3版 VOLUME 1,2(駱駝)[2002年09月 発行]
http://www.oreilly.co.jp/books/4873110963/
http://www.oreilly.co.jp/books/4873110971/

Perlクックブック 第2版 VOLUME 1,2 [2004年09月 発行]
http://www.oreilly.co.jp/books/4873112028/

Perl ベストプラクティス [2006年08月 発行]
http://www.oreilly.co.jp/books/4873113008/

Perl Hacks [2007年01月 発行]
http://www.oreilly.co.jp/books/9784873113142/

実用 Perlプログラミング 第2版 [2006年03月 発行]
http://www.oreilly.co.jp/books/487311280X/
0004デフォルトの名無しさん垢版2014/02/19(水) 23:38:56.41
【日本語、Unicode関連】

Encodeモジュール
http://search.cpan.org/dist/Encode/

第31回 encoding:いつまでもjperlから抜け出せない方に
http://gihyo.jp/dev/serial/01/modern-perl/0031

第32回 Encode:日本語だけ扱えればよいのではなく
http://gihyo.jp/dev/serial/01/modern-perl/0032

perlunifaq - Perl Unicode FAQ
http://perldoc.jp/docs/perl/5.18.1/perlunifaq.pod

perlunicode - Perl における Unicode サポート
http://perldoc.jp/docs/perl/5.12.1/perlunicode.pod

http://www.rwds.net/kuroita/program/Perl_unicode.html

【モジュール】
CPAN.com: http://search.cpan.org/

【Perl環境構築】
plenv
https://github.com/tokuhirom/plenv

cpanm
http://search.cpan.org/~miyagawa/App-cpanminus-1.7001/lib/App/cpanminus.pm
http://perldoc.jp/docs/modules/App-cpanminus-1.7001/lib/App/cpanminus/fatscript.pod
0005デフォルトの名無しさん垢版2014/02/19(水) 23:39:35.34
# [Perl 日本語処理の基礎の基礎]
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# 入出力ともシフト JIS 形式のファイルまたは DOS 窓を想定しています。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。
0007デフォルトの名無しさん垢版2014/02/19(水) 23:48:52.70
■推移
ttp://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

2013.Dec 1.072%
2014.Jan 0.917%
2014.Feb 0.887%


■推移グラフ
ttp://www.tiobe.com/index.php/content/paperinfo/tpci/Perl.html


■Perlの今後
他言語に対する優位性がほとんどないため、消滅に向かって進んでいる。
近い将来消えるのは確実。
0008デフォルトの名無しさん垢版2014/02/20(木) 01:15:48.35
TIOBEって日本じゃほとんど聞いたことがないよね?Perlは日本語をちゃんと処理
できる数少ない処理系だから、海外とは状況が違うと思うんだよね
0009デフォルトの名無しさん垢版2014/02/20(木) 01:40:45.62
自分がほとんど聞いたことがないという無知っぷりを晒しつつ
その前提で語る基地害がPerl厨
0010デフォルトの名無しさん垢版2014/02/20(木) 02:48:27.42
乱立してる統計サイトの内の一つで、たいしたサイトじゃない。

http://langpop.com/
こんなサイトもあって、今話題に登ってる言語の項目とか見たら
PHPもPerlも似たりよったり。

こんなもんに一喜一憂するのはアホのする事。
#別に「Perlが落ち目じゃない」と主張するつもりも、毛頭無い。
0011デフォルトの名無しさん垢版2014/02/20(木) 03:30:30.50
乱立といえばム板にスレッド乱立させてるPerl厨みたいだな
いい加減迷惑なんだよゴキブリ共
消滅寸前のゴミ言語にこんなにスレッドは必要ない

Perlについて
http://toro.2ch.net/test/read.cgi/tech/1217851121/

【モダン推奨】Perlについての質問箱 50箱目
http://toro.2ch.net/test/read.cgi/tech/1327110999/

Perl初心者スレ(マジレス回答)
http://toro.2ch.net/test/read.cgi/tech/1349538519/

Perlについての罵倒スレ 63箱目
http://toro.2ch.net/test/read.cgi/tech/1392639772/

Perlについての質問箱 63箱目
http://toro.2ch.net/test/read.cgi/tech/1392820583/
0012デフォルトの名無しさん垢版2014/02/20(木) 07:42:53.27
WebProgの方で、その活動すれば?
そのスレの内三つは荒しが立てたスレだし、Perlと名前が入るスレ自体も10個しかないけど
向うには両手に余るくらいのスレは乱立してるぞ。
0013デフォルトの名無しさん垢版2014/02/20(木) 11:23:00.57
久々の正式なスレ立て乙

個人的には「ミニマルPerl」が俺の目を覚ましてくれた本だなあ
まあ、解ってる人には間違いなく退屈な本だけれども
0016デフォルトの名無しさん垢版2014/02/21(金) 00:46:22.39
【プログラミング自体の経験が無い奴はまずココを読め]】
Perl プログラミング講座: ttp://nyx.pu1.net/

【本】
リャマ: ttp://www.oreilly.co.jp/books/4873112575/
駱駝: ttp://www.oreilly.co.jp/books/4873112869/
Effective Perl: ttp://www.c-r.com/book/detail/888
クックブック: ttp://gihyo.jp/book/2012/978-4-7741-4972-1
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/9784873113425/
Perl Hacks: ttp://www.oreilly.co.jp/books/4873112915/

【オンラインマニュアル】
最新のドキュメント: ttp://blog.livedoor.jp/kumagai_nori/archives/52255109.html
perldoc.jp: ttp://bg.pi-ppi.com/
perldoc.perl.org: ttp://manual.xwd.jp/
0017デフォルトの名無しさん垢版2014/02/21(金) 15:41:53.76
例のPHP厨毒の精神異常者がスレを乱立させてから動きがパッタリやんだが、規制食らったのか?
それとも夜に活動が再開されるのか?
0018デフォルトの名無しさん垢版2014/02/21(金) 15:48:29.84
乱立させてたのってPHPユーザーなの?

てっきりPerl厨だと思ってたんだけど。
スレ乱立とか頭の悪いことをするのはPerlを選ぶような知能の低いPerl厨くらいしかいないだろ。
0019デフォルトの名無しさん垢版2014/02/21(金) 16:10:45.03
php厨()とか妄想をベースに考えるから、事実と整合性が取れなくなって>>17みたいな書き込みをするようになる
というかその不整合からくる違和感に耐えられなくなって書き込んでるって言ったほうが正解か
>>17は自覚がないみたいだけど糖質の疑いがある
0025デフォルトの名無しさん垢版2014/02/21(金) 22:00:12.92
自覚があれば病院行くだろうし
糖質と診断されればネットは控えろと言われるだろうから
こんなところにはいない
0031デフォルトの名無しさん垢版2014/08/23(土) 00:49:39.55ID:j4ngjv2t
ぐろ
0034デフォルトの名無しさん垢版2014/12/11(木) 16:19:01.34ID:OlwBDLMK
perl 5(v5.16.3)で
http://d.hatena.ne.jp/syohex/20110616/1308237655
を走らせると
BEGIN not safe after errors--compilation aborted at ~/op.pl line 16.
と止まってしまいます。
解決策を教えてください。
0036デフォルトの名無しさん垢版2014/12/13(土) 11:26:51.16ID:sck7BTkh
MacOSX1068です
0037名無しさん@そうだ選挙に行こう垢版2014/12/13(土) 13:22:37.60ID:toJAZvUP
>>36
mac持ってないから試せないけど、一応これで動くんじゃないかと。
adhocな対応でセキュリティ考えてないから注意してね。

open my $fh, '<', \(my $dmy = `@cmd`) or die "Can't exec @cmd";
0038名無しさん@そうだ選挙に行こう垢版2014/12/13(土) 13:39:32.35ID:SQgyoVwB
えーん
0039デフォルトの名無しさん垢版2015/01/03(土) 02:38:43.41ID:fziQOJOK
hage
0040デフォルトの名無しさん垢版2015/06/08(月) 23:02:16.28ID:fDJEyEgd
正規表現で

aaa 99 PPP
iii 87 XYZ
uuu 32 XXX

の PPP以降 と XYZ以降 と XXX以降 を取り出すのはどうすれば良いでしょうか?
aaa iii uuu が半角の文字 99 87 32 が 数字である事は保証されていますが
PPP XYZ XXX に至るまで半角スペース、もしくは全角スペースがいくつあるかは保証されておらず
substr 等で切りだす事はできません。わかる方宜しくお願いします。
0041デフォルトの名無しさん垢版2015/06/09(火) 00:25:53.38ID:lkN1yBxE
文章が不透明だから分からなくなる。(誰にも分からない)。
正規表現は完璧に仕様を出さないと書けない。出せば単にそれを書くだけ。


行頭は半角文字列である → ^[a-z]
その後に半角スペースがある → \ (←見えないが半角スペース)
その後に2桁の数値がある。 → [0-9]{2}
その後に一文字以上の半角スペースと全角スペースが不定数混在する → ([\ \ ])+
その後に大文字が3つある → [A-Z]{3}
以降、行末まで。(取り出し対象文字列) → .*$

まぁ辞書やないんやけどな。ここは。
0043デフォルトの名無しさん垢版2015/09/30(水) 22:23:35.50ID:sTs+YTNn
URLに?記号が2つある場合のデータの取得について
たとえばhttp://○○○.com/pagejump.cgi?http://△△△.com/disp.cgi?mode=testのよう?が2つある場合
$ENV{'QUERY_STRING'}だとhttp://△△△.com/disp.cgiまでしか取得できなくて?mode=testの部分が取得できないんですけど
フルに取得できるにはどうしたらいいんですか?
0044デフォルトの名無しさん垢版2015/10/01(木) 08:31:04.47ID:jKkjZr1B
フル?
http://○○○.com/pagejump.cgi?http://△△△.com/disp.cgi?mode=test 」の場合、
query文字列は、「http://△△△.com/disp.cgi?mode=test」 だから、それが取れれば
十分なのでは?

その中の一部を取り出したいなら自分で好きに取り出せばいい
004544垢版2015/10/01(木) 13:19:49.64ID:NghmrQed
スマヌ質問内容理解してなかった
だがPerl関係なくね?
0046デフォルトの名無しさん垢版2015/10/02(金) 00:15:42.88ID:jBpUUsqc
>>43
本当にクライアントが
http://○○○.com/pagejump.cgi?http://△△△.com/disp.cgi?mode=test
を送ったのなら、それが原因だと思う。
URL の各部分は適切にエスケープされなければならない。
Perl でやるならこうだ。

use URI;
use URI::Escape;

$u = URI->new("http://○○○.com/pagejump.cgi");
$u->query( uri_escape("http://△△△.com/disp.cgi?mode=test"));

# クライアントに適切なエスケープを期待出来ないなら……まあ、がんばってくれ。
0047デフォルトの名無しさん垢版2015/10/02(金) 03:53:10.85ID:j2xAjxnc
>>40-42
これで一致した、次の文字から、行末までを取得する
^([a-z]{3})([\ \ ])+[0-9]{2}([\ \ ])+


半角・全角スペースは、「aaa○99○PPP」
○の所にしか入らないのだな?
つまり、各トークンの中には、入らないのだな?

それなら、全行のすべての全角スペースを、
半角スペースに置換して、その後、
連続した半角スペースを、1つの半角スペースに置換する

そして、8文字目から行末までを、取得する

>>44-46
URLの各部分では、特別に扱う文字が決まっているから、
クエリ文字列部分で、「? =」・日本語などは使えないので、
エスケープする
0049デフォルトの名無しさん垢版2015/10/13(火) 20:00:49.41ID:0lWpYFcj
http://andtokyo.jp
&TOKYO

sub TOKYO {

#だれか面白いルーチン書いて
0050デフォルトの名無しさん垢版2015/11/08(日) 01:17:27.81ID:ytCokofM
趣味と勉強を兼ねてcgi使ったホームページを作ってるんだが

セッションって格納した値は、同じルーチン内でしか使えないの?
格納したセッションをLocationでとんだ先で取得したいんだけど
何かと組み合わせないとそういうのできないのかな
0052デフォルトの名無しさん垢版2015/11/20(金) 13:59:09.99ID:ygWQ/grN
test
0053バイキンマン垢版2015/11/20(金) 14:01:31.29ID:ygWQ/grN
プログラム板でもやっぱそうか・・・・・

バグ発見!

名前欄に0と英数字で入力すると出力されないバグ!

変数の文字の長さで入力を判定して出力させれば

バグは治る!

すぐに対処を申請します!
0054デフォルトの名無しさん垢版2015/11/21(土) 21:10:33.25ID:WD+kKzRm
>>50
セッションって?
0056デフォルトの名無しさん垢版2015/11/23(月) 21:01:14.60ID:4+JhTSZZ
a
0057デフォルトの名無しさん垢版2015/11/23(月) 21:01:48.81ID:4+JhTSZZ
質問です。
#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);

my $ua = LWP::UserAgent->new;
$ua->timeout('7');

my $req = POST('http://yahoo.co.jp');

my $res = $ua->request($req);

print $res->content;

のようにすると文字化けします。文字コードの指定方法も分からず困っております
だれかおしえてくだあさい
0058デフォルトの名無しさん垢版2015/11/24(火) 00:50:23.60ID:oXoHv6i5
もらった文字列と、表示されている文字の、
文字コードが異なっているのだろう

文字を表示しているソフトの、文字コードを変えれば?
たぶん環境変数か設定項目にある

文字を表示しているソフトは、何を使っているの?
0063デフォルトの名無しさん垢版2016/02/12(金) 18:03:25.55ID:/96fpKw+
ヒアドキュメントで表示は
print <<"EOS";
(中略)
EOS
だけど
これをファイルに書き込むにはどうしたらいいんですか?
0065デフォルトの名無しさん垢版2016/02/14(日) 03:31:58.89ID:kuEFe+X3
別解として
perl script.pl > file.txt
0066デフォルトの名無しさん垢版2016/02/14(日) 18:40:21.30ID:kuEFe+X3
もしかして、Windowsのスタート→プログラム→アクセサリ→メモ帳
を実行して
print <<"EOS";
(中略)
EOS
を打ちこみ、メモ帳のメニューのファイル→名前を付けて保存
のほうを知りたかったのですか?
0067デフォルトの名無しさん垢版2016/02/16(火) 07:29:00.22ID:y+ZjOqCo
いきなりだけどPerlのクラスの仕組み(かなり手抜き)

+ JavaScript の質問用スレッド vol.128 +©2ch.net
http://peace.2ch.net/test/read.cgi/hp/1454390682/401- のJavaScriptのthisの話の余談

大雑把に言うとPerlのクラス(オブジェクト)はハッシュに毛が生えたもの

※この段階ではクラスではない。ただのハッシュを返すnew関数とそれを入れたKlassパッケージ
package Klass;
sub new { return {a=>1, b=>2 } }
sub foo {}

Perlにはメソッドというものはない。全て関数。
コンストラクタ(一般的にnewという名前にする)もただの関数。

Perlではクラスやオブジェクトはこのようにして呼び出す。
my $obj = Klass->new();
$obj->foo();


ここで問題がある。$obj->foo()は、Klass::foo()を呼び出すことになるが、
$obj(ただのハッシュ)からどうやってKlass::foo()であることを知るのか?

ただのハッシュを返しているだけのnew関数にはそれは無理なので
ただのハッシュに毛を生やす。

sub new { return bless({a=>1, b=>2 }, 'Klass') }

これでただのハッシュじゃなくてKlassという情報がくっついたハッシュになった。
これで$obj->foo()はKlass::foo()を呼び出せる。
0068デフォルトの名無しさん垢版2016/02/16(火) 07:29:53.95ID:y+ZjOqCo
ここからが面白くて「アローの左側は関数の第一引数になる」というルールを追加する。
そうすると、Klass->new() という呼び出しは、 new('Klass') 相当になることがわかる。

ということで、newの第一引数にはクラスの文字列が入ってくるのでそれを使える。
sub new { my $class = shift; return bless({a=>1, b=>2 }, $class }

さらに、$obj->foo() の呼出も同じ。 foo($obj) 相当になる。
なので、sub foo { my $self = shift; } の$selfにはnewの戻り値である
毛が生えたハッシュ、つまりオブジェクト自身(他の言語のthis相当)が入ってくることになる。

このようにアローの左側が第一引数になる。という挙動は他の言語でも一緒で
JavaやC++は内部的にそれを行ってるだけ。

そしてJavaScriptでも.(ドット)の左側が第一引数になると考えると、
JavaScriptのthisがよくわからんという問題も簡単に理解できるはず。

JavaScriptのthisの話は元スレへどうぞ
0070デフォルトの名無しさん垢版2016/02/17(水) 00:31:54.19ID:xaInBBRG
うん。そしてそれが有用ならもっと使われているはずだが、現実はあまり使われていない。
コードが実行時に生成されるようなダイナミックなものはデバッグ、テスト、保守がしにくい。
0072デフォルトの名無しさん垢版2016/02/19(金) 00:01:04.65ID:ifdckMGM
文字列の/*と*/で囲まれた部分と/*と*/に色をつけたい

例えば$str="/*abcdef*/";の場合は
$str =~ s/\/\*/<font color=\"green\">\/\*/g;
$str =~ s/\*\//\*\/<\/font>/g;でできましたが

$str="/*//////abcdef/////*/";の場合はうまくできませんでした。
どうすればうまくいくのでしょうか?
0073デフォルトの名無しさん垢版2016/02/19(金) 01:43:09.22ID:jNAd9H+F
$str = ̄ s{(/¥*.*?¥*/)}{<font color=”green”>$1</font>}g;
0074デフォルトの名無しさん垢版2016/02/22(月) 17:33:02.93ID:BncrDEhF
my $data = {
'data1' => [1,2,3],
'data2' => [4,5,6],
'data3' => [7,8,9]
};

上のような配列のハッシュで
ハッシュそれぞれの0番目、1番目、2番目のデータを
取り出したい場合どうすればいいのでしょうか


for (my $i = 0; $i < 3; $i++) {

print $data->{"data1"}[$i],"\n";
print $data->{"data2"}[$i],"\n";
print $data->{"data3"}[$i],"\n";

}
0076デフォルトの名無しさん垢版2016/02/22(月) 23:01:42.17ID:mB6Cjpa0
ごめん、ちゃんと書いたのに何かアクシデントがあったようだ。もう一回送るよ。

それで合ってるよ。
http://perldoc.jp/pod/perldsc
を読みなさい。
$data->{"data1"}->[$i]
が正式な書き方だが (配列|ハッシュ)要素の参照が連続していれば間の矢印を省略してもいい。
個人的には、リファレンスだということを意識していたいから省略しないけどね。
0077デフォルトの名無しさん垢版2016/02/23(火) 03:28:09.20ID:Oh6h4g2T
シングルクォートもダブルクォートも要らねぇ。
my $data = {
data1 => [1,2,3],
data2 => [4,5,6],
data3 => [7,8,9]
};

print $data->{data1}[$i],"\n";
007874垢版2016/02/23(火) 09:55:37.41ID:usPktkPU
>>75-77
勉強になりました。
ありがとうございます。
0079デフォルトの名無しさん垢版2016/02/23(火) 10:27:03.85ID:usPktkPU
Web::Scraperでスクレイピングしているのですが
サンプルでは
use YAML;
warn Dump $res;
という書き方でこの方法だとデータの構造がよくわからないのですが

Dump何をつかっているのですか?
Ubuntu14.04の64bitを使っています。
008079垢版2016/02/23(火) 11:04:41.58ID:usPktkPU
>>79
データの構造はData::Dumperをイントールしたらわかるようになりました。
すみません。
0081デフォルトの名無しさん垢版2016/02/24(水) 18:07:14.97ID:E2TS40Hx
print $res->{list}[1]->{link}[0]->{url},"\n";
print $res->{list}[1]->{link}[0]->{title},"\n";

print $res->{list}[1]->{link}[1]->{url},"\n";
print $res->{list}[1]->{link}[1]->{title},"\n";

こういったデータをforeahで出力したい場合
???にはどのようにかけばいいのでしょうか

foreah my $i(???) {
print $i->{url};
print $i->{title};
}
008681垢版2016/02/25(木) 09:33:24.21ID:AM2kna+z
>>83
ありがとうございました。

一度変数に保存してからすればよかったのですね。
my $links = $res->{list}[1]{link};

for my $link ( $res->{list}[1]{link} ) {
こういう書き方をしていてリストにするにはどうしたらいいのか
わからないので質問させていただきました。

たいへん勉強になりましたありがとうございました。
0087デフォルトの名無しさん垢版2016/02/25(木) 23:12:11.74ID:B0t5yMaC
>>86
デリファレンスは一度代入しなくてもできるけどちょっとわかりにくいかなって
for my $link ( @{ $res->{list}[1]{link} } ) {

新しい書き方だとこんなのもあったり(postfix dereferencing)
$res->{list}[1]{link}->@*
0089デフォルトの名無しさん垢版2016/02/27(土) 00:21:51.17ID:7I91l6Zs
>>67-68
超亀レスですがありがとうございます、勉強になりました!
0090デフォルトの名無しさん垢版2016/02/27(土) 00:49:08.38ID:fhIzDVzC
my $date = '平成28年2月26日18:55';
my $week = '金';

$date =~ s/日/日 $week曜日 /;

print $date;
をすると文字化けするのですが原因がわかりません。
0092デフォルトの名無しさん垢版2016/02/27(土) 13:36:07.74ID:fhIzDVzC
さくらのレンタルサーバーのCGIでPerl 5.14.4です。
$weekを削除すると文字化けはおこりません。

別のプログラムではうまく動いているのですが
009392垢版2016/02/27(土) 14:09:58.43ID:fhIzDVzC
$week\xe6\x9b\x9c\xe6\x97\xa5になっているみたい

プログラム内に入力している日本語がprint表示するときにくずれるようです。
0094デフォルトの名無しさん垢版2016/02/27(土) 14:23:16.95ID:VqgeV1ea
${week曜日}
${week}曜日

>プログラム内に入力している日本語がprint表示するときにくずれる
やっぱutf8フラグかなあ…
009592垢版2016/02/27(土) 14:55:51.07ID:fhIzDVzC
すみませんプログラムミスでした。
0096デフォルトの名無しさん垢版2016/03/05(土) 17:24:53.21ID:jVpVtd3O
日付で教えて下さい
1/23 12:34
を西暦をくっつけて
2016/1/23 12:34に変換したいのですが

例えば未来の日時の場合は
5/1 12:34
を2015/5/1 12:34と1年引いた年にしたいのですが
下のプログラムでは
2015/05/02 06:45:10になります
年の引き算はどうすればいいのでしょうか

use strict;
use warnings;
use 5.010;

use Time::Piece;
use Time::Seconds;

my $t = localtime;
my $year = $t->year;

my $str = "1/23 12:34";

my $date = Time::Piece->strptime("$year/$str", '%Y/%m/%d %H:%M');

if ($t < $date) {
$date -= ONE_YEAR;
}

say $t->strftime('%Y-%m-%d %H:%M:%S');
say $date->strftime('%Y-%m-%d %H:%M:%S');
0097デフォルトの名無しさん垢版2016/03/05(土) 17:32:45.69ID:Kk7Ussws
>>96
いや、年の引き算って言っても一年は365日とは
限らないんだから、仕様を決めないとだめでしょ?

例えば2月29日の1年前は何日なのか?っていう。
0101デフォルトの名無しさん垢版2016/03/07(月) 21:18:09.27ID:jBGm+KXA
pythonのスクリプトの頭に、use strict;って書いた。頭いかれてきたw
0102デフォルトの名無しさん垢版2016/03/07(月) 23:50:19.65ID:fqGSH3nt
my($year,$month,$day,$hour,$min) = (localtime)[5,4,3,2,1];
my $str = "1/23 12:34";
my($strmonth,$strday,$strhour,$strmin) = $str =~ m|([0-9]+)/([0-9]+) ([0-9]+):([0-9]+)|;
if (
  sprintf('%02d%02d%02d%02d',$strmonth,$strday,$strhour,$strmin)
  gt
  sprintf('%02d%02d%02d%02d',$month+1,$day,$hour,$min)
) {
  printf("%04d/%02d/%02d %02d:%02d\n",1900+$year-1,$strmonth,$strday,$strhour,$strmin);
}
else {
  printf("%04d/%02d/%02d %02d:%02d\n",1900+$year,$strmonth,$strday,$strhour,$strmin);
}
# 基本に忠実に。応用はそれから
0103デフォルトの名無しさん垢版2016/03/08(火) 00:11:41.92ID:2waKAzbH
>>102
$month -= 2;
my $str = "2/29 12:34";
したら、2015/02/29って答が出るコードなんぞ貼るなや

元の質問者のコードに、
ふつうに$obj->is_leap_yearの判定加えて、
2/29跨ぎなら、LEAP_YEAR
引けばいいだけだろ。
0106デフォルトの名無しさん垢版2016/03/10(木) 00:41:03.49ID:m8iGuBqw
要件にない仕様を自己満足で追加してはいけない
この件はTime::Pieceだとうまくこなせない問題
融通がきかないのがオレオブジェクトのつらいところだ
0108デフォルトの名無しさん垢版2016/03/13(日) 00:11:27.55ID:W4AXq/NT
localtimeとTimelocalは次スレのテンプレに追加するか
同じ質問が繰り返されてみんな同じところではまるからなあ
0109デフォルトの名無しさん垢版2016/03/17(木) 15:49:56.51ID:HmsCvSUF
クッキーへの書き込み処理での質問

エラーメッセージを取得処理
print "Content-type:text/html\n";

if(エラー数が0の場合){

投稿データをクッキーに書き込む処理

}

print "\n";

エラーメッセージの表示処理

というようにエラーメッセージの取得と表示の間に
print "Content-type:text/html\n";print "\n";を挟む形になってしまうので
これらをまとめてサブルーチン化したくてもできません
こういう場合でもうまくサブルーチン化できる方法を教えてください
0114デフォルトの名無しさん垢版2016/03/20(日) 23:05:38.19ID:ZT1ttS3p
何をしたかったのかよくわからないけど、せめて cookie と書いてほしかった。
0115デフォルトの名無しさん垢版2016/03/21(月) 23:09:59.48ID:mpXdX/cy
住所を入れる変数でさ
$adoresu = ・・・
みたいな名前つかうヤツ、いるよね
英語なのか何なのか、よくワカラン
0116デフォルトの名無しさん垢版2016/03/23(水) 01:56:25.05ID:isz3o5XG
$message = エラーメッセージを取得;
print "Content-type:text/html\n";
if(エラー数が0の場合){
  投稿データをクッキーに書き込む処理
}
print "\n";
print $message; # エラーメッセージの表示処理
0117デフォルトの名無しさん垢版2016/03/23(水) 21:53:51.11ID:ftv772ff
my $str = "あああabcあああcdefghあああ123456";

この文字列で半角英数字の部分をAAAに置換するにはどうすればいいですか?

あああAAAあああAAAあああAAAになればOKです
0118デフォルトの名無しさん垢版2016/03/23(水) 23:01:13.44ID:OHojQvKP
ここで聞くよりも
http://perldoc.jp/pod/perlrequick
を読みなさい。その方が早くて正確です。
0119デフォルトの名無しさん垢版2016/03/24(木) 00:07:44.52ID:3WWxxvBQ
my $str = "あああabcあああcdefghあああ123456";
print $str, "\n";
$str =~ s/[A-Za-z0-9]+/AAA/g;
print $str, "\n";
0120デフォルトの名無しさん垢版2016/03/25(金) 01:11:07.68ID:v9Mc4pMx
ありがとうございます。おかげで宿題を提出することができました。
リンク先のページを読んでも何が何だかさっぱり分かりませんでした。
0121デフォルトの名無しさん垢版2016/03/27(日) 01:06:33.94ID:jno5DU+g
パールでまた問題に直面したら話題を提供してあげますので楽しみにしてるんだぞ。
0123デフォルトの名無しさん垢版2016/04/14(木) 19:01:51.27ID:v1e64Ann
ファイル演算子の-eと-fの違いは?
ファイルが存在するかどうかはどっちを使っても良いのですか?
0124デフォルトの名無しさん垢版2016/04/14(木) 19:46:27.77ID:G3MchQfa
すみません。初めてperlを使うのですが、perlでQRコードを生成したいです。

ブラウザからアクセスしてQRコードの標準出力は出来たのですが、ファイルを生成する方法がわかりません。
以下のソースを実行すると、pngが生成されるのですが、生成されたpngをダブルクリックしても開けなくなります。

use GD::Barcode::QRcode;
binmode STDOUT;

my $qr = GD::Barcode::QRcode->new('test',{Ecc=>M, Version=>5, ModuleSize=>3})->plot();

open my $fh, '>', 'qr.png' or die;
print $fh $qr->png;
close $fh;

もしお分かりの方がいらっしゃったらお願いします。
0125デフォルトの名無しさん垢版2016/04/14(木) 20:56:59.29ID:rjSU//7G
>>123
-fは指定されたものが通常ファイルで存在した場合のみ真
-eは同名のディレクトリやシンボリックリンクでも真

>>124
openの次の行にbinmode $fh;
0126124垢版2016/04/14(木) 21:09:45.25ID:G3MchQfa
>>125
ありがとうございました。
初心者なもので、もう丸一日困っておりました。
0127デフォルトの名無しさん垢版2016/04/24(日) 15:13:08.67ID:mI4IMx9A
centos、zshの環境で、plenvを使っていて、apacheでcgiを動かそうと考えています。

/var/www/html 直下で #!/usr/bin/perl のcgiが動くところまではブラウザで確認できました。
あとはplenvの下記初期設定をするだけ、と思ったところで詰まりました。

export PATH=~/.plenv/bin:$PATH
eval "$(plenv init -)"

apacheの自動起動では ..zshrc を指定するところがありません。
とりあえず下記で、plenvでインストールしたパスだけは設定したのですが、
eval "$(plenv init -)" の中でどんな処理がされているのかわかりません。 

# echo "PATH=/home/centos/.plenv/shims:$PATH" >> /etc/sysconfig/httpd
# /etc/init.d/httpd restart

eval "$(plenv init -)" ではどんな処理がされているのでしょうか?
また、plenvの環境は、パスさえ設定しておけば、特に支障はないのでしょうか?
0130127垢版2016/04/24(日) 23:45:45.94ID:WFRvhXno
>>128

なるほど!
評価してるだけだから、echoで出力できますね。
気づきませんでしたありがとうございます。
0131デフォルトの名無しさん垢版2016/04/25(月) 02:23:47.24ID:wavxOtJH
echoしなくてもplenv init - だけでいいよw
もっとも、それ見た後は

そーすこーどみれだけどなw
0132デフォルトの名無しさん垢版2016/04/27(水) 09:59:00.96ID:I/i5T1uZ
openで開いたファイルをcloseで閉じる前にexitなのでプログラム強制終了した場合
自動的に閉じられてますか?
何か問題ありますか?
0133デフォルトの名無しさん垢版2016/04/27(水) 13:09:15.67ID:3LxG86Of
closeされることが保証されるわけではないが、普通のOSなら
OSがcloseを発行する。何を問題とみなすかによるが普通は問題ない
0135デフォルトの名無しさん垢版2016/04/28(木) 02:09:41.77ID:hmSh3kQm
exit ではなく die を使うという方法もある。もちろん eval ブロックの中で。
0137デフォルトの名無しさん垢版2016/04/29(金) 19:53:28.89ID:WQhKsXVS
tmp.datをlog.datにrenameするときrename失敗したら成功するまで繰り返す処理をしたい
このようにrename成功したらループを抜けるというやり方でもいいんでしょうか?
他にいいやり方はありますか?

for($n=0;$n<=100;$n++){

$rename_seikou = rename("tmp.dat","log.dat");

if($rename_seikou==1){

last;

}

}
0138デフォルトの名無しさん垢版2016/04/29(金) 20:40:17.89ID:bfvjxGWD
本当にそういう繰り返しをしたいのなら sleep を入れた方がいいと思う。
それから、失敗した時は原因を確認した方がいいと思う。つまり、こんな感じ。

use Errno 'EBUSY';
if ( rename( $src,$dest)){
# 成功
} elsif ( $! eq EBUSY){
# 多分、別のプロセスで使用中。少し待てば成功するかも。
} else {
# 待っても無駄だろう。
die( $!);
}
0139デフォルトの名無しさん垢版2016/04/29(金) 20:50:54.01ID:bfvjxGWD
ごめん、間違えた。
$! eq EBUSY
じゃなくて
$! == EBUSY
0140デフォルトの名無しさん垢版2016/04/30(土) 11:00:17.55ID:DNyH92Gg
正規表現での置換について質問です。

<ul>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li>あ</li>
</ul>

上の最後の<li>だけ<li class="a">に置換したです。
1時間以上考えてますができません。
0141140垢版2016/04/30(土) 11:01:02.01ID:DNyH92Gg
間違えました。

置換したです→置換したいです
0143140垢版2016/04/30(土) 11:14:44.17ID:DNyH92Gg
自己解決しました。

$a =~ s/(^.*)\<li\>(.*$)/$1\<li class\=\"a\"\>$2/s;
0144140垢版2016/04/30(土) 11:39:47.11ID:DNyH92Gg
すみません。
新たな問題が発生しました。

<ul>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li>あ</li>
</ul>
<ul>
<li>い</li>
<li>い</li>
<li>い</li>
<li>い</li>
<li>い</li>
</ul>

上記の文字列が$aに入っている場合で、各<ul>の最後の<li>だけ<li class="a">に置換したいです。
0145デフォルトの名無しさん垢版2016/04/30(土) 12:40:49.01ID:nOun1cZC
木構造のものを正規表現で置換するのは無理

JavaScriptのjQuery の、addClass, removeClass, toggleClass などを使う

それか、HTMLをパースする、ライブラリを探す
0146デフォルトの名無しさん垢版2016/04/30(土) 15:45:10.24ID:Z/JJxf61
否定の文字クラス使えば、普通に最短マッチで出来る事だろ。
s{<li>([^>]*?</li>¥s+</ul>)}{<li class="a">$1}sg

パースするライブラリ使えっつーのは同意だがな
0148140垢版2016/05/01(日) 14:05:59.88ID:mZCC86OL
>>145
ツリー構造というよりまさにあの並びの時だけの正規表現でいいんでPerlでやりたいんです


>>146
ありがとうございます
$a =~ s/\<li\>([^\>]*?\<\/li\>\s+\<\/ul\>)/\<li class\=\"a\"\>$1/sg;
では動きませんでした
0149デフォルトの名無しさん垢版2016/05/01(日) 16:22:48.05ID:EJZ0zho6
そのコードそのまま(円マークをバックスラッシュにして)
動かしたから、何らかの置換↓が得られたけど?
<ul>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li class="a">あ</li>
</ul>
<ul>
<li>い</li>
<li>い</li>
<li>い</li>
<li>い</li>
<li class="a">い</li>
</ul>

無意味なエスケープは、コードの邪魔になるだけだからしない方がいいよ。
置換 s/// の右辺は正規表現ですらない(よってエスケープの必要無い)し。
0152デフォルトの名無しさん垢版2016/05/04(水) 01:44:17.76ID:eTkSZ25N
# 実行してみて
for $num (1..3){
  $_ = '1' x ($num - 1);
  print /[0-9]{$num}/ ? 'ok,' : 'not ok,';
  $_ = '1' x $num;
  print /[0-9]{$num}/ ? 'ok,' : 'not ok,';
  $_ = '1' x ($num + 1);
  print /[0-9]{$num}/ ? 'ok,' : 'not ok,';
  print "\n";
}
0153デフォルトの名無しさん垢版2016/05/04(水) 17:17:13.34ID:cuRcUS6e
>>152
ありがとうございます。
変数は使えたんですね!

演算子が使えないようでした…申し訳ありません。

/[0-9]{$num+1}/
のような使い方がだめでした orz
0154デフォルトの名無しさん垢版2016/05/04(水) 22:28:29.07ID:0wPtL/Lt
$n = 2;
$pat_qr = $n + 1;
$pat_qr = qr/[0-9]{$pat_qr}/ ;
$pat_ev = eval( sprintf("qr/[0-9]{%d}/",$n+1));
$pat_co = qr/(??{ sprintf("[0-9]{%d}",$n+1) })/ ;
print( $_,"\n") foreach $pat_qr,$pat_ev,$pat_co;

# 個人的には $pat_qr がいいなぁ。eval を使うほどのことじゃないし $pat_co はデバッグしにくい。
0155デフォルトの名無しさん垢版2016/05/05(木) 15:23:19.51ID:zs5en64n
# こうですよ
for $num (1..3){
  $_ = '1' x $num;
  print /[0-9]{@{[$num+1]}}/ ? 'ok,' : 'not ok,';
  $_ = '1' x ($num + 1);
  print /[0-9]{@{[$num+1]}}/ ? 'ok,' : 'not ok,';
  $_ = '1' x ($num + 2);
  print /[0-9]{@{[$num+1]}}/ ? 'ok,' : 'not ok,';
  print "\n";
}
0156153垢版2016/05/05(木) 19:10:09.77ID:eJss6EWw
>>155
すごーい\(^^)/
ありがとうございます!

>>154
ありがとうございます!
0157153垢版2016/05/05(木) 19:13:26.95ID:eJss6EWw
あのあのもう一つ
ファイルハンドルで3行読み込むのを作ってみたのですがうまくいきませんでした…
どうしたらよいのでしょうか…


while ( $line[0..2] = <DATA> ) {
print $line[0];
print $line[1];
print $line[2];
}
__DATA__
なんたら
かんたら
たらのめ
0158153垢版2016/05/05(木) 19:19:01.51ID:eJss6EWw
ちょっとサンプル省略しすぎてすみません。
":encoding(cp932)"
等で漢字の表示は問題ありませんm(__)m

while ( $line[0] = <DATA> ) {
$line[1] = <DATA>;
$line[2] = <DATA>;
....

のように分解して書くと問題ありません。(DATAは必ず3行一組になります)

一度に、3行読み込む方法があればお教えくださいm(__)m
0160デフォルトの名無しさん垢版2016/05/05(木) 23:21:34.59ID:zs5en64n
都合よく固定長を前提にはできないだろうから、

# 全部読んじゃって
chomp(@_ = <DATA>);

# 3つづつ処理する
while (@line = splice(@_,0,3)) {
  print map {"[$_]"} @line;
  print "\n";
}
__END__
1
2
3
4
5
6
7
8
9
0161デフォルトの名無しさん垢版2016/06/01(水) 11:50:03.90ID:6wx+Ihuz
$text = 'hoge<span class="hoge" id="hoge">"hoge"</span><span class="huge" id="huge">"hoge"</span>huge';

上のような文字列で<〜>(タグ内)に囲まれた"だけ
0162デフォルトの名無しさん垢版2016/06/01(水) 11:54:16.91ID:6wx+Ihuz
$text = 'hoge&lt;span class=&quot;hoge&quot; id=&quot;hoge&quot;&gt;&quot;hoge&quot;&lt;/span&gt;
&lt;span class=&quot;huge&quot; id=&quot;huge&quot;&gt;&quot;hoge&quot;&lt;/span&gt;huge';

上のような文字列(改行されてますが1行です)で&lt;〜&gt;(タグ内)に囲まれた&quot;だけ " に置換したいです

s/(&lt;.*?)&quot;(.*?&gt;)/$1"$2/g;

上のように試してみましたが、最初の1つのみ " に置換されるだけです
よろしくお願いします
0163162垢版2016/06/01(水) 12:36:41.40ID:6wx+Ihuz
タグの外側だけ置換する方法としては下記がどこかに載っていました

s/((?:\G|&gt;)[^&lt;]*?)&quot;/$1"/g;


タグの内側だけ置換したい場合は&gt;と&lt;を逆にすればいいかと思ったのですができませんでした
0165デフォルトの名無しさん垢版2016/06/01(水) 13:07:26.71ID:6wx+Ihuz
>>164
ありがとうございます
やってみましたがエラーになりました
もちろん&は半角に直しました
0166デフォルトの名無しさん垢版2016/06/01(水) 13:32:03.91ID:MHn5bFUb
どんなエラーか解らないことにはなんとも……
ひょっとして、5.14 以前の Perl を使ってたりする?
0167デフォルトの名無しさん垢版2016/06/01(水) 13:44:06.85ID:6wx+Ihuz
>>166
5.8系です
AddHandler cgi-script-debugが使えなくなってデバッグができないんです

この文法チェッカもいつの間にか消えてました
http://homepage2.nifty.com/sophia0/perl.html
0168デフォルトの名無しさん垢版2016/06/01(水) 14:04:04.96ID:6wx+Ihuz
teraterm入れてSSH登録してエラーチェックしてみました

Bareword found where operator expected at test.cgi line 7, near "s/&quot;/"/gr"
syntax error at test.cgi line 7, near "s/&quot;/"/gr "
test.cgi had compilation errors.
0169デフォルトの名無しさん垢版2016/06/01(水) 14:11:20.95ID:MHn5bFUb
置換の r オプションは 5.14 からです。従来通り
perl -pe 's{(?<=&lt;)(.+?)(?=&gt;)}{ ( $str = $1) =~ s!&quot;!\"!g ; $str ; }eg'
みたいな感じでどうでしょうか。
0170デフォルトの名無しさん垢版2016/06/01(水) 14:17:56.91ID:6wx+Ihuz
>>169
できました!
本当にありがとうございました!
(Perl 5.8.8なのにエラーが出たのは謎ですね)
0172デフォルトの名無しさん垢版2016/06/01(水) 21:17:48.26ID:1kxD8r4Z
そいや5.24でpushやpop,shiiftなどにリファレンスを渡したときの
自動デリファレンスが止めになったのはなぜ?
折角5.14で入れた機能なのに。
0173デフォルトの名無しさん垢版2016/06/01(水) 21:25:33.54ID:BXoQUtbW
なぜも何も。

もともと「実験的に採用した」って宣言してるし、
失敗でした、って delta に書いてあるし。
0175デフォルトの名無しさん垢版2016/06/02(木) 14:23:32.77ID:TTUXXyQU
Windows 7で
tree D: /f > tree_list.txt
これで書き出した物をperlでフルパスに変換したいのですが、
何か良いモジュールなどはありますか?
0176デフォルトの名無しさん垢版2016/06/02(木) 16:16:38.49ID:I/c4JKn/
File::Spec がそうかも。
0178デフォルトの名無しさん垢版2016/06/03(金) 12:58:52.91ID:a9xFHzmZ
>>176
いまいち良い方法が見つからなかった
再帰処理でがりがり頑張ったけど、ものすごい時間が掛かってしまった

>>177
ありがとう
無事いけた
コマンドライン詳しくないから、NULでひかかった
NULの代わりに、list.txtなどにするとサクッと記録された
速度滅茶苦茶早いなー
0179デフォルトの名無しさん垢版2016/06/04(土) 15:10:16.50ID:d7ojMir6
ループの条件を満たしてなくてもredoでループされるんだけど、そうゆうことでいいのかな
0181デフォルトの名無しさん垢版2016/06/04(土) 16:50:14.92ID:d7ojMir6
>redo コマンドは、条件を再評価しないで、ループブロックの始めからもう一度 実行を開始します
そうかそうか、これが欲しかった。どうも。
0182デフォルトの名無しさん垢版2016/06/08(水) 04:54:48.15ID:c/sFGpfw
ちょっと相談と言うか、バグの原因が想像つかなくてこまっちんぐなんだけど、

$| = 1;
for(.....){
................
.................
print $x;
}

みたいな感じでいっぱいプリントしてる時、
プロセス実行中は8.00KB(8192B)しか出力されないんだよね。

本来は9.22KB程度出力されるはずで、これはプロセスが終了したら出力される。
0185デフォルトの名無しさん垢版2016/06/08(水) 15:34:08.08ID:1ofjxszc
10GBくらいのCSVで作成された辞書の文字を置換して出力する場合最も適切な方法はどんな感じ?
すぐ思いつくのは下記だけど、膨大な回数HDDにアクセスして大丈夫かと不安になるがバッファリングされるから影響はないかな?

open(IN,"<Wikipedia.txt");
open(OUT,">>test.txt");
while(<IN>){
$_ =~ s/<|>/<>/g;
print OUT $_;
}
close OUT;
close IN;
0187デフォルトの名無しさん垢版2016/06/08(水) 15:56:29.67ID:1ofjxszc
>>186
単にリードするだけなら10GBは大丈夫だろうけど、
出力のバッファリングが甘いと、何度も書き込みHDDに凄い負担掛かるんじゃないかと思って・・・
因みに、昔は下記みたいにしてた、やたらHDDがガリガリ言ってた気がする
正しい方法はどうするのが良いのかと思ってね・・・

$| = 1;
open(IN,"<Wikipedia.txt");
while(<IN>){
 open(OUT,">>test.txt");
 $_ =~ s/<|>/<>/g;
 print OUT $_;
 close OUT;
 print $count++;
 print "\n";
}
close IN;
0190デフォルトの名無しさん垢版2016/06/12(日) 12:28:41.66ID:JDueIOd3
どんな言語で書いても10GBのHDDをアクセスすること自体に変わりはない。
温度が上昇してエラーになるなら、扇風機で冷やしながら実行するとよい。
0192デフォルトの名無しさん垢版2016/06/12(日) 13:26:20.33ID:0HO5/jac
そもそも10GBのテキストなんざ、
今の基準で言えば普通よりちょっとデカい程度。

日常的に扱かってる人間からすれば、質問自体が意味不明。

一回こっきりの捨てスクリプトなんだろうから、
検証以前にさっさと書いて終りにすりゃあいい。
0193デフォルトの名無しさん垢版2016/06/12(日) 14:32:37.22ID:wrakKGfW
でも>>187は毎回やってると流石にHDD痛めそうな気がする
ベストな方法や、やってはならない方法はあるでしょ
0194デフォルトの名無しさん垢版2016/06/12(日) 15:01:08.44ID:0HO5/jac
ちょっと待って>>187は、論外だろ?
これを含めて、ベスト云々を議論すんなら、
「初歩から教えろ」って言ってるのと変らんぞ?

普通に、>>185でいいじゃん。
>>186とか、>>190とか指摘してる通り、
どうあがこうが、10GBの書き込みは生じるんだから。
0195デフォルトの名無しさん垢版2016/06/12(日) 16:03:16.27ID:ve4Ih4ce
まぁ俺は10GB程度のファイル、頻繁にDLしたり削除したりコピーしたり色々してるけどな、ほぼ毎日。
0196デフォルトの名無しさん垢版2016/06/12(日) 18:22:13.25ID:wrakKGfW
プログラムもだけど$|=1;使って動作確認してたり、
バッファリング無し、バッチ処理で毎晩10GB1行毎の書き込みは流石にまずいんじゃない?

185も$|=1;使ったらどんな動作になるんだろ?

187はコードが見やすくなるからテストでは結構使ってる
そのまま忘れてて大きなファイルを解析させてたりもある
みんな185形式で書いてるの?
0197デフォルトの名無しさん垢版2016/06/12(日) 18:23:39.84ID:wrakKGfW
速度も考えて最近は配列に貯めてからすることがある
ただWindowsだとすぐout of memoryでる
0199デフォルトの名無しさん垢版2016/06/12(日) 19:00:15.13ID:ve4Ih4ce
でもPerlってメモリの量が異常に増えるんだよね
10MBのデータを読み込んでごにょごにょしてたらなぜかメモリ200MBになってたり
普通にネイティブな言語使ったほうがいいのでは
0200デフォルトの名無しさん垢版2016/06/12(日) 21:45:18.08ID:0HO5/jac
どんなレス考えても、罵倒しか思い浮ばん。

HDDの負担以前の問題だよ。
open/closeを行数分繰替えすのが、
どれだけ時間の無駄(=マシンに負荷がかかる)か実例貼っとく。

$ perl -le ' sub ps { print `ps ux $$`}; ps ; for( 0 .. 9999999 ){ open my $h, ">>", "test.txt" ; print {$h} "h" } ; ps ;'
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
XXXXX 36471 13.2 0.1 2445400 3344 s002 S+ 8:24PM 0:00.16 perl -le sub ps { print `ps ux $$`}; ps ; for( 0 .. 9999999 ){ open my $h, ">>", "test.txt" ; print {$h} "h" } ; ps ;

USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
XXXXX 36471 22.5 0.0 2445400 1664 s002 S+ 8:24PM 24:21.88 perl -le sub ps { print `ps ux $$`}; ps ; for( 0 .. 9999999 ){ open my $h, ">>", "test.txt" ; print {$h} "h" } ; ps ;

CPU time で24分だけど、実際には、9時半まで処理掛かってる。
0201デフォルトの名無しさん垢版2016/06/12(日) 21:49:23.64ID:0HO5/jac
$ perl -le ' sub ps { print `ps ux $$`}; ps ; open my $h, ">", "test.txt" ; for( 0 .. 9999999 ){ print {$h} "h" } ; ps ;'
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
XXXXX 40081 7.0 0.1 2445400 3324 s002 R+ 9:36PM 0:00.09 perl -le sub ps { print `ps ux $$`}; ps ; open my $h, ">", "test.txt" ; for( 0 .. 9999999 ){ print {$h} "h" } ; ps ;

USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
XXXXX 40081 96.8 0.1 2445400 3340 s002 S+ 9:36PM 0:03.08 perl -le sub ps { print `ps ux $$`}; ps ; open my $h, ">", "test.txt" ; for( 0 .. 9999999 ){ print {$h} "h" } ; ps ;

$ ls -alh test.txt
-rw-r--r-- 1 XXXXX staff 19M 6 12 21:36 test.txt

今の時代の強力なマシンだろうが、こんだけ負担をかける事は、一昔前の人間だったら常識の範囲。

ちなみにフラッシュしようが、出力される量は変動しないんだから、
HDDの負担は変らん。と何回指摘されりゃ気が済むんだ?
0203デフォルトの名無しさん垢版2016/06/12(日) 23:18:14.97ID:wrakKGfW
>>201
今の時代マシーンパワーに物言わせてと言うことが意外と出来きてしまう
勿論、限度はあるけど
朝までに終わればいいわ程度で一度コード作ったらあとは触らないとかね
それと、昔デフラグし過ぎるとHDDが壊れるとか言われてた
出力される量でHDDの劣化が決まるって話だけど、細かいファイルを大量に書いたり作成するのはHDDにとって過大な負担になるんじゃない?
例えばだけど、100GBのファイル一つ書き込むのと、1バイトのファイルを100GB分毎回書き込むのでは違うと思うのだが?

>>198
配列をアホみたいに増やしたらメモリー(SSDで仮想いくらでも増やせるし)が一杯になる前に落ちる
0204デフォルトの名無しさん垢版2016/06/12(日) 23:41:21.09ID:0HO5/jac
>>203
意味不明。
細かいファイルの件なんか、俺のコードにも、>>185にも>>187にも
全く触れられてないんだけど?

百歩譲って、断片化の可能性が高まるのは、open/close を繰替えす
>>187のコード(膨大な処理時間中に他のIOが割って入る)だが、
擁護してんのか晒してんのかも不明。
0205デフォルトの名無しさん垢版2016/06/12(日) 23:49:21.59ID:xguVhByI
>>201
> ちなみにフラッシュしようが、出力される量は変動しないんだから、
> HDDの負担は変らん。と何回指摘されりゃ気が済むんだ?

出力される量は変動しなくても
書き込み回数は増えるじゃん。

フラッシュって何をやってるのか知らないの?
HDDに書き込まないでメモリに蓄えているものを
書き出す処理だぞ。

だからHDDの負担は増える。
0206デフォルトの名無しさん垢版2016/06/12(日) 23:52:30.66ID:xguVhByI
ちなみに、出力される量も実際に変動する。

HDDに限らないが通常書き込みっていうのは
ブロック単位で書き込まれる。

HDDの場合は512バイトだったり最近は4Kバイトだったりする。
1バイトの書き込みでも4Kバイト書き込まれるわけだ。

だからデータ量が1000バイトだった場合、
フラッシュ無しだと4KBの書き込みだが
1バイト毎にフラッシュすると、4KB×1000=4MBの書き込み量になる。

ファイルサイズはどちらも同じ1000バイトであっても
それを作るための書き込み量は違う。
0207デフォルトの名無しさん垢版2016/06/13(月) 00:08:38.69ID:GclKUW1b
>ちなみにフラッシュしようが、出力される量は変動しないんだから、
>HDDの負担は変らん。と何回指摘されりゃ気が済むんだ?
この二行は、あなたのご指摘通り。
訂正します。

>>187
>$| = 1;
は、*OUTのフラッシュになんの関与もしていないけど。
0208デフォルトの名無しさん垢版2016/06/13(月) 00:32:22.24ID:Yqh2uzvZ
>>204
205-206が言いたいこと言ってくれた
擁護でも晒すわけでもなく、より適切な方法が見つかれば良いと思う
185にしても、もっとバッファリングしてやればHDDへのIOが減りHDDの負担は減るんじゃないかなと
標準だと4/8KBでフラッシュしてるよね、これを100MBにすればHDDへの負担はぐっと減りそう
今時のキャッシュ大きめのHDDでどの程度意味があるのか分からないし
寿命に影響するかどうかは分からないけど毎日繰り返す処理なら意味があるかも

>>207
そうなの?って思って調べてみた
http://mikeda.hatenablog.com/entry/20090503/1241365884
みたらselectしないと効かないっぽいな
0209デフォルトの名無しさん垢版2016/06/13(月) 01:15:56.79ID:w1lAZiF2
夏場なんで、while ブロックの先頭に
sleep 2 unless $. % 10000;
を入れるとよい。2つの数字は調整してみてくれ。
0210デフォルトの名無しさん垢版2016/06/13(月) 15:19:04.03ID:bjrR9GHC
#!/usr/bin/perl -w

use strict;
use File::Path;
use IO::File;

sub diskstat {
 system(
0211デフォルトの名無しさん垢版2016/06/13(月) 16:48:17.11ID:bjrR9GHC
https://ideone.com/fUNKyh

このプログラムの意図 : >>185>>187 の違いがディスクアクセスに及ぼす影響の検証。

明らかに >>185 よりも >>187 の方がシステムコールの回数が多い。
しかし、それだけでディスクアクセスに違いが出てくるわけではない。
実行時間を同程度にしてみたらどうなるだろうか。
実行する前に
grep sda5
の sda5 を環境に合わせて書き換えてほしい。
0212デフォルトの名無しさん垢版2016/06/14(火) 01:15:43.18ID:M6DJWkXG
> 実行時間を同程度にしてみたらどうなるだろうか。

実行時間を同程度にしたら、遅い方の書き込み量が減るから
比較にならんだろw
0213デフォルトの名無しさん垢版2016/06/14(火) 20:04:47.85ID:UhtJW9b9
プログラムを見てくれてないのかな……だとしたらその時点でもう対象外なんだけど。
ろくに見もしないで何を想像したの?
0214デフォルトの名無しさん垢版2016/06/15(水) 01:35:53.40ID:7O5/ia9k
そう言えば古いDiffソフト(AikoWin)やたらHDDガリガリ音鳴ってたな
あれ読み出しが少しずつでHDDに相当の負担が掛かるとか聞いたことがある
細かいファイルを書き込むのも良くないけど、自分でソフト作る時にには
呼び出しも気を付けないとまずいんだよなー
0215211垢版2016/06/15(水) 12:03:11.68ID:rzJhZO2i
もう少しマシなプログラムを書いてみたよ。

https://ideone.com/Nh4Esi

Linux 限定だけど無修正で実行できる。
実行時間は 5 分くらいかかるよ。正確なデータを得るにはそうした方がいいみたいなんだ……
0216デフォルトの名無しさん垢版2016/06/15(水) 13:23:28.38ID:rzJhZO2i
自分の実行結果を書いておくよ。

sub f_a {
 my $fh = IO::File->new( &genfn(),'>') || die( $!);
 $fh->autoflush( 0);
 $fh->print('h') foreach 0 .. 65535;
 $fh->close;
}

sub f_b {
 my $fh = IO::File->new( &genfn(),'>') || die( $!);
 $fh->autoflush( 1);
 $fh->print('h') foreach 0 .. 65535;
 $fh->close;
}

sub f_c {
 my $fn = &genfn();
 foreach ( 0 .. 65535) {
  my $fh = IO::File->new( $fn,'>>') || die( $!);
  $fh->print('h');
  $fh->close;
 }
}

これらを 16 回ずつ実行した結果、f_a,f_b はそれぞれ 2232 セクタ、
f_c は 2224 セクタ書き込んだみたいだよ。もちろん書き込んだ回数だよ。
0217デフォルトの名無しさん垢版2016/06/15(水) 17:57:12.29ID:rzJhZO2i
https://ideone.com/K0qeSx

もう少しユーザーフレンドリーな感じにしてみたよ。これで最後だよ。
Windows ではこういう情報を得る方法は無いの?
非同期書き込みが無いのなら彼らの言うことも間違いではないんだけど。
0219218垢版2016/06/18(土) 13:00:49.64ID:zTifxauk
一行構文のOPだとわかりました。

しかし、
C:\perl\bin\perl -e 'for $i (@ARGV) { print $i ,"\n";}' args1 args2 args3
をWindows環境で実行すると
Can't find string terminator "'" anywhere before EOF at -e line 1
と出てしまいます。
解決方法を教えほしいです。
0222デフォルトの名無しさん垢版2016/06/18(土) 14:58:07.42ID:h9LNivvl
>>221
俺は昨日から始めたんで確かなことは言えないけど、
DOSプロンプトだと、''で括ってもダメだったよ
(何か設定があるんだけど昨日からなんで...)
例えば、
perl -e 'print "hello"'

perl -e "print \"Hello World\n\""
ってしないと動かなかった
0223デフォルトの名無しさん垢版2016/06/18(土) 15:22:54.54ID:h9LNivvl
よくよく考えたら、コマンドプロンプトで''はいけるはず無いよね
だって、まずコマンドプロンプトで命令が解釈されるわけだから
'a b'だと、連続した文字列とはならずに
'aとb'の2つの引数が指定されたと受け取られちゃうわけだしね
0224デフォルトの名無しさん垢版2016/06/18(土) 15:30:14.88ID:xZeqh3Cr
Perl の文法上
"\n"
の代わりに
qq(\n)
と書けますよ……という話じゃないのかなあ。

とりあえず、ググって見つけたページ
http://thinca.hatenablog.com/entry/20100210/1265813598
http://up-cat.net/%25A5%25B3%25A5%25DE%25A5%25F3%25A5%25C9%25A5%25D7%25A5%25ED%25A5%25F3%25A5%25D7%25A5%25C8%25A4%25CE%25A5%25A8%25A5%25B9%25A5%25B1%25A1%25BC%25A5%25D7%25BB%25C5%25CD%25CD.html

相変わらずカオスなんですね。それがいやで Linux に乗り換えたのは前世紀のことなのに……
0225デフォルトの名無しさん垢版2016/06/18(土) 17:13:02.52ID:Q2VQ6qXf
DOS/Windowsコマンドプロンプトのクォートは "
UNIXのシェルのクォートは '
ただそれだけ
コマンドプロンプトのクォートとして "" を使っているから、Perl部分は
qq() を使ってる
0229デフォルトの名無しさん垢版2016/06/19(日) 20:43:06.86ID:p98kttl2
ファイルの中身じゃなくて、ファイル名をバイナリかなんかで扱いたいときはどうすれば良いでしょうか
どっかの国のどっか語でファイル名書いてあって、ファイル一覧を入手したら全部文字化けみたいな感じになってて困った
0230デフォルトの名無しさん垢版2016/06/19(日) 22:30:28.43ID:/GELYJ8A
まず、そのファイルが壊れてないかどうかエンコーディングが判らないことには確認しようがありません。
そして、そこに書かれているファイル名が正しいとしても、問題はそのファイル名で何をするかです。
ファイルを作成するとしたら少々困難を伴うと思いますが、何をしますか?
もう少し説明が欲しいです。
0231デフォルトの名無しさん垢版2016/06/19(日) 23:56:05.73ID:p98kttl2
1: ファイルは壊れてないです。あとファイルの中身はどうでも良くて困ってるのはファイルですね。

2: こちら側からバイナリを含めて希望してるのでそもそも文字コードは問わないです。
なおwindowsですので強制的な解釈としてはcp932でしょうか。文字かどうかは不明ですか。

3: 書いてある通り、ファイル一覧を入手したいです。(と言うよりすでにしました)。その時点での文字化けについてです。
0233デフォルトの名無しさん垢版2016/06/20(月) 01:52:28.59ID:3dbzY2ue
>>224
単にprintのあと改行したいだけなら、面倒なエスケープを避けてsayを使うのが楽だと思う。

perl -E ‘say “hoge”;’
0235デフォルトの名無しさん垢版2016/06/20(月) 02:14:22.79ID:JJJI2UNm
ちゃんと話を追ってればシングルクォートではコマンド文字列をperlに渡せないってことを理解できるのに
だから>>220では全体をダブルクォートで括ってるわけ
0236230垢版2016/06/20(月) 13:40:47.81ID:cF0IFcLP
>>231
「そのファイルが壊れてないか」と書いたのはファイル一覧のことだったんですが……
まあ、それは置いといて。
困っていると言われても、何をお望みなのかよく分かりません。
マルチバイト文字を作成者が意図した通りの文字として読みたいということなら、
やはりエンコーディングを知る必要があります。
そして、そのエンコーディングを扱うことが出来るソフトウェアと、もちろんフォントも必要です。
どんな環境で、どこからどのような手段で入手して、何をして文字化けだと思ったのか、
それがどうなるのが望みなのかを書いていただけないと、お役に立てそうもありません。
0237デフォルトの名無しさん垢版2016/06/20(月) 14:10:59.68ID:ppvG3ddJ
ファイル名はテキストだろ。
バイナリのファイル名など、聞いたことがない

フォントが無いだけで、たぶん正常だろ。
それか、ファイル一覧を表示している、端末の文字コードが違うだけ

そのファイル名をエディタにコピーして、色々な文字コードに変えて、試してみる
0238デフォルトの名無しさん垢版2016/06/20(月) 14:43:14.96ID:og12Zqf+
先日も申しましたが、ファイル名はOSの仕様によってcp932扱いで表示されたバイナリです。
windowsにおけるバイナリとテキストの違いは、改行など一部の文字の解釈です
すなわち、ファイル名を入手した時点で破損しています
0239デフォルトの名無しさん垢版2016/06/20(月) 15:21:44.17ID:7O0ObdXP
うーん・・・
関係ないけど
ハートマークのファイル名作ったけど、
ちゃんと表示できたよ
0240デフォルトの名無しさん垢版2016/06/20(月) 15:27:52.95ID:JJJI2UNm
>>238
「ファイルはテキストだが何のコードでエンコードされたものかわからん」をcp932で開いた
ではなくて
「cp932でエンコードしてしまって、もう元のファイルの情報は欠けてしまった文字化けファイル」を開いた
ってことか?
0242デフォルトの名無しさん垢版2016/06/20(月) 16:53:54.14ID:cF0IFcLP
もう一度聞くけど、どこからどのような手段で入手して、どうやって見てるの?
どうなってほしいの? 使ったソフトウェアの仕様はちゃんと理解できてるの?
0243デフォルトの名無しさん垢版2016/06/20(月) 23:26:05.47ID:og12Zqf+
Aディレクトリの中のファイル名をopendirでとってくる。
この時のファイル名ってどう言う扱い?バイナリ?テキスト?コードは?フラグは?
とってきたらそれがすでに破損してて開くこともできない。
0247デフォルトの名無しさん垢版2016/06/22(水) 02:03:09.88ID:pkNIGL7K
>>ファイルの中身じゃなくて、ファイル名をバイナリかなんかで扱いたいときはどうすれば良いでしょうか
特別なことをしなければバイナリで扱うことになる。むしろファイル名は文字列では扱(え|わ)ない。
0248デフォルトの名無しさん垢版2016/06/22(水) 17:07:36.10ID:NJ9t5GVO
Perlを使って下記のように2文字半角スペースを入れたいのです。
0015000008006a3376 -> 00 15 00 00 08 00 6a 33 76

下記を教えて貰いましたが旨く出来ません・・・アドバイス願います。
$ perl -p -e 's/(..)/$1 /g;'
001500 -> 00 15 00
0249デフォルトの名無しさん垢版2016/06/22(水) 17:34:24.64ID:MK9gPhs4
いや、ちゃんとその通りになったけど……どううまくいかなかったの?
末尾にスペースが入っちゃいかんとかなら、方法はあるけど。
0251デフォルトの名無しさん垢版2016/06/22(水) 17:44:10.61ID:NJ9t5GVO
試したのは下記ですが、進まないと言うか終らないんです。
連続数字は変えますが・・・123456に変更
perl -p -e 's/ 123456/$1 /g;'

perl -p -e 's/(123456)/$1 /g;'

perl -p -e 's/( 123456)/$1 /g;'

perl -p -e 's/\(123456\)/$1 /g;'
0253デフォルトの名無しさん垢版2016/06/22(水) 19:34:58.14ID:NJ9t5GVO
>>252
色々と試行錯誤した中で試してみましたが、ドットを入れるならスペース入れても
同じような・・・
perl -p -e 's/(12.34.56)/$1 /g;'
0254デフォルトの名無しさん垢版2016/06/22(水) 19:45:27.49ID:9eEpB7QB
もう連続した数値を2桁ずつ区切るとは話が違ってきてるぞ
まあ色々試しているんだろうが、まず正規表現をちゃんと勉強した方が結局は早道だよ
0255デフォルトの名無しさん垢版2016/06/22(水) 20:13:59.90ID:SZhXzwW9
>>253
正規表現を使っているという事は理解してる?
ドット一つは「任意の一文字」を意味しているのだけれども…
0257デフォルトの名無しさん垢版2016/06/22(水) 20:36:25.70ID:jdKVcriH
s/(..)/$1 /g

( ) で囲むと、キャプチャーできて、$1〜9 で後方参照できる。
. は、任意の1文字だから、.. で2文字

その2文字を、$1で参照して、その後ろに、半角空白を付けている。
$1の後ろに、半角空白があるだろ

g(global)フラグは、すべて置換する

だから、ab なら、ab半角空白 となる。
正規表現の説明を参照
0258デフォルトの名無しさん垢版2016/06/22(水) 20:38:53.55ID:q7cmPaAS
質問者は本当にやりたいことを隠して質問してるからもうどおでもいいけど
なぜ  perl -p -e 's/(..)/$1 /g;' でうまくいっちゃうんだろうね。

ぱっと見だと
001500 -> 00 01 15 50 00
になってもおかしくないのになと思った。
0259デフォルトの名無しさん垢版2016/06/22(水) 21:11:10.25ID:NJ9t5GVO
>>249->>258 皆さまスレ汚してすみませんでした。
Perlは使うばかりで、プログラミングはど素人です。
(..)は顔文字だと思っていました・・・お恥ずかしい

○○○@H170M-PLUS ~
$ perl -p -e 's/(..)/$1 /g;'
123456
12 34 56

あ〜スッキリした。
有難うございました。
0260デフォルトの名無しさん垢版2016/06/22(水) 22:35:11.08ID:jdKVcriH
>>258
1234なら、12 23 34 にはならない

.. は2文字に一致するから、12に一致する。
すると次は、3からスタートするから、34に一致する

つまり、一致した次の文字から、スタートする
0261デフォルトの名無しさん垢版2016/06/22(水) 23:26:29.09ID:q7cmPaAS
なるほろー。
最初はこんな感じが頭にうかんだけど冗長だね。ワンライナー3級ですな。
perl -ne 'for( $i = 0; $i < length() ; $i += 2 ){ print substr($_,$i,2)" " }'
0263259垢版2016/06/23(木) 10:28:45.02ID:mgh0+o+/
>>262 _(_^_)_ m(_ _)m
0264デフォルトの名無しさん垢版2016/06/23(木) 14:28:28.61ID:Fa0lhzij
>>243
もう見てないと思うけど、一応書いとくよ。君はまず、
Perl readdir Windows
でググってみるべきだった。
0265デフォルトの名無しさん垢版2016/06/28(火) 23:22:27.94ID:sQcX3Fgh
複数の文字列フィルタ (grep や s) を連続で通す書き方って、どうだったっけ?
ある文字列を
 ・grep でフィルタ → grep で再度フィルタ → s で置換 → split で分割 → 先頭要素だけスカラー変数に格納
これをスマートに(可能ならば1行で)やりたい。
0266デフォルトの名無しさん垢版2016/06/28(火) 23:31:42.78ID:IoEHfO5D
@result = map {(split //)[0]} map {s//;$_} grep {} grep {} @strings;
こんな雰囲気でええんでないかい?
0268デフォルトの名無しさん垢版2016/07/02(土) 14:22:47.36ID:UtcihNE2
基本的に日本語で書いたときの逆順に記述するだけなんだけどね
マニュアル読んで分からなければたぶん無理だろう
0270デフォルトの名無しさん垢版2016/07/04(月) 00:55:08.84ID:xC//1vCA
id="011"<width>1</width>

この文字列から011だけ正規表現で抜き出す方法教えてください
idの数値だけを抜き出したい
0272デフォルトの名無しさん垢版2016/07/04(月) 01:08:21.29ID:xC//1vCA
>>271
ありますが、かなり長いxmlなので必要だと思った部分だけ抜き出しました
もう少し抜き出してみるとこんな感じです

source="http://hogehoge.xml"; />
<name="foo" id="0110"

このような文字列が大量にあってそのなかからidの数値だけが欲しいです
0274デフォルトの名無しさん垢版2016/07/04(月) 22:53:37.85ID:0oVcG5wM
HTMLパーサーを使うのが一番簡単で正確
コメントの中にHTMLがあったらどうするんだ?

つーか正規表現を乱用するな。
0276デフォルトの名無しさん垢版2016/07/05(火) 17:36:47.05ID:QGn+r4HY
>>270 だとタグの外にあるように見えるのに >>272 ではタグの中になってる。
だから静観してたけど、結局どっちなの?
0277デフォルトの名無しさん垢版2016/07/05(火) 17:48:38.40ID:gL12vNid
なんか最初のだと後に<width>のある特定のidの値が欲しいのかな?って思ってたけど
そうでもなくて全部のidの値でいいんだってのが>>273でわかったんで拍子抜けしたところ
0279初心者です垢版2016/07/09(土) 07:48:40.33ID:g+Tip2fR
宜しくお願いします。

$ua->cookie_jar(HTTP::Cookies->new(file => "cookie.txt",autosave => 1));
でcookie.txtにクッキーを取得できるのは分かりますが
削除したい場合にはどのようなコードを書くんでしょうか?
0280デフォルトの名無しさん垢版2016/07/09(土) 16:55:14.14ID:ce8+Vk05
そういえばいつもお世話になってるのに知らないな……と思ってマニュアルを読んでみた。
どうやら clear を使うらしいな。まずは scan で中身を見てみるのが良さそうだ。
これ以上は説明のしようがない。自分で頑張ってほしい。
0281デフォルトの名無しさん垢版2016/07/09(土) 21:07:47.73ID:g+Tip2fR
ウィッス
0282デフォルトの名無しさん垢版2016/07/11(月) 17:00:44.97ID:ELH2iWp3
マルチプロセス処理の Parallel::Prefork は、
Windows の StrawberryPerl か ActivePerl に、インストール可能ですか?
http://pass.cpantesters.org/distro/P/Parallel-Prefork.html

Strawberry、Active、旧バージョン、32bit、64bitなど色々試したけど、
>Can't locate Parallel/Prefork.pm in @INC (you may need to install the Parallel::
>Prefork module) (@INC contains: C:/...
0284デフォルトの名無しさん垢版2016/07/14(木) 20:00:42.23ID:GgJblQeZ
突然文字が正しく表示できなくなるゴミPerl
人をイラつかせるために作られた言語だなこれ
存在価値がないどころか存在事態が害悪
早く消滅すればいいのに
0285デフォルトの名無しさん垢版2016/07/14(木) 20:06:36.90ID:GgJblQeZ
マジで使い物にならない
「ゴミPerlで文字がいきなり変になる対処」
「産廃Perlの文字取り扱いがおかしいのをなんとかする方法」
「糞Perlが文字をまともに扱えないことへの特効薬」
もう数時間検索してるが解決案が出てこない
こんなに酷い言語はPerlくらい
0286デフォルトの名無しさん垢版2016/07/14(木) 20:15:06.51ID:GgJblQeZ
Perlは本物のゴミ
文字すらまともに表示できないとか利用価値なし
0287デフォルトの名無しさん垢版2016/07/14(木) 20:25:10.95ID:GgJblQeZ
Perlのゴミなところ

文字「あ」すら表示すらできないためとてつもなくイライラする
0288デフォルトの名無しさん垢版2016/07/14(木) 20:28:38.21ID:GgJblQeZ
明日納品なのに解決する兆しなし
こういうときは一から書き直すことも多いが何千行もあるシステムを明日までに書き上げられるわけもない
本当にPerlはゴミすぎる
0289デフォルトの名無しさん垢版2016/07/14(木) 23:24:13.01ID:RqQ+21r9
だからバイナリで扱えと口が酸っぱくなるほど言ってきたわけで聞き入れないお前が悪い。
0291デフォルトの名無しさん垢版2016/07/15(金) 08:34:29.93ID:XWIPLqFW
テンプレの>>5 を誰かが勝手に変えたからだ。
元々はこうなっていた。
http://pc12.2ch.net/test/read.cgi/tech/1234181856/4
------------------------------------------------------------
# [Perl 日本語処理の基礎の基礎]
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフト JIS 形式のファイルまたは DOS 窓を想定しています。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO =>
0293デフォルトの名無しさん垢版2016/07/15(金) 09:08:17.43ID:ATzxunsm
とりあえず Data::Dumper と PerlIO::get_layers を使えば助けを求めるのに役立つと思うが
責任転嫁しかできないゴミに言ってもなぁ……
0294デフォルトの名無しさん垢版2016/07/15(金) 12:22:26.70ID:XWIPLqFW
>>285 それからな、
> ゴミPerl
> 産廃Perl
> 糞Perl
どれも、なかなかいいところを突いているが、ちょっと外れているな。
正解は「ガラクタ」だ。

Perl とは「pathologically eclectic rubbish lister」
(病的折衷主義のガラクタ出力装置)の 略なのだ。
0296デフォルトの名無しさん垢版2016/07/17(日) 01:45:28.71ID:T2eP0LKz
内部エンコードはperl独特だよね。
扱えれば入力と出力がどんなエンコードだろうが無双出来るけど
0297デフォルトの名無しさん垢版2016/07/17(日) 09:40:41.84ID:kAN9hSRv
>>294
「Perl を愛する人にとっては」と前置きするのを忘れてるぞ。
0298デフォルトの名無しさん垢版2016/07/17(日) 13:59:57.99ID:D/SlpqZf
まぁperlなんて使い物にならないでしょ

use utf8;付けたらそれまで文字化けしなかったUTF8の文字列が文字化けしたし
0300デフォルトの名無しさん垢版2016/07/17(日) 16:24:12.49ID:Cv1W2kE4
ではperlじゃないならなにがいいのかな。python?
rubyはパイプ記号が変なところで出てくるからちょっと違和感有り。
0302デフォルトの名無しさん垢版2016/07/17(日) 17:57:53.58ID:F+fhoGjl
賭けてもいいが、文字コードが分からないのをPerlのせいにしてるやつが、
自分で1からプログラミングしたら壊滅的な状況になると思う。
0304デフォルトの名無しさん垢版2016/07/18(月) 03:14:08.10ID:GZVIgCur
>賭けてもいいが、文字コードが分からないのをPerlのせいにしてるやつが、
>自分で1からプログラミングしたら壊滅的な状況になると思う。

意味不明な言動をする気違い。

「賭けてもいいが、腹が痛くなるのを残飯のせいにしてるやつが、
自分で1から料理したら壊滅的な状況になると思う。」

と言ってるのと同等で意味不明。
気違い。
0305デフォルトの名無しさん垢版2016/07/18(月) 07:46:08.11ID:C0GpTohk
自分で料理出来るのであれば、残飯なんて最初から食べないよ…
残飯を食べるという事は、食べざろうえない理由があっての事だろうに…
0307デフォルトの名無しさん垢版2016/07/18(月) 14:09:08.76ID:UhcVRSnP
高級料理も残せば残飯になるのさ。
最後の姿を見ただけで、本来の姿を判断するのは
無能というもの。
0308デフォルトの名無しさん垢版2016/07/19(火) 09:36:50.47ID:BbD/ZGSl
文字コードが分からないのをPerlのせいにしてるのは馬鹿の上限を突破してるが、
腹痛を残飯のせいにするのは間違ってないだろう。食ったと言う意味では馬鹿だが
0309デフォルトの名無しさん垢版2016/07/19(火) 14:33:33.84ID:kU2ISgr0
どんなに文字コードを理解している人間でも文字をまともに扱えないピログラム言語の前では無力
その程度のことも分からないのかはたまたPerlがまともな言語だと錯覚しているのか
もし錯覚しているならば自分の使っている言語についてほとんど何も知らないということになる
まずはその自覚をすべきである
0314デフォルトの名無しさん垢版2016/07/20(水) 20:04:27.70ID:y5BMpkOv
PHPってHTML言語じゃないの?比較の対象にもならないと思うんだが。
rubyに負けてるというならまだわかるけど。
0316デフォルトの名無しさん垢版2016/07/20(水) 23:37:17.38ID:E+SEwayU
>>314
HTML言語ってなんやw
HTMLに埋め込めるってだけでごく普通の
プログラム言語だぞ。

どれくらい普通かというと以下の機能が搭載されてる
・クラス
・インターフェース
・トレイト
・ラムダ
・クロージャー
・名前空間
・例外
・ジェネレーター
・ガベージコレクション

あと言語機能じゃないが、CLIプログラムの作成や
ウェブフレームワークなどもある。
0317デフォルトの名無しさん垢版2016/07/20(水) 23:43:45.09ID:lrew/2ZZ
>PHPってHTML言語
Perl厨は他の言語をロクに知りもしないで
敬遠してるんだろうな。
だからPerl厨はいつまで経っても
エンジニアとして半人前なのだろう。
0318デフォルトの名無しさん垢版2016/07/20(水) 23:47:10.52ID:E5afqhTD
309ではないがC言語。もちろんPerlもだ。
ついでなんで
s/ピログラム言語/プログラム言語/;
0319デフォルトの名無しさん垢版2016/07/20(水) 23:55:15.99ID:gGnx4FL9
Cって純粋なC?
ご冗談を。
あれは何も文字を扱ってないよ。
自分で作って下さい、ってね。
0320デフォルトの名無しさん垢版2016/07/20(水) 23:58:27.03ID:gGnx4FL9
>>316
だからなに?
その機能'(笑)はわざわざ書かなくてはならないことなの?
だから文字の扱いに対してもおかしな考えを持つんだね。
文字を扱うのは言語の機能(笑)が大事なんだってね。

基本プログラムが出来ない人はスクリプトが持つ機能とやらに注目したがる。
自分でプログラミングできないからね。
0321デフォルトの名無しさん垢版2016/07/21(木) 00:13:43.65ID:qEfVH42B
普通のunix処理系にperlは入ってるけどPHPは入ってないでしょ。
Webプログラミングなんてどうでもいい。システムプログラミングとか
テキストマイニングしたいんだって動機から入るとぱっと見PHPは目に入らないよ。
紹介がWeb用ですなんだし。
幼児的に誹謗中傷しないで諭すコミュ力をつけたほうが。。
0322デフォルトの名無しさん垢版2016/07/21(木) 01:02:15.71ID:eeWcI0WT
PerlとPHPを比較するって事自体、CGIの定番としてPerlが使われはじめた15〜20年ぐらい前の話だから
0323デフォルトの名無しさん垢版2016/07/21(木) 02:09:41.10ID:vaQfL518
>>320
> その機能'(笑)はわざわざ書かなくてはならないことなの?

わざわざ書かないとわからないでしょ?w

これ以外に何が必要なんだい?
言ってみ。
0326デフォルトの名無しさん垢版2016/07/21(木) 10:12:11.24ID:wN4yZ2B5
普通のunix処理系wwww
普通てwwwwwwwwwww
こんな曖昧でいい加減な単語を使って反論になると思ってんのかwww

こんな客観的数値も示せない思い込みが根拠になるなら
普通の人間はPerlなんざ使わねーよwwwwwwwww
普通の人間はなwwwwwwwwwwwwwwwwwwwwwww
0327デフォルトの名無しさん垢版2016/07/21(木) 14:22:48.08ID:+jQ9eKqj
perl-5.24.0.tar.gz 開いて見てみたけど
ソースはC言語で書かれているんだよね

作った人は「自分で作って下さい」を実行したんだろうね
0329デフォルトの名無しさん垢版2016/07/22(金) 02:53:58.61ID:jSbimIDf
>>316
post/getがよしなにスーパーグローバル変数(笑)に入ったり
何もしなくてもエラーがブラウザで見られたり(言語がhttpプロトコルを理解できてる?)
iniファイルで挙動が変わったり
ごく普通のプログラム言語からはかけ離れてるだろ
Javascriptの方がよっぽど普通なんだけどなぁ
0330デフォルトの名無しさん垢版2016/07/22(金) 03:14:36.53ID:7iYsigKa
> post/getがよしなにスーパーグローバル変数(笑)に入ったり
それは10年以上前の話だよw
知識止まってんなぁ。
0331デフォルトの名無しさん垢版2016/07/22(金) 03:31:19.54ID:jSbimIDf
>>330
お前の使ってるナウ(笑)なPHPはquerystringに値いれてもvar_dump($_GET)するとnullなの?
言語って10年経とうが根本的な部分はそうそう変わんないだぜ
0333デフォルトの名無しさん垢版2016/07/22(金) 09:01:23.54ID:jSbimIDf
>>332
それはCGIとかがquerystringを環境変数へセットしてるだけであって(postは標準入力)
環境変数や標準入力、argsを読む機構はperlに限らずどの言語で備えてるでしょ。
デリミタも指定せずname[]のようなオレオレ仕様で勝手に解釈して予め変数に入れるのを
言語のレイヤーで行うのはphpぐらいしか思いつかない。
0336デフォルトの名無しさん垢版2016/07/22(金) 13:21:21.28ID:9lWfzFCE
いきなりなんの前触れもなかったし、何言ってんだ?と思ったら、PHPのdisりかよ。
知らんがな…
0338デフォルトの名無しさん垢版2016/07/22(金) 14:50:50.79ID:jisYPSD0
言い訳が苦しくなってくると、最後に「だけ」を付加するPerl厨
窃盗犯が「ちょっと借りただけだろ」と言い訳するのと同じ
犯罪者と同じ思考パターンを有するPerl厨

ちなみに犯罪者と同じ思考パターンを持つヴァカがPerlを選ぶのか
Perlを使ってるうちに犯罪者と同じ思考パターンを持つようになるのかは不明

どちらにせよPerl厨はヴァカで犯罪者予備軍ということに変わりはない
まともな人間はPHPを選ぶ
0341デフォルトの名無しさん垢版2016/07/22(金) 23:38:00.41ID:SRU6z2ZT
はいはい。犯罪者予備軍ね。NGにしときますわ。
やりたいことやりたい人は処理系にこだわりはないのにアホか。
コード書けない中学生がVBよりVCと言ってるのと変わらんわ。
0342デフォルトの名無しさん垢版2016/07/23(土) 01:01:50.42ID:tWjtYIW6
>>340
逆だろ?

PHPが他の言語と一緒だということを証明するために
他の言語でもあるような機能を言う。
PHPは他の言語と同じであることを示すことが、正しい論破の仕方だ。

PHPは「他の言語+αの機能」であるという事実に対して
それと同じものを出すことで、何を論破することになるのか?
0343デフォルトの名無しさん垢版2016/07/23(土) 02:01:49.49ID:bOUqJlZz
そろそろ邪魔くさくなったから消えてほしい
劣等感のかたまりは迷惑関係なく必死で長所をアピールしはじめるってね
適切なスレでやってくれんかね
0344デフォルトの名無しさん垢版2016/07/23(土) 02:30:45.09ID:Z+5onCph
嫌なら見なければいいのに
他人にあっちいけとか指示する池沼っているよな。
自己中心的な池沼のお手本。
0345デフォルトの名無しさん垢版2016/07/23(土) 08:35:47.91ID:rC+TU0A1
他プロセスでファイルをopenしているときにそのファイルをrenameしようとすると
renameできないみたいだけどうまくrenameする方法は?
0347デフォルトの名無しさん垢版2016/07/23(土) 11:14:44.62ID:rC+TU0A1
>>346
それだとopenとcloseする間にrenameが割り込むとだめ

そこで自分で方法を考えました
まずディレクトリにaccess_kinshi.datというファイルを作ります
このファイルが存在している間は他プロセスでこのディレクトリにあるファイルは全てアクセスできないものとする
そしてディレクトリ内にあるファイルを全てrenameする
そのあとaccess_kinshi.datファイルを削除すればいいということです
0349デフォルトの名無しさん垢版2016/07/23(土) 15:21:23.54ID:bOUqJlZz
他のプロセスってなに?
どっちもPerlで自分の作った物なら、ファイルロックでも使うと良い。
自動待機してくれる
0350デフォルトの名無しさん垢版2016/07/23(土) 19:27:38.24ID:IQFGkMCr
後方参照で教えていただきたいことがあります。
A 80 90
(空白の部分はタブかスペース)
と書いてあるファイルの80とか90の部分を書き換えたいのです。
perl -pe 's/^([A-Z])(\s+)([0-9]{2})(\s+)([0-9]{2})/$1$2$3$4$5/' file で
マッチした部分を参照できるのはわかっているのですが、この場合$3の「80」を「1」にするには
どのような方法をとればよいでしょうか?
perl -pe 's/^([A-Z])(\s+)([0-9]{2})(\s+)([0-9]{2})/$1$21$4$5/' file とすると
$21と解釈されるようで結果がA 90となってしまいます。
0353デフォルトの名無しさん垢版2016/07/23(土) 20:22:22.12ID:rC+TU0A1
>>349
他プロセスとは同じプログラムを複数で同時実行したやつです
それとファイルロックだとディレクトリにあるファイル1つ1つにロックしなきゃならないので
ディレクトリにあるファイル全てにアクセス禁止するために
アクセス禁止用ファイルを作りました
0355デフォルトの名無しさん垢版2016/07/23(土) 20:41:29.11ID:KzTkH9Ph
自分で考えているというのは大変良いことだと思うけど、聞きたいことがあるなら
環境くらいは書いてくれないと……
それに、使用中のファイルを rename することの何が問題なのかさっぱり解らない。
まず、何をするプログラムなのかを書いた方がいいと思うよ。
0356デフォルトの名無しさん垢版2016/07/23(土) 22:25:30.57ID:rC+TU0A1
a
0357デフォルトの名無しさん垢版2016/07/23(土) 22:36:22.09ID:rC+TU0A1
なんか書き込こもうとするとエラーが出て書き込めないわ
0358デフォルトの名無しさん垢版2016/07/23(土) 22:48:53.55ID:rC+TU0A1
ようするに
てすと1シージーアイ
OPEN(IN、”あああ.DAT”);
すりーぷ(5);
cLOSE(IN);


てすと2シージーアイ
リネーム(”あああ.DAT”、”AAA。DAT”);
これを同時実行してもリネームはできなかったってこと
0359デフォルトの名無しさん垢版2016/07/23(土) 22:51:17.71ID:rC+TU0A1
同時実行って言ったけど先にてすと1の方を起動して5秒以内にてすと2を起動です
0360デフォルトの名無しさん垢版2016/07/23(土) 23:18:44.54ID:eYAwBGPh
他のプロセスが開いているファイルを、更新できるわけないだろ

2つのプロセスで、ファイル共有できるのは、read & read、の組み合わせだけ。
read & write, write & read, write & write は、共有できない
0361デフォルトの名無しさん垢版2016/07/23(土) 23:40:01.25ID:sc8oJJPG
>他のプロセスが開いているファイルを、更新できるわけないだろ

何を前提に話してんだ?
更新出来るから、ファイルロックなぞの方法が開発されたんじゃねーの?
$ for i in 1 2 3 4 5 ; do
> perl -le 'open my $f, q{>>}, q{foo.txt} ; print $f q{foo} ; sleep 2' &
> done
$ cat foo.txt
foo
foo
foo
foo
foo
0363デフォルトの名無しさん垢版2016/07/23(土) 23:55:37.22ID:sc8oJJPG
>>362
ん?
(デフォの状態では)更新出来るから、
(更新出来ないようにするための)ファイルロックなぞの方法が開発されたんじゃねーの?

ってレスだったんだが、、、
0364デフォルトの名無しさん垢版2016/07/24(日) 00:40:44.17ID:9mJaMPLw
更新できるのは、同一プロセス内のマルチスレッドだろ

だから、マルチスレッド・プログラミングは難しい
0365デフォルトの名無しさん垢版2016/07/24(日) 01:05:08.31ID:IyAH6Xir
ファイイルロックのモードは2より5のノンブロッキングの方が軽いですか?
0366デフォルトの名無しさん垢版2016/07/24(日) 01:16:29.25ID:p8SJSbCV
>>365
軽いかどうかで決めるんじゃない。
それが必要かどうかで考えろ。

ホント頭が悪いやつは、軽いかどうかの基準しか
持ち合わせてないんだよな。
0367デフォルトの名無しさん垢版2016/07/24(日) 02:10:22.95ID:8SIezcUV
上の2行は頭いいように見えたが
下の2行でホントに頭が悪い人だと思った。
誹謗癖はやめようね。嫌われるよ。というかすでに嫌われてると思うけど。
0369デフォルトの名無しさん垢版2016/07/24(日) 03:52:51.83ID:9mJaMPLw
ノンブロッキングは、Node.js などが並行処理で、リクエストを受け付ける場合に使う。
こういうのは、プロ中のプロが使うもので、プログラムも順序通りには進まないから、
プログラミングが極めて難しい(イベントドリブン)

初心者は、ブロッキングを使え。
プログラムは一本道で、順序通りに進む
0371355垢版2016/07/24(日) 10:28:35.84ID:K5Ja97DP
>>358
少なくとも Linux では問題なく rename できるよ。
rename できないというのはシステムコールのマニュアルに書いてあるの?
テストのやり方に問題は無かったの? こんなふうに同期させた方がいいと思うんだけど。

https://ideone.com/639PgP
0372デフォルトの名無しさん垢版2016/07/24(日) 22:44:38.60ID:IyAH6Xir
このようにflockをネストするのは問題ありますか?

open(IN, "< $datafile");
flock(IN, 1);

open(IN2, "< $datafile2");
flock(IN2, 1);
close(IN2);

close(IN);
0373デフォルトの名無しさん垢版2016/07/25(月) 18:20:04.46ID:tVy4ghQr
>>371
windows環境だけどopen中のファイルのrenameはできなかった

例えばtestディレクトリがあって、プロセスAでtestディレクトリにあるファイルのrenameやファイルの作成、
プロセスBでtestディレクトリを削除するとした場合
testディレクトリにファイルが残っているとrmdirが成功しないのでtestディレクトリを削除できない
unlinkでtestディレクトリのファイルを全て削除してからtestディレクトリを削除しようとしても
その間にプロセスAでファイルが作成された場合ディレクトリを削除できない
だからディレクトリそのものをロックしたいっていうこと
0375デフォルトの名無しさん垢版2016/07/26(火) 13:18:10.17ID:0CGOQrnU
>>373
そういうことを先に書いてくれないと……
そうか、Windows ではできないのか……
プロセスAの処理が終わるまでプロセスBを待たせておきたいということなら
普通に mkdir でどうでしょう。可搬性も高い排他制御の定番です。
0377デフォルトの名無しさん垢版2016/07/26(火) 18:01:31.91ID:0CGOQrnU
何が目的でそのための何をしている状況なのかというのがいまだに理解できないんだけど、
そもそもそんな状況にしないやり方を考えた方がいいのかもしれない。
どうしても排他制御が必要なら例えばデータベースを使うというのは Windows でも出きると思う。
Windows のことは知らないからこれ以上はお役に立てそうに無い。
0378デフォルトの名無しさん垢版2016/07/27(水) 02:23:44.17ID:8IadtePG
簡単に言うとディレクトリをmkdirで削除したいけど
削除しようとしている間にディレクトリ内にファイルを作られるとmkdirできなくて削除できないので
ディレクトリ内にファイル作成もディレクトリ内のファイル読み込みも禁止にしたかったってこと
0379デフォルトの名無しさん垢版2016/07/27(水) 02:26:13.90ID:8IadtePG
mkdirじゃなくてrmdirだ
0380デフォルトの名無しさん垢版2016/07/27(水) 08:10:16.74ID:yPkdt5ig
任意のプロセスがアクセスできるディレクトリを削除したいという要求自体が間違っている
0381デフォルトの名無しさん垢版2016/07/27(水) 08:32:01.24ID:8IadtePG
>>380
bbsディレクトリの中に各掲示板ごとのディレクトリがあって、さらにその中にログファイルや掲示板設定ファイルがある
削除したい掲示板は各掲示板のディレクトリごとに削除するしかないのでどうしても任意のプロセスがアクセスできる
ディレクトリを削除するしかない

test1掲示板の場合
ファイルはbbs/test1/logfile.datとbbs/test1/settei.datがあって
掲示板を削除する場合はまずこの2つのファイルを削除してtest1ディレクトリを削除するということです
0382デフォルトの名無しさん垢版2016/07/27(水) 09:49:12.77ID:uNHlpX2c
その掲示板とやらのディレクトリは本当に、自分のプロセスだけでなく任意のプロセスからもアクセスできるのか?

であれば、ディレクトリのパーミッションが間違っている。自分のプロセス以外のアクセスを禁止せよ。

自分のプロセスしかアクセスできない前提であれば、好きなように自分で排他制御を行えばよい。例えば>>375のように。
0383デフォルトの名無しさん垢版2016/07/27(水) 15:57:37.43ID:8IadtePG
>>382
普通の掲示板やで
普通掲示板は誰でも観覧と書き込みができるので任意のプロセスからでも読み書きできる
それとディレクトリの削除はブラウザからperlで書いたcgiを起動して削除するので
パーミッションでのオーナーとかの判別はできないんや
0384デフォルトの名無しさん垢版2016/07/27(水) 16:17:33.22ID:uNHlpX2c
掲示板のcgiが動いてるプロセスは掲示板を閲覧しているユーザとは関係なかろうが。
これ以上はperlの話ではなく、そのcgi固有の話だ。
ここでやる話ではない。
0385デフォルトの名無しさん垢版2016/07/29(金) 21:21:45.34ID:kdSSWeOo
my(@aaa);
@aaa = sort {$b <=> $a} @aaa;

このとき$a,$bをmy($a,$b)やlocal($a,$b);と宣言するとエラーになります
$a,$bはどのように宣言すればいいんですか?
0387デフォルトの名無しさん垢版2016/07/30(土) 00:48:59.27ID:pBzYHnSl
>>378
他のプロセスに使われる前にディレクトリ名をランダムな名前に変更
するとよい。変更後に rmdir する。
0388デフォルトの名無しさん垢版2016/07/30(土) 08:47:55.59ID:k05zeajW
1:投稿ファイルをロックして書き込み
2:投稿数ファイルをロックして書き込み

1の排他ロックが成功して2の排他ロックが失敗してタイムアウトになり書き込みできなかった場合
投稿数が実際の投稿より少なくなりが整合性がとれなくなる
この場合下記のようにまとめてロックするのが普通?

まとめ排他ロック
1の処理
2の処理
ロック解除
0389デフォルトの名無しさん垢版2016/07/30(土) 09:56:42.41ID:0Jkia02i
>>388
そういう場合はまとめた単位でロックを取ることが多い
あるいはロールバックできるようにするしかないけど、それはたいてい難しい
0390デフォルトの名無しさん垢版2016/07/31(日) 09:21:12.12ID:9W15s1XM
1:投稿ファイルをロック
2:投稿数ファイルをロック
3:投稿ファイルを書き込み
4:投稿数ファイルを書き込み
5:投稿ファイルをアンロック
6:投稿数ファイルをアンロック
0391デフォルトの名無しさん垢版2016/07/31(日) 14:54:33.71ID:V3GimjB6
PostgreSQLのTIMESTAMP形式の文字列を秒数(Perlのtime関数で取得したような状態)に直す関数教えて
0393デフォルトの名無しさん垢版2016/08/05(金) 00:01:27.27ID:RLQt/Rjs
>>390
それだとロックの間に隙間ができる
0394デフォルトの名無しさん垢版2016/08/05(金) 00:02:57.68ID:RLQt/Rjs
実行時間が0.15秒から0.2秒のperlスクリプトは重い部類ですか?
0395デフォルトの名無しさん垢版2016/08/05(金) 00:22:53.93ID:/+BaQz+x
>>390
データとは別にロック中か識別するためだけのロックファイルまたはディレクトリを用意するものなんじゃないの?>>389のように
0396デフォルトの名無しさん垢版2016/08/05(金) 09:40:54.31ID:rvcc+G4N
1:投稿数ファイルをロック
2:投稿数ファイルを書き込み
3:投稿数ファイルをアンロック
4:投稿ファイルをロック
5:投稿ファイルを書き込み
6:投稿ファイルをアンロック

じゃだめなのかな。
0397デフォルトの名無しさん垢版2016/08/05(金) 09:49:56.50ID:iMQ1FKDS
それ投稿数と投稿が連動してないやん

ロック
必要な書き込み全部
ロック解除

が普通
0398デフォルトの名無しさん垢版2016/08/05(金) 17:58:59.50ID:rvcc+G4N
それは「普通」というより「手抜き」だね。最初はそれでいいと思うけど。
0402デフォルトの名無しさん垢版2016/08/06(土) 07:58:04.15ID:nmoqGXlF
(書き込み時)

1:まとめロックようファイルを作る
2:まとめロック用ファイルを排他ロックする
3:投稿ファイルにを投稿を書き込む
4:投稿数ファイルに投稿数を書き込む
5:まとめロックの解除

(観覧時)
1:まとめロック用ファイルを共有ロックする
2:投稿ファイルを読み込んで表示する
3;投稿数ファイルを読み込んで表示する
4:まとめロックを解除

これが正しい
0404デフォルトの名無しさん垢版2016/08/09(火) 02:52:34.66ID:d2ilw35z
なんのため?
プロセス間の整合を取るのにプロセス内の順序は全く意味ない数字と思うけど。
うーん、なんのためだろ?教えてくれないかな?
0405デフォルトの名無しさん垢版2016/08/09(火) 22:13:03.27ID:zWs+JfAu
> プロセス内の順序は全く意味ない数字と思うけど。

え? 順番を入れ替えても同じなると思ってるの?
例えば5 → 1 → 4 → 3 → 2 → 6 の順番で
実行しても同じ結果になると?

ロックの話以前に、あんたが何が言いたいのかわからない
0406デフォルトの名無しさん垢版2016/08/09(火) 23:09:59.97ID:d2ilw35z
んでなんのため?

あと関係ない話しかしてないようだけど、同じになるって情報はどこから?
そしてその話になんの意味があると思い込んでますか?
0408デフォルトの名無しさん垢版2016/08/09(火) 23:38:43.66ID:zWs+JfAu
>>390が書いてあることは正しくて、
この順番通りの処理をすると不整合が起きない。

重要なのは書き込みを行う前に書き込むファイルすべてを
ロックするということ。最初にまとめて行う。

こうすることでロックの間に処理が割り込まれず
正しく書き込むことができる。
0409デフォルトの名無しさん垢版2016/08/09(火) 23:45:04.85ID:d2ilw35z
ここまで正しい回答が何度も出てるのに、そのあとから間違った回答を自身満々にするのもすごいと思う
ロックは常にプロセス間の整合のみ取るべし
0410デフォルトの名無しさん垢版2016/08/09(火) 23:54:26.10ID:d2ilw35z
ごめん。外部仕様としてはこの場合正しかった。
内部的にはやってはいけないお手本のような無意味なロックがされてて、それで勘違いした。すまんかった。
0412デフォルトの名無しさん垢版2016/08/13(土) 09:19:35.74ID:Y2Ng1HRN
確かにロックはプロセス間通信の一種で使う技術も同じか
こうゆうのはスクリプトをプログラムと思ってる人と、プログラムの基礎的な部分から学んだ人とでは差が出そうだね
0413デフォルトの名無しさん垢版2016/08/22(月) 20:05:32.69ID:2GCPiaHi
windows7で文字化けファイル名を取得するとショートファイルで得られるようですが、
ロングファイルのビットの並びをそのまま得たいです。
指定して得るにはどうすれば良いでしょうか?

ちなみにDOSなどでのコマンドは知っています。
0419デフォルトの名無しさん垢版2016/08/24(水) 08:59:06.43ID:hHpNATWD
すまん、回答してるつもりだろうけど、頭悪い人に用はないんだ。
わざわざ何度も書いてる様だが、一番最初に(も)言った通りコマンド使うやりかたはできるから。

あと全レス会話の繋がりもなく、堂々と好き勝手なこと書く人間もしんどい。
0420デフォルトの名無しさん垢版2016/08/24(水) 20:30:09.76ID:fxHMMLTZ
いや、君の記述能力が頭悪いんだよ。
流行の言葉で言うとコミュ力やプレゼン力がない。
コマンド知ってますなんて言い方じゃ伝わらない。
少しは自分の不徳を省みたらどうか。
0423デフォルトの名無しさん垢版2016/08/24(水) 23:20:14.12ID:hHpNATWD
>>422
すまないがそれでは得られる文字は同じで、文字化け文字にはショートが適用されます。
おそらくwindowsに対するアプローチを変えないとだめだと思うのです。

>>421
いけたよありがとう。
API叩いてやりくりしてたけど、暫定的にそれを使わせてもらうよありがとう。
windowsは外部的にもさっさとunicode使ってほしいと思う。


>>420
その無駄な4行必要か?なんか書きたいなら頑張って回答書けば?(俺としては書かないで頂きたいけどな)
0424デフォルトの名無しさん垢版2016/08/24(水) 23:31:21.73ID:jqqoh+mK
まあとにかく特殊な環境なんだね。もう少し前提条件を書いたほうが早く欲しい回答を得られたと思うよ。
>>413の書き方じゃ>>420に文句を言う筋合いはないよ。
0427デフォルトの名無しさん垢版2016/08/29(月) 21:40:22.45ID:x3G6j3++
なぜ化けるのか、と言う話だ
CP932とunicodeが混在してる場合はどうすりゃいいですかって話じゃね
0428デフォルトの名無しさん垢版2016/09/01(木) 19:27:50.30ID:vCLh7LOG
ココ参考にして ttp://hirobanex.net/article/2015/03/1425807814
こういう呼び出ししても
$teng->sql_builder->load_plugin('InsertOnDuplicate');
$teng->sql_builder->insert_on_duplicate(略)

Can't locate object method "insert_on_duplicate" via package "Teng::QueryBuilder"
で呼べないんだけどどうしたらいい?
0432デフォルトの名無しさん垢版2016/09/03(土) 20:53:36.76ID:pSsdJ5JF
マジレスするなら、
別の方法で呼べるか試してみる
何が起こっているのか調べてみる
ってところか。
0434デフォルトの名無しさん垢版2016/09/09(金) 13:05:29.57ID:JRjUoSNq
はっきりしてるのはhirobanexのとおりに書いてもエラーで動かない事
それも $teng->->execute なんていうタイポレベルの話じゃなく
根本的にどこか間違ってるけど、どこだかわからんということ

$teng->sql_builder ってSQL::Makerを継承した状態でnewされてるんじゃないの?
Teng::QueryBuilder = SQL::Maker だから
これで動くんじゃないの?
$teng->sql_builder->load_plugin('InsertOnDuplicate');
$teng->sql_builder->insert_on_duplicate(略)
0436デフォルトの名無しさん垢版2016/09/09(金) 16:58:05.37ID:yxgmGddx
$teng->sql_builderでTeng::QueryBuilderのオブジェクトが帰ってくる
これはほぼSQL::Makerを継承しただけなのでSQL::Maker::load_pluginを読むとどうやらクラスメソッドとして書かれている
実際SQL::MakerのPODにも継承したクラスでクラスメソッドとして呼び出す例が書かれている

つまり $teng->sql_builder->load_plugin('foo') という書き方はオブジェクトから呼び出してるので間違い(おそらくTeng::QueryBuilder=HASH(0x000000)みたいなところに生えてる)
Teng::QueryBuilder->load_plugin('foo') とするか ref($teng->sql_builder)->load_plugin('foo') とするか
もしくはブログの例にもある通り独自のQueryBuilderクラスを用意するか

>>429
この__PACKAGE__はどこに書いたんや?__PACKAGE__の意味わかってる?
0437デフォルトの名無しさん垢版2016/09/09(金) 17:40:55.04ID:iPoh5J1m
もう、馬鹿過ぎて哀れだ。実際にやりたいことは

*SQL::Maker::insert_on_duplicate = \&SQL::Maker::Plugin::InsertOnDuplicate::insert_on_duplicate;

ってことでしょ? もうこれでいいでしょ。POD すら読まないんじゃ助けようがないよ。
0438437垢版2016/09/10(土) 11:47:34.76ID:VYsCJTGt
ごめん、言い過ぎた。とりあえず、正解が分らない段階で俺ならどうするかを書くよ。

まず、何をしているのかを POD で確認する。
POD では load_plugin についてはクラスメソッドとして使う例だけが書かれている。
ここで「おかしい」と思わなければならない。
オブジェクトメソッドとして使えないとは書かれていないのでソースコードを読む。
%INC を見ればソースコードの場所は分かる。
load_plugin は予想以上にシンプルだった。これで解決。

解決しなかった場合。
まず、SQL::Maker::Plugin::InsertOnDuplicate を明示的に use する。それで間違いなく呼べる。
SQL::Maker::Plugin::InsertOnDuplicate::insert_on_duplicate( $teng->sql_builder)
あるいは
$teng->sql_builder->SQL::Maker::Plugin::InsertOnDuplicate::insert_on_duplicate
好きな方でいい。これでうまくいくなら load_plugin で何かが間違っている。
デバッガを使うか、load_plugin を差し替えて動作を詳しく調べる。
0439デフォルトの名無しさん垢版2016/09/10(土) 18:20:16.29ID:1M4Sozo+
Tengを使うのかどうか自分で選べるのなら、自分が理解していないものを使わないという選択肢がある。
他の人が選んでしかも使わなければならないという状況なら、選んだ人にどう使うのかを聞くといい。
0440デフォルトの名無しさん垢版2016/09/10(土) 19:19:33.59ID:7Wlp4jMr
多分ブログ書いた人やその人に教えた人はTeng本体と混ざって勘違いしたんだろうな
Teng自体はインスタンスからもロードできるから
0441デフォルトの名無しさん垢版2016/09/13(火) 17:44:13.57ID:AYCTTYgO
この記事、オレオレメモだって自分で書いてるからわざわざつっこむのも野暮だけどOR検索の例もちょっとひどい。
どうしてこうなった?
0442デフォルトの名無しさん垢版2016/09/22(木) 14:09:25.16ID:ULuG4eTB
Windows の Strawberry Perl で、「Parallel::ForkManager」は使えますか?

----------------------------------------
use LWP::Simple;
use Parallel::ForkManager;
...
@links=(
["http://www.foo.bar/rulez.data";,"rulez_data.txt"],
["http://new.host/more_data.doc";,"more_data.doc"],
...
);
...
# 最大30プロセスで並列的にダウンロードを行います
my $pm = new Parallel::ForkManager(30);
foreach my $linkarray (@links) {
$pm->start and next; # forkさせます
my ($link,$fn) = @$linkarray;
warn "Cannot get $fn from $link"
if getstore($link,$fn) != RC_OK;
$pm->finish; # 子プロセスをexitします
}
$pm->wait_all_children;
----------------------------------------
の様なスクリプトで、数万ファイルをダウンロードしようとすると、
  child process '-*****' disappeared.
  A call to `waitpid` outside of Parallel::ForkManager might have reaped it.
のエラーを出しながら、メモリを全消費・開放を何度か繰り返した後に、
最終的には、「Out of memory!」で異常終了します。

Cygwin の Perl では、「Cannot get $fn from $link」エラーを出しまくりますが、
メモリを全消費する事はありません(異常終了もしません)。
0443デフォルトの名無しさん垢版2016/09/22(木) 15:02:46.45ID:EZPik98J
windowsのForkは、表面上は同じように動作する仕様になっているが、
実際にプロセスやスレッド、CPUの動作が期待通りになってるかと言うとそれは違う。
ほとんどの場合が、unixとの互換性を保つための見せかけ。
0445デフォルトの名無しさん垢版2016/09/23(金) 01:08:30.38ID:Ay1vA5a9
if($hoge=~/(\d+)$hoge3$/){$hoge2=$1}

これの意味は

$hoge3が数字のみなら$hogeに代入し、$hoge2にも代入するという意味でしょうか?
0446442垢版2016/09/23(金) 05:21:37.52ID:CNgCRT2E
>>443
「WindowsのFork」の意味は分かりませんが(Windows用PerlのFork?)、
Cygwin の perl は、
  C:\cygwin64\bin\bash --login -i -c "perl ...
等としなくても、Windows から直接起動出来るので、
あのスプリクトで直接起動しても、メモリエラーは出ませんでした。

Cygwin の perl を、Strawberry Perl の代わりに、、、と思ったら、
いきなり chomp が、CR+LF を削除してくれなかった。


>>444
perldoc.jp からのコピペです。


>>445
if ( 文字列 =~ /パターン/ )
もし「文字列」の中に「パターン」が含まれていれば、

if ( $hoge =~ /(\d+)$hoge3$/ ) { $hoge2 = $1 }
もし「 $hoge 」の中に「 \d+$hoge3$ 」が含まれていれば、「 $hoge2 」に「 \d+ 」を代入
0447445垢版2016/09/23(金) 08:03:28.29ID:Ay1vA5a9
>>446
ありがとうございます。
他言語の底辺SEなので助かりました。
0448デフォルトの名無しさん垢版2016/09/23(金) 14:09:14.63ID:eBfGtRhY
普段それを読む文化にない人がいきなり読めたら逆にすごいと思う
PerlってPerlが分かる人だけの言語
0449デフォルトの名無しさん垢版2016/09/26(月) 17:38:36.14ID:ak8zLIw0
Perl on Bash on Ubuntu on Windows10 での、
モジュールのインストールで、無駄に苦労した。
  解決法: Config.pm の修正


Windows10 のコマンドプロンプトでも、
エスケープシーケンスが使えるらしい。
  PROMPT $E[96m$T$E[3D $E[93m$P$G$E[37m$E[1C
懐かし
0452デフォルトの名無しさん垢版2016/10/03(月) 19:32:24.04ID:tI+B9pP0
ザメフォン元気?
0453デフォルトの名無しさん垢版2016/10/06(木) 18:37:40.82ID:fMpg74pi
ビット演算を多用したいんだけど、変数のサイズを指定したい。longとか。
とりあえず、16bitと32bitと64bitの整数が欲しい。
あと数値と文字が勝手に切り替わらないようにしたい。

ビット演算してるブロックだけでいいんで。
あと環境の保証も欲しい。どのマシンでどのbitのPerlとか関係なく。
俺が32bitのビット演算って言えばそれはもう絶対32nit演算。
もちろん不当に遅くなる方法は許さない。
0454デフォルトの名無しさん垢版2016/10/06(木) 20:14:48.16ID:rUXrZJG3
C で書け。
0455デフォルトの名無しさん垢版2016/10/06(木) 20:56:23.24ID:Wdgc44Vq
C++でもいいぞ
0459デフォルトの名無しさん垢版2016/10/07(金) 07:25:20.66ID:codMUtxm
vec かな。それでも不満なら perlfaq3 を読んで C で書け。
0460デフォルトの名無しさん垢版2016/10/07(金) 12:43:21.52ID:codMUtxm
実際に何をして、その結果何が問題だったの? そのくらいは書いてくれないと……
0461デフォルトの名無しさん垢版2016/10/08(土) 01:08:43.11ID:hitB9rm0
>>457
xsと言うのがあるが、一時的に値が複製されて良いなら標準入出力(メモリ渡し)のほうが絶対に楽だと思うのだ。
ま、perl使ってるなら複製されたメモリのほうが元のデータより圧倒的に小さいはずだが
0462デフォルトの名無しさん垢版2016/10/08(土) 09:19:23.51ID:ZgFPdp2t
ビット演算したいなら普通にすればいいよ。
◯ビット変数がほしいといわれても、それは適切にマスクすればいいだけだし。
◯ビット変数のように振る舞うものがほしいということなら、Perl は C よりも期待に応えられると思うよ。
まずは C と同じ書き方をして速度を計ってみてよ。話はそれからだ。
0464デフォルトの名無しさん垢版2016/10/09(日) 00:00:21.79ID:ja1MeL+I
>>453 に言ってるんだよ?
0465デフォルトの名無しさん垢版2016/10/10(月) 16:43:42.37ID:zhEtfxQ/
もう連休終わっちゃうんだけど結局何をしたかったのかな。
0467デフォルトの名無しさん垢版2016/10/11(火) 00:28:33.80ID:SYi+Wrc4
しかし普通の言語やったあとにPerlやると異常なほど即座に短く書き終えるからなにか書き忘れてるんじゃないかと不安になる。
正しく動くと分かると異常なほど楽で嬉しくなるし、C++とかが馬鹿らしくなる。
そして実行速度計ると結局全部納得してため息。
0468デフォルトの名無しさん垢版2016/10/11(火) 19:01:16.50ID:A+TNY00d
stat($file_path);でファイルを作成したtimeは
atime,mtime,ctimeのどれなの?
0469デフォルトの名無しさん垢版2016/10/11(火) 19:50:08.12ID:Mt8tOIIr
>>468

http://perldoc.jp/func/stat
> 8 atime 紀元から、最後にアクセスされた時刻までの秒数
> 9 mtime 紀元から、最後に修正(modify)された時刻までの秒数
> 10 ctime 紀元から、inode 変更(change)された時刻までの秒数 (*)

> 明らかに、ctime のフィールドは移植性がありません。
> 特に、これから「作成時刻」を想定することは出来ません

http://perldoc.jp/docs/perl/perlport.pod#Files32and32Filesystems
> ファイルシステムはアクセスタイムスタンプや変更タイムスタンプに
> 対応していないかもしれません (つまり移植性のあるタイムスタンプは
> 変更タイムスタンプだけです); またタイムスタンプは 1 秒単位では
> ないかもしれません (例えば、FAT ファイルシステムは時刻の単位は
> 2 秒単位です)。

>「inode 変更タイムスタンプ」 (-C ファイルテスト) は (Unix 以外では)
> 実際には「作成タイムスタンプ」かもしれません。
0470デフォルトの名無しさん垢版2016/10/12(水) 08:39:20.39ID:9k51B2Do
Perlのオブジェクト指向読んだばっかりで理解が曖昧なんだけど、
これだと、オブジェクトがオブジェクトなのか関数なのかって呼び出し側で決める事にならない?
コンストラクタもメソッドも。
ついでに、インスタンスのカプセル化どうこうも、呼び出し側の権利?

みたいに見えたのですが。
0472デフォルトの名無しさん垢版2016/10/12(水) 14:33:18.63ID:9k51B2Do
>>471
ありがとう

以下みたいな感じの記述は使っても問題ない?
あと穴があった場合も教えて欲しい。
(複数回に分けて書くので途中で書けなくなるかも)



use utf8;
use strict;
use warnings;

#ただの実験
# 1: メソッドとインスタンスをカプセル化する。
# 2: クロージャを、あたかもオブジェクト指向と同じ記法で呼び出せるようにする。(クロージャとオブジェクト指向の同一視)
# 3: クロージャをクロージャのまま使いたければそうできるようにした。そもそもクロージャのほうが速いので。
0473デフォルトの名無しさん垢版2016/10/12(水) 14:33:37.13ID:9k51B2Do
{
package Class;

sub new{
my $class = $_[0] eq __PACKAGE__ ? shift : undef ; #オブジェクトとして呼び出されたかどうか
my $self = {
Name => shift,
};

my $method = {
NameGet => sub{ $self->{Name} },
NameSet => sub{ $self->{Name} = shift; },
};

return $method if(!$class); # 普通の関数(クロージャ)として呼ばれた場合
return bless $method, $class; # オブジェクトとして呼ばれた場合
}

sub AUTOLOAD {
our $AUTOLOAD;
my $method = shift;
ref($method) eq __PACKAGE__ or return("error");
my @load = split '::', $AUTOLOAD;
my $load = $load[-1];

$method->{$load}->(@_);
}
}
0474デフォルトの名無しさん垢版2016/10/12(水) 14:34:03.93ID:9k51B2Do
{
package test;

my $c = Class::new("Closure"); #クロージャとして呼び出すと、一般的なクロージャと同じように使える。
print $c->{NameGet}->() . "\n";

my $o = Class->new("Object"); #オブジェクト指向として呼び出すと、オブジェクト指向と同じように使える。(中身はクロージャ)
print $o->NameGet() . "\n";

print Class::NameGet(); #関数のように呼ぶとエラー
}

__END__

以上です
0475デフォルトの名無しさん垢版2016/10/12(水) 16:49:58.02ID:HdFKT2Ip
オブジェクト指向=カプセル化ではないし、perl5でももう少しスマートなカプセル化のやり方もあるが筋が悪いからおすすめはしない
perl6はオブジェクト指向に関してはかなりマシだけど、そもそも速度気にするならperlは向かない

perl5じゃないとダメなら規約などで上手く付き合うしかない
ちなみにそのコードだとまともに継承できないね
0476デフォルトの名無しさん垢版2016/10/12(水) 21:51:13.12ID:9k51B2Do
やりかたがあると言うのなら、提示して欲しいのだけど。(ただの俺は知ってるぞ自慢?)

事前に試しましたが、継承はできましたよー。
複数クラスを書くと長くなるので書きませんが、
まったく同じように別のクラスを書いて、ベースにしたいクラスを呼び出して更新すれば
とりあえずインスタンスもメソッドは継承されるですね。

あと穴は一つ発見しました。
これは後出しにしようかな。
0480デフォルトの名無しさん垢版2016/10/14(金) 22:56:09.64ID:GnnBnQfG
スーパーコンピューターのアプリケーションしか作ったことがないのですが、
そんな私でも作れるでしょうか?
0482デフォルトの名無しさん垢版2016/10/17(月) 02:26:31.41ID:WRe7I7Bu
2つのテキストファイルを比較し、一致した文字列を取り出したいんですが、教えていただけませんか
0483デフォルトの名無しさん垢版2016/10/17(月) 03:43:08.25ID:sXplblvU
一致した文字列を穴なく完璧に厳格に定義して示して下さい。
そしてそれが出来ればプログラミングの8割は終了しています。
0484デフォルトの名無しさん垢版2016/10/17(月) 09:06:26.12ID:z3YwWHWS
diff 系かなあ。CPAN で検索してみるといいよ。
0486デフォルトの名無しさん垢版2016/10/17(月) 09:33:07.31ID:z3YwWHWS
いやいや、一致した「行」とは言ってないから。何を望んでいるのかを確認しないと。
0488デフォルトの名無しさん垢版2016/10/18(火) 22:42:04.03ID:kO2WqMh/
my $input = [];
CSVファイルを一行づつ配列にして多元配列にした後
for (my $i=0; $i<$#$input; $i++) {print Dumper($input->[$i]),"\n";}
で全データ出力するのですが、その後(?)関数内で同じく
for (my $i=0; $i<$#$input; $i++) {print Dumper($input->[$i]),"\n";}
とすると、1行目の内容が、$#$inputの数だけ繰り返し表示されます。
関数内でも全データを出力したいのですが、どうしたらよいでしょうか。
どなたか教えてください。よろしくお願いします。
0489デフォルトの名無しさん垢版2016/10/18(火) 23:56:04.56ID:sMICGAt6
1回ずつループしながら、デバッグして、使っている変数を見れば?

変数のwatch 機能、あるだろ?
0490デフォルトの名無しさん垢版2016/10/19(水) 00:45:58.03ID:cfM1WNHO
>>489
アドバイスありがとうございます。VisualStudioCodeを素で使ってまして
perlのwatch機能は無いようなのです。
0491490垢版2016/10/19(水) 00:48:54.12ID:cfM1WNHO
watch機能はないのですが、添字の$iを具体的な数字を入れてはprintで確認して
1行目のデータになっていると気づいた次第です。
0492デフォルトの名無しさん垢版2016/10/19(水) 08:22:02.29ID:p26QOV7Y
>>488
こういうこと?再現しないよ

use Data::Dumper;
my $input = ["abc", "def", "ghi"];
for(my $i=0; $i<=$#$input; $i++) {
print Dumper($input->[$i]), "\n";
}
&func;

sub func {
for(my $i=0; $i<=$#$input; $i++) {
print Dumper($input->[$i]), "\n";
}
}
0493デフォルトの名無しさん垢版2016/10/19(水) 09:10:37.02ID:cfM1WNHO
>>492
要はそういうことなんだと思います。csvファイルを読み込んで
$input[[1, 2, 3],[4, 5, 6],[7, 8, 9]];
for (my $i=0; $i<$#$input; $i++) {print Dumper($input->[$i]),"\n";}
でDumperのフォーマットですが[1, 2, 3],[4, 5, 6],[7, 8, 9]を表示
sub funcの中で同じforをすると
Dumperのフォーマットですが[1, 2, 3],[1, 2, 3],[1, 2, 3]を表示します。

必要なところを抽出して現象がでたらソースをアップします。
0494490垢版2016/10/19(水) 13:56:56.14ID:cfM1WNHO
ループ内で行っていた条件分岐の間違いでした。お騒がせしました。
489さん、492さん、ありがとうございました。
0495デフォルトの名無しさん垢版2016/10/22(土) 10:51:15.40ID:NzADNRlY
良い回答はないと思うんだけど、正規表現で指定する内容をランダムで作り出す方法ってないかな。

例えば
/^[0-9][0-9a-zA-Z]{4}[A-Z]$/;
だったら
5scDuZ
とかが得られますよ的な。
0498デフォルトの名無しさん垢版2016/10/22(土) 17:34:20.47ID:BSsXTeb9
CPANのモジュールも更新されないものが増えてきた
もうオワコン
0499デフォルトの名無しさん垢版2016/10/25(火) 21:00:26.38ID:EVpxycMx
Windows環境でUnixのテキストファイルを処理します
改行LFがCR+LFに変換されてしまうのを防ぐために
perl -i.bak -p -e "BEGIN{ binmode STDIN; binmode STDOUT; } s/unko/manko/g;" hogo.txt
みたいな風に書いてるんですけど
もうちょっとスマートな書き方ありませんか?
0500デフォルトの名無しさん垢版2016/10/25(火) 21:11:38.78ID:U4JQUv53
binmodeしないと自動変換されるの?
まぁ試してないけど、ワンライナーをやめれば良いのさ
0503デフォルトの名無しさん垢版2016/11/10(木) 22:48:13.72ID:SbD3rZb1
perlの場合は文字コードがEUCのデータファイルがあって
入力フォームからハングル文字で書き込むと自動的に&#○○○;の形に変換されて書き込まれるのですか?
0508デフォルトの名無しさん垢版2016/11/11(金) 12:07:09.49ID:PHyMHsut
my $str = "aaa〹&bbb&ccc";
という文字列があって
&#以外の&を&に置換するやり方は?
0509デフォルトの名無しさん垢版2016/11/11(金) 12:09:09.25ID:PHyMHsut
my $str = "aaa&#12345;bbb&ccc";
という文字列があって
&#以外の&を&に置換するやり方は?

#はここでは全角で入力したけど半角です
0510デフォルトの名無しさん垢版2016/11/11(金) 12:09:58.95ID:PHyMHsut
訂正
my $str = "aaa&#12345;bbb&ccc";
という文字列があって
&#以外の&を&amp;に置換するやり方は?

#はここでは全角で入力したけど半角です
0513デフォルトの名無しさん垢版2016/11/11(金) 17:35:35.83ID:KyOrnFnp
こういう時日本語は全角文字を使えて便利だね
海外の人は&や#が入力できない時苦労しそう
0515デフォルトの名無しさん垢版2016/11/11(金) 23:23:43.62ID:PHyMHsut
できました
それとこの文字列で
my $str = "&amp;&amp;&am";
それとこの文字列で&amp;でない&(この場合一番後ろの&)を&amp;に置換するには
どうすればいいんでしょうか?
0517デフォルトの名無しさん垢版2016/12/07(水) 13:14:37.83ID:AwnLgrFF
すみません教えてください。
DBD::CSVというのは
標準モジュールに含まれるのでしょうか?
0521デフォルトの名無しさん垢版2016/12/07(水) 15:18:54.39ID:AwnLgrFF
>>519
なるほど納得です。
開発環境がAcrivePerlで、libに入ってるモジュールは標準と思ってました。
ありがとうございました。
0522デフォルトの名無しさん垢版2016/12/10(土) 20:16:28.52ID:cBnztJW7
perlの乱数生成器の内部状態を保存するにはどうしたらいいですか
seedだけ保存しても100万回 rand を呼んだところで中断したら再開するときまた100万回呼ばないとダメですよね
0524デフォルトの名無しさん垢版2016/12/14(水) 23:50:40.69ID:6q3W8zza
と言うか動作の保証が求められる乱数みたいなのはオブジェクトごとに専用で実装する
0525デフォルトの名無しさん垢版2016/12/15(木) 13:10:06.97ID:ZL343Whf
乱数用のモジュール使うしかないんだろうけど有名どころの Math::Random::MT は状態保存はできないみたいだな
pure perl実装の方は無理矢理シリアライズすればできそうだけど
0529デフォルトの名無しさん垢版2016/12/19(月) 00:17:41.32ID:qsdLnaaR
push pop shift unshiftが未だにどれがどうだったか覚えられません。
毎回ググるのも面倒なのですが、何か覚えるコツみたいなものはありますでしょうか。
ディスプレイに付箋を貼るのは嫌です。
0531デフォルトの名無しさん垢版2016/12/19(月) 16:34:48.89ID:CDWthwTd
あああ、オレも覚えるのに苦労した
だって、アセンブラの push 命令とは伸びる方向が真逆なんだよ

shift はバッチファイルにも同じ命令があるから分かるよね
前にズラす
はい、お次の方、どうぞ、って感じ
朝勤、昼勤、夜勤、って感じ

push は後ろから押す、背中から押す、ケツから押す、とにかく押すんだ
満員電車に乗るとき、押さないでください、押さないでください、って感じ
0532デフォルトの名無しさん垢版2016/12/19(月) 18:32:42.82ID:RxkoIqKm
スマホかどうか判別するには
if(
$ENV{'HTTP_USER_AGENT'} =~ /iPhone/ ||
$ENV{'HTTP_USER_AGENT'} =~ /iPad/ ||
$ENV{'HTTP_USER_AGENT'} =~ /iPod/ ||
$ENV{'HTTP_USER_AGENT''} =~ /Android/
){
print "スマホだよ";
}

これでいいんですか?
0533デフォルトの名無しさん垢版2016/12/19(月) 21:42:52.71ID:BI+h437s
push,popは一般的なCPU命令のpush.popと同じだね。スタック末尾に積んだり取り出したり。
shift,unshiftは直感的とは言いがたいけど、まあ覚えるしかない
0535デフォルトの名無しさん垢版2016/12/19(月) 23:58:59.01ID:qsdLnaaR
>>531,533-534
ありがとうございます。
pushは何とかそれで覚えられそうです。
何とかpush-shiftで覚えてみます。

>>530
レスしたいだけのゴミクズはさっさと消えろ。
まともに回答もできないクセに自己顕示欲だけは人一倍。
お前みたいな奴が社会のお荷物なんだよ。
お荷物=捨てるに捨てられないゴミ、だからな。
本当はさっさと処分したほうが社会のためだが憲法と法律によって処分できないだけ。
0538デフォルトの名無しさん垢版2016/12/20(火) 02:47:43.15ID:sHqfd7is
無理のある例えだが、配列がロケット鉛筆だとしたら
<0[1][2][3]

ケツに押し込むのが push
<0[1][2][3] ← [4]

ケツから飛び出ちゃうのが pop
<0[1][2] → [3]

芯を引っこ抜くのが shift
<0 ← <0[1][2]

先から無理矢理突っ込んじゃうのが unshift
→ <0[1][2][3][4]
0540デフォルトの名無しさん垢版2016/12/20(火) 04:26:14.23ID:VxeGortQ
>>535
いやいや、毎回調べるのも十分ありだと思うぞ。
俺はそのうちになんとなく覚えちゃったことけっこうあるよ。
0541デフォルトの名無しさん垢版2016/12/20(火) 05:58:50.42ID:Wy6+Up2x
うろ覚えで使うとバグの発見に苦しむんで
ほんのちょっとでも不安を覚える感じがしたら大丈夫だとは思ってても
必ず調べる方が良いよね
0544デフォルトの名無しさん垢版2016/12/21(水) 00:24:41.66ID:nmy+aY6o
毎日のように使ってりゃそりゃ忘れることは無いだろうけど
数ヵ月とか間を空けると忘れてて調べなおすことはままある
記憶障害って言われるのはちょっときつい
0546デフォルトの名無しさん垢版2016/12/21(水) 09:29:14.01ID:Xe+zsvfF
覚えにくいことは自分で一覧表を作ると良い
C#の宣言一覧とか目につく所にファイルしてある
0547デフォルトの名無しさん垢版2016/12/23(金) 10:11:56.10ID:jV2urUkG
shiftは考えてみたけど、底の抜けた箱に物が詰まってて、箱自体を上にシフトすると一番下の物がまろび出てくるってイメージかな
0548デフォルトの名無しさん垢版2016/12/24(土) 05:45:04.23ID:NChqVw6n
干草プッシュだけ覚えときゃなんとかなる気がするが、ロケットペンシル記憶術も捨てがたい
0549デフォルトの名無しさん垢版2017/01/01(日) 16:43:08.52ID:YnMirTCR
配列のスライスとリストのスライスは微妙に仕様が違うんだな。最近まで気づかなかったよ。
0550デフォルトの名無しさん垢版2017/01/04(水) 00:26:26.84ID:9INFfbdp
モジュールのインストールすらできないPerlはマジでゴミ
膨大な依存関係を調べて手作業でインストールすればできないことはないのかもしれないが、
そんな暇があるのはニートくらいだろ

ゴミニート専用言語Perl
0555デフォルトの名無しさん垢版2017/01/06(金) 01:50:49.12ID:0ickO96c
HTTP::Liteモジュール使うのと、ソケットでガチアクセスするのと、systemでwgetを実行するのではどれが一番速いですか?
0556デフォルトの名無しさん垢版2017/01/07(土) 02:02:58.42ID:lcjjTGwJ
HTTP::Liteは余計な処理がある分遅い、wgetはネイティブだがforkする分遅い。よってsocketかな
0557555垢版2017/01/07(土) 04:12:05.32ID:8FKpQ8GY
>>556
ありがとうございます。
それではソケットでガチアクセスします。
0558デフォルトの名無しさん垢版2017/01/09(月) 03:46:03.29ID:Ba0Z9f3i
ネトゲで寄生してくる香具師まじでウザい
レベルも装備も明らかに足りてないくせにパーティー入ってくるんじゃねーよ

前半はやる気を見せるためか最前線で敵に突っ込んでいって何度も即死
蘇生スキル持ちの職がいるとはいえMPも有限だし、死ぬと分かってるのに突っ込んで手間かけさせるな

後半は後ろからついてくるだけ
パーティーの人数によって敵の強さが変わるから、攻撃も回復もしない寄生虫一匹分、敵が強くなってるんだよ
まじでお荷物なんだが
0559デフォルトの名無しさん垢版2017/01/09(月) 03:57:16.67ID:Ba0Z9f3i
そういう糞雑魚がパーティーに入れない(入ったとしてもデメリットが大きい)MMORPG作りたいんだけど、
PerlでMMOサーバー作れる?
そうした寄生のできないちゃんとしたMMORPGを作りたい
0561デフォルトの名無しさん垢版2017/01/09(月) 06:19:53.73ID:Ba0Z9f3i
誰とは質問言わないが、明後日の方向向いたレスしてる知的障がい者がいるな
Perlで作れるかどうかという質問なんだがな
Perl使ってると日本語すら理解できなくなるのか、それとももともと日本語を理解できない朝鮮人が紛れ込んでいるのか
0563デフォルトの名無しさん垢版2017/01/09(月) 08:24:01.83ID:Ba0Z9f3i
自分にできないものだから、それをこじらせて
自分以外の人間全員できないと思うようになったのか
ここまでくると哀れだな
0564デフォルトの名無しさん垢版2017/01/10(火) 05:46:20.71ID:JXAVAbFC
ID:Ba0Z9f3i

俺もこいつには無理って意見に全面的に賛成するわ。
そもそもPerlで作るって発想が馬鹿。
0565デフォルトの名無しさん垢版2017/01/10(火) 08:17:16.04ID:lvul3mgx
それ以前にそもそもPerlなんてゴミを使おうと思う時点で馬鹿。
使い物にならない時代遅れの言語が候補に出てくる時点でプログラマとして致命的。
0568デフォルトの名無しさん垢版2017/01/11(水) 18:54:09.92ID:FfNyKWnK
だから君には無理だって
perlでmmoサーバ作れないどころか想像すらできないみたいだし
0569デフォルトの名無しさん垢版2017/01/11(水) 18:59:46.49ID:9Pm7248G
俺は作れるかどうかを疑問視してるんでは無いと思うんだがな
>インタプリタを?
これをどういう風な意味に受け取ってるのかだろう
0570デフォルトの名無しさん垢版2017/01/11(水) 19:22:57.19ID:TF26KoMK
言語としてはPerlはチューリング完全を満たしています
最初に調べることだと思われますが
0571デフォルトの名無しさん垢版2017/01/12(木) 16:15:10.55ID:5aplhP3Q
mmoサーバも作れないゴミ乙
言語がゴミなのか、perl厨がゴミなのか、それとも両方か
0572デフォルトの名無しさん垢版2017/01/12(木) 18:08:05.48ID:taUnzxu5
     (´・ω・`)
   /     `ヽ.   お薬増やしておきますねー
  __/  ┃)) __i |
/ ヽ,,⌒)___(,,ノ\


     (´・ω・) チラッ
   /     `ヽ.   
  __/  ┃  __i |
/ ヽ,,⌒)___(,,ノ\


     (´・ω・`)
   /     `ヽ.   今度カウンセリングも受けましょうねー
  __/  ┃)) __i |
/ ヽ,,⌒)___(,,ノ\
0573デフォルトの名無しさん垢版2017/01/13(金) 01:30:45.41ID:84sZuYo8
オンラインゲームを支える技術、中嶋謙互、2011、技術評論社

サーバの構築・運営、通信量など、
オンラインゲームのほぼ全工程を、説明した本です
大人数用MMOと少人数用P2Pの、両方について書いてある

確か言語は、C++ だったかな?
0574デフォルトの名無しさん垢版2017/01/13(金) 11:59:30.05ID:lAI6bANo
そらそうだろ、Perlなんて電子産廃なんだからC系とかPHPになるだろうよ。
Perlで何かを作ろうってほうがおかしい。
0577デフォルトの名無しさん垢版2017/01/14(土) 01:50:24.44ID:dLK6O0iv
ウザいゴミ
0581デフォルトの名無しさん垢版2017/01/22(日) 21:26:40.74ID:xYSgWZ/D
寄生できないmmoとか簡単そうだけどな

(1)死ぬたびに獲得経験値1/10
(2)3回死亡でダンジョンから強制排出&所持金半減&獲得経験値ゼロ
(3)経験値はパーティーメンバーの敵に与えたダメージ比率

(3)があれば身の丈に合ってないダンジョンの時点で経験値はほぼゼロ
ほぼゼロなところへ(1)があるから限りなくゼロに近くなる
寄生でダンジョンクリアだけしようにも(2)のハイリスクがある
0582デフォルトの名無しさん垢版2017/01/24(火) 18:17:56.63ID:wudREosA
>>581
回復職やサポート職の経験値もなしということでしょうか。
0583デフォルトの名無しさん垢版2017/01/24(火) 18:48:47.54ID:tYWypKKw
昔はこれでアラーにならなかったのですが、perl5.8でこれを実行すると @{$_[2]}が原因でこけてるらしいです。
どのように変えればよいでしょうか
my ( @WdayArr ) = ( $_[2] )? @{$_[2]} : ( 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' );
0586デフォルトの名無しさん垢版2017/01/25(水) 08:15:46.34ID:1MVxS70E
>>584
ありがとうございます。やってみます。

>>585
曜日の文字を配列に指定する部分です。なければ、英語の曜日が入ります
0588デフォルトの名無しさん垢版2017/01/25(水) 09:15:19.78ID:dJNPI+cJ
>>586
Perl 5.16.3 だが、下のスクリプトで1行目を入れても
消しても、きちんと動くぞ。
$_[2]に配列のリファレンス以外のものを入れたのだろう。
(エラーメッセージにそう書いてあるはずなんだが)
-----------------------------------------

$_[2] = [qw(a b c d e f g)];
my ( @WdayArr ) = ( $_[2] )? @{$_[2]} : ( 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' );
print @WdayArr;
0589デフォルトの名無しさん垢版2017/01/25(水) 09:30:32.20ID:1MVxS70E
>>588
use strict;を指定すると参照ダメみたいなエラーが出るので
とりあえずuse strict;を外して応急処置しています。

参照渡しができなくなったんでしょうか
0591デフォルトの名無しさん垢版2017/01/25(水) 10:20:22.46ID:1MVxS70E
このようなエラーが
Can't use string ("ARRAY(0x10b0458)") as an ARRAY ref while "strict refs" in use at obj.cgi
0592デフォルトの名無しさん垢版2017/01/25(水) 10:29:15.16ID:WOhX0mTt
ARRAY(0x10b0458) というのは配列リファレンスを文字列として評価した時に出てくる
関数の呼び出し元で配列をそのまま渡さずにダブルクォートで囲うなどして文字列化してしまっているのだろう
0594デフォルトの名無しさん垢版2017/01/28(土) 20:27:36.04ID:t13qO4X2
Perlはマジで糞だな
リファレンスはリファレンスで同じじゃねーの?
バックスラッシュ付けたリファレンスでも種類によって違うとか意味不明
0596デフォルトの名無しさん垢版2017/01/30(月) 08:35:21.14ID:CkOT0sBx
Cの共用体のようなことしなければ、
ある「型」のリファレンスは
その「型」のリファレンスのままでよい。
それ以外の使い方をすれば、「間違っている」として
エラーを吐いてくれるのが有難いではないか。

ただ、リストのリファレンスをハッシュの
リファレンスとして使いたい時(またはその逆)
がたまにあるが、それは可能にしてほしいと思う。
0597デフォルトの名無しさん垢版2017/01/30(月) 15:21:11.69ID:MjhEgZic
# こういうのじゃいかんか?

my $ref_to_hash0 = +{ @{ $ref_to_array0 } };
my $ref_to_array1 = [ %{ $ref_to_hash1 } ];
0598デフォルトの名無しさん垢版2017/01/30(月) 21:42:50.47ID:kKFFvpaa
>>597
無駄なものがあって読みづらい

my $ref_to_hash0 = { @$ref_to_array0 };
my $ref_to_array1 = [ %$ref_to_hash1 ];

何がしたいのかわからん。
キーと値が交互に出てくるものを
ハッシュかリストに変換したいのか?
0600デフォルトの名無しさん垢版2017/02/04(土) 21:52:52.06ID:rb4WR6H/
Javaのクラス周りに慣れるとPerlのクラス周りは本当に不自由だと気付く
0602デフォルトの名無しさん垢版2017/02/06(月) 09:40:35.12ID:ZiMti5cO
xp 32bit

xp対応のアクティブパール(ActivePerl)がダウンロードできないです

旧バージョンはどこからダウンロードできますか?
0604デフォルトの名無しさん垢版2017/02/06(月) 14:58:39.49ID:q20moLVF
$str = "LIST( '2016123456','2015123456','2017987654',…)

という$strがあった時に、シングルクオートに囲まれた部分だけを取り出して
@listに突っ込みたいんだけどどう書いたらいい?
splitの正規表現でいけるかと思ったけどどう書いていいかわからない。
0605デフォルトの名無しさん垢版2017/02/06(月) 19:57:05.35ID:YzSDBsjI
>>602
5.16なら間違いなく使えてる
5.18と5,20はファイル名に64intがくっついてて動くかどうかはわからない
0606デフォルトの名無しさん垢版2017/02/06(月) 20:08:36.65ID:B4iHWGCu
今activesite見てきたら、まあ流し読みしかしてないけど、古いバージョンは有料で提供してやるよって買いてあった
0607デフォルトの名無しさん垢版2017/02/06(月) 20:13:46.71ID:B4iHWGCu
Need Perl on production servers or access to Perl 5.6, 5.8, 5.10, 5.12, 5.14, 5.16, 5.18 or 5.20?
Learn more about ActivePerl Business Edition

--------------------------------------------------------------------------------------------------------------------------

Get the language version you need on the platform you want. The following versions are available for purchase with Business Edition+:

ActivePerl 5.8, 5.10, 5.12, 5.14, 5.16, 5.18, 5.20, 5.22, 5.24
ActivePython 2.5, 2.6, 2.7, 3.2, 3.3, 3.4, 3.5
ActiveTcl 8.4, 8.5, 8.6
0609デフォルトの名無しさん垢版2017/02/06(月) 20:55:17.22ID:oG8S/cPb
>>604
$str = "LIST( '2016123456','2015123456','2017987654',…)

$str =~ s/LIST/@list=/;
eval($str);

でいいんじゃね?
0613デフォルトの名無しさん垢版2017/02/07(火) 08:39:30.86ID:5nFcePp/
>>602
2014年にダウンロードした
ActivePerl-5.16.3.1604-MSWin32-x86-298023.msi
を持っている。

ただ、Active State が古いバージョンを有償でのみ提供
しているのに、勝手に古いバージョンをうpしていいものか解らん。
そのあたり、クリアにしたら、どこかにうpしてやってもいいが。
0616デフォルトの名無しさん垢版2017/02/07(火) 16:36:45.75ID:pJfTbQRq
あると高速化できるようなrecommendsだけどインストールされていないモジュールを一覧出来る方法を教えて下さい
0617デフォルトの名無しさん垢版2017/02/07(火) 17:46:12.43ID:TrN1jB3j
>>602
googleでググったらすぐに見つかったけど?
https://xray-engine.org/index.php?title=ActivePerl
(このサイトは開くとき継続しますかって警告が出たんで
 ルート証明の認証に問題があるかも知れない
 一応Java ScriptとActiveXの実行は切ってアクセスしたほうがいいだろう)
一応俺が使ってる(XP 32bit)
ActivePerl-5.20.3.2003-MSWin32-x86-64int-299574.msi
をダウンロードして保存していたファイルと比較してみたけど一致したから問題ないと思う
あと、5.22.1も試してPerlとしては動いたので
現行ダウンロードできる5.22.3も大丈夫じゃないかな?
(インストーラがexeに変わってるけど)
あと俺が使えると言った5.22.1を何故使ってないかと言うと
WSHから何故か正常に使えなかったので、使える5.20.3を使ってる
0620デフォルトの名無しさん垢版2017/02/08(水) 01:47:50.85ID:lrXbOWPO
>>602
XPで動くかは試してないけど、Strawberry Perlっていうのもあるよ
どうしてもActivePerlじゃないとだめなの?
0621デフォルトの名無しさん垢版2017/02/09(木) 00:36:47.60ID:MB7d2iTo
おれ XP で Strawberry Perl つかってる
ActivePerl はモジュールの対応が遅いから乗り換えた
0625デフォルトの名無しさん垢版2017/02/09(木) 22:13:19.02ID:CNUBJX7I
>>624
それだけだったらLinuxやFreeBSDなどを使うって方法もあるだろ?

だからM$に金を払うのがいやだけど、MSのOSが好きという理由であるはずだ
もしくはMS以外のOSがクソだっていう可能性もあるけど
0626デフォルトの名無しさん垢版2017/02/09(木) 22:22:13.62ID:4ZcYgl3B
>>618
perlはもう進化が止まってるので、あんまり新しいことは出来ない
自分で作るなら別だけど

rubyやpythonなら整ってる筈
0628デフォルトの名無しさん垢版2017/02/10(金) 07:05:20.49ID:SVdyXXtN
>>618
もう見てないだろうけど
HTML::TreeBuilder
HTTP::Daemon
LWP::UserAgent
WWW::Scripter
くらいでなんとかなると思うよ。簡単かどうかは知らんけど大体なんとかなってる。
0629デフォルトの名無しさん垢版2017/02/10(金) 10:48:54.81ID:tdAYPVUl
最近はperlは余り聞かないな
中学生の時にはブームだったけど……。(何十年も前)

学校ではpython とかだと思う。C# java が主力?

とにかく、滅多に聞かないな
0631デフォルトの名無しさん垢版2017/02/10(金) 22:06:13.34ID:+KYQgfiL
Perlは全然進化しないからな
一年ちょっと前に6がでて音沙汰なし
7はいつ出るんだ?って状態
0635デフォルトの名無しさん垢版2017/02/11(土) 14:50:19.58ID:N4/UY6wx
>>631
6出てたのか?
知らなかったわ
0636デフォルトの名無しさん垢版2017/02/11(土) 15:18:36.75ID:p/3UeWk3
>>634
> 実用性を重視するならJava一択
それって言語の実用性じゃなくて
人材的な意味での実用性だよな

つまりJavaは色んな所で使われてる言語だから
Javaできますって言っておけば採用されやすい。
自分が実用性がある人間になりたいならJava一択
0639デフォルトの名無しさん垢版2017/02/11(土) 17:33:33.41ID:tLczzgrK
何がなんだか仕様に混乱するから3つまでしか習得出来ません
4つめ覚えるとなにかを忘れます
0640デフォルトの名無しさん垢版2017/02/11(土) 21:11:41.56ID:y7nchZP8
621
> むしろなぜXPを使ってるのか知りたい

動作確認だよ
XPと10で動くならVistaでも7でも8でもでも動く可能性が高いから
いちいち全OSを揃えて動作確認すると
シロウトの趣味でアプリケーション開発するには荷が重すぎる
0641デフォルトの名無しさん垢版2017/02/11(土) 22:46:04.81ID:p/3UeWk3
いちいち全OSで動作させたいと思う理由は何?

サポートが終了しているXPで動作する必要はないし
Vistaも2017年4月までだ。シェアから考えれば切り捨てても十分だし

7と10で動作確認すればいいじゃん
0645デフォルトの名無しさん垢版2017/02/13(月) 18:59:46.87ID:VKyPIbro
用途を特定した専用マシンみたいなのは、特にOSを入れ替えずにずっと使うな
測定機器や実験機器の一部とか、何かの制御用とか

ただ、そんなマシンは新しいソフトを入れたりもしないから、
互換性とかどうでもいい世界だけど
0646デフォルトの名無しさん垢版2017/02/17(金) 23:51:32.63ID:QUNiBjhs
以前こちらでお世話になった顔文字のど素人です。

$ perl -p -e 's/(..)/$1 /g;'
123456

12 34 56

恐縮ですが上記の逆(スペースの削除)をご指導願います。
00 06 fc 25 58 50 0a 00 54 92 31 03 49 46 88 d0 c6
    ↓
0006fc2558500a0054923103494688d0c6

よろしくお願いいたします _(_^_)_
0647デフォルトの名無しさん垢版2017/02/18(土) 00:14:42.65ID:eUOj9Lyv
>>646
s/\s//g
0651646垢版2017/02/18(土) 08:59:07.57ID:64GKa0+N
>>647
ど素人に有難うございました。
0653デフォルトの名無しさん垢版2017/02/26(日) 10:31:20.73ID:cj/RoW+L
active perlで、長いファイル名のあるフォルダに対して readdir すると、
エラーになって止まるんだけど、どうやって回避すればいいんだ

エラーが返るとかじゃなくて実行自体が止まるので、とりあえず読んでみて、
とかが出来ない
0662デフォルトの名無しさん垢版2017/03/01(水) 08:44:35.66ID:RfMjQxG+
Windowsで260文字以上のファイル名を普通に作ろうとすると、
「ファイル名が長すぎる」とエラーが出るが、
ネットワークドライブを使うと、作れてしまうようだ。
ただ、それを実際に使おうとすると、ドツボに嵌るみたいだな。
0667デフォルトの名無しさん垢版2017/03/09(木) 15:21:10.67ID:lYcZyteE
print 1+(2+3);
print (1+2)+3;

この二つの文の違いを使いこなすのが、Perlプログラミングの醍醐味。
0668デフォルトの名無しさん垢版2017/03/14(火) 00:58:03.78ID:mRCDOzFa
awk 由来の 0+ ハックや "". ハックは常識として使いこなすのが、Perlプログラミングのたしなみ。
0671デフォルトの名無しさん垢版2017/03/16(木) 06:54:07.57ID:t2soddN5
>awk 由来の 0+ ハックや "". ハックは
そもそも、常識でないといいたげな、このレスは何?
まともな参考本読めば、最初の方に書いてある。
ハックでもなんでもない
0672デフォルトの名無しさん垢版2017/03/20(月) 17:47:23.90ID:5loIUxX7
Win-7、Active Perl 5.16です。Unicode文字を含むperlの処理結果を
utf16leで出力しようとしています。下のようにやってみましたが、ダメでした。
出力をバイナリエディタでみると、改行コードが変な風にいじられていました。

binmode STDOUT => ":encoding(utf16le)";
print "ユニコード文字を含むテキスト\n";

色々試した結果、下のスクリプトのようにすると、概ね動くことが解り
ましたが、動かない場合もあります。下の例では、「aaaaa」は出力され
ますが、「bbbbb」は出力されません。どうするのが正しいでしょうか?

use utf8;
binmode STDOUT;
use Encode qw/ encode decode /;

sub wprint{
 foreach(@_){
  s/\n/\r\n/g;
  print encode('utf-16-le', $_);
 }
}
wprint "a"x5, "\n";
foreach (1..5){
 wprint "b";
}
wprint "\n";
0673デフォルトの名無しさん垢版2017/03/20(月) 19:53:29.20ID:SJAmj6b4
>改行コードが変な風にいじられていました
perlではどのOSでも改行をLF(\n, 0x0a)として扱っている
Windowsでは通常出力する際に自動的にLFをCRLFに変換している

0x0a (perlの\n)
0x0a 0x00 (utf16にエンコード)
0x0d 0x0a 0x00 (0x0a を 0x0d 0x0a に変換、正しくは 0x0d 0x00 0x0a 0x00 にしたい)

wprint関数のやり方が上手くいくのは
0x0a (perlの\n)
0x0d 0x0a (s/\n/\r\n/g で置換)
0x0d 0x00 0x0a 0x00 (utf16にエンコードし、自動変換も無効にしているのでこのまま出力される)


>「bbbbb」は出力されません
様々な事情で特殊変数 @_ の各要素やループ時に設定される一時変数 $_ は元の値の別名として扱われる
つまり同じ値を参照しているため、それらに代入や置換などを行うと元の値も変更されてしまう
元の値が変数ならそれが変更されるだけで問題はないが、定数の場合変更できないのでそこで死んでしまう

wprint関数では @_ でもループ内でも変数として受け取っていないため置換処理で引数の値を変更しようとしている
'a' x 5 は評価されたときに変数に入れられたように扱われるので問題はないが、直後の "\n" はまさしく定数なので変更できず死に、以降の処理が止まる
関数内で最初に my @args = @_; のように一度変数で受け取るのが意図しない変更を防ぐ意味でも良いだろう
0676デフォルトの名無しさん垢版2017/03/31(金) 21:37:50.01ID:lffYMjCi
print print (1+2)+(4+5)+6+7;

3
23

print print print (1+2)+(4+5)+6+7;

3
23
1 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0677デフォルトの名無しさん垢版2017/03/31(金) 22:38:54.66ID:PsuuxH/N
$hash{'aaa'}{'bbb'}{'ccc'} = 1;

みたいなことをしても、普通に通るのが凄いよな
それでいて、仕様としては別に多次元ハッシュなんか対応してない
0678デフォルトの名無しさん垢版2017/04/01(土) 08:51:48.01ID:AF9KLm8F
なにをするんでもいちいちチェックが入って膨大な自動操作が裏で行われてる証拠。
さらに変数と実体を結びつけるデータテーブルもかなりの容量を使用してる。
木構造の探索などをやると、動作がCの10倍程度違うと言われるけど、やってみたらメモリ容量が100倍以上違うことも確認された。(将棋の盤面探索)。

まあ一時的にスクリプトが欲しいときとか、それが良い時はそれで良いけど、
通常のソフトウェアを作る時内部でそんなことが起きれてば完全な欠陥なわけであって。
0679デフォルトの名無しさん垢版2017/04/01(土) 17:07:22.61ID:y/HEzjsw
そうか、100倍以上違うのか。試してみたいからソースコードを見せてくれ。
0681デフォルトの名無しさん垢版2017/04/02(日) 11:42:32.36ID:W390vP7B
1 ビット × 8000000 のビットマップって Perl でどうやるんだろう? こうかな?

$perl -e '$h{ $_ } = 1 foreach 0 .. 7999999; system("bash","-c","ps -p \$PPID -F");'
UID    PID PPID C  SZ  RSS PSR STIME TTY     TIME CMD
i     5240 4743 96 253250 997920 1 11:18 pts/4  00:00:05 perl -e $h{
$

みたいなことでもしたんだろうか。
0682デフォルトの名無しさん垢版2017/04/02(日) 12:21:59.20ID:n1w2M1cg
>>680
インタプリタとコンパイラの速度差は2倍未満と言われてるけどな
この場合は自動型変換などの暗黙の処理とデータテーブルが問題。
もちろん自動型のコンパイラを使用しても同じ結果になる。
0684デフォルトの名無しさん垢版2017/04/02(日) 14:35:50.91ID:n1w2M1cg
「そう言われてる」ってやつだからな。
ただ有名なんで検索すればいろんなところで出てくる。
10倍遅くなるのは、自動処理が8でインタプリタが2、合計10
0685デフォルトの名無しさん垢版2017/04/02(日) 14:37:05.43ID:n1w2M1cg
別に正確な情報どうこうじゃなくて、
おそいのがインタプリタのせいだと思ってるよりずっといいでしょって話
0687デフォルトの名無しさん垢版2017/04/02(日) 16:44:24.11ID:W390vP7B
ろくに知らなければこういうことをするかもな、という想像なんだが。わかりにくかったのならすまん。
なにしろ何をしたのかまったく解らないから適当に想像するしかないんだよ。
0688デフォルトの名無しさん垢版2017/04/15(土) 03:58:55.24ID:vTxJoJiF
Cでも
伸び縮みを含めた動的なメモリ宣言と開放と、呼び出しの度そのチェックと、管理情報の保存.
動的な値の自動変換と、呼び出しの度そのチェックと、管理情報の保存.

たったこんだけでも超遅くなるか
つか動的な宣言って超遅いよね
0689デフォルトの名無しさん垢版2017/04/15(土) 04:02:38.36ID:vTxJoJiF
それはそうと俺も稀にPerlやるんだが、

use utf8;
use strict;
use warnings;

binmode STDIN, ':encoding(utf8)';
binmode STDOUT, ':encoding(utf8)';
binmode STDERR, ':encoding(utf8)';

これ毎回書くんだが、全部省略できないかの
すぐこれ書くの忘れて文字コード関係でおかしくなるし、書いたら書いたで無駄に目障りなんだが・・・
0690デフォルトの名無しさん垢版2017/04/15(土) 10:45:22.06ID:DbxhuG0l
# Hoge.pm
package Hoge;
use strict;
use warnings;
use utf8;

binmode STDIN, ':encoding(utf8)';
binmode STDOUT, ':encoding(utf8)';
binmode STDERR, ':encoding(utf8)';

sub import{
  strict->import;
  warnings->import;
  utf8->import;
}

1;

# script.pl
use Hoge; # ただし@INCからHoge.pmが見つかるようにする
0693デフォルトの名無しさん垢版2017/04/15(土) 21:19:29.96ID:4y1tBhnC
それが凄いところ
オブジェクト指向だって、ほんの小手先でちゃんと実用になるものを実装しちゃってる
0694デフォルトの名無しさん垢版2017/04/15(土) 23:53:13.69ID:k4jkkg7x
>>693
最低レベルな。
小手先で済ませちゃったから、それ以上の
便利な機能はライブラリ任せになっちゃって
いつまでも標準が生まれなかった。
Perl6にさっさと移行すればいいのに
0696デフォルトの名無しさん垢版2017/04/16(日) 00:42:48.16ID:cCOM2/u0
>>695
可読性の問題だ。
意味は全く一緒なのに、書き方を変えてどうする?
言語を変えるのと一緒だぞ
0699デフォルトの名無しさん垢版2017/04/16(日) 06:42:15.56ID:h3ZKvGOL
それは目的がニッチ過ぎたか利用者が少なすぎたからで、
どっちにしろ標準になんかならない
0703デフォルトの名無しさん垢版2017/04/20(木) 22:52:03.43ID:NBs+Bll8
>>702
なってないわ
0705デフォルトの名無しさん垢版2017/04/23(日) 19:39:54.82ID:W+YLVZyj
>>688
そうか?ディスクI/Oが絡まないようなメモリ上だけの操作ならさほど遅い感じしないけど。
まあ、単純なのと比べたら遅いけどね。
0708デフォルトの名無しさん垢版2017/05/03(水) 00:40:52.14ID:M+hoQd/o
$str = "みかん りんご ぶどう";
を・みかん ・りんご ・ぶどうというように文字の最初に・をつけるには
どう置換すればいいんですか?
0710デフォルトの名無しさん垢版2017/05/03(水) 01:07:15.97ID:Qv6lwwF1
$str =~ s/(\w+)/・$1/g;
0712デフォルトの名無しさん垢版2017/05/03(水) 02:22:37.42ID:0sDWrHda
linux mint18
perl6のインストールについて

$ sudo apt install rakudo
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
E: パッケージ rakudo が見つかりません

どうしたらインストールできます?
0713デフォルトの名無しさん垢版2017/05/03(水) 02:40:51.60ID:0sDWrHda
$ perl6 -v
This is perl6 version 2015.11 built on MoarVM version 2015.11

すいません、解決しました
0715デフォルトの名無しさん垢版2017/05/11(木) 23:25:04.61ID:nen5x9dT
メモリリーク検出になに使ってる?
とりあえず昔からTest::LeakTrace使ってるんだけど
いまはもっと便利なものがあったりするのかな?
0716デフォルトの名無しさん垢版2017/05/24(水) 13:05:14.66ID:9utV0RoM
Perl/Qt は癖があるね、Perl/Qtとクラスを同時に使おうとするとなかなか大変。
0717デフォルトの名無しさん垢版2017/05/28(日) 12:56:56.81ID:+Ey6Jlm8
テキストファイルを読み込むときに
// (例えばfile://...)
があると、そこから行末まで読み込めない現象が起きるんだけど
どうしたらちゃんと読み込める?
binmodeにしても解決しなかった
0720デフォルトの名無しさん垢版2017/05/28(日) 14:05:21.98ID:9RwfEHwH
ファイルハンドルからダブルスラッシュが含まれる行を読み込もうとするとダブルスラッシュが行末と誤認されるという解釈でいいんですかね
0721デフォルトの名無しさん垢版2017/05/28(日) 14:33:51.85ID:eFuC5yco
絶対になにかカンチガイしてるだろう。
単に出力のバッファリングで単に表示されてないだけとか。
もしくは自分で"//"以降を削除するような処理をしているとかだな。
正規表現の書き誤りがあやしい。
0724717垢版2017/05/28(日) 16:52:39.75ID:+Ey6Jlm8
カンチガイでした
別のところでCのコメント削除をしていて
そこで消えてました
テヘペロ
0725デフォルトの名無しさん垢版2017/05/28(日) 18:05:45.48ID:DFLy+ixu
ま、そんなもんよ
いい経験したな
次に活かせよ
0726デフォルトの名無しさん垢版2017/05/28(日) 20:22:17.89ID:4xPNWoV3
C/C++のソースコードを読んで
コメント削除したソースコード
ifdefとかのプリプロセスしたソースコード
typedef, struct, unionとかを抽出した結果
を得たいんだけどどうするのがいいだろう

プリプロセスしたソースコードをcflowに渡すと
関数コールツリーを得られるから
それらを使ってCのソースコード理解に役立てたい
0727デフォルトの名無しさん垢版2017/05/28(日) 21:37:34.83ID:QPUrPhGM
>>726
何が難しいのか、なんでそんなことをしたいのかよくわからん。
0729デフォルトの名無しさん垢版2017/05/29(月) 06:06:36.99ID:iFMZQ+Zt
>>727
Cのソースコード理解のため

難しいのは例えばif x>=10 && (defined(y) || z==1)とか
ifdef elif else endifとかの入れ子とか
を正しくパースしたりすること

structを抽出したあと
それらの参照関係も図示したい
0731デフォルトの名無しさん垢版2017/05/29(月) 06:09:33.49ID:iFMZQ+Zt
>>728
プリプロセスする前のコードだと重複したりすると思う

gcc -Eとかだと
#defineとかまで展開されるからそれは抑えたい
0732デフォルトの名無しさん垢版2017/05/29(月) 06:15:46.76ID:1pPkP4QE
gcc -E じゃだめなのか。
cpp のソースコードを読んでみるのがいいと思うよ。
昔、LSI-C 86 のプリプロセッサのソースコード読んで勉強したなあ。
0735デフォルトの名無しさん垢版2017/05/29(月) 18:14:45.54ID:aFd0yPA1
例えば
#define ERRLVL 5
#define WARLVL 3
とかなってるのをプリプロセスすると
数字に置き換わるので意味が判りにくくなる

だけど#ifdefとかはプリプロセスしないと
例えば32ビット版の関数や構造体と
64ビット版の関数や構造体が重複してしまう
0736デフォルトの名無しさん垢版2017/05/30(火) 04:54:25.56ID:Al54U2am
CPAN に Text::CPP なんてのがあるよ。
そのままではご要望どおりじゃないと思うけど参考にはなるかも。
0737デフォルトの名無しさん垢版2017/05/30(火) 20:58:34.87ID:Al54U2am
言いたいことはよく解る。
とりあえず、プリプロセッサの通常の動作から変更したいのは
・C ソースの中のマクロ置換はしない
・#define ディレクティブは用済みになっていないのでそのまま出力する
といったところ?
もし Text::CPP の作者がそれを有意義だと思ってくれたら、
なんとかしてくれる可能性もなくはないかもしれないな。
連絡先は README に書いてあるよ。
0738デフォルトの名無しさん垢版2017/05/30(火) 21:10:46.26ID:Al54U2am
cpp をそのまま使うという方法もなくはないよ。

#define ディレクティブの前と C ソーステキストの前の行に
#line ディレクティブを入れる。
cpp の処理結果には #line ディレクティブがあるから
それを手がかりに元のファイルからコピーする。

この程度のことなら出来そうじゃない?
0740デフォルトの名無しさん垢版2017/06/04(日) 17:04:48.43ID:JLuePf+9
あまり野暮なことはいいたくないけど、ファイルハンドルから行を読むんじゃなくて
トークンを読んだ方がシンプルに書けるんじゃないかな。そうすれば

while(( my $tokentype,my $str) = gettoken( $fh)){
if ( $tokentype == 'comment'){ case_comment;}
elsif ( $tokentype == 'string'){ case_string;}

みたいなやり方が出来る。気を悪くしないでほしい。本当にそう思ったんだ。
0741デフォルトの名無しさん垢版2017/06/05(月) 23:40:47.35ID:AlRALdx8
gettoken()を作ってread()で一文字ずつ読み込んでトークンを返すのは良さそうだけど
トークンタイプはその時の状態が判らないと判別できないと思う
//は普通の状態で現れたらコメント開始だけど
"の中だと文字列
/*の中だとコメント文字列
0742デフォルトの名無しさん垢版2017/06/09(金) 13:39:22.36ID:jmjGKHXw
tcpのIO::Socket使ってサーバーに対してconnectした後、closeせずに親プロセスは接続を維持したまま、
forkした子プロセスでサーバーから受信した大量の文字列をファイルに書くとかするには子プロセスが継承したソケットをどう破棄したらいいの?
現状では当然の事ながら親プロセスの受信待ちが完全に止まってしまって困ってます
0743デフォルトの名無しさん垢版2017/06/09(金) 14:33:09.33ID:1EhRpyQk
なぜ子プロセスでコネクトしないの?
0744デフォルトの名無しさん垢版2017/06/09(金) 14:41:19.37ID:jmjGKHXw
>>743
客先のサーバーの仕様とやらで複数の接続(connect)に対応していない模様(爆)
0745デフォルトの名無しさん垢版2017/06/09(金) 19:57:08.76ID:ipZEdn/U
>>744
親プロセスの接続を切れば複数接続じゃなくなると思う
0746742垢版2017/06/10(土) 02:10:59.82ID:6TQL4PKJ
解決しました
fork()してから普通に子プロセス側で$socket->close();すれば良かったのですね。
ありがとうございました
0748デフォルトの名無しさん垢版2017/06/13(火) 02:06:41.19ID:Z49xlslC
ヒント:
print"Hello world!\n";
print "Hello world!\n";
print("Hello world!\n");
print ( "Hello world!\n" );
0749デフォルトの名無しさん垢版2017/06/13(火) 06:02:24.69ID:TrwiR2C4
1. print 文は実行が成功するとTrue(1)を返す
2. すべての引数を括弧で括るのでなければ、print というキーワードの 次に開き括弧を書いてはいけません

ってだけの話。

print print print (1+2)+(4+5)+6+7;
は、
print (1+2) を実行したあとに
print 1+(4+5)+6+7実行して、
その戻り値1をプリントしてるだけ。
0751デフォルトの名無しさん垢版2017/06/14(水) 07:10:52.51ID:nXcqV3BV
>>741
そんな面倒なことを考えなくてもいいように gettoken を書くんだよ。
普通は C の文字列定数の中でわざわざ // を認識しない。どんなやりかたを考えてるの?
興味があるなら flex とかやったみたらどうかな。
0752デフォルトの名無しさん垢版2017/06/14(水) 08:00:33.67ID:XYhnRuER
>>751
文字列定数の中か外かはどうやって判別するの?
0753デフォルトの名無しさん垢版2017/06/14(水) 23:53:09.01ID:nXcqV3BV
ずいぶん前のことなのに反応があって嬉しいよ。
とりあえず、行継続もプリプロセッサディレクティブの処理もエラーチェックも無し、
コメントと文字列だけでいいなら flex ならこう書ける。
https://ideone.com/NbLVjc
本当は '"' みたいな文字定数も想定しなきゃまずいけどね。

もちろん、flex を使わなくてもできる。
yylex を手書きするなら、まず 1 バイト読んで

switch ( c){
case '"': read_string(); break;
case '/': read_comment(); break;

みたいにするのが伝統的な方法だったりする。
この方法では switch から出る前にトークンを完結させる。
コメントや文字列定数の中と、それ以外の部分で文法が違うから
別の処理になっていると理解してほしい。
こうしなければならないわけではなく、テーブル駆動とかステートマシンが好みならそうすればいい。
重要なのは、yylex を 1 回呼べばトークンが 1 個完結しているということ。
もちろん Perl でも同じやり方はできる。できるけど…… Perl ですよ?
助けてくれるモジュールがあるんだから使ってみない? Parse::Lex とか。
flex をかじっておけば理解しやすいと思うよ。
0754デフォルトの名無しさん垢版2017/06/16(金) 07:59:43.13ID:ULLUKZU9
>>753
それはcase文の文字で状態遷移してるのと等価

"があったら文字列の中の状態
/があったらコメント開始の1文字目の状態

モジュールを使ったのがネットにあったから使ってみたけど
期待と違ったから自作した
0755デフォルトの名無しさん垢版2017/06/16(金) 08:02:46.40ID:ULLUKZU9
>>753
あとread_commentの中で*が直後にくる場合はコメント内だけど
別の文字が来たらコメントじゃない

read_commentとしてるけどコメントとは判別できない
0756デフォルトの名無しさん垢版2017/06/23(金) 23:36:24.65ID:jQG6z3fn
ネストしたブロックを正規表現でとりたくてperlreにある再帰パターンというのつかおうとしているですが(?>[^()]+)の部分うまくかきかえられません。
loop〜end loopの形にしたいのですが、 (?!)の使い方がわるいのかヒットしないorz
0757デフォルトの名無しさん垢版2017/06/26(月) 23:50:27.94ID:zIACp4Pg
(?>¥b(?!end loop|loop)で行けました。

ヒットしなかったのは再帰始まりのloopと干渉していたらしく、始まりをちゃんと書いたら動きました。
0758デフォルトの名無しさん垢版2017/06/28(水) 23:50:10.85ID:eZnf2YJC
FW使わずにpsgi/slackを使おうとしてて、モジュールの名前と言うか場所に悩んでます(´・ω・`)

pathがperl -I /hoge/lib/として、
/hoge/lib/Controller.pmみたいのを置きたいけど名前被りが嫌なので避けるための手法として

/hoge/lib/myController.pmとか
/hoge/lib/MyApp/Controller.pmとかあると思うんですが

perlでこういう場合の命名規則?というかお約束みたいな名前ってあるんでしょうか。
/hoge/lib/作ってるサイトのドメイン/Controller.pm
みたいにしようと思ったけど、
use 作ってるサイトのドメイン::Controller.pm
こんなの使いまわし効かなさすぎて嫌すぎる
0759デフォルトの名無しさん垢版2017/06/29(木) 06:52:20.07ID:jqMU9B7T
お約束はない。

>こんなの使いまわし効かなさすぎて嫌すぎる
ん?
スクリプト内で動的に変更したいとか、そこらへん?
じゃなきゃ普通に use XXXX::Controller で作っちゃうけど?

あとは、物理的にパス切らない。くらいだよね?
$ cat Hoge.pm
package Hoge::Foo;
sub hoge{ "hoge" }
1 ;
$ perl -MHoge -le 'print Hoge::Foo::hoge'

myController.pm 一個作って、中で切り分けちゃえば?
0760デフォルトの名無しさん垢版2017/06/29(木) 15:18:22.72ID:/7f1HAmp
どもです。
URLで言うexample.comみたいな不可侵領域?的なのが無いのかなぁと思った感じでした。
0762デフォルトの名無しさん垢版2017/06/29(木) 17:25:38.71ID:/7f1HAmp
>>761
> もしプライベートな内部やプロジェクト固有の用途のために開発中のモジュールが 決して公開されることがないなら、
> 将来の公開モジュールと名前が 衝突しないことを確実にしてください。
> これは、予約済みの Local::* カテゴリを使うか、 Foo_Corp::* のように 名前にした戦を含めることで行えます。

これだあああ
戦ってのが謎ですが、Localディレクトリに入れることにします。
ありがとうございます!
0763デフォルトの名無しさん垢版2017/06/29(木) 17:51:43.29ID:MlIjnXqh
たぶん「した戦」→「下線」アンダーラインのことかと

> Foo_Corp::* のように 名前に下線を含めることで
0765デフォルトの名無しさん垢版2017/06/30(金) 20:59:30.86ID:O3ckt/Q4
今とあるスクリプトを見たら
1 while(s/[\012\015]$//);
こんなん書いてあったんだけど、
たぶん改行とおぼしきものは全部消すってことだと思うんだけど、
いらんもんまで消しすぎたりしてない?
0766デフォルトの名無しさん垢版2017/06/30(金) 21:30:32.10ID:nK8Rv+fa
スカラー末の改行(の連続)を外す。
スカラー内の改行は外さない。
作者の意図通りに、余分なものは消さないと思うよ。

普通に、s/[¥012¥015]$//g ; すりゃいいと思うけど、、、
0774デフォルトの名無しさん垢版2017/07/01(土) 10:05:39.83ID:756r6lLe
勉強し始めて1日で覚えるようなことを全然分からんようなやつが回答者ぶってるのかよ
0775デフォルトの名無しさん垢版2017/07/01(土) 10:10:49.16ID:756r6lLe
とりあえず一通り調べたけど、末尾に改行を使う文字コードはなかったから、
1 while(s/[\012\015]$//);
これは本当に改行を削除したいならあらゆる方法の中で最善だと思われる
本当にかたっぱしから消したいのなら、だけど…
0776デフォルトの名無しさん垢版2017/07/01(土) 10:11:51.33ID:756r6lLe
と言うより $ が自動でその判定してるから、関係ないものは消えないはずなんだよね
0777デフォルトの名無しさん垢版2017/07/01(土) 11:23:51.39ID:EnayukTL
取り敢えず、ベンチマーク。

$ cat bench.pl
#!/usr/bin/perl
use Benchmark qw( cmpthese timethese ) ;
my $f = +( "42¥r¥n" x 1000 ) . +( "¥r¥n" x 10000 ) ;
sub _gm { my $f2 = $f ; $f2 =~ s/[¥012¥015]$//gm ; }
sub _while { my $f2 = $f ; 1 while $f2 =~ s/[¥012¥015]$// ; }

cmpthese(timethese (undef, {
while => '_while',
gm => '_gm',
})) ;

$ perl bench.pl
Benchmark: running gm, while for at least 3 CPU seconds...
gm: 3 wallclock secs ( 3.36 usr + 0.01 sys = 3.37 CPU) @ 356.68/s (n=1202)
while: 3 wallclock secs ( 3.06 usr + 0.00 sys = 3.06 CPU) @ 152.94/s (n=468)
Rate while gm
while 153/s -- -57%
gm 357/s 133% --
0778デフォルトの名無しさん垢版2017/07/01(土) 11:26:08.99ID:EnayukTL
あ、単純に変数最後の CRLF 削りたいだけなら、比べ物にならん程
chomp の方が早い。

local $/ = “¥r¥n” ;
chomp $_ ;
0781デフォルトの名無しさん垢版2017/07/01(土) 12:36:32.24ID:756r6lLe
\rだの\nだの使ってることに神経を疑っちまうぜ
と言うかutf8にさえ文字とみなされない文字を使ってる時点で…

ところで以下の3つは全部挙動が違いので並列にベンチとっても無意味
chomp;
s/[\012\015]$//gm;
1 while(s/[\012\015]$//);

特に真ん中のは色々とひどいことになると予想した
0783デフォルトの名無しさん垢版2017/07/01(土) 12:48:39.37ID:EnayukTL
>>781
ご指摘の通り俺が間違ってたわ。
chomp が違うのは同意

#!/usr/bin/perl
use Benchmark qw( cmpthese timethese ) ;
my $f = +( "42¥012¥015" x 1000 ) . +( “¥012¥015" x 10000 ) ;
sub _gms { my $f2 = $f ; $f2 =~ s/[¥012¥015]$//gms ; }
sub _while { my $f2 = $f ; 1 while $f2 =~ s/[¥012¥015]$// ; }
cmpthese(timethese (undef, {
while => '_while',
gms => '_gms',
})) ;

Benchmark: running gms, while for at least 3 CPU seconds...
gms: 4 wallclock secs ( 3.24 usr + 0.03 sys = 3.27 CPU) @ 391.13/s (n=1279)
while: 3 wallclock secs ( 3.01 usr + 0.03 sys = 3.04 CPU) @ 155.26/s (n=472)
Rate while gms
while 155/s -- -60%
gms 391/s 152% --
0785デフォルトの名無しさん垢版2017/07/01(土) 13:05:38.92ID:EnayukTL
連レスすまん。これを最後に消える。

s/[¥012¥015]¥Z//gm

出力を od -d -a で確認したから合ってると思う。
でベンチマーク取ったけど、記憶にある通りのベンチになった。
通りで>>777>>783が遅いわけだわ。
0787デフォルトの名無しさん垢版2017/07/01(土) 20:55:02.68ID:LXXRZ/Ka
うーん いくら考えても 1 while() と書いてる意味がわからん
gオプションついてないから while の意味ないし
結果知りたいなら s/// の値を直で調べりゃ済む話だし
何故なんだ 誰か教えてください
0788デフォルトの名無しさん垢版2017/07/02(日) 02:22:16.04ID:ucaUnn+J
量指定子の存在しない世界線なのか。

#!/usr/bin/perl -w
use strict;
sub hd { print '[', join(' ', map uc unpack('H2', $_), split //, $_[0]), "]\n" }
my($lf, $cr, $n) = ("\012", "\015", "\n");
my $str = "$n$cr$lf$lf${cr}1${cr}2${lf}3$cr${lf}4${n}5$n$cr$lf$lf$cr$n";

$_ = $str; 1 while s/[\012\015]$//; hd($_);
($_ = $str) =~ s/[\012\015]$//g; hd($_);
($_ = $str) =~ s/[\012\015]+$//; hd($_);
__END__

なお改行が \015 でも \012 でもそれらの組み合わせでもない環境があるので、
$ と \Z と \z の意味するところは元のコードが使われていた環境に依存する。
http://perldoc.jp/docs/perl/perlport.pod#Newlines
0789デフォルトの名無しさん垢版2017/07/02(日) 08:10:30.13ID:cmIXSukt
ありがとう すごくよくわかった
1 whileの挙動をなにか勘違いしていたみたい

そしてベンチマーク取ってみたら
1 while s/[\012\015]$//; よりも while(s/[\012\015]$//){} の方が微妙に速かった
(すごく微妙なんだが 毎回1を評価しないでいい分の差??)
そして s/[\012\015]+$//; は1桁近く遅かった そうだったんだ…
0790デフォルトの名無しさん垢版2017/07/02(日) 12:35:43.14ID:9IiniyIy
オレ速度はあまり気にしないから、いつも素直に s/(?:¥r?¥n)+$//; の感じだな。
¥b入れた方がいいのかもしれないけれど入れたことはない。

$とって、gつければ、改行全部きえるはずだよ。
(行単位に分離されてそうだけど。。。)
0791デフォルトの名無しさん垢版2017/07/02(日) 14:53:25.87ID:ucaUnn+J
>>789
一体どんな計り方をしたんだ。
http://perldoc.jp/docs/perl/perlperf.pod
http://perldoc.jp/docs/perl/perlcompile.pod#The32Decompiling32Back32End

#!/usr/bin/perl -w
use strict;
use Benchmark qw(cmpthese);

my($lf, $cr, $n) = ("\012", "\015", "\n");

for my $str ("$n$cr$lf$lf${cr}1${cr}2${lf}3$cr${lf}4${n}5$n$cr$lf$lf$cr$n", "abc$n", 'abc') {
   cmpthese(-5, {
    ws => sub { $_ = $str; 1 while s/[\012\015]$//; 1 },
    wb => sub { $_ = $str; while (s/[\012\015]$//) {} 1 },
    qu => sub { $_ = $str; s/[\012\015]+$//; 1 },
  });
print "\n";
}
__END__

これぐらいシンプルな正規表現なら
エンジン内でのバックトラック >> 文自体の反復 >= ループ構造
文字列内に [\012\015] にマッチする文字があればあるほど qu の方が速くなる。
0792デフォルトの名無しさん垢版2017/07/02(日) 17:06:13.22ID:cmIXSukt
こんな計り方↓

#!/usr/bin/perl
use strict;
use warnings;
use Benchmark qw/:all/;

my ($lf, $cr, $n) = ("\012", "\015", "\n");
my $str = "$n$cr$lf$lf${cr}1${cr}2${lf}3$cr${lf}4${n}5$n$cr$lf$lf$cr$n" x 100;

cmpthese -5, {
'1while' => sub {$_ = $str; 1 while s/[\012\015]$//;},
'1while_g' => sub {$_ = $str; 1 while s/[\012\015]$//g;},
quantifier => sub {$_ = $str; s/[\012\015]+$//;},
while_g => sub {$_ = $str; while (s/[\012\015]$//g){};},
while => sub {$_ = $str; while (s/[\012\015]$//){};},
};
__END__

同じwhileでもgオプションつけると微妙に速くなる
面白い
0793デフォルトの名無しさん垢版2017/07/03(月) 04:18:38.68ID:7bJtUMTI
>>792
自分の感覚と真逆の結果なんで -Mre=debug して調べたら、 [\012\015]$ だと
固定長だからエンジンが動作を最適化して最初から末尾しかみないんだな。
だから文字列自体が長くなると逆転が起こると。勉強になったよ。

#!/usr/bin/perl -w
use strict;
use Benchmark qw(cmpthese);
my $n = "\015\012";
my $sa = $n x 500; # 全文字にマッチ
my $sf = ($n x 250) . ('a' x 500); # + の場合前半に長くマッチした上で失敗する
my $sl = ('a' x 500) . ($n x 250); # 後半に長くマッチ
my $sn = 'a' x 1000; # マッチしない
my $su = ('a' x 998) . $n; # 末尾のみ

cmpthese(-5, {
  wa => sub { $_ = $sa; 1 while s/[\012\015]$//; 1 },
  wf => sub { $_ = $sf; 1 while s/[\012\015]$//; 1 },
  wl => sub { $_ = $sl; 1 while s/[\012\015]$//; 1 },
  wn => sub { $_ = $sn; 1 while s/[\012\015]$//; 1 },
  wu => sub { $_ = $su; 1 while s/[\012\015]$//; 1 },
  qa => sub { $_ = $sa; s/[\012\015]+$//; 1 },
  qf => sub { $_ = $sf; s/[\012\015]+$//; 1 },
  ql => sub { $_ = $sl; s/[\012\015]+$//; 1 },
  qn => sub { $_ = $sn; s/[\012\015]+$//; 1 },
  qu => sub { $_ = $su; s/[\012\015]+$//; 1 },
});
__END__
0795デフォルトの名無しさん垢版2017/08/15(火) 19:10:26.36ID:mGHj5vlw
Perlに向いてるIDE教えて
デバッグ機能とかはいらない
補完と文法チェックとオートインデントが欲しい
0797デフォルトの名無しさん垢版2017/08/17(木) 08:11:08.69ID:3rgoYIbT
CPANとの連携機能はどっちでもいい
みんなメモ帳レベルのテキストエディタで書いてるの?
0800デフォルトの名無しさん垢版2017/08/17(木) 22:05:58.41ID:3rgoYIbT
どこまでがエディタでどこまでがIDEなのか分からないが、それなりの機能は欲しい
自作関数とかも補完して欲しいしなあ

サンクス
vscode調べてみる
0802デフォルトの名無しさん垢版2017/08/27(日) 20:38:24.57ID:SUXQdIaA
Perl6?
0805デフォルトの名無しさん垢版2017/08/27(日) 22:55:26.24ID:l5ljwsJk
pythonはそろそろLinuxのデフォルトが3になりそうだけど
Perlはそんな気配全く無いよねw
0806デフォルトの名無しさん垢版2017/08/27(日) 23:11:43.20ID:QvkIPToQ
システム付属のスクリプト言語っていう立ち位置がかつてのPerlからPythonに変わったからなあ
0811デフォルトの名無しさん垢版2017/08/30(水) 09:00:08.40ID:Lglrs9g0
>>810

Unicode Character 'ATOM SYMBOL' (U+269B)

おいらのPCでは、コピペしてもフォントが対応していないので出てが。
0815デフォルトの名無しさん垢版2017/08/31(木) 21:06:33.50ID:kksFNuyJ
日本だとparameterもargumentもどっちも引数と訳して区別しないから、
何故ARGなのかピンときにくいな
0816デフォルトの名無しさん垢版2017/08/31(木) 22:02:37.51ID:j9yVEoD5
引数は単に引数ってだけ。その使われ方は決まっていない。

例えば言語によっては関数の引数で戻り値を返すことだってできる。
つまり引数=パラメータではない

また関数の引数の多くはパラメータになるが、
引数だけがパラメータではない。
環境変数でパラメータを渡すことも有る

つまり「この関数の引数はすべてパラメータであり、引数以外のパラメータは取らない」
のような使い方をする
0818デフォルトの名無しさん垢版2017/08/31(木) 22:17:16.68ID:kksFNuyJ
そういう理解なんだねとは思うけど、何も正しくない

パラメータは、数学の媒介変数から借りてきた言葉で、
それを変化させると結果がいろいろ変わる変数

argumentは訳語が無いのでアーギュメントとするけど、
これは仮引数とも訳されて、関数を定義する時に便宜的に使われる名前

y = f(a)
と使うけど、定義では
f(x) = x*x
みたいに違う名前で書く

ここで、aがパラメータで、xがアーギュメント
0821デフォルトの名無しさん垢版2017/09/02(土) 10:40:48.32ID:u6TVALzz
パレパレ
0824デフォルトの名無しさん垢版2017/09/03(日) 11:11:45.08ID:DIhXI1rF
たまにいるよな。
大抵のカタカナ英語は日本語風に書いているのに
特定の単語だけネイティブ風に書くやつ

より正確な英語の発音にこだわってるんだー風を
だしていながら、その他のよく知られたカタカナ英語は
そうやってないから、ものすごく恥ずかしい
0825デフォルトの名無しさん垢版2017/09/03(日) 12:13:05.99ID:9X5Pxl9y
何言ってんだかさっぱりわかんないな。
これじゃ駄目なん? 普通にパラメータに聞こえますけど。
http://ejje.weblio.jp/content/parameter

元凶は日本のマスゴミなんだから逆らって
アイフォーンをアイフォンとかは全然いいんじゃない?
0829デフォルトの名無しさん垢版2017/09/06(水) 01:01:55.01ID:G3iCmUe0
アイフォーンはアイフォーンだろうがゴミ
日本企業の商標を無視するとか朝鮮人かよ
0838デフォルトの名無しさん垢版2017/09/15(金) 23:16:27.00ID:xDlOGQNS
質問ですが required.plをtest.plからrequire './required.pl'としたとき、
required.plの中でuse strict;と書いてもtest.plがstrictにならないのに
required.plの中でuse CGI;と書くとtest.plでmy $q = new CGI;できてしまうのは何で?
use xxxx;にスコープの違いがあるとして、何読んだらワカル?
ちなPerl 5 (v5.16.1)
0839デフォルトの名無しさん垢版2017/09/15(金) 23:33:11.49ID:du4uxrUm
>>838=ゴミ言語に合理性や整合性を求める知恵遅れ

社会のお荷物だよお前
0842デフォルトの名無しさん垢版2017/09/16(土) 10:28:48.29ID:ykCZuND/
>>841
レスdくすあり〜

Perl 4時代のCGIをメンテ中なう、、
new CGI;すると何かページの挙動が変わってしまうので結局CGI使わずに調査することにすた、
0843デフォルトの名無しさん垢版2017/09/16(土) 10:40:43.15ID:eVQeLfYm
>>838
そもそも概念が全く違うな
CGI->new が呼び出せるように strict->importは呼び出せるようになっているし

パッケージの定義がグローバルな名前空間に行われてるのは同じ
strictの有効化はコンパイル時のperl内部のスイッチの切り替え
同じ use でもやりたいことが違うからスコープの違いという視点で整理しようとすると混乱しそう
0844デフォルトの名無しさん垢版2017/09/21(木) 20:27:42.42ID:BpkTXd/3
文字列$str2から文字列$str1に含まれている文字以外を全て削除する
例えば$str2="あaかbさcたdなe";$str1="あかさたな";ならば
absdeが残るということです
モジュール使えない環境なのでモジュールなしのやりかたで
0845デフォルトの名無しさん垢版2017/09/21(木) 20:29:23.07ID:BpkTXd/3
間違えたabcdeが残るではなくあかさたなが残る
0847デフォルトの名無しさん垢版2017/09/21(木) 23:33:40.68ID:8ncmvgKd
正規表現は書けても実行しようとするとむちゃくちゃ遅くなったり
メモリ足りなくなったりして、結局ループに開いたりする
0848デフォルトの名無しさん垢版2017/09/22(金) 05:44:52.27ID:gzrtSK/2
あああああああああまははあああああああああああああああああああああなやたはあああああああああああああああなはわたはなたかかなななななああああああああああああああああああああああああああああかかかかあああああああああああああかささやなさはななけなわまややゆか
0849デフォルトの名無しさん垢版2017/09/22(金) 09:19:14.94ID:fe+2x70v
>>846
そのやり方だと
$str2="あaかbさcたdなe";が
$str2="あaかbさcたdなはe";
だったら結果が文字化けする
0852デフォルトの名無しさん垢版2017/09/22(金) 12:47:50.13ID:gMAmIwCv
>>847
それは大抵バックトラックのせいだからバックトラックを減らしなさい。
たとえば、単に \s* ではなく (?>\s*) と書く。
0853デフォルトの名無しさん垢版2017/09/23(土) 15:14:55.50ID:J7EIO5I9
Perlは正則言語を最左導出に変換していないとか一体…
まあ一般に状態数が増えてメモリ食うけど
0854デフォルトの名無しさん垢版2017/09/30(土) 21:35:00.65ID:cxuNJ5cw
ファイルロック用のファイルを使ってロックしている最中に
他プロセスでそのロック用ファイルを削除すると
ロック解除されてしまうの?
0855デフォルトの名無しさん垢版2017/10/01(日) 00:30:05.86ID:/pIW5dK5
す、す、すみません、どなたか教えてくららい。
0857デフォルトの名無しさん垢版2017/10/01(日) 04:19:01.01ID:ZfVcefoU
見事にヴァカが釣れたw
腹痛いwwwwwwwwwww
0859デフォルトの名無しさん垢版2017/10/01(日) 23:10:23.34ID:y8Okh59a
試してみたけどwindowsサーバーだとロック中のファイルは削除できないけど
unixサーバーだと削除できてしまってロックが解除される
だからロック用ファイルは削除しないでそのまんまの方がいい
0861デフォルトの名無しさん垢版2017/10/02(月) 13:31:28.69ID:SGi8KvwU
>>860
それどころか同名のロックファイルを作れるから 面倒なバグを生むよな

初心者がほんとによく作るバグが
「ロックを解放したらロックファイルも削除する」
0866デフォルトの名無しさん垢版2017/10/02(月) 20:13:00.81ID:xxT2R/Bt
(lock_test1.cgi)
test.lockを排他ロック
sleep(10);
ロック解除

(lock_test2.cgi)
test.lockを削除
test.lockを排他ロック
ロック解除

lock_test1.cgiを実行した3秒後にlock_test2.cgiを実行して試したら
lock_test2.cgiの方はロック待ちにならなかった
test.lockを削除しない場合はロック待ちになった
だからロック用ファイルを削除するとロックが解除される
0867デフォルトの名無しさん垢版2017/10/02(月) 20:14:57.29ID:7PTk8Wzs
pythonも新バージョンへに移行したくない同じ現象になってて、
次の言語が待たれている

perlからpythonはいろいろ新しいアイディアが追加されて、
より面白い言語になったけど、
次の言語では何が追加されるんだろう
0869デフォルトの名無しさん垢版2017/10/03(火) 13:20:15.84ID:inJ+8qV1
>>866
それはロック解除されてない
それは、毎回新しくロックファイル作ってロックする方法なら
常にロック出来るというだけ
0870デフォルトの名無しさん垢版2017/10/05(木) 23:33:51.09ID:1JBojDVn
ロック状態を示すファイルを削除したら、その擬似的なロックが、解放されるのは当たり前だとおもうのだけど、結局何がしたいんだ?
0871デフォルトの名無しさん垢版2017/10/07(土) 08:15:23.63ID:6wQnopu1
基本的なことだったと思うのですが、忘れてしまって調べても見つけられなかったので質問させてください。

print関数のFHのようなスペースを伴わずに渡す第一引数って
* なんていう名前でしたっけ
* どうやって定義するんでしたっけ
0872デフォルトの名無しさん垢版2017/10/07(土) 11:13:34.60ID:lC4cuCCD
>print関数のFHのようなスペースを伴わずに渡す第一引数
???
何を指しているのかよくわからないし、定義するってどういうことだ?

print FH "hoge", "fuga";
print "hoge", "fuga";
0873デフォルトの名無しさん垢版2017/10/07(土) 12:02:43.75ID:6wQnopu1
>>872
自分で定義する関数にprintのFHような渡し方をする引数を定義するということです。
スロットとかいう名前だった気がしたのですが、どうも違うようで
0875デフォルトの名無しさん垢版2017/10/07(土) 12:33:54.72ID:lC4cuCCD
間接オブジェクト構文
ttp://perldoc.jp/docs/perl/5.8.8/perlobj.pod#Indirect32Object32Syntax

new Hoge 'foo', 'bar';
Hoge->new('foo', 'bar');

普通にメソッドを定義すればよく、呼び出す時の書き方が違うだけ
0877デフォルトの名無しさん垢版2017/10/09(月) 21:30:40.03ID:EtpsZHXA
で、何をしたのかね?
0879デフォルトの名無しさん垢版2017/10/12(木) 16:28:32.59ID:5XRwFLPd
WWW-Curl-4.17.をインストールしたいと思っています。
perl Makefile.PLを実行して以下のエラーが出力されました。
原因と対応方法が分かる方、ご教示ください。

Locating required external dependency bin:curl-config... found at /usr/local/bin/curl-config.
The version is libcurl 7.19.6
Found curl.h in /usr/local/include/curl/curl.h
No working cpp (ファイルもディレクトリもありません。). Parsing curl.h in Perl at Makefile.PL line 105.
Building curlopt-constants.c for your libcurl version
Building Easy.pm constants for your libcurl version
Building Share.pm constants for your libcurl version
Generating a Unix-style Makefile
Writing Makefile for WWW::Curl
Writing MYMETA.yml and MYMETA.jso
0880デフォルトの名無しさん垢版2017/10/12(木) 22:11:19.78ID:5bT9xlHu
そのモジュールのことは知らないけど、とりあえず「cpp が無い」と言ってるようだね。
make と C をインストールすればいいと思うよ。
0882デフォルトの名無しさん垢版2017/10/13(金) 09:46:32.50ID:BQhKbAsH
880さん、ありがとうございます。
cppがインストールされていないのですね。。

pkginfoでみるとそれらしいものが入っているのですが、下記とは違うものでしょうか。
# pkginfo -i |grep cpp
system SUNWcpp Solaris cpp
GNOME2 SUNWsigcpp Libsigc++ - a library that implements typesafe callback system for standard
C++
GNOME2 SUNWsigcpp-devel Libsigc++ - a library that implements typesafe callback system for standard
C++ - development files
0883880垢版2017/10/13(金) 21:28:27.18ID:4p1OUNBb
問題は解決しましたか? Solaris のことは分からないのでこれ以上お役に立てそうにありません。
まだ解決していないのなら perlsolaris というマニュアルがあるはずですから読んでみてください。
その上で、Solaris のことをよく知っている人に聞くのがよろしいかと思います。
0884デフォルトの名無しさん垢版2017/10/14(土) 22:03:44.55ID:7hq5DvWK
ダメですね。。
もうちょっとネットで調べてみます。
0885デフォルトの名無しさん垢版2017/10/20(金) 15:42:18.30ID:1xv6Ebpc
流れを切ってすみません。
半角カタカナを全角カタカナにしてファイルに書き込みたいです。
Cannot decode string with wide characters at...
のエラーになります。どこをどう修正すればよいでしょうか。
use utf8; use Encode; use Encode::JP::H2Z;
open(IN, "<:encoding(cp932)", "src.txt");
open(OUT, ">:encoding(cp932)", "dst.txt");
...
#$strはファイルから読み込んだ文字列
Encode::from_to($str, "utf8", "euc-jp"); #どうもここでひっかかる
Encode::JP::H2Z::h2z(\$str);
Encode::from_to($str, "euc-jp", "utf8");
...
といったコードなのですが・・・。
Shift-JISのコードだと上手く動くのですが・・・。
utf8で標準モジュールの利用で行いたいです。どなたかよろしくお願いします。
0886デフォルトの名無しさん垢版2017/10/20(金) 17:53:57.14ID:P8duaFnv
目的がそれだけなら、こんな感じになるかな。

open( IN,'<','src.txt')
open( OUT,'>','dst.txt')

Encode::from_to( $str,'cp932','euc-jp');
Encode::JP::H2Z::h2z(\$str);
Encode::from_to( $str,'euc-jp','cp932');

どうしてかというと、from_to に渡すのは Perl の用語で言うなら文字列ではなくバイト列。
だから入力時にデコードする必要は無い。
日本語でのパターンマッチなどのためにデコードしてある場合は
from_to ではなく encode を使う。
Encode のマニュアルを読んでください。
標準モジュールしか使えないわけじゃないのなら Unicode::Japanese を使ってみてはどうでしょう。
0887885垢版2017/10/21(土) 02:31:17.21ID:JUnyPSe2
>886
返信ありがとうございます。
他に日本語の処理があるのでencoding(cp932)としています。
$str=Encode::encode('euc-jp',$str);Encode::JP::H2Z::h2z(\$str);
$str=Encode::decode('utf-8',$str);
としても
#$str=Encode::encode('utf-8',$str);#これの有無に関わらず
$str=Unicode::Japanese->new($str)->h2zKana->get;
(ためしにUnicode::Japaneseを使ってみましたが、標準モジュールで行いたいです)
"\x{xxxx}" does not map to cp932 at ....
とワーニングだらけで>:encoding(cp932)がうまくいっていないというか
それ以前の変換がうまくいっていないようです・・・。
0888855垢版2017/10/21(土) 02:40:01.52ID:JUnyPSe2
連投すみません。encodeとdecode間違ってるなと思い
$str=Encode::decode('euc-jp',$str);Encode::JP::H2Z::h2z(\$str);
$str=Encode::encode('euc-jp',$str);
とすると、
Wide character in subroutine entry at...
で出力が0バイトとなってしまいます・・・。
0889885垢版2017/10/21(土) 03:03:22.99ID:JUnyPSe2
何度もすみません。できました。
$str=Encode::encode('euc-jp',$str);Encode::JP::H2Z::h2z(\$str);
$str=Encode::decode('euc-jp',$str);
でした。
> 886
encodeを使うアドバイスありがとうございました。助かりました。
0890デフォルトの名無しさん垢版2017/10/28(土) 14:12:24.45ID:86e9E3uL
#!/usr/local/bin/perl

use strict;
use CGI::Carp qw(fatalsToBrowser);
print <<"EOM";
Content-tyoe: text/html; charset=shift_jis\n\n
<html><body>
EOM

eval {require DBI;};
if($@) {
print "DBI NG<br>\n";
} else {
print "DBI OK<br>\n";
}

undef $@;
eval {require DBD::SQLite; }
if($@) {
print "DBD::SQLite NG<br>\n";
} else {
print "DBD::SQLite OK<br>\n";
}

print "</body></html>";

sqlchk.cgiの19行目の構文エラー。 "){"
と出るんですが何が原因か分かりません。もしよろしければ教えていただけないでしょうか?
0892デフォルトの名無しさん垢版2017/10/28(土) 15:04:21.68ID:86e9E3uL
助かりました。ありがとうございました^−^
0895デフォルトの名無しさん垢版2017/11/22(水) 19:37:11.64ID:kPeZVcC+
(^────────────^)
0898デフォルトの名無しさん垢版2017/11/23(木) 18:54:17.85ID:8ru0xFWh
:────────────)
0899デフォルトの名無しさん垢版2017/12/05(火) 14:22:42.29ID:nNRKwkIq
APIアクセスでのレスポンスをDumperしたら下みたいに返ってきたんだけど
'https://hogehoge.hoge/'を取得するにはどうアクセスしたらいいです?

$VAR1 = bless( {
'url' => bless( do{\(my $o = 'https://hogehoge.hoge/')}, 'URI::https' )
}, 'Entity::Tag' );
0900デフォルトの名無しさん垢版2017/12/07(木) 10:28:22.13ID:OnTOXu6z
ファイルに書くときに、closeをせず明示的にフラッシュしたいんだけど
どうしたらいいの?

selectやautoflushは明示的ではないのでできれば使いたくない
0902デフォルトの名無しさん垢版2017/12/26(火) 21:57:47.00ID:PAyaH1Yv
=~ 正規表現で中身を置換ができる事は理解できたんですが、
中身を入れ替えたいんじゃなく別の変数に入れたいときはどう書けばいいんでしょうか?

現在の自分の知識だと、例えば引数にとった文字列を置換してある変数に入れるとき
$_ = $ARGV[0];
$_ =~ s/mukimuki/mukemuke/;
$hoge = $_;
こんな風に無駄に $_ を経由した書き方になってしまいます。
ほかの言語風に言うと
$hoge = $ARGV[0].replaceWith(s/mukimuki/mukemuke/);
こんな感じで書きたいのですが。
0905902垢版2017/12/27(水) 03:38:54.44ID:885vGvc2
>>903-904
的確なご回答ありがとうございます。
試してみます。
0906デフォルトの名無しさん垢版2017/12/27(水) 15:34:07.71ID:yY2jVcTO
perlスクリプトの稼働率は今どれくらいなんだろうか?

PHP流行から、徐々にフェードアウトしてるし
PHPオワコン説が流れだした頃から、perl6が登場したけど
存在感がないんだよなー
0907デフォルトの名無しさん垢版2017/12/27(水) 19:01:25.94ID:Rj9CQ2gH
DeNAとかmixiとかがPerIだけど、置き換えが進むだろうし
新規でメインスクリプトでってのはもうなかなか無いだろうね
0908デフォルトの名無しさん垢版2017/12/27(水) 19:28:49.86ID:tmtXLaBC
ちょっと何かするときはperl使うよ。慣れてるので何も見ずに書けるから。
phpがなぜ出てくるのかわからん。使ったことないけどあれwebアプリ用でしょ
0909デフォルトの名無しさん垢版2017/12/27(水) 19:55:51.39ID:bfruSbpL
ま、しかし、PerlはWebでしか使われてないわけではないからな。
0910デフォルトの名無しさん垢版2017/12/27(水) 19:56:46.60ID:bfruSbpL
>>908
多分Webプログラムでの事しか思い浮かばなかったのだろう。
0911デフォルトの名無しさん垢版2017/12/27(水) 23:26:51.61ID:+qI9wAl8
素人に毛が生えたレベルの低スキル層でも実用的なwebアプリ作れる点でPHPは凄いよ。
フレームワークの種類も情報量も多いし。
CLIも作りやすくなってる。一からCLIアプリ作るときにPHP使う優位性は無いけど
webアプリに付随するものとかなら十分。
0912デフォルトの名無しさん垢版2017/12/28(木) 00:19:43.19ID:O5Tikz8c
フォーマット変換とかテキスト一括処理系は、perlでなれるとどれもしっくりこないんだよなぁ。
shを補完する感じで使ってる最近は。

cとセットで使いたくなったらpython?を勉強するかもしれない。
0913ゆっきー ◆ExGQrDul2E 垢版2017/12/28(木) 03:17:44.94ID:NczIEmFQ
10年ぐらい前の入門書で、カンマとドットを間違えて
人工衛星が明後日の方向に飛んで言ったとか何とか、小中学生ぐらいの時に読んだ記憶が有る。
0914デフォルトの名無しさん垢版2017/12/28(木) 09:29:38.01ID:wX0EFIYP
そういやそんなことあったなあ。
0918デフォルトの名無しさん垢版2017/12/31(日) 12:51:33.73ID:6G2PkezB
>>913
それ、打ち上げ延期
0919デフォルトの名無しさん垢版2018/01/01(月) 05:59:15.42ID:4wMbPbHX
>>918
あ、それで済んだの?そうか、じゃあ都市伝説か。
0920デフォルトの名無しさん垢版2018/01/01(月) 12:14:32.50ID:rcsYJFXY
>>908
PHPが重宝されてるのはDB連携のPDOが便利すぎてハゲるから
PDO一つあれば、オラクル、ポスグレ、mysql、sqlサーバー、DB2、SQLITEなんでも
同じ記述で接続できるからな

ただ、関数定義に一貫性がない、変数スコープのグローバル化が面倒、
型変換で楽しいバグが発生するなど

素人向けと思って甘く見ると大火傷する諸刃の剣
0921デフォルトの名無しさん垢版2018/01/01(月) 12:30:16.97ID:zAUlE2YO
手に馴染んだ道具として今後もperlを使うだろうな
rubyに持ち替えた方が使い勝手はいいんだけど、
そもそもrubyが無い環境が多いので使えなくては意味がない
0922デフォルトの名無しさん垢版2018/01/01(月) 18:55:01.09ID:FPPCegVg
perlの持ち替えならpythonがいいと思う。
特に最近のlinux系はpythonものが増加傾向だし。
でもまあ、perlあればokじゃね?というのが正直なところ
0923デフォルトの名無しさん垢版2018/01/02(火) 12:32:50.81ID:Q+9WD3Xu
今年の目標は、新たに言語を勉強することなんだが
Perl、Python、Rubyの違いとそれぞれのメリットを
教えてくだされ
0925デフォルトの名無しさん垢版2018/01/02(火) 16:34:43.56ID:pQ/3ped7
>>920
DBはPerlでもDBIと各DB用のDBIモジュールがあれば同じようにアクセスできるよ。
てか、その辺は他の言語でもだいたい同じようにできないか?みんなJavaのJDBCの影響受けて接続部分で違いを吸収してなんとかしてるように思うんだが。
0926デフォルトの名無しさん垢版2018/01/02(火) 16:36:32.56ID:pQ/3ped7
>>925訂正

> 各DB用のDBIモジュール

じゃなくて

各DB用のDBDモジュール
0929デフォルトの名無しさん垢版2018/01/03(水) 20:21:48.88ID:vVUVg3Hi
Perl習得も今年の目標の一つなんだけど
Linuxの環境構築しておいた方がいい?

それともwin64でもサクサク動かせる?
0930デフォルトの名無しさん垢版2018/01/04(木) 11:48:53.39ID:vxw86c0g
windows環境でperlなんてまず使わないだろうし、linux環境構築したほうがいいんじゃない?shも覚えるし。。。

webページ作りたいならperlはやめとけ
0931デフォルトの名無しさん垢版2018/01/04(木) 18:26:44.77ID:Eqt08FX4
>>929
どうしてもっていうならWindowsでもいいとは思うがいまいち面倒かも知れない。
知っての通りファイルシステムやその他細かい点が色々違うから。

かといってわざわざ Linux 動く環境を作るのは面倒だという場合は
Windows Subsystem for Linux 使えばいい。これだと Kernel は
Linux のふりをして動く Windows になって、その他は Linux とほぼ同じだ。
Windows 内のファイルは /mnt/c/ にマウントされていて Windows 用の
コマンドも(全てではないと思うが)使える。
0933デフォルトの名無しさん垢版2018/01/04(木) 18:51:32.73ID:M2GmV8ZJ
要はダクトテープだから
それを必要とする環境で使うのが一番

日常的にいろんな作業をlinux上でしてるなら、きっといろいろ役立つ
そうでないなら用途が見つからない
0934デフォルトの名無しさん垢版2018/01/04(木) 21:49:12.83ID:bZ/07R3T
ありがとう、こっちの住民は親切で助かったよ
WSLはもっと調べて導入検討するわ

>>933
仕事でかなりLinuxは使ってるよ。特にVMは仕事で必須なんで
一からセッティングしてる

どうしても起動系とかハード周りになると
Perlの知識ないときつい部分が出てきたんで
0935デフォルトの名無しさん垢版2018/01/05(金) 19:25:38.46ID:T2NhU/kF
WSLは結構便利だと思うよ。何せWindows側のコマンド動くし、起動時にWindows側のPATHを /mnt/c 以下のディレクトリとして引き継いでくれるし。
前にKotlinをインストールした時はWindows側で C:\kotlinc 以下にインストールしてその下の bin に PATH 通しておいたら WSL の方でもそのままそれが使えた(JavaVMは別途インストールしたけどね)。
こんな感じで共有が当たり前のようにできる。

まあしかし今のところサーバー用のプログラムは完全には動かないだろうからサーバーとしての動きを期待するならやはり VirtuslBox とかで Linux 動かした方が良いだろうね。
または古いPC等に本当にインストールする。
0936デフォルトの名無しさん垢版2018/01/05(金) 22:44:53.33ID:2xeG2hRa
ファイルにロックをかけないでロックされているか調べる方法あったらやり方教えて
flockだとロックかけちゃうのでだめです
0938デフォルトの名無しさん垢版2018/01/06(土) 06:45:30.55ID:MH4bKWED
fcntl のマニュアルには、できるようなことが書かれてるけどどうか。
申し訳ないが実際に試してみるほど暇じゃないから、役に立つかどうかは自分で判断してほしい。
0939デフォルトの名無しさん垢版2018/01/06(土) 11:11:20.45ID:3YD8ke1c
ロックしていないのに、ロックしていることを調べるとはこれ如何に。

まぁ、一般には、pidを別ファイルに保存しておいて占有するプロセスをはっきりさせるんじゃないかな〜

ハードリンクとkill -0あたりで調べてみるとよろし??
0940デフォルトの名無しさん垢版2018/01/06(土) 11:27:28.32ID:uhIItiyd
セマフォの処理はてきとーに作ってもだいたい動くんだけど、
極まれにおかしくなる
完璧に作ろうと思うとなかなか大変
っていうか、OSが提供してなかったら無理
0941デフォルトの名無しさん垢版2018/01/06(土) 23:54:48.69ID:aO8vJyO+
>>936
ちょっとぐらいロック掛かってもいいじゃん。
F_SETLKなら他がロックしてたら待たずに即エラーになるんだし。
エラーにならずにロックできたら他にロックしてるやつは居なかったってことだよ。
0942デフォルトの名無しさん垢版2018/01/06(土) 23:56:53.89ID:aO8vJyO+
あ、ごめん。fcntl()でのロックのはなしじゃなかったか。じゃあfcntl()使って。
使えないOSの場合は何かテクニックがあると思うがその場合はOSを書いてくれないと誰も答えられないと思う。
0944デフォルトの名無しさん垢版2018/01/07(日) 06:11:20.40ID:VUVSKv67
まあ落ち着け。まずは何のためにしたいのかということが重要だと思うよ。
ロックを試みることで他のプロセスの邪魔をしたくないというのも目的によっては理解できる。
目的によってはデータベースを使うのが最善かも。
0945デフォルトの名無しさん垢版2018/01/07(日) 12:06:33.05ID:esrWpXaw
>>936
> ファイルにロックをかけないでロックされているか調べる方法あったらやり方教えて

不可能だよ

なぜなら、仮にそういう関数が有ったとしても
ロックされていると判断した1ナノ秒後には
ロックが解除されてるかもしれないから
もちろんその逆もありうる

つまり関数を実行している時点では正しかったかもしれないが
関数から結果の戻り値を取得した段階では
間違った結果になってるかもしれない
0946デフォルトの名無しさん垢版2018/01/07(日) 13:16:21.35ID:9kbWRuZM
だから不可能では無いんだよな
その時点でそうだったことは判る
でも、その情報を元に何かをすることが出来ないので、
情報の使いみちが無い
0947デフォルトの名無しさん垢版2018/01/07(日) 17:39:55.82ID:xuWfGrV5
>>943
fuserはオープンしてるプロセス出すだけなのでロックしてるかどうかはわからない。
lsofだとそこまで出る。
0948デフォルトの名無しさん垢版2018/01/07(日) 17:43:16.42ID:xuWfGrV5
>>946
使い道は単に確認するだけならあると言えるんじゃないか?
lsofコマンドみたいな確認するだけのコマンドもあるしな。

まあでもほとんどない事は確かだな。やはり自分でロックして成功するかどうかで見た方が良い。
0949938垢版2018/01/07(日) 17:58:29.25ID:VUVSKv67
そのファイルに対して何かしたいとはどこにも書かれていないんだけどな。
彼が充分に説明しないのが悪いというなら確かにその通りだが。
0950デフォルトの名無しさん垢版2018/01/08(月) 02:39:29.72ID:3kxjIyqg
コマンドプロンプトを自動で開いてperl aaa.txtを自動起動させることはできませんか?
OSはwin7です
目的は複数のperlファイルを数秒で起動することです
日に何度かやるので、手間を省くために1個のperlプログラムを実行すれば10個のコマンドプロンプトが開かれてaaa1からaaa10まで全部実行、みたいにしたいです
0951デフォルトの名無しさん垢版2018/01/08(月) 03:02:25.00
>>950
できるっちゃできるけど、その起動をPerlでやる必然性あるの?
バッチファイルでやればよくね?
perl_start.batに
start perl aaa1.txt
start perl aaa2.txt
みたいに書き連ねりゃいいだけじゃん
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+
マニュアルには書かれてなかったのか……まあ、信頼性の低い方法だしね。
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を超えています。これ以上書き込みはできません。

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