X



Perlについての質問箱 63箱目

レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
垢版 |
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/
2デフォルトの名無しさん
垢版 |
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/
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/
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
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;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。
2014/02/19(水) 23:46:41.13
糞スレいくつも立ててんじゃねーよ
いい加減にしろ

http://toro.2ch.net/test/read.cgi/tech/1392639772/
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の今後
他言語に対する優位性がほとんどないため、消滅に向かって進んでいる。
近い将来消えるのは確実。
2014/02/20(木) 01:15:48.35
TIOBEって日本じゃほとんど聞いたことがないよね?Perlは日本語をちゃんと処理
できる数少ない処理系だから、海外とは状況が違うと思うんだよね
2014/02/20(木) 01:40:45.62
自分がほとんど聞いたことがないという無知っぷりを晒しつつ
その前提で語る基地害がPerl厨
2014/02/20(木) 02:48:27.42
乱立してる統計サイトの内の一つで、たいしたサイトじゃない。

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

こんなもんに一喜一憂するのはアホのする事。
#別に「Perlが落ち目じゃない」と主張するつもりも、毛頭無い。
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/
2014/02/20(木) 07:42:53.27
WebProgの方で、その活動すれば?
そのスレの内三つは荒しが立てたスレだし、Perlと名前が入るスレ自体も10個しかないけど
向うには両手に余るくらいのスレは乱立してるぞ。
2014/02/20(木) 11:23:00.57
久々の正式なスレ立て乙

個人的には「ミニマルPerl」が俺の目を覚ましてくれた本だなあ
まあ、解ってる人には間違いなく退屈な本だけれども
2014/02/20(木) 16:17:33.48
スレ乱立のうちの1つだから全く乙じゃない
ただの迷惑行為
2014/02/21(金) 00:39:44.03
重複によりこのスレには削除依頼が出されました
↓のスレに移動してください

【誘導】
Perlについての質問箱 63箱目
http://toro.2ch.net/test/read.cgi/tech/1392906213/
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/
2014/02/21(金) 15:41:53.76
例のPHP厨毒の精神異常者がスレを乱立させてから動きがパッタリやんだが、規制食らったのか?
それとも夜に活動が再開されるのか?
2014/02/21(金) 15:48:29.84
乱立させてたのってPHPユーザーなの?

てっきりPerl厨だと思ってたんだけど。
スレ乱立とか頭の悪いことをするのはPerlを選ぶような知能の低いPerl厨くらいしかいないだろ。
2014/02/21(金) 16:10:45.03
php厨()とか妄想をベースに考えるから、事実と整合性が取れなくなって>>17みたいな書き込みをするようになる
というかその不整合からくる違和感に耐えられなくなって書き込んでるって言ったほうが正解か
>>17は自覚がないみたいだけど糖質の疑いがある
2014/02/21(金) 17:14:07.34
自演乙
2014/02/21(金) 17:39:17.06
>>17
糖質も発見が早ければ投薬で治療できるから病院行ってみたら?
2014/02/21(金) 18:43:53.70
自己紹介乙
2014/02/21(金) 19:36:32.84
>>17ってまさか本当に自覚ないのかな。
2014/02/21(金) 19:39:12.82
>>23
>>23
2014/02/21(金) 22:00:12.92
自覚があれば病院行くだろうし
糖質と診断されればネットは控えろと言われるだろうから
こんなところにはいない
2014/02/21(金) 22:18:44.98
罵倒スレのほうが内容にマッチしてるじゃん、何でわざわざ質問箱で立て直したの?
2014/02/22(土) 02:27:43.89
Perl厨にとってはこれが質疑応答なんだよ
2014/02/23(日) 08:57:46.27
朝勃ちんこ
2014/02/24(月) 19:35:06.10
Perl=ちんこ言語

男のちんこをしゃぶれない弱輩には使いこなせない言語
2014/08/22(金) 18:02:07.86ID:+einZQJ5
http://www.buzzword.jp/img/face10.png
31デフォルトの名無しさん
垢版 |
2014/08/23(土) 00:49:39.55ID:j4ngjv2t
ぐろ
2014/09/05(金) 22:30:13.20ID:S+Rzc4u+
>>30
グロ
2014/09/05(金) 23:11:47.51ID:p4jkMY4H
亀頭?
34デフォルトの名無しさん
垢版 |
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.
と止まってしまいます。
解決策を教えてください。
2014/12/11(木) 17:08:56.68ID:aWaBOmKM
>>34
OSは何?
36デフォルトの名無しさん
垢版 |
2014/12/13(土) 11:26:51.16ID:sck7BTkh
MacOSX1068です
2014/12/13(土) 13:22:37.60ID:toJAZvUP
>>36
mac持ってないから試せないけど、一応これで動くんじゃないかと。
adhocな対応でセキュリティ考えてないから注意してね。

open my $fh, '<', \(my $dmy = `@cmd`) or die "Can't exec @cmd";
38名無しさん@そうだ選挙に行こう
垢版 |
2014/12/13(土) 13:39:32.35ID:SQgyoVwB
えーん
39デフォルトの名無しさん
垢版 |
2015/01/03(土) 02:38:43.41ID:fziQOJOK
hage
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 等で切りだす事はできません。わかる方宜しくお願いします。
2015/06/09(火) 00:25:53.38ID:lkN1yBxE
文章が不透明だから分からなくなる。(誰にも分からない)。
正規表現は完璧に仕様を出さないと書けない。出せば単にそれを書くだけ。


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

まぁ辞書やないんやけどな。ここは。
2015/06/09(火) 00:26:47.75ID:lkN1yBxE
あ、行頭は3文字か
^([a-z]{3})
43デフォルトの名無しさん
垢版 |
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の部分が取得できないんですけど
フルに取得できるにはどうしたらいいんですか?
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」 だから、それが取れれば
十分なのでは?

その中の一部を取り出したいなら自分で好きに取り出せばいい
4544
垢版 |
2015/10/01(木) 13:19:49.64ID:NghmrQed
スマヌ質問内容理解してなかった
だがPerl関係なくね?
46デフォルトの名無しさん
垢版 |
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"));

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


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

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

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

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

sub TOKYO {

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

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

バグ発見!

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

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

バグは治る!

すぐに対処を申請します!
54デフォルトの名無しさん
垢版 |
2015/11/21(土) 21:10:33.25ID:WD+kKzRm
>>50
セッションって?
2015/11/21(土) 21:12:29.73ID:WD+kKzRm
あっ、2週間前のレスだったすまん
56デフォルトの名無しさん
垢版 |
2015/11/23(月) 21:01:14.60ID:4+JhTSZZ
a
57デフォルトの名無しさん
垢版 |
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;

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

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

文字を表示しているソフトは、何を使っているの?
2015/11/24(火) 00:53:35.74ID:s947wE2H
>>57
文字化けしてないよ
2015/11/24(火) 00:56:04.50ID:s947wE2H
yahoo.co.jpは301 Moved Permanently だけど、move先を指定しても文字化けはない
2015/11/29(日) 01:33:56.66ID:rf1AiNx3
win10の64bit版でperl32bit版動くかな?
ちなみにwin7の64bitではperl32動いてます
2015/11/29(日) 03:12:21.07ID:rf1AiNx3
もう1個のスレのほうがメインみたいなのでそっちで聞いてきます
63デフォルトの名無しさん
垢版 |
2016/02/12(金) 18:03:25.55ID:/96fpKw+
ヒアドキュメントで表示は
print <<"EOS";
(中略)
EOS
だけど
これをファイルに書き込むにはどうしたらいいんですか?
2016/02/13(土) 12:32:20.94ID:+ZsFTbcU
print $fh <<"EOS";
中身
EOS
65デフォルトの名無しさん
垢版 |
2016/02/14(日) 03:31:58.89ID:kuEFe+X3
別解として
perl script.pl > file.txt
66デフォルトの名無しさん
垢版 |
2016/02/14(日) 18:40:21.30ID:kuEFe+X3
もしかして、Windowsのスタート→プログラム→アクセサリ→メモ帳
を実行して
print <<"EOS";
(中略)
EOS
を打ちこみ、メモ帳のメニューのファイル→名前を付けて保存
のほうを知りたかったのですか?
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()を呼び出せる。
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の話は元スレへどうぞ
2016/02/16(火) 10:39:05.36ID:rD0NYg0s
面白いというか、みんな知ってると思う
2016/02/17(水) 00:31:54.19ID:xaInBBRG
うん。そしてそれが有用ならもっと使われているはずだが、現実はあまり使われていない。
コードが実行時に生成されるようなダイナミックなものはデバッグ、テスト、保守がしにくい。
2016/02/17(水) 00:40:54.86ID:wnysiCN2
>>70
何の話してるのお前?
2016/02/19(金) 00:01:04.65ID:ifdckMGM
文字列の/*と*/で囲まれた部分と/*と*/に色をつけたい

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

$str="/*//////abcdef/////*/";の場合はうまくできませんでした。
どうすればうまくいくのでしょうか?
2016/02/19(金) 01:43:09.22ID:jNAd9H+F
$str = ̄ s{(/¥*.*?¥*/)}{<font color=”green”>$1</font>}g;
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";

}
75デフォルトの名無しさん
垢版 |
2016/02/22(月) 22:57:33.32ID:mB6Cjpa0
それで合ってるよ。
http://perldoc.jp/pod/perldsc
を読みなさい。
$data->{
76デフォルトの名無しさん
垢版 |
2016/02/22(月) 23:01:42.17ID:mB6Cjpa0
ごめん、ちゃんと書いたのに何かアクシデントがあったようだ。もう一回送るよ。

それで合ってるよ。
http://perldoc.jp/pod/perldsc
を読みなさい。
$data->{"data1"}->[$i]
が正式な書き方だが (配列|ハッシュ)要素の参照が連続していれば間の矢印を省略してもいい。
個人的には、リファレンスだということを意識していたいから省略しないけどね。
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";
7874
垢版 |
2016/02/23(火) 09:55:37.41ID:usPktkPU
>>75-77
勉強になりました。
ありがとうございます。
2016/02/23(火) 10:27:03.85ID:usPktkPU
Web::Scraperでスクレイピングしているのですが
サンプルでは
use YAML;
warn Dump $res;
という書き方でこの方法だとデータの構造がよくわからないのですが

Dump何をつかっているのですか?
Ubuntu14.04の64bitを使っています。
8079
垢版 |
2016/02/23(火) 11:04:41.58ID:usPktkPU
>>79
データの構造はData::Dumperをイントールしたらわかるようになりました。
すみません。
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};
}
2016/02/24(水) 19:01:01.43ID:1Q1vaK3L
>>81
なんで同じのが2書いあるんだよ
2016/02/24(水) 22:23:15.99ID:VYWYZ9lH
>>81
my $links = $res->{list}[1]{link};
for my $link ( @$links ) {
  say $link->{$_} for qw/url title/;
}
2016/02/24(水) 22:43:39.56ID:PL8yH0Su
>>83
say forの行が気持ち悪い。やり直し
2016/02/24(水) 22:47:52.27ID:VYWYZ9lH
>>84
やり直し(キリッ
じゃなくて自分ならこうするというのを示せよw
8681
垢版 |
2016/02/25(木) 09:33:24.21ID:AM2kna+z
>>83
ありがとうございました。

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

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

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

新しい書き方だとこんなのもあったり(postfix dereferencing)
$res->{list}[1]{link}->@*
2016/02/26(金) 12:14:26.93ID:lmpGubNL
1位は「Python」、プログラミング言語別の平均年収ランキングが発表
http://www.mdn.co.jp/di/newstopics/44248/

2位には「Perl」(平均年収633万円)、3位には「Ruby」(平均年収606万円)がランクインした。
89デフォルトの名無しさん
垢版 |
2016/02/27(土) 00:21:51.17ID:7I91l6Zs
>>67-68
超亀レスですがありがとうございます、勉強になりました!
90デフォルトの名無しさん
垢版 |
2016/02/27(土) 00:49:08.38ID:fhIzDVzC
my $date = '平成28年2月26日18:55';
my $week = '金';

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

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

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

プログラム内に入力している日本語がprint表示するときにくずれるようです。
2016/02/27(土) 14:23:16.95ID:VqgeV1ea
${week曜日}
${week}曜日

>プログラム内に入力している日本語がprint表示するときにくずれる
やっぱutf8フラグかなあ…
9592
垢版 |
2016/02/27(土) 14:55:51.07ID:fhIzDVzC
すみませんプログラムミスでした。
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');
2016/03/05(土) 17:32:45.69ID:Kk7Ussws
>>96
いや、年の引き算って言っても一年は365日とは
限らないんだから、仕様を決めないとだめでしょ?

例えば2月29日の1年前は何日なのか?っていう。
2016/03/06(日) 18:03:04.50ID:OXa3i/Gy
$str =
2016/03/07(月) 00:42:40.54ID:Gv57dso9
>>96
年月日に分けたのち、年を -1 する。
2016/03/07(月) 06:16:56.64ID:eudRNLDZ
だからそうすると2月29日が出来てしまうって言ってるわけ
101デフォルトの名無しさん
垢版 |
2016/03/07(月) 21:18:09.27ID:jBGm+KXA
pythonのスクリプトの頭に、use strict;って書いた。頭いかれてきたw
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);
}
# 基本に忠実に。応用はそれから
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
引けばいいだけだろ。
2016/03/09(水) 00:16:20.50ID:Djq1Ua6S
この場合は 2015/02/29 が欲しい答え
2016/03/09(水) 05:51:47.62ID:BRdU+Z94
バギーなコードが眼に見える様だ
2016/03/10(木) 00:41:03.49ID:m8iGuBqw
要件にない仕様を自己満足で追加してはいけない
この件はTime::Pieceだとうまくこなせない問題
融通がきかないのがオレオブジェクトのつらいところだ
2016/03/10(木) 06:53:37.48ID:cOoRDwdC
Time::Piece関係ねーだろ。
頭悪いな。
2016/03/13(日) 00:11:27.55ID:W4AXq/NT
localtimeとTimelocalは次スレのテンプレに追加するか
同じ質問が繰り返されてみんな同じところではまるからなあ
109デフォルトの名無しさん
垢版 |
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";を挟む形になってしまうので
これらをまとめてサブルーチン化したくてもできません
こういう場合でもうまくサブルーチン化できる方法を教えてください
2016/03/17(木) 17:41:21.64ID:H1m/hwv2
エラーメッセージの出力時にContent-typeから出力すればいいのでは
2016/03/17(木) 18:09:04.11ID:r8Uypp4J
>>109
そのためにCGI.pmなどのライブラリや
各種フレームワークがある。
2016/03/19(土) 22:54:54.53ID:zQsVsKn8
my $kukkii =
2016/03/20(日) 14:44:26.98ID:AaFdygkh
'';
114デフォルトの名無しさん
垢版 |
2016/03/20(日) 23:05:38.19ID:ZT1ttS3p
何をしたかったのかよくわからないけど、せめて cookie と書いてほしかった。
2016/03/21(月) 23:09:59.48ID:mpXdX/cy
住所を入れる変数でさ
$adoresu = ・・・
みたいな名前つかうヤツ、いるよね
英語なのか何なのか、よくワカラン
2016/03/23(水) 01:56:25.05ID:isz3o5XG
$message = エラーメッセージを取得;
print "Content-type:text/html\n";
if(エラー数が0の場合){
  投稿データをクッキーに書き込む処理
}
print "\n";
print $message; # エラーメッセージの表示処理
117デフォルトの名無しさん
垢版 |
2016/03/23(水) 21:53:51.11ID:ftv772ff
my $str = "あああabcあああcdefghあああ123456";

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

あああAAAあああAAAあああAAAになればOKです
118デフォルトの名無しさん
垢版 |
2016/03/23(水) 23:01:13.44ID:OHojQvKP
ここで聞くよりも
http://perldoc.jp/pod/perlrequick
を読みなさい。その方が早くて正確です。
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";
2016/03/25(金) 01:11:07.68ID:v9Mc4pMx
ありがとうございます。おかげで宿題を提出することができました。
リンク先のページを読んでも何が何だかさっぱり分かりませんでした。
2016/03/27(日) 01:06:33.94ID:jno5DU+g
パールでまた問題に直面したら話題を提供してあげますので楽しみにしてるんだぞ。
2016/03/27(日) 15:47:58.07ID:HfxbfBB0
ありがとうございます。
123デフォルトの名無しさん
垢版 |
2016/04/14(木) 19:01:51.27ID:v1e64Ann
ファイル演算子の-eと-fの違いは?
ファイルが存在するかどうかはどっちを使っても良いのですか?
124デフォルトの名無しさん
垢版 |
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;

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

>>124
openの次の行にbinmode $fh;
126124
垢版 |
2016/04/14(木) 21:09:45.25ID:G3MchQfa
>>125
ありがとうございました。
初心者なもので、もう丸一日困っておりました。
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の環境は、パスさえ設定しておけば、特に支障はないのでしょうか?
2016/04/24(日) 16:10:25.44ID:pOtqw7s6
最後の行だけ。
普通に、echo $(plenv init -)すれば、標準出力に内容が出ます。
2016/04/24(日) 17:03:31.20ID:jLfEtDRT
>>127
そーすこーどにぜんぶかいてあります
130127
垢版 |
2016/04/24(日) 23:45:45.94ID:WFRvhXno
>>128

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

そーすこーどみれだけどなw
132デフォルトの名無しさん
垢版 |
2016/04/27(水) 09:59:00.96ID:I/i5T1uZ
openで開いたファイルをcloseで閉じる前にexitなのでプログラム強制終了した場合
自動的に閉じられてますか?
何か問題ありますか?
2016/04/27(水) 13:09:15.67ID:3LxG86Of
closeされることが保証されるわけではないが、普通のOSなら
OSがcloseを発行する。何を問題とみなすかによるが普通は問題ない
2016/04/28(木) 01:35:18.90ID:rK49iHPu
cgiなら問題ないけどmod_perlとかだとファイルディスクリプタ消費したままになる
135デフォルトの名無しさん
垢版 |
2016/04/28(木) 02:09:41.77ID:hmSh3kQm
exit ではなく die を使うという方法もある。もちろん eval ブロックの中で。
2016/04/29(金) 11:09:29.51ID:OUpC6wqc
END {
  close(FILE);
}
もしくは
open(my $file,'file.txt');
だな
137デフォルトの名無しさん
垢版 |
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;

}

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

use Errno 'EBUSY';
if ( rename( $src,$dest)){
# 成功
} elsif ( $! eq EBUSY){
# 多分、別のプロセスで使用中。少し待てば成功するかも。
} else {
# 待っても無駄だろう。
die( $!);
}
139デフォルトの名無しさん
垢版 |
2016/04/29(金) 20:50:54.01ID:bfvjxGWD
ごめん、間違えた。
$! eq EBUSY
じゃなくて
$! == EBUSY
140デフォルトの名無しさん
垢版 |
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時間以上考えてますができません。
141140
垢版 |
2016/04/30(土) 11:01:02.01ID:DNyH92Gg
間違えました。

置換したです→置換したいです
2016/04/30(土) 11:11:29.23ID:dxKZGhAw
正規表現は少しでもほんの条件が不明瞭であれば誰にも書くことはできない
143140
垢版 |
2016/04/30(土) 11:14:44.17ID:DNyH92Gg
自己解決しました。

$a =~ s/(^.*)\<li\>(.*$)/$1\<li class\=\"a\"\>$2/s;
144140
垢版 |
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">に置換したいです。
2016/04/30(土) 12:40:49.01ID:nOun1cZC
木構造のものを正規表現で置換するのは無理

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

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

パースするライブラリ使えっつーのは同意だがな
2016/04/30(土) 15:46:02.92ID:Z/JJxf61
ああ、否定の文字クラス使わんでも出来るわ。
アホだ俺
148140
垢版 |
2016/05/01(日) 14:05:59.88ID:mZCC86OL
>>145
ツリー構造というよりまさにあの並びの時だけの正規表現でいいんでPerlでやりたいんです


>>146
ありがとうございます
$a =~ s/\<li\>([^\>]*?\<\/li\>\s+\<\/ul\>)/\<li class\=\"a\"\>$1/sg;
では動きませんでした
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/// の右辺は正規表現ですらない(よってエスケープの必要無い)し。
2016/05/03(火) 07:34:49.17ID:PeIabFbi
\現\実 !−=≡ヘ(* - -)ノ
2016/05/03(火) 22:19:44.35ID:u2mE3+tw
/[0-9]{$num}/

のような量子数は変数にできないんでしょうか?(^^?
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";
}
2016/05/04(水) 17:17:13.34ID:cuRcUS6e
>>152
ありがとうございます。
変数は使えたんですね!

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

/[0-9]{$num+1}/
のような使い方がだめでした orz
154デフォルトの名無しさん
垢版 |
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 はデバッグしにくい。
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";
}
156153
垢版 |
2016/05/05(木) 19:10:09.77ID:eJss6EWw
>>155
すごーい\(^^)/
ありがとうございます!

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


while ( $line[0..2] = <DATA> ) {
print $line[0];
print $line[1];
print $line[2];
}
__DATA__
なんたら
かんたら
たらのめ
158153
垢版 |
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
2016/05/05(木) 21:40:51.68ID:AhXWZZ47
@line[0..2]
配列スライスのシジルは@
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
161デフォルトの名無しさん
垢版 |
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';

上のような文字列で<〜>(タグ内)に囲まれた"だけ
162デフォルトの名無しさん
垢版 |
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つのみ " に置換されるだけです
よろしくお願いします
163162
垢版 |
2016/06/01(水) 12:36:41.40ID:6wx+Ihuz
タグの外側だけ置換する方法としては下記がどこかに載っていました

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


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

この文法チェッカもいつの間にか消えてました
http://homepage2.nifty.com/sophia0/perl.html
168デフォルトの名無しさん
垢版 |
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.
169デフォルトの名無しさん
垢版 |
2016/06/01(水) 14:11:20.95ID:MHn5bFUb
置換の r オプションは 5.14 からです。従来通り
perl -pe 's{(?<=&lt;)(.+?)(?=&gt;)}{ ( $str = $1) =~ s!&quot;!\"!g ; $str ; }eg'
みたいな感じでどうでしょうか。
170デフォルトの名無しさん
垢版 |
2016/06/01(水) 14:17:56.91ID:6wx+Ihuz
>>169
できました!
本当にありがとうございました!
(Perl 5.8.8なのにエラーが出たのは謎ですね)
2016/06/01(水) 20:08:28.85ID:2S8m0KQ+
5.14(新しい) > 5.8(古い)だぞ
2016/06/01(水) 21:17:48.26ID:1kxD8r4Z
そいや5.24でpushやpop,shiiftなどにリファレンスを渡したときの
自動デリファレンスが止めになったのはなぜ?
折角5.14で入れた機能なのに。
2016/06/01(水) 21:25:33.54ID:BXoQUtbW
なぜも何も。

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

>>177
ありがとう
無事いけた
コマンドライン詳しくないから、NULでひかかった
NULの代わりに、list.txtなどにするとサクッと記録された
速度滅茶苦茶早いなー
2016/06/04(土) 15:10:16.50ID:d7ojMir6
ループの条件を満たしてなくてもredoでループされるんだけど、そうゆうことでいいのかな
180デフォルトの名無しさん
垢版 |
2016/06/04(土) 15:25:38.27ID:wKu/P36l
そのための redo だから。

http://perldoc.jp/index/function
2016/06/04(土) 16:50:14.92ID:d7ojMir6
>redo コマンドは、条件を再評価しないで、ループブロックの始めからもう一度 実行を開始します
そうかそうか、これが欲しかった。どうも。
2016/06/08(水) 04:54:48.15ID:c/sFGpfw
ちょっと相談と言うか、バグの原因が想像つかなくてこまっちんぐなんだけど、

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

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

本来は9.22KB程度出力されるはずで、これはプロセスが終了したら出力される。
2016/06/08(水) 05:03:29.17ID:c/sFGpfw
ちゃんとcloseを記述したら直りました。
2016/06/08(水) 05:36:30.43ID:tfudflM8
どうしても即時出力したいなら、バッファリングで検索
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;
2016/06/08(水) 15:38:30.27ID:c/sFGpfw
そら最低の理論値でも10GB分HDDから読み出しして10GB分HDDに書き出ししないとな
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;
2016/06/09(木) 08:19:20.98ID:5xTa9iMx
>>185
環境によるのでもう少し小さいデータと思いついたコードでベンチ取れとしか。
http://perldoc.jp/docs/perl/perlperf.pod
2016/06/09(木) 08:56:02.57ID:a3MG4bWs
>>185
単純な置換、大きなファイルサイズなら、
perl より sed 使ったほうが速いかもな。
2016/06/12(日) 12:28:41.66ID:JDueIOd3
どんな言語で書いても10GBのHDDをアクセスすること自体に変わりはない。
温度が上昇してエラーになるなら、扇風機で冷やしながら実行するとよい。
2016/06/12(日) 13:25:11.80ID:ve4Ih4ce
そうかなー
スクリプトだとなにやられてるんだか分からない印象だけど
2016/06/12(日) 13:26:20.33ID:0HO5/jac
そもそも10GBのテキストなんざ、
今の基準で言えば普通よりちょっとデカい程度。

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

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

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

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

187はコードが見やすくなるからテストでは結構使ってる
そのまま忘れてて大きなファイルを解析させてたりもある
みんな185形式で書いてるの?
2016/06/12(日) 18:23:39.84ID:wrakKGfW
速度も考えて最近は配列に貯めてからすることがある
ただWindowsだとすぐout of memoryでる
2016/06/12(日) 18:58:39.76ID:ve4Ih4ce
まあ自分のPCならサブマシンでもメモリ32Gあるし別に・・・って感じだが
2016/06/12(日) 19:00:15.13ID:ve4Ih4ce
でもPerlってメモリの量が異常に増えるんだよね
10MBのデータを読み込んでごにょごにょしてたらなぜかメモリ200MBになってたり
普通にネイティブな言語使ったほうがいいのでは
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時半まで処理掛かってる。
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の負担は変らん。と何回指摘されりゃ気が済むんだ?
2016/06/12(日) 21:54:39.02ID:0HO5/jac
>>200,>>201は、>>196へ。
2016/06/12(日) 23:18:14.97ID:wrakKGfW
>>201
今の時代マシーンパワーに物言わせてと言うことが意外と出来きてしまう
勿論、限度はあるけど
朝までに終わればいいわ程度で一度コード作ったらあとは触らないとかね
それと、昔デフラグし過ぎるとHDDが壊れるとか言われてた
出力される量でHDDの劣化が決まるって話だけど、細かいファイルを大量に書いたり作成するのはHDDにとって過大な負担になるんじゃない?
例えばだけど、100GBのファイル一つ書き込むのと、1バイトのファイルを100GB分毎回書き込むのでは違うと思うのだが?

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

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

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

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

だからHDDの負担は増える。
2016/06/12(日) 23:52:30.66ID:xguVhByI
ちなみに、出力される量も実際に変動する。

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

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

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

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

>>187
>$| = 1;
は、*OUTのフラッシュになんの関与もしていないけど。
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しないと効かないっぽいな
2016/06/13(月) 01:15:56.79ID:w1lAZiF2
夏場なんで、while ブロックの先頭に
sleep 2 unless $. % 10000;
を入れるとよい。2つの数字は調整してみてくれ。
210デフォルトの名無しさん
垢版 |
2016/06/13(月) 15:19:04.03ID:bjrR9GHC
#!/usr/bin/perl -w

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

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

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

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

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

https://ideone.com/Nh4Esi

Linux 限定だけど無修正で実行できる。
実行時間は 5 分くらいかかるよ。正確なデータを得るにはそうした方がいいみたいなんだ……
216デフォルトの名無しさん
垢版 |
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 セクタ書き込んだみたいだよ。もちろん書き込んだ回数だよ。
217デフォルトの名無しさん
垢版 |
2016/06/15(水) 17:57:12.29ID:rzJhZO2i
https://ideone.com/K0qeSx

もう少しユーザーフレンドリーな感じにしてみたよ。これで最後だよ。
Windows ではこういう情報を得る方法は無いの?
非同期書き込みが無いのなら彼らの言うことも間違いではないんだけど。
2016/06/18(土) 11:42:41.43ID:zTifxauk
$ perl -p -e 〜
となっているのですが、-p と -e の意味を教えてください。
219218
垢版 |
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
と出てしまいます。
解決方法を教えほしいです。
2016/06/18(土) 13:07:12.42ID:FKPQs3z7
'print "\n"'ではなく"print qq(\n)"のように
2016/06/18(土) 14:22:55.12ID:zTifxauk
C:\perl\bin\perl -e 'for $i (@ARGV) { "print $i ,qq(\n)";}' args1 args2 args3
で試したがダメでした…
2016/06/18(土) 14:58:07.42ID:h9LNivvl
>>221
俺は昨日から始めたんで確かなことは言えないけど、
DOSプロンプトだと、''で括ってもダメだったよ
(何か設定があるんだけど昨日からなんで...)
例えば、
perl -e 'print "hello"'

perl -e "print \"Hello World\n\""
ってしないと動かなかった
2016/06/18(土) 15:22:54.54ID:h9LNivvl
よくよく考えたら、コマンドプロンプトで''はいけるはず無いよね
だって、まずコマンドプロンプトで命令が解釈されるわけだから
'a b'だと、連続した文字列とはならずに
'aとb'の2つの引数が指定されたと受け取られちゃうわけだしね
224デフォルトの名無しさん
垢版 |
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 に乗り換えたのは前世紀のことなのに……
2016/06/18(土) 17:13:02.52ID:Q2VQ6qXf
DOS/Windowsコマンドプロンプトのクォートは "
UNIXのシェルのクォートは '
ただそれだけ
コマンドプロンプトのクォートとして "" を使っているから、Perl部分は
qq() を使ってる
2016/06/18(土) 17:51:48.00ID:5RdW1n8d
すごいにゃー。ワシは動けばいいやなんで。
2016/06/18(土) 17:53:59.52ID:qpxG5nAO
動かないんだろ?
2016/06/18(土) 20:50:09.79ID:QKdVDmdU
PowerShell_ISE では、どうなる?
2016/06/19(日) 20:43:06.86ID:p98kttl2
ファイルの中身じゃなくて、ファイル名をバイナリかなんかで扱いたいときはどうすれば良いでしょうか
どっかの国のどっか語でファイル名書いてあって、ファイル一覧を入手したら全部文字化けみたいな感じになってて困った
230デフォルトの名無しさん
垢版 |
2016/06/19(日) 22:30:28.43ID:/GELYJ8A
まず、そのファイルが壊れてないかどうかエンコーディングが判らないことには確認しようがありません。
そして、そこに書かれているファイル名が正しいとしても、問題はそのファイル名で何をするかです。
ファイルを作成するとしたら少々困難を伴うと思いますが、何をしますか?
もう少し説明が欲しいです。
2016/06/19(日) 23:56:05.73ID:p98kttl2
1: ファイルは壊れてないです。あとファイルの中身はどうでも良くて困ってるのはファイルですね。

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

3: 書いてある通り、ファイル一覧を入手したいです。(と言うよりすでにしました)。その時点での文字化けについてです。
2016/06/20(月) 01:41:13.70ID:Nxz2d29B
文字化けは君の環境のフォントの問題では…
2016/06/20(月) 01:52:28.59ID:3dbzY2ue
>>224
単にprintのあと改行したいだけなら、面倒なエスケープを避けてsayを使うのが楽だと思う。

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

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

そのファイル名をエディタにコピーして、色々な文字コードに変えて、試してみる
2016/06/20(月) 14:43:14.96ID:og12Zqf+
先日も申しましたが、ファイル名はOSの仕様によってcp932扱いで表示されたバイナリです。
windowsにおけるバイナリとテキストの違いは、改行など一部の文字の解釈です
すなわち、ファイル名を入手した時点で破損しています
2016/06/20(月) 15:21:44.17ID:7O0ObdXP
うーん・・・
関係ないけど
ハートマークのファイル名作ったけど、
ちゃんと表示できたよ
2016/06/20(月) 15:27:52.95ID:JJJI2UNm
>>238
「ファイルはテキストだが何のコードでエンコードされたものかわからん」をcp932で開いた
ではなくて
「cp932でエンコードしてしまって、もう元のファイルの情報は欠けてしまった文字化けファイル」を開いた
ってことか?
2016/06/20(月) 16:05:49.21ID:S2CnEqh7
>>238
破損とは何か。期待値と実際値を言わないとわからん
242デフォルトの名無しさん
垢版 |
2016/06/20(月) 16:53:54.14ID:cF0IFcLP
もう一度聞くけど、どこからどのような手段で入手して、どうやって見てるの?
どうなってほしいの? 使ったソフトウェアの仕様はちゃんと理解できてるの?
2016/06/20(月) 23:26:05.47ID:og12Zqf+
Aディレクトリの中のファイル名をopendirでとってくる。
この時のファイル名ってどう言う扱い?バイナリ?テキスト?コードは?フラグは?
とってきたらそれがすでに破損してて開くこともできない。
2016/06/20(月) 23:27:22.44ID:og12Zqf+
もちろん cp932で定義されてる範囲のバイト列ではバグらないよ
2016/06/21(火) 00:30:40.48ID:zxMwhnoQ
そうですか。
で?
2016/06/21(火) 12:21:49.21ID:yHwsrvxs
-------------------------------------------------------
Perl に関係ない話題は、以上で終了。
2016/06/22(水) 02:03:09.88ID:pkNIGL7K
>>ファイルの中身じゃなくて、ファイル名をバイナリかなんかで扱いたいときはどうすれば良いでしょうか
特別なことをしなければバイナリで扱うことになる。むしろファイル名は文字列では扱(え|わ)ない。
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
249デフォルトの名無しさん
垢版 |
2016/06/22(水) 17:34:24.64ID:MK9gPhs4
いや、ちゃんとその通りになったけど……どううまくいかなかったの?
末尾にスペースが入っちゃいかんとかなら、方法はあるけど。
2016/06/22(水) 17:34:34.20ID:zY+0G6HH
それでできたけど。
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;'
2016/06/22(水) 18:37:34.12ID:ZXocXNxo
>>251
いや、そのドットが重要なのでは…?
2016/06/22(水) 19:34:58.14ID:NJ9t5GVO
>>252
色々と試行錯誤した中で試してみましたが、ドットを入れるならスペース入れても
同じような・・・
perl -p -e 's/(12.34.56)/$1 /g;'
2016/06/22(水) 19:45:27.49ID:9eEpB7QB
もう連続した数値を2桁ずつ区切るとは話が違ってきてるぞ
まあ色々試しているんだろうが、まず正規表現をちゃんと勉強した方が結局は早道だよ
2016/06/22(水) 20:13:59.90ID:SZhXzwW9
>>253
正規表現を使っているという事は理解してる?
ドット一つは「任意の一文字」を意味しているのだけれども…
2016/06/22(水) 20:14:45.08ID:GjDXavCQ
$string = '012345';
$string =~ s/(..)/$1 /g;
2016/06/22(水) 20:36:25.70ID:jdKVcriH
s/(..)/$1 /g

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

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

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

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

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

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

あ〜スッキリした。
有難うございました。
2016/06/22(水) 22:35:11.08ID:jdKVcriH
>>258
1234なら、12 23 34 にはならない

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

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

この文字列から011だけ正規表現で抜き出す方法教えてください
idの数値だけを抜き出したい
2016/07/04(月) 00:57:21.80ID:eDhj/6QR
>>270
これで文字列全体?
その前後にいろんなタグがありそうないやな予感がするんだが?
2016/07/04(月) 01:08:21.29ID:xC//1vCA
>>271
ありますが、かなり長いxmlなので必要だと思った部分だけ抜き出しました
もう少し抜き出してみるとこんな感じです

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

このような文字列が大量にあってそのなかからidの数値だけが欲しいです
2016/07/04(月) 01:29:50.90ID:xC//1vCA
>>270
/id="([0-9]*)/g
これでできたような気がします
2016/07/04(月) 22:53:37.85ID:0oVcG5wM
HTMLパーサーを使うのが一番簡単で正確
コメントの中にHTMLがあったらどうするんだ?

つーか正規表現を乱用するな。
2016/07/04(月) 22:54:10.05ID:0oVcG5wM
XMLパーサーか
276デフォルトの名無しさん
垢版 |
2016/07/05(火) 17:36:47.05ID:QGn+r4HY
>>270 だとタグの外にあるように見えるのに >>272 ではタグの中になってる。
だから静観してたけど、結局どっちなの?
2016/07/05(火) 17:48:38.40ID:gL12vNid
なんか最初のだと後に<width>のある特定のidの値が欲しいのかな?って思ってたけど
そうでもなくて全部のidの値でいいんだってのが>>273でわかったんで拍子抜けしたところ
2016/07/08(金) 23:33:47.61ID:l/0Eyz2z
うん、自称ベテランにありがち。
279初心者です
垢版 |
2016/07/09(土) 07:48:40.33ID:g+Tip2fR
宜しくお願いします。

$ua->cookie_jar(HTTP::Cookies->new(file => "cookie.txt",autosave => 1));
でcookie.txtにクッキーを取得できるのは分かりますが
削除したい場合にはどのようなコードを書くんでしょうか?
280デフォルトの名無しさん
垢版 |
2016/07/09(土) 16:55:14.14ID:ce8+Vk05
そういえばいつもお世話になってるのに知らないな……と思ってマニュアルを読んでみた。
どうやら clear を使うらしいな。まずは scan で中身を見てみるのが良さそうだ。
これ以上は説明のしようがない。自分で頑張ってほしい。
281デフォルトの名無しさん
垢版 |
2016/07/09(土) 21:07:47.73ID:g+Tip2fR
ウィッス
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:/...
2016/07/12(火) 01:04:59.55ID:BoIJCZeB
cpanmやらppmでやってみたら
284デフォルトの名無しさん
垢版 |
2016/07/14(木) 20:00:42.23ID:GgJblQeZ
突然文字が正しく表示できなくなるゴミPerl
人をイラつかせるために作られた言語だなこれ
存在価値がないどころか存在事態が害悪
早く消滅すればいいのに
285デフォルトの名無しさん
垢版 |
2016/07/14(木) 20:06:36.90ID:GgJblQeZ
マジで使い物にならない
「ゴミPerlで文字がいきなり変になる対処」
「産廃Perlの文字取り扱いがおかしいのをなんとかする方法」
「糞Perlが文字をまともに扱えないことへの特効薬」
もう数時間検索してるが解決案が出てこない
こんなに酷い言語はPerlくらい
286デフォルトの名無しさん
垢版 |
2016/07/14(木) 20:15:06.51ID:GgJblQeZ
Perlは本物のゴミ
文字すらまともに表示できないとか利用価値なし
287デフォルトの名無しさん
垢版 |
2016/07/14(木) 20:25:10.95ID:GgJblQeZ
Perlのゴミなところ

文字「あ」すら表示すらできないためとてつもなくイライラする
288デフォルトの名無しさん
垢版 |
2016/07/14(木) 20:28:38.21ID:GgJblQeZ
明日納品なのに解決する兆しなし
こういうときは一から書き直すことも多いが何千行もあるシステムを明日までに書き上げられるわけもない
本当にPerlはゴミすぎる
2016/07/14(木) 23:24:13.01ID:RqQ+21r9
だからバイナリで扱えと口が酸っぱくなるほど言ってきたわけで聞き入れないお前が悪い。
2016/07/15(金) 08:14:17.03ID:rP1+mz2q
文字コードを理解してないだけでは・・・?
291デフォルトの名無しさん
垢版 |
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 =>
2016/07/15(金) 08:36:25.21ID:XWIPLqFW
ありゃ?途中で切れちゃった。>>291のリンク先見てね。
293デフォルトの名無しさん
垢版 |
2016/07/15(金) 09:08:17.43ID:ATzxunsm
とりあえず Data::Dumper と PerlIO::get_layers を使えば助けを求めるのに役立つと思うが
責任転嫁しかできないゴミに言ってもなぁ……
2016/07/15(金) 12:22:26.70ID:XWIPLqFW
>>285 それからな、
> ゴミPerl
> 産廃Perl
> 糞Perl
どれも、なかなかいいところを突いているが、ちょっと外れているな。
正解は「ガラクタ」だ。

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

use utf8;付けたらそれまで文字化けしなかったUTF8の文字列が文字化けしたし
2016/07/17(日) 14:42:10.28ID:F+fhoGjl
なにその理論(笑)

まぁ使いにくいのは異論ないが
2016/07/17(日) 16:24:12.49ID:Cv1W2kE4
ではperlじゃないならなにがいいのかな。python?
rubyはパイプ記号が変なところで出てくるからちょっと違和感有り。
2016/07/17(日) 17:57:00.54ID:PyzTEoPA
= パイプ記号
2016/07/17(日) 17:57:53.58ID:F+fhoGjl
賭けてもいいが、文字コードが分からないのをPerlのせいにしてるやつが、
自分で1からプログラミングしたら壊滅的な状況になると思う。
2016/07/18(月) 02:39:59.89ID:e41bhxXR
でも、かつて壊滅的な状況じゃなかったよね?
2016/07/18(月) 03:14:08.10ID:GZVIgCur
>賭けてもいいが、文字コードが分からないのをPerlのせいにしてるやつが、
>自分で1からプログラミングしたら壊滅的な状況になると思う。

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

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

と言ってるのと同等で意味不明。
気違い。
305デフォルトの名無しさん
垢版 |
2016/07/18(月) 07:46:08.11ID:C0GpTohk
自分で料理出来るのであれば、残飯なんて最初から食べないよ…
残飯を食べるという事は、食べざろうえない理由があっての事だろうに…
2016/07/18(月) 08:14:55.04ID:dOZOPpl8
すくなくとも腹痛を人のせいにしなくてすむんじゃね?
2016/07/18(月) 14:09:08.76ID:UhcVRSnP
高級料理も残せば残飯になるのさ。
最後の姿を見ただけで、本来の姿を判断するのは
無能というもの。
2016/07/19(火) 09:36:50.47ID:BbD/ZGSl
文字コードが分からないのをPerlのせいにしてるのは馬鹿の上限を突破してるが、
腹痛を残飯のせいにするのは間違ってないだろう。食ったと言う意味では馬鹿だが
309デフォルトの名無しさん
垢版 |
2016/07/19(火) 14:33:33.84ID:kU2ISgr0
どんなに文字コードを理解している人間でも文字をまともに扱えないピログラム言語の前では無力
その程度のことも分からないのかはたまたPerlがまともな言語だと錯覚しているのか
もし錯覚しているならば自分の使っている言語についてほとんど何も知らないということになる
まずはその自覚をすべきである
2016/07/19(火) 15:10:05.04ID:QuuYpuW+
参考までに聞くけど、文字をまともに扱える言語って何?
2016/07/19(火) 15:23:05.53ID:BbD/ZGSl
全行つっこみどころ満載なやつにかまってはいかん
2016/07/20(水) 17:32:04.55ID:gGnx4FL9
んで俺も文字をまともに扱える言語がなにか気になるわけだが
310とは別人
2016/07/20(水) 19:56:54.60ID:lrew/2ZZ
文字は知らんけど、
Perlってあらゆる面でPHPより劣ってるよな。
2016/07/20(水) 20:04:27.70ID:y5BMpkOv
PHPってHTML言語じゃないの?比較の対象にもならないと思うんだが。
rubyに負けてるというならまだわかるけど。
2016/07/20(水) 21:52:53.39ID:gGnx4FL9
PHPてあんた
2016/07/20(水) 23:37:17.38ID:E+SEwayU
>>314
HTML言語ってなんやw
HTMLに埋め込めるってだけでごく普通の
プログラム言語だぞ。

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

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

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

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

これ以外に何が必要なんだい?
言ってみ。
2016/07/21(木) 02:18:26.64ID:QEbE4SDT
>>319
お前のいう文字は文字列のことか?
2016/07/21(木) 09:47:01.78ID:oSsee0hG
質問者が言う文字だ
質問じゃなくて子供の八つ当たりに見えたが
326デフォルトの名無しさん
垢版 |
2016/07/21(木) 10:12:11.24ID:wN4yZ2B5
普通のunix処理系wwww
普通てwwwwwwwwwww
こんな曖昧でいい加減な単語を使って反論になると思ってんのかwww

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

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

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

どちらにせよPerl厨はヴァカで犯罪者予備軍ということに変わりはない
まともな人間はPHPを選ぶ
2016/07/22(金) 22:02:06.14ID:ZdAo90QB
今時仕事にも趣味にも役に立たないPHP選ぶバカはいないだろ
2016/07/22(金) 23:10:31.36ID:jSbimIDf
>>334
php以外の該当する言語を一つあげるだけで完全に論破できるチャンスだよ!
2016/07/22(金) 23:38:00.41ID:SRU6z2ZT
はいはい。犯罪者予備軍ね。NGにしときますわ。
やりたいことやりたい人は処理系にこだわりはないのにアホか。
コード書けない中学生がVBよりVCと言ってるのと変わらんわ。
2016/07/23(土) 01:01:50.42ID:tWjtYIW6
>>340
逆だろ?

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

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

そこで自分で方法を考えました
まずディレクトリにaccess_kinshi.datというファイルを作ります
このファイルが存在している間は他プロセスでこのディレクトリにあるファイルは全てアクセスできないものとする
そしてディレクトリ内にあるファイルを全てrenameする
そのあとaccess_kinshi.datファイルを削除すればいいということです
2016/07/23(土) 11:20:06.22ID:I+uJVTmO
前提条件が変わってますけど
2016/07/23(土) 15:21:23.54ID:bOUqJlZz
他のプロセスってなに?
どっちもPerlで自分の作った物なら、ファイルロックでも使うと良い。
自動待機してくれる
350デフォルトの名無しさん
垢版 |
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となってしまいます。
2016/07/23(土) 19:32:51.24ID:sc8oJJPG
シェルスクリプトと同じで、{} で変数名を明治する。
/${1}${2}1${4}${5}/
2016/07/23(土) 19:41:00.25ID:IQFGkMCr
>>351
出来ました!!
{}で囲むのは思いつかなかったです。
353デフォルトの名無しさん
垢版 |
2016/07/23(土) 20:22:22.12ID:rC+TU0A1
>>349
他プロセスとは同じプログラムを複数で同時実行したやつです
それとファイルロックだとディレクトリにあるファイル1つ1つにロックしなきゃならないので
ディレクトリにあるファイル全てにアクセス禁止するために
アクセス禁止用ファイルを作りました
2016/07/23(土) 20:22:25.35ID:erGYoQ8z
スクリプトを動かすときは、「動きますように」と昭和する。
355デフォルトの名無しさん
垢版 |
2016/07/23(土) 20:41:29.11ID:KzTkH9Ph
自分で考えているというのは大変良いことだと思うけど、聞きたいことがあるなら
環境くらいは書いてくれないと……
それに、使用中のファイルを rename することの何が問題なのかさっぱり解らない。
まず、何をするプログラムなのかを書いた方がいいと思うよ。
356デフォルトの名無しさん
垢版 |
2016/07/23(土) 22:25:30.57ID:rC+TU0A1
a
357デフォルトの名無しさん
垢版 |
2016/07/23(土) 22:36:22.09ID:rC+TU0A1
なんか書き込こもうとするとエラーが出て書き込めないわ
2016/07/23(土) 22:48:53.55ID:rC+TU0A1
ようするに
てすと1シージーアイ
OPEN(IN、”あああ.DAT”);
すりーぷ(5);
cLOSE(IN);


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

2つのプロセスで、ファイル共有できるのは、read & read、の組み合わせだけ。
read & write, write & read, write & write は、共有できない
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
2016/07/23(土) 23:51:16.68ID:tWjtYIW6
>>361
更新 ”できないようにする" から
ロックなんだよ。アホかw
2016/07/23(土) 23:55:37.22ID:sc8oJJPG
>>362
ん?
(デフォの状態では)更新出来るから、
(更新出来ないようにするための)ファイルロックなぞの方法が開発されたんじゃねーの?

ってレスだったんだが、、、
2016/07/24(日) 00:40:44.17ID:9mJaMPLw
更新できるのは、同一プロセス内のマルチスレッドだろ

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

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

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

https://ideone.com/639PgP
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);
373デフォルトの名無しさん
垢版 |
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でファイルが作成された場合ディレクトリを削除できない
だからディレクトリそのものをロックしたいっていうこと
2016/07/26(火) 08:16:09.27ID:Yl3q3y9J
>>372
問題ない
375デフォルトの名無しさん
垢版 |
2016/07/26(火) 13:18:10.17ID:0CGOQrnU
>>373
そういうことを先に書いてくれないと……
そうか、Windows ではできないのか……
プロセスAの処理が終わるまでプロセスBを待たせておきたいということなら
普通に mkdir でどうでしょう。可搬性も高い排他制御の定番です。
2016/07/26(火) 13:54:47.54ID:M5KaPrwS
>>373
File::Path -> remove_tree

http://search.cpan.org/~riche/File-Path-2.12/lib/File/Path.pm
377デフォルトの名無しさん
垢版 |
2016/07/26(火) 18:01:31.91ID:0CGOQrnU
何が目的でそのための何をしている状況なのかというのがいまだに理解できないんだけど、
そもそもそんな状況にしないやり方を考えた方がいいのかもしれない。
どうしても排他制御が必要なら例えばデータベースを使うというのは Windows でも出きると思う。
Windows のことは知らないからこれ以上はお役に立てそうに無い。
378デフォルトの名無しさん
垢版 |
2016/07/27(水) 02:23:44.17ID:8IadtePG
簡単に言うとディレクトリをmkdirで削除したいけど
削除しようとしている間にディレクトリ内にファイルを作られるとmkdirできなくて削除できないので
ディレクトリ内にファイル作成もディレクトリ内のファイル読み込みも禁止にしたかったってこと
379デフォルトの名無しさん
垢版 |
2016/07/27(水) 02:26:13.90ID:8IadtePG
mkdirじゃなくてrmdirだ
2016/07/27(水) 08:10:16.74ID:yPkdt5ig
任意のプロセスがアクセスできるディレクトリを削除したいという要求自体が間違っている
381デフォルトの名無しさん
垢版 |
2016/07/27(水) 08:32:01.24ID:8IadtePG
>>380
bbsディレクトリの中に各掲示板ごとのディレクトリがあって、さらにその中にログファイルや掲示板設定ファイルがある
削除したい掲示板は各掲示板のディレクトリごとに削除するしかないのでどうしても任意のプロセスがアクセスできる
ディレクトリを削除するしかない

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

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

自分のプロセスしかアクセスできない前提であれば、好きなように自分で排他制御を行えばよい。例えば>>375のように。
383デフォルトの名無しさん
垢版 |
2016/07/27(水) 15:57:37.43ID:8IadtePG
>>382
普通の掲示板やで
普通掲示板は誰でも観覧と書き込みができるので任意のプロセスからでも読み書きできる
それとディレクトリの削除はブラウザからperlで書いたcgiを起動して削除するので
パーミッションでのオーナーとかの判別はできないんや
2016/07/27(水) 16:17:33.22ID:uNHlpX2c
掲示板のcgiが動いてるプロセスは掲示板を閲覧しているユーザとは関係なかろうが。
これ以上はperlの話ではなく、そのcgi固有の話だ。
ここでやる話ではない。
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はどのように宣言すればいいんですか?
2016/07/29(金) 22:20:02.88ID:lqBNaMPB
aとbはあらかじめ用意された特殊変数。
特殊変数は全部グローバル変数
2016/07/30(土) 00:48:59.27ID:pBzYHnSl
>>378
他のプロセスに使われる前にディレクトリ名をランダムな名前に変更
するとよい。変更後に rmdir する。
388デフォルトの名無しさん
垢版 |
2016/07/30(土) 08:47:55.59ID:k05zeajW
1:投稿ファイルをロックして書き込み
2:投稿数ファイルをロックして書き込み

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

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

じゃだめなのかな。
2016/08/05(金) 09:49:56.50ID:iMQ1FKDS
それ投稿数と投稿が連動してないやん

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

が普通
398デフォルトの名無しさん
垢版 |
2016/08/05(金) 17:58:59.50ID:rvcc+G4N
それは「普通」というより「手抜き」だね。最初はそれでいいと思うけど。
2016/08/05(金) 21:06:28.92ID:n2C4Ao5J
>>398
普通じゃなくて天才だよ。
完璧な答え。
2016/08/05(金) 21:06:53.73ID:n2C4Ao5J
>>396
だめ。それはバグ。
2016/08/06(土) 00:52:14.83ID:aSfsFG4F
まあ質問の直後にいきなり答えが書いてある
それを分からないのが混ぜ返してるだけだ
>>388-389
402デフォルトの名無しさん
垢版 |
2016/08/06(土) 07:58:04.15ID:nmoqGXlF
(書き込み時)

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

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

これが正しい
2016/08/09(火) 01:43:06.25ID:s2zPwIrc
>>393
何のために数字が振ってあるのか分かる?
2016/08/09(火) 02:52:34.66ID:d2ilw35z
なんのため?
プロセス間の整合を取るのにプロセス内の順序は全く意味ない数字と思うけど。
うーん、なんのためだろ?教えてくれないかな?
2016/08/09(火) 22:13:03.27ID:zWs+JfAu
> プロセス内の順序は全く意味ない数字と思うけど。

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

ロックの話以前に、あんたが何が言いたいのかわからない
2016/08/09(火) 23:09:59.97ID:d2ilw35z
んでなんのため?

あと関係ない話しかしてないようだけど、同じになるって情報はどこから?
そしてその話になんの意味があると思い込んでますか?
2016/08/09(火) 23:36:26.59ID:zWs+JfAu
> んでなんのため?

順番が重要だからだろ。
2016/08/09(火) 23:38:43.66ID:zWs+JfAu
>>390が書いてあることは正しくて、
この順番通りの処理をすると不整合が起きない。

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

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

ちなみにDOSなどでのコマンドは知っています。
2016/08/22(月) 23:45:40.07ID:vzm1zF9k
`dir /b *.*`
次スレのテンプレに追加するから
2016/08/23(火) 00:01:48.07ID:GgtizVRn
コマンドじゃなくてPerlでどうにかしたいのだけど
2016/08/23(火) 02:38:12.51ID:a3VZWpnc
バッククォートの意味が分からないのかな
2016/08/23(火) 07:59:22.61ID:GgtizVRn
コマンドだろ
2016/08/23(火) 22:48:28.92ID:evJ0lXFt
my @file = split(/\n/,`dir /b *.* 2>NUL`);
# あとは夏休みの宿題、な
2016/08/24(水) 08:59:06.43ID:hHpNATWD
すまん、回答してるつもりだろうけど、頭悪い人に用はないんだ。
わざわざ何度も書いてる様だが、一番最初に(も)言った通りコマンド使うやりかたはできるから。

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

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


>>420
その無駄な4行必要か?なんか書きたいなら頑張って回答書けば?(俺としては書かないで頂きたいけどな)
2016/08/24(水) 23:31:21.73ID:jqqoh+mK
まあとにかく特殊な環境なんだね。もう少し前提条件を書いたほうが早く欲しい回答を得られたと思うよ。
>>413の書き方じゃ>>420に文句を言う筋合いはないよ。
2016/08/29(月) 17:11:38.79ID:x3G6j3++
どうでもいいけど特殊な環境じゃなくてwindows標準の仕様かと
2016/08/29(月) 21:33:30.70ID:NQxKIK4Q
文字化けが問題なんだろうね
2016/08/29(月) 21:40:22.45ID:x3G6j3++
なぜ化けるのか、と言う話だ
CP932とunicodeが混在してる場合はどうすりゃいいですかって話じゃね
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"
で呼べないんだけどどうしたらいい?
2016/09/01(木) 19:29:20.37ID:vCLh7LOG
ちなみに
__PACKAGE__->load_plugin('+SQL::Maker::Plugin::InsertOnDuplicate');

でもダメ
2016/09/01(木) 20:39:24.43ID:0j1lNnbm
ブログ記事じゃなくてPOD読めよ
2016/09/01(木) 22:35:57.18ID:vCLh7LOG
PODに別パッケージから plugin生やす方法なんて書いてないでしょ
432デフォルトの名無しさん
垢版 |
2016/09/03(土) 20:53:36.76ID:pSsdJ5JF
マジレスするなら、
別の方法で呼べるか試してみる
何が起こっているのか調べてみる
ってところか。
2016/09/09(金) 12:53:46.35ID:JRjUoSNq
何を調べたらいいのかわからんので手が付かない
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(略)
2016/09/09(金) 16:12:29.13ID:yxgmGddx
もう直接コード読めよ
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__の意味わかってる?
437デフォルトの名無しさん
垢版 |
2016/09/09(金) 17:40:55.04ID:iPoh5J1m
もう、馬鹿過ぎて哀れだ。実際にやりたいことは

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

ってことでしょ? もうこれでいいでしょ。POD すら読まないんじゃ助けようがないよ。
438437
垢版 |
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 を差し替えて動作を詳しく調べる。
2016/09/10(土) 18:20:16.29ID:1M4Sozo+
Tengを使うのかどうか自分で選べるのなら、自分が理解していないものを使わないという選択肢がある。
他の人が選んでしかも使わなければならないという状況なら、選んだ人にどう使うのかを聞くといい。
2016/09/10(土) 19:19:33.59ID:7Wlp4jMr
多分ブログ書いた人やその人に教えた人はTeng本体と混ざって勘違いしたんだろうな
Teng自体はインスタンスからもロードできるから
441デフォルトの名無しさん
垢版 |
2016/09/13(火) 17:44:13.57ID:AYCTTYgO
この記事、オレオレメモだって自分で書いてるからわざわざつっこむのも野暮だけどOR検索の例もちょっとひどい。
どうしてこうなった?
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」エラーを出しまくりますが、
メモリを全消費する事はありません(異常終了もしません)。
2016/09/22(木) 15:02:46.45ID:EZPik98J
windowsのForkは、表面上は同じように動作する仕様になっているが、
実際にプロセスやスレッド、CPUの動作が期待通りになってるかと言うとそれは違う。
ほとんどの場合が、unixとの互換性を保つための見せかけ。
2016/09/22(木) 16:23:36.65ID:PQbGo3UU
rulezの綴りがzの辺り、悪さしてそうだな
2016/09/23(金) 01:08:30.38ID:Ay1vA5a9
if($hoge=~/(\d+)$hoge3$/){$hoge2=$1}

これの意味は

$hoge3が数字のみなら$hogeに代入し、$hoge2にも代入するという意味でしょうか?
446442
垢版 |
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+ 」を代入
447445
垢版 |
2016/09/23(金) 08:03:28.29ID:Ay1vA5a9
>>446
ありがとうございます。
他言語の底辺SEなので助かりました。
2016/09/23(金) 14:09:14.63ID:eBfGtRhY
普段それを読む文化にない人がいきなり読めたら逆にすごいと思う
PerlってPerlが分かる人だけの言語
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
懐かし
2016/09/28(水) 02:39:45.69ID:sK8+jqCL
ソースはサンプルコードな
2016/10/03(月) 14:01:12.25ID:OUfpKV3+
C:\> prompt $e[1;36m[$d$s$t$h$h$h] $e[1;33m%USERNAME%@%COMPUTERNAME% $e[37m$p$_$g$s
452デフォルトの名無しさん
垢版 |
2016/10/03(月) 19:32:24.04ID:tI+B9pP0
ザメフォン元気?
2016/10/06(木) 18:37:40.82ID:fMpg74pi
ビット演算を多用したいんだけど、変数のサイズを指定したい。longとか。
とりあえず、16bitと32bitと64bitの整数が欲しい。
あと数値と文字が勝手に切り替わらないようにしたい。

ビット演算してるブロックだけでいいんで。
あと環境の保証も欲しい。どのマシンでどのbitのPerlとか関係なく。
俺が32bitのビット演算って言えばそれはもう絶対32nit演算。
もちろん不当に遅くなる方法は許さない。
454デフォルトの名無しさん
垢版 |
2016/10/06(木) 20:14:48.16ID:rUXrZJG3
C で書け。
455デフォルトの名無しさん
垢版 |
2016/10/06(木) 20:56:23.24ID:Wdgc44Vq
C++でもいいぞ
2016/10/06(木) 21:07:21.59ID:ZdOAOk1u
rubyで十分
2016/10/06(木) 21:31:39.42ID:fMpg74pi
Cとかでもいいけどdllの使い方分からないのだ
2016/10/07(金) 03:14:09.37ID:hiGL0oI+
http://perldoc.jp/func/pack でOK
459デフォルトの名無しさん
垢版 |
2016/10/07(金) 07:25:20.66ID:codMUtxm
vec かな。それでも不満なら perlfaq3 を読んで C で書け。
460デフォルトの名無しさん
垢版 |
2016/10/07(金) 12:43:21.52ID:codMUtxm
実際に何をして、その結果何が問題だったの? そのくらいは書いてくれないと……
2016/10/08(土) 01:08:43.11ID:hitB9rm0
>>457
xsと言うのがあるが、一時的に値が複製されて良いなら標準入出力(メモリ渡し)のほうが絶対に楽だと思うのだ。
ま、perl使ってるなら複製されたメモリのほうが元のデータより圧倒的に小さいはずだが
462デフォルトの名無しさん
垢版 |
2016/10/08(土) 09:19:23.51ID:ZgFPdp2t
ビット演算したいなら普通にすればいいよ。
◯ビット変数がほしいといわれても、それは適切にマスクすればいいだけだし。
◯ビット変数のように振る舞うものがほしいということなら、Perl は C よりも期待に応えられると思うよ。
まずは C と同じ書き方をして速度を計ってみてよ。話はそれからだ。
2016/10/08(土) 22:30:15.59ID:KfBpvv2w
はぁ?
~0 この時点で同じになりませんがな
464デフォルトの名無しさん
垢版 |
2016/10/09(日) 00:00:21.79ID:ja1MeL+I
>>453 に言ってるんだよ?
465デフォルトの名無しさん
垢版 |
2016/10/10(月) 16:43:42.37ID:zhEtfxQ/
もう連休終わっちゃうんだけど結局何をしたかったのかな。
2016/10/11(火) 00:06:06.59ID:SYi+Wrc4
その日のうちに解決したんじゃね?
木曜日の相手になに言ってんだか
2016/10/11(火) 00:28:33.80ID:SYi+Wrc4
しかし普通の言語やったあとにPerlやると異常なほど即座に短く書き終えるからなにか書き忘れてるんじゃないかと不安になる。
正しく動くと分かると異常なほど楽で嬉しくなるし、C++とかが馬鹿らしくなる。
そして実行速度計ると結局全部納得してため息。
468デフォルトの名無しさん
垢版 |
2016/10/11(火) 19:01:16.50ID:A+TNY00d
stat($file_path);でファイルを作成したtimeは
atime,mtime,ctimeのどれなの?
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 以外では)
> 実際には「作成タイムスタンプ」かもしれません。
2016/10/12(水) 08:39:20.39ID:9k51B2Do
Perlのオブジェクト指向読んだばっかりで理解が曖昧なんだけど、
これだと、オブジェクトがオブジェクトなのか関数なのかって呼び出し側で決める事にならない?
コンストラクタもメソッドも。
ついでに、インスタンスのカプセル化どうこうも、呼び出し側の権利?

みたいに見えたのですが。
2016/10/12(水) 13:04:43.13ID:kXFNS19K
>>470
そうだよ
それはC++等でも同じ
2016/10/12(水) 14:33:18.63ID:9k51B2Do
>>471
ありがとう

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



use utf8;
use strict;
use warnings;

#ただの実験
# 1: メソッドとインスタンスをカプセル化する。
# 2: クロージャを、あたかもオブジェクト指向と同じ記法で呼び出せるようにする。(クロージャとオブジェクト指向の同一視)
# 3: クロージャをクロージャのまま使いたければそうできるようにした。そもそもクロージャのほうが速いので。
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}->(@_);
}
}
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__

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

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

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

あと穴は一つ発見しました。
これは後出しにしようかな。
2016/10/13(木) 02:01:07.92ID:Zro6GxWw
こいつは何しに来たんだ?
2016/10/13(木) 10:53:38.82ID:O2Ch/Rp5
perlでpcアプリケーションって作れますか?
2016/10/14(金) 12:30:24.58ID:om26oWOX
>>478 作れます。
2016/10/14(金) 22:56:09.64ID:GnnBnQfG
スーパーコンピューターのアプリケーションしか作ったことがないのですが、
そんな私でも作れるでしょうか?
2016/10/15(土) 02:02:31.11ID:UBpH7j9p
スパコンのSIMDやMPIの方が楽だから
無理しなくていい
482デフォルトの名無しさん
垢版 |
2016/10/17(月) 02:26:31.41ID:WRe7I7Bu
2つのテキストファイルを比較し、一致した文字列を取り出したいんですが、教えていただけませんか
2016/10/17(月) 03:43:08.25ID:sXplblvU
一致した文字列を穴なく完璧に厳格に定義して示して下さい。
そしてそれが出来ればプログラミングの8割は終了しています。
484デフォルトの名無しさん
垢版 |
2016/10/17(月) 09:06:26.12ID:z3YwWHWS
diff 系かなあ。CPAN で検索してみるといいよ。
2016/10/17(月) 09:12:40.23ID:9EO0+SUA
Perl使うまでもないような
cat fileA fileB | sort | uniq -d
486デフォルトの名無しさん
垢版 |
2016/10/17(月) 09:33:07.31ID:z3YwWHWS
いやいや、一致した「行」とは言ってないから。何を望んでいるのかを確認しないと。
2016/10/17(月) 20:34:47.85ID:Denl80JP
単語だと形態素解析が必要になるけどこいつにそんな課題出さないだろう
488デフォルトの名無しさん
垢版 |
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の数だけ繰り返し表示されます。
関数内でも全データを出力したいのですが、どうしたらよいでしょうか。
どなたか教えてください。よろしくお願いします。
2016/10/18(火) 23:56:04.56ID:sMICGAt6
1回ずつループしながら、デバッグして、使っている変数を見れば?

変数のwatch 機能、あるだろ?
2016/10/19(水) 00:45:58.03ID:cfM1WNHO
>>489
アドバイスありがとうございます。VisualStudioCodeを素で使ってまして
perlのwatch機能は無いようなのです。
491490
垢版 |
2016/10/19(水) 00:48:54.12ID:cfM1WNHO
watch機能はないのですが、添字の$iを具体的な数字を入れてはprintで確認して
1行目のデータになっていると気づいた次第です。
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";
}
}
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]を表示します。

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

例えば
/^[0-9][0-9a-zA-Z]{4}[A-Z]$/;
だったら
5scDuZ
とかが得られますよ的な。
2016/10/22(土) 11:26:59.02ID:PD3z3WkO
String::Random
2016/10/22(土) 11:46:10.43ID:NzADNRlY
おいおいなんでもあるなPerlって
498デフォルトの名無しさん
垢版 |
2016/10/22(土) 17:34:20.47ID:BSsXTeb9
CPANのモジュールも更新されないものが増えてきた
もうオワコン
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
みたいな風に書いてるんですけど
もうちょっとスマートな書き方ありませんか?
2016/10/25(火) 21:11:38.78ID:U4JQUv53
binmodeしないと自動変換されるの?
まぁ試してないけど、ワンライナーをやめれば良いのさ
2016/10/26(水) 00:45:00.36ID:IJ0r6zMc
perl -pe
2016/10/26(水) 03:02:37.18ID:1uI8N3VZ
>>499
perl -mopen=OUT,:raw -i.bak -pe "s/unko/manko/g" hogo.txt

http://perldoc.jp/docs/perl/perlrun.pod
http://perldoc.jp/docs/perl/open.pod
503デフォルトの名無しさん
垢版 |
2016/11/10(木) 22:48:13.72ID:SbD3rZb1
perlの場合は文字コードがEUCのデータファイルがあって
入力フォームからハングル文字で書き込むと自動的に&#○○○;の形に変換されて書き込まれるのですか?
2016/11/10(木) 22:56:55.76ID:Him+SRv0
フォームってなに?
2016/11/10(木) 23:16:39.82ID:e4bBCogG
日本語と知能が不自由なあちらの人じゃない?
2016/11/10(木) 23:30:34.65ID:XrxEtHdJ
最近はフォームを知らない人がいるんだ
おぢさん、世代ギャップを感じるよ
2016/11/11(金) 00:26:38.27ID:dQSao3i1
うわ、知能障害者がまた来たよ。
それともゆとり世代の代表例かな?
508デフォルトの名無しさん
垢版 |
2016/11/11(金) 12:07:09.49ID:PHyMHsut
my $str = "aaa〹&bbb&ccc";
という文字列があって
&#以外の&を&に置換するやり方は?
509デフォルトの名無しさん
垢版 |
2016/11/11(金) 12:09:09.25ID:PHyMHsut
my $str = "aaa&#12345;bbb&ccc";
という文字列があって
&#以外の&を&に置換するやり方は?

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

#はここでは全角で入力したけど半角です
2016/11/11(金) 12:42:23.87ID:Bnx4QB3I
昨日の知能に問題がある人か
2016/11/11(金) 12:49:30.58ID:mEGzssAg
s/&(?!#)/&amp;/g

(?!...) 否定先読み
2016/11/11(金) 17:35:35.83ID:KyOrnFnp
こういう時日本語は全角文字を使えて便利だね
海外の人は&や#が入力できない時苦労しそう
2016/11/11(金) 17:40:50.55ID:OyxHpcMK
文字参照で書けばどうか?
s/&(?!#)/&amp;/g
515デフォルトの名無しさん
垢版 |
2016/11/11(金) 23:23:43.62ID:PHyMHsut
できました
それとこの文字列で
my $str = "&amp;&amp;&am";
それとこの文字列で&amp;でない&(この場合一番後ろの&)を&amp;に置換するには
どうすればいいんでしょうか?
2016/11/11(金) 23:38:03.46ID:mEGzssAg
それも否定先読みじゃないの
同じようにやってごらん
2016/12/07(水) 13:14:37.83ID:AwnLgrFF
すみません教えてください。
DBD::CSVというのは
標準モジュールに含まれるのでしょうか?
2016/12/07(水) 15:08:45.45ID:eBB6Jpl7
そもそもDBIが標準モジュールではない
2016/12/07(水) 15:12:26.59ID:MGgEOjpT
>>517
http://perldoc.perl.org/perlmodlib.html
Perl の標準モジュールではないが
Active Perl のようにバンドルされているディストリもある
2016/12/07(水) 15:13:12.93ID:AwnLgrFF
>>518
ああ、DBIは標準モジュールじゃないんですか。
ありがとうございました。
2016/12/07(水) 15:18:54.39ID:AwnLgrFF
>>519
なるほど納得です。
開発環境がAcrivePerlで、libに入ってるモジュールは標準と思ってました。
ありがとうございました。
2016/12/10(土) 20:16:28.52ID:cBnztJW7
perlの乱数生成器の内部状態を保存するにはどうしたらいいですか
seedだけ保存しても100万回 rand を呼んだところで中断したら再開するときまた100万回呼ばないとダメですよね
2016/12/10(土) 20:34:37.07ID:bw+AbQq7
そもそもrandはOS依存なので諦めてください。
2016/12/14(水) 23:50:40.69ID:6q3W8zza
と言うか動作の保証が求められる乱数みたいなのはオブジェクトごとに専用で実装する
2016/12/15(木) 13:10:06.97ID:ZL343Whf
乱数用のモジュール使うしかないんだろうけど有名どころの Math::Random::MT は状態保存はできないみたいだな
pure perl実装の方は無理矢理シリアライズすればできそうだけど
2016/12/15(木) 15:50:25.81ID:1Sd664ch
自分で書いても3分以内に全部かけそうだけどな
2016/12/16(金) 20:29:42.48ID:rLtLojZ+
再現性が必要な乱数は、一旦作成してファイルに保存して利用する
2016/12/17(土) 00:56:05.87ID:G3Bk7Xtn
乱数が無限に必要な場合は円周率で代用する
529デフォルトの名無しさん
垢版 |
2016/12/19(月) 00:17:41.32ID:qsdLnaaR
push pop shift unshiftが未だにどれがどうだったか覚えられません。
毎回ググるのも面倒なのですが、何か覚えるコツみたいなものはありますでしょうか。
ディスプレイに付箋を貼るのは嫌です。
2016/12/19(月) 00:26:18.79ID:E/K4i5of
毎回調べろ
2016/12/19(月) 16:34:48.89ID:CDWthwTd
あああ、オレも覚えるのに苦労した
だって、アセンブラの push 命令とは伸びる方向が真逆なんだよ

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

push は後ろから押す、背中から押す、ケツから押す、とにかく押すんだ
満員電車に乗るとき、押さないでください、押さないでください、って感じ
532デフォルトの名無しさん
垢版 |
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 "スマホだよ";
}

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

>>530
レスしたいだけのゴミクズはさっさと消えろ。
まともに回答もできないクセに自己顕示欲だけは人一倍。
お前みたいな奴が社会のお荷物なんだよ。
お荷物=捨てるに捨てられないゴミ、だからな。
本当はさっさと処分したほうが社会のためだが憲法と法律によって処分できないだけ。
2016/12/20(火) 01:30:38.17ID:vON4ZTDa
>>535
自己紹介乙
簡単なことも覚えられない記憶障害者か?それとも統合失調症か?
2016/12/20(火) 01:58:29.63ID:quKQ7lis
一行レスにこれだけの長文で応えるのは愛があるからだと思うの
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]
2016/12/20(火) 03:25:48.63ID:Wy6+Up2x
まあどうせすぐ忘れるだろ
結局は染み付くまで調べるのを繰り返すしかない
2016/12/20(火) 04:26:14.23ID:VxeGortQ
>>535
いやいや、毎回調べるのも十分ありだと思うぞ。
俺はそのうちになんとなく覚えちゃったことけっこうあるよ。
2016/12/20(火) 05:58:50.42ID:Wy6+Up2x
うろ覚えで使うとバグの発見に苦しむんで
ほんのちょっとでも不安を覚える感じがしたら大丈夫だとは思ってても
必ず調べる方が良いよね
2016/12/20(火) 14:29:43.74ID:GHwwkOBP
俺も毎回調べてることは色々ある
同じことを100回調べた疑いすらある
2016/12/20(火) 18:25:40.76ID:JPbALvOm
そんなこと言ってるとまた精神障害者の>>536に記憶障害とか言われるぞw
2016/12/21(水) 00:24:41.66ID:nmy+aY6o
毎日のように使ってりゃそりゃ忘れることは無いだろうけど
数ヵ月とか間を空けると忘れてて調べなおすことはままある
記憶障害って言われるのはちょっときつい
2016/12/21(水) 00:30:32.60ID:lo5qcp8D
記憶障害じゃなくてゆとり世代なのか?
2016/12/21(水) 09:29:14.01ID:Xe+zsvfF
覚えにくいことは自分で一覧表を作ると良い
C#の宣言一覧とか目につく所にファイルしてある
2016/12/23(金) 10:11:56.10ID:jV2urUkG
shiftは考えてみたけど、底の抜けた箱に物が詰まってて、箱自体を上にシフトすると一番下の物がまろび出てくるってイメージかな
2016/12/24(土) 05:45:04.23ID:NChqVw6n
干草プッシュだけ覚えときゃなんとかなる気がするが、ロケットペンシル記憶術も捨てがたい
549デフォルトの名無しさん
垢版 |
2017/01/01(日) 16:43:08.52ID:YnMirTCR
配列のスライスとリストのスライスは微妙に仕様が違うんだな。最近まで気づかなかったよ。
550デフォルトの名無しさん
垢版 |
2017/01/04(水) 00:26:26.84ID:9INFfbdp
モジュールのインストールすらできないPerlはマジでゴミ
膨大な依存関係を調べて手作業でインストールすればできないことはないのかもしれないが、
そんな暇があるのはニートくらいだろ

ゴミニート専用言語Perl
2017/01/04(水) 01:41:34.64ID:9INFfbdp
>>829
今ケツの穴が痛くてそれどころじゃない
2017/01/04(水) 01:41:41.45ID:9INFfbdp
>>829
今ケツの穴が痛くてそれどころじゃない
2017/01/04(水) 02:01:46.64ID:Z6+Vp8du
菊初めか
お大事に
2017/01/04(水) 06:53:29.45ID:Em4GHsJE
今ケツの穴が痛くてモジュールのインストールができない

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

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

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

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


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


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

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

確か言語は、C++ だったかな?
574デフォルトの名無しさん
垢版 |
2017/01/13(金) 11:59:30.05ID:lAI6bANo
そらそうだろ、Perlなんて電子産廃なんだからC系とかPHPになるだろうよ。
Perlで何かを作ろうってほうがおかしい。
2017/01/13(金) 16:26:16.86ID:w9nZHjQ8
PHPに代えたって意味無いじゃん
同様の理由でPythonも却下
2017/01/13(金) 17:31:55.77ID:knj8G1ZF
下らないことにはレス率が増えるこのレベルの低さよ
577デフォルトの名無しさん
垢版 |
2017/01/14(土) 01:50:24.44ID:dLK6O0iv
ウザいゴミ
2017/01/16(月) 14:17:17.64ID:pfhmv7nO
>>573
大規模なオンラインゲームだと
むしろJavaを使うんじゃないかな?
人集めしやすいし
2017/01/16(月) 18:16:40.64ID:dzrBWFk0
そんな重いことまずしない
2017/01/21(土) 22:44:51.61ID:axnp1ig/
>>559
おれなら作れる
581デフォルトの名無しさん
垢版 |
2017/01/22(日) 21:26:40.74ID:xYSgWZ/D
寄生できないmmoとか簡単そうだけどな

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

(3)があれば身の丈に合ってないダンジョンの時点で経験値はほぼゼロ
ほぼゼロなところへ(1)があるから限りなくゼロに近くなる
寄生でダンジョンクリアだけしようにも(2)のハイリスクがある
582デフォルトの名無しさん
垢版 |
2017/01/24(火) 18:17:56.63ID:wudREosA
>>581
回復職やサポート職の経験値もなしということでしょうか。
2017/01/24(火) 18:48:47.54ID:tYWypKKw
昔はこれでアラーにならなかったのですが、perl5.8でこれを実行すると @{$_[2]}が原因でこけてるらしいです。
どのように変えればよいでしょうか
my ( @WdayArr ) = ( $_[2] )? @{$_[2]} : ( 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' );
2017/01/24(火) 22:39:27.02ID:zqYaLnZ2
>>583
# http://perldoc.perl.org/5.8.9/Scalar/Util.html
use Scalar::Util qw(reftype);

my @WdayArr = reftype($_[2]) eq 'ARRAY' ? @{$_[2]} : qw(Sun Mon Tue Wed Thu Fri Sat);
2017/01/24(火) 23:38:20.96ID:LKVAQWtm
>>583
$_[2]には何が入ってんだよ
2017/01/25(水) 08:15:46.34ID:1MVxS70E
>>584
ありがとうございます。やってみます。

>>585
曜日の文字を配列に指定する部分です。なければ、英語の曜日が入ります
2017/01/25(水) 09:09:34.94ID:WOhX0mTt
違う、そうじゃない
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;
589デフォルトの名無しさん
垢版 |
2017/01/25(水) 09:30:32.20ID:1MVxS70E
>>588
use strict;を指定すると参照ダメみたいなエラーが出るので
とりあえずuse strict;を外して応急処置しています。

参照渡しができなくなったんでしょうか
2017/01/25(水) 10:03:41.94ID:WOhX0mTt
こういう時はエラーメッセージをそのまま貼るのが正解
591デフォルトの名無しさん
垢版 |
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
2017/01/25(水) 10:29:15.16ID:WOhX0mTt
ARRAY(0x10b0458) というのは配列リファレンスを文字列として評価した時に出てくる
関数の呼び出し元で配列をそのまま渡さずにダブルクォートで囲うなどして文字列化してしまっているのだろう
2017/01/25(水) 10:31:24.85ID:1MVxS70E
ありがとうございます。関数の実行側のほうを確認します。
594デフォルトの名無しさん
垢版 |
2017/01/28(土) 20:27:36.04ID:t13qO4X2
Perlはマジで糞だな
リファレンスはリファレンスで同じじゃねーの?
バックスラッシュ付けたリファレンスでも種類によって違うとか意味不明
2017/01/28(土) 20:37:05.87ID:7oV/H97Q
・・・?
2017/01/30(月) 08:35:21.14ID:CkOT0sBx
Cの共用体のようなことしなければ、
ある「型」のリファレンスは
その「型」のリファレンスのままでよい。
それ以外の使い方をすれば、「間違っている」として
エラーを吐いてくれるのが有難いではないか。

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

my $ref_to_hash0 = +{ @{ $ref_to_array0 } };
my $ref_to_array1 = [ %{ $ref_to_hash1 } ];
2017/01/30(月) 21:42:50.47ID:kKFFvpaa
>>597
無駄なものがあって読みづらい

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

何がしたいのかわからん。
キーと値が交互に出てくるものを
ハッシュかリストに変換したいのか?
2017/01/30(月) 23:42:02.11ID:XappdU+s
my $ref_to_hash0 = { $ref_to_array0->@* };
my $ref_to_array1 = [ $ref_to_hash1->%* ];
600デフォルトの名無しさん
垢版 |
2017/02/04(土) 21:52:52.06ID:rb4WR6H/
Javaのクラス周りに慣れるとPerlのクラス周りは本当に不自由だと気付く
2017/02/04(土) 22:07:55.97ID:ydMztSgS
比較例に出すのにJavaのクラスなんぞを持ち出すのもどうかと
602デフォルトの名無しさん
垢版 |
2017/02/06(月) 09:40:35.12ID:ZiMti5cO
xp 32bit

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

旧バージョンはどこからダウンロードできますか?
2017/02/06(月) 12:24:16.94ID:dMFd7Yq5
>>602
active perl old version
でググると、色々出てくるぞ。
実際、どれが使えるのかは知らんが。
2017/02/06(月) 14:58:39.49ID:q20moLVF
$str = "LIST( '2016123456','2015123456','2017987654',…)

という$strがあった時に、シングルクオートに囲まれた部分だけを取り出して
@listに突っ込みたいんだけどどう書いたらいい?
splitの正規表現でいけるかと思ったけどどう書いていいかわからない。
2017/02/06(月) 19:57:05.35ID:YzSDBsjI
>>602
5.16なら間違いなく使えてる
5.18と5,20はファイル名に64intがくっついてて動くかどうかはわからない
2017/02/06(月) 20:08:36.65ID:B4iHWGCu
今activesite見てきたら、まあ流し読みしかしてないけど、古いバージョンは有料で提供してやるよって買いてあった
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
2017/02/06(月) 20:41:32.21ID:r2wSMn/A
>>604
push @list, $1 while $str =~ /'([0-9]+)'/g;
609デフォルトの名無しさん
垢版 |
2017/02/06(月) 20:55:17.22ID:oG8S/cPb
>>604
$str = "LIST( '2016123456','2015123456','2017987654',…)

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

でいいんじゃね?
2017/02/06(月) 23:15:15.61ID:n09J3oc8
eval 怖ひ
2017/02/07(火) 00:35:10.28ID:S1oxUZhq
>>608
> push @list, $1 while $str =~ /'([0-9]+)'/g;

惜しいね。それやるならこうだよ

@list = $str =~ /'([0-9]+)'/g;
2017/02/07(火) 08:04:04.27ID:0+g59X+8
>>611
読みやすさなら上の方が良くね?

新人に引き継ぐ時の事考えると
2017/02/07(火) 08:39:30.86ID:5nFcePp/
>>602
2014年にダウンロードした
ActivePerl-5.16.3.1604-MSWin32-x86-298023.msi
を持っている。

ただ、Active State が古いバージョンを有償でのみ提供
しているのに、勝手に古いバージョンをうpしていいものか解らん。
そのあたり、クリアにしたら、どこかにうpしてやってもいいが。
2017/02/07(火) 10:26:02.92ID:NmaWW75y
m//g の形式でグローバルマッチの意味がないように思うが
2017/02/07(火) 12:23:47.76ID:5nFcePp/
>>614
m//g をリストコンテキストで使うと、
全てのマッチ部分のリストが返される。
2017/02/07(火) 16:36:45.75ID:pJfTbQRq
あると高速化できるようなrecommendsだけどインストールされていないモジュールを一覧出来る方法を教えて下さい
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を使ってる
2017/02/07(火) 20:35:38.79ID:k/sR8nQd
https://amaten.com/
こんなサイトの情報をテキストか何かで取得したい
LWP::Simple とかでは取ってこれない
何を使うと一番簡単にできる?
2017/02/07(火) 20:58:27.25ID:NmaWW75y
use IO::Socket;
2017/02/08(水) 01:47:50.85ID:lrXbOWPO
>>602
XPで動くかは試してないけど、Strawberry Perlっていうのもあるよ
どうしてもActivePerlじゃないとだめなの?
2017/02/09(木) 00:36:47.60ID:MB7d2iTo
おれ XP で Strawberry Perl つかってる
ActivePerl はモジュールの対応が遅いから乗り換えた
2017/02/09(木) 00:50:56.06ID:9TbyVJRb
むしろなぜXPを使ってるのか知りたい
2017/02/09(木) 01:09:37.56ID:EjItGpsn
>>617のところでActive Perlの古いのから最新まで全部ダウンロードできるじゃん
それで解決だろ
2017/02/09(木) 12:20:55.28ID:awPX9+44
>>622
M$に金を払うのが嫌だからだろう。
2017/02/09(木) 22:13:19.02ID:CNUBJX7I
>>624
それだけだったらLinuxやFreeBSDなどを使うって方法もあるだろ?

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

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

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

とにかく、滅多に聞かないな
2017/02/10(金) 15:05:42.76ID:j8ygGIFR
Perlを罵倒したい人は、こちらにどうぞ

Perlについての罵倒スレ 63箱目
http://echo.2ch.net/test/read.cgi/tech/1392639772/
2017/02/10(金) 22:06:13.34ID:+KYQgfiL
Perlは全然進化しないからな
一年ちょっと前に6がでて音沙汰なし
7はいつ出るんだ?って状態
2017/02/10(金) 22:29:17.89ID:pJ/oSP18
ナイスジョーク
2017/02/11(土) 09:59:05.70ID:pXj4BwQB
まともな学校はcだろ。
2017/02/11(土) 11:05:50.36ID:ffoIlYEu
実用性を重視するならJava一択
635デフォルトの名無しさん
垢版 |
2017/02/11(土) 14:50:19.58ID:N4/UY6wx
>>631
6出てたのか?
知らなかったわ
2017/02/11(土) 15:18:36.75ID:p/3UeWk3
>>634
> 実用性を重視するならJava一択
それって言語の実用性じゃなくて
人材的な意味での実用性だよな

つまりJavaは色んな所で使われてる言語だから
Javaできますって言っておけば採用されやすい。
自分が実用性がある人間になりたいならJava一択
2017/02/11(土) 15:23:34.94ID:H7Znugc/
いい加減スレチ
2017/02/11(土) 15:50:08.46ID:ffoIlYEu
言語なんかいくつ修得してもいいんだから、大人しくJava勉強しとけ
2017/02/11(土) 17:33:33.41ID:tLczzgrK
何がなんだか仕様に混乱するから3つまでしか習得出来ません
4つめ覚えるとなにかを忘れます
2017/02/11(土) 21:11:41.56ID:y7nchZP8
621
> むしろなぜXPを使ってるのか知りたい

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

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

7と10で動作確認すればいいじゃん
2017/02/11(土) 23:02:42.86ID:ffoIlYEu
XPはまだ結構現役で残ってるぞ
2017/02/11(土) 23:33:55.67ID:p/3UeWk3
俺の周りに見たことない
2017/02/13(月) 12:16:27.67ID:vLa3XGqC
俺の周りでは、いまだにNT3.5.1を使ってる取引先があるのだが。
2017/02/13(月) 18:59:46.87ID:VKyPIbro
用途を特定した専用マシンみたいなのは、特にOSを入れ替えずにずっと使うな
測定機器や実験機器の一部とか、何かの制御用とか

ただ、そんなマシンは新しいソフトを入れたりもしないから、
互換性とかどうでもいい世界だけど
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

よろしくお願いいたします _(_^_)_
647デフォルトの名無しさん
垢版 |
2017/02/18(土) 00:14:42.65ID:eUOj9Lyv
>>646
s/\s//g
2017/02/18(土) 00:53:08.66ID:UURjaLCm
>>646
死んだ方がいいレベル
2017/02/18(土) 00:58:30.39ID:np+iCDRO
とにかく学習しようという気がまったく見えないのが凄い
2017/02/18(土) 01:09:34.78ID:oWVhdX8p
普通1時間以内に学習を完了してそうなものを、10日以上経ってるぞ
651646
垢版 |
2017/02/18(土) 08:59:07.57ID:64GKa0+N
>>647
ど素人に有難うございました。
2017/02/18(土) 21:00:13.31ID:3ABB/Pla
だから土曜日に書いたと
2017/02/26(日) 10:31:20.73ID:cj/RoW+L
active perlで、長いファイル名のあるフォルダに対して readdir すると、
エラーになって止まるんだけど、どうやって回避すればいいんだ

エラーが返るとかじゃなくて実行自体が止まるので、とりあえず読んでみて、
とかが出来ない
2017/02/26(日) 10:39:23.76ID:OmTNhTRr
windowsのエラーじゃねぇの?
とりあえずevalすれば実行は止まらないと思うけど
2017/02/27(月) 08:34:03.50ID:hOw/b7i/
>>653
ひょっとして、ファイル名にユニコード文字が混じったりしてない?
2017/02/27(月) 08:44:24.40ID:hOw/b7i/
readdirのユニコード版なら、こうゆうモジュールもある。

http://search.cpan.org/~xaicron/Win32-Unicode-0.26/lib/Win32/Unicode/Dir.pm
2017/02/27(月) 18:47:01.31ID:dx1g9tP+
unicodeは入ってない
単に長いだけ
2017/02/27(月) 22:36:40.65ID:8LXDZxYt
Win32::LongPathは?
2017/02/27(月) 22:51:51.90ID:dx1g9tP+
それを使うと、既存のreaddir の挙動が変わるの?
2017/02/28(火) 08:31:44.98ID:ECHoSeWI
>>659
「長い」って何文字なん?260文字以下だと問題ないはず。
2017/02/28(火) 18:54:26.71ID:Gbg+HMKR
それ以上あったので問題があった
2017/03/01(水) 08:44:35.66ID:RfMjQxG+
Windowsで260文字以上のファイル名を普通に作ろうとすると、
「ファイル名が長すぎる」とエラーが出るが、
ネットワークドライブを使うと、作れてしまうようだ。
ただ、それを実際に使おうとすると、ドツボに嵌るみたいだな。
2017/03/01(水) 21:51:27.16ID:KTTjixcr
ファイル名っていうか、パスを含めた長さな
2017/03/05(日) 00:13:47.26ID:hhHVIZUN
@file = split(/\n/,`dir /s /b *.* 2>NUL`);
な。次スレのテンプレに追加するから。
2017/03/05(日) 15:57:50.73ID:des1Iukd
forkするのOKなら何でもありじゃん
2017/03/08(水) 23:48:39.27ID:0EPJtM8y
シェルとカーネルを縦横無尽に使いこなすのがPerlプログラミングの醍醐味。
2017/03/09(木) 15:21:10.67ID:lYcZyteE
print 1+(2+3);
print (1+2)+3;

この二つの文の違いを使いこなすのが、Perlプログラミングの醍醐味。
2017/03/14(火) 00:58:03.78ID:mRCDOzFa
awk 由来の 0+ ハックや "". ハックは常識として使いこなすのが、Perlプログラミングのたしなみ。
2017/03/15(水) 23:38:07.63ID:WjEGzhMP
ハックと言ってる時点で使ってはダメなものだ
2017/03/16(木) 00:17:10.27ID:a1z6pXZc
工夫できないなら何を使ってもダメ
sub to_s { $_[0].'' }
sub to_i { $_[0]+00 }
2017/03/16(木) 06:54:07.57ID:t2soddN5
>awk 由来の 0+ ハックや "". ハックは
そもそも、常識でないといいたげな、このレスは何?
まともな参考本読めば、最初の方に書いてある。
ハックでもなんでもない
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";
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 = @_; のように一度変数で受け取るのが意図しない変更を防ぐ意味でも良いだろう
2017/03/21(火) 08:41:14.27ID:RAznfVax
>>673

672です。
よく解りました。
ありがとうございました。
2017/03/31(金) 19:10:56.36ID:I7SB2jha
print (1+2)+(4+5)+6+7;

3
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)
2017/03/31(金) 22:38:54.66ID:PsuuxH/N
$hash{'aaa'}{'bbb'}{'ccc'} = 1;

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

まあ一時的にスクリプトが欲しいときとか、それが良い時はそれで良いけど、
通常のソフトウェアを作る時内部でそんなことが起きれてば完全な欠陥なわけであって。
679デフォルトの名無しさん
垢版 |
2017/04/01(土) 17:07:22.61ID:y/HEzjsw
そうか、100倍以上違うのか。試してみたいからソースコードを見せてくれ。
2017/04/01(土) 17:19:36.13ID:aXA7htV2
>>678
えーと、インタプリタとコンパイラって知ってるかい?
681デフォルトの名無しさん
垢版 |
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{
$

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

たったこんだけでも超遅くなるか
つか動的な宣言って超遅いよね
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)';

これ毎回書くんだが、全部省略できないかの
すぐこれ書くの忘れて文字コード関係でおかしくなるし、書いたら書いたで無駄に目障りなんだが・・・
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が見つかるようにする
2017/04/15(土) 10:52:14.57ID:DbxhuG0l
そういやutf8なら
binmode STDOUT, ':utf8';
で良かったか
2017/04/15(土) 20:57:19.56ID:GBtgusH0
>>677
参照の -> を参照に対しては省略できるってだけだが。
2017/04/15(土) 21:19:29.96ID:4y1tBhnC
それが凄いところ
オブジェクト指向だって、ほんの小手先でちゃんと実用になるものを実装しちゃってる
2017/04/15(土) 23:53:13.69ID:k4jkkg7x
>>693
最低レベルな。
小手先で済ませちゃったから、それ以上の
便利な機能はライブラリ任せになっちゃって
いつまでも標準が生まれなかった。
Perl6にさっさと移行すればいいのに
2017/04/15(土) 23:58:43.13ID:4y1tBhnC
言語なんてそれでいいだろ
標準に拘っても何も得しない
2017/04/16(日) 00:42:48.16ID:cCOM2/u0
>>695
可読性の問題だ。
意味は全く一緒なのに、書き方を変えてどうする?
言語を変えるのと一緒だぞ
2017/04/16(日) 00:57:54.05ID:h3ZKvGOL
どうせ定番の奴がデファクトスタンダードになるんだから同じことだ
2017/04/16(日) 01:01:17.12ID:cCOM2/u0
その定番が生まれなかったんだろ
2017/04/16(日) 06:42:15.56ID:h3ZKvGOL
それは目的がニッチ過ぎたか利用者が少なすぎたからで、
どっちにしろ標準になんかならない
2017/04/20(木) 20:48:25.04ID:6ZaZCTR2
Perl6 ? そういえばそうゆうものもあったな。ググると、
1年半前に正式安定版がリリースされたのか。知らなかった。

誰も、その事を話題にすらしていないし。
http://tamae.2ch.net/test/read.cgi/php/1162721943/
「 Perl6/Parrotスレ - Part2 」
2017/04/20(木) 21:37:11.61ID:3zMwUShO
Perl6は別の言語だからな
2017/04/20(木) 22:48:25.36ID:QXbdV/cO
pythonもバージョンが上がって別言語になった
703デフォルトの名無しさん
垢版 |
2017/04/20(木) 22:52:03.43ID:NBs+Bll8
>>702
なってないわ
2017/04/20(木) 23:04:27.00ID:Viw0Nzyo
>>689+690
PERL5OPTと組み合わせれば全て解消。
2017/04/23(日) 19:39:54.82ID:W+YLVZyj
>>688
そうか?ディスクI/Oが絡まないようなメモリ上だけの操作ならさほど遅い感じしないけど。
まあ、単純なのと比べたら遅いけどね。
2017/04/23(日) 19:56:30.69ID:W+YLVZyj
>>689
use encoding は?
2017/04/30(日) 10:11:15.92ID:zwl8qhxW
>>705
理論上完全に最適化できたとしても速度差は5倍以上あるよ
708デフォルトの名無しさん
垢版 |
2017/05/03(水) 00:40:52.14ID:M+hoQd/o
$str = "みかん りんご ぶどう";
を・みかん ・りんご ・ぶどうというように文字の最初に・をつけるには
どう置換すればいいんですか?
2017/05/03(水) 00:56:20.79ID:weHSRqvf
join '', map { '・' . $_ } split ' ', $str;
710デフォルトの名無しさん
垢版 |
2017/05/03(水) 01:07:15.97ID:Qv6lwwF1
$str =~ s/(\w+)/・$1/g;
2017/05/03(水) 01:13:44.21ID:i0PT5y6P
試してないだろ
712デフォルトの名無しさん
垢版 |
2017/05/03(水) 02:22:37.42ID:0sDWrHda
linux mint18
perl6のインストールについて

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

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

すいません、解決しました
2017/05/11(木) 19:50:38.19ID:nIm7OIQv
POD書いてる?
2017/05/11(木) 23:25:04.61ID:nen5x9dT
メモリリーク検出になに使ってる?
とりあえず昔からTest::LeakTrace使ってるんだけど
いまはもっと便利なものがあったりするのかな?
716デフォルトの名無しさん
垢版 |
2017/05/24(水) 13:05:14.66ID:9utV0RoM
Perl/Qt は癖があるね、Perl/Qtとクラスを同時に使おうとするとなかなか大変。
2017/05/28(日) 12:56:56.81ID:+Ey6Jlm8
テキストファイルを読み込むときに
// (例えばfile://...)
があると、そこから行末まで読み込めない現象が起きるんだけど
どうしたらちゃんと読み込める?
binmodeにしても解決しなかった
2017/05/28(日) 13:01:09.18ID:+Ey6Jlm8
>>717
open fp, "<$file";
while(<fp>){
print $_;
}
みたいな感じで読み込んでる
2017/05/28(日) 14:02:42.07ID:0c9kwMSl
そんな訳ない
2017/05/28(日) 14:05:21.98ID:9RwfEHwH
ファイルハンドルからダブルスラッシュが含まれる行を読み込もうとするとダブルスラッシュが行末と誤認されるという解釈でいいんですかね
2017/05/28(日) 14:33:51.85ID:eFuC5yco
絶対になにかカンチガイしてるだろう。
単に出力のバッファリングで単に表示されてないだけとか。
もしくは自分で"//"以降を削除するような処理をしているとかだな。
正規表現の書き誤りがあやしい。
2017/05/28(日) 14:59:23.09ID:0c9kwMSl
実際に、>>717の方法で読ませればちゃんと読む筈
怪しい箇所を削っていって試せばいい
2017/05/28(日) 15:01:31.81ID:/dM5Kslk
>>717
再現コードを
724717
垢版 |
2017/05/28(日) 16:52:39.75ID:+Ey6Jlm8
カンチガイでした
別のところでCのコメント削除をしていて
そこで消えてました
テヘペロ
725デフォルトの名無しさん
垢版 |
2017/05/28(日) 18:05:45.48ID:DFLy+ixu
ま、そんなもんよ
いい経験したな
次に活かせよ
2017/05/28(日) 20:22:17.89ID:4xPNWoV3
C/C++のソースコードを読んで
コメント削除したソースコード
ifdefとかのプリプロセスしたソースコード
typedef, struct, unionとかを抽出した結果
を得たいんだけどどうするのがいいだろう

プリプロセスしたソースコードをcflowに渡すと
関数コールツリーを得られるから
それらを使ってCのソースコード理解に役立てたい
727デフォルトの名無しさん
垢版 |
2017/05/28(日) 21:37:34.83ID:QPUrPhGM
>>726
何が難しいのか、なんでそんなことをしたいのかよくわからん。
2017/05/28(日) 22:39:53.18ID:H3cdg50W
>>726
自前で作るって話からは外れるけど、Doxygenに突っ込むとかじゃダメなの?
2017/05/29(月) 06:06:36.99ID:iFMZQ+Zt
>>727
Cのソースコード理解のため

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

structを抽出したあと
それらの参照関係も図示したい
2017/05/29(月) 06:07:01.52ID:iFMZQ+Zt
>>727
簡単なら作ってgitとかにあげてほしい
2017/05/29(月) 06:09:33.49ID:iFMZQ+Zt
>>728
プリプロセスする前のコードだと重複したりすると思う

gcc -Eとかだと
#defineとかまで展開されるからそれは抑えたい
732デフォルトの名無しさん
垢版 |
2017/05/29(月) 06:15:46.76ID:1pPkP4QE
gcc -E じゃだめなのか。
cpp のソースコードを読んでみるのがいいと思うよ。
昔、LSI-C 86 のプリプロセッサのソースコード読んで勉強したなあ。
2017/05/29(月) 07:11:36.94ID:7MORbIbH
>>726
cflowの中でプリプロセスするから事前にする必要はないと思うけど
2017/05/29(月) 17:52:39.84ID:aFd0yPA1
>>733
一部だけプリプロセスさせたいんです
マクロとかはそのままの方がわかり易いので
2017/05/29(月) 18:14:45.54ID:aFd0yPA1
例えば
#define ERRLVL 5
#define WARLVL 3
とかなってるのをプリプロセスすると
数字に置き換わるので意味が判りにくくなる

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

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

この程度のことなら出来そうじゃない?
739726
垢版 |
2017/06/01(木) 00:33:15.15ID:mVcFCi6e
作ってみたけどバグがあるだろう
https://github.com/bran1219/mycpp
740デフォルトの名無しさん
垢版 |
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;}

みたいなやり方が出来る。気を悪くしないでほしい。本当にそう思ったんだ。
741デフォルトの名無しさん
垢版 |
2017/06/05(月) 23:40:47.35ID:AlRALdx8
gettoken()を作ってread()で一文字ずつ読み込んでトークンを返すのは良さそうだけど
トークンタイプはその時の状態が判らないと判別できないと思う
//は普通の状態で現れたらコメント開始だけど
"の中だと文字列
/*の中だとコメント文字列
742デフォルトの名無しさん
垢版 |
2017/06/09(金) 13:39:22.36ID:jmjGKHXw
tcpのIO::Socket使ってサーバーに対してconnectした後、closeせずに親プロセスは接続を維持したまま、
forkした子プロセスでサーバーから受信した大量の文字列をファイルに書くとかするには子プロセスが継承したソケットをどう破棄したらいいの?
現状では当然の事ながら親プロセスの受信待ちが完全に止まってしまって困ってます
743デフォルトの名無しさん
垢版 |
2017/06/09(金) 14:33:09.33ID:1EhRpyQk
なぜ子プロセスでコネクトしないの?
744デフォルトの名無しさん
垢版 |
2017/06/09(金) 14:41:19.37ID:jmjGKHXw
>>743
客先のサーバーの仕様とやらで複数の接続(connect)に対応していない模様(爆)
745デフォルトの名無しさん
垢版 |
2017/06/09(金) 19:57:08.76ID:ipZEdn/U
>>744
親プロセスの接続を切れば複数接続じゃなくなると思う
746742
垢版 |
2017/06/10(土) 02:10:59.82ID:6TQL4PKJ
解決しました
fork()してから普通に子プロセス側で$socket->close();すれば良かったのですね。
ありがとうございました
2017/06/13(火) 00:27:54.86ID:5t+GNw1N
>>667,675-676
なぜこうなるの?
2017/06/13(火) 02:06:41.19ID:Z49xlslC
ヒント:
print"Hello world!\n";
print "Hello world!\n";
print("Hello world!\n");
print ( "Hello world!\n" );
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をプリントしてるだけ。
2017/06/14(水) 00:26:46.99ID:J0vYxrWi
>>749
なるほど、すっきりしたありがとう。

>>748
これは逆に何のヒントか分からなかった。
751デフォルトの名無しさん
垢版 |
2017/06/14(水) 07:10:52.51ID:nXcqV3BV
>>741
そんな面倒なことを考えなくてもいいように gettoken を書くんだよ。
普通は C の文字列定数の中でわざわざ // を認識しない。どんなやりかたを考えてるの?
興味があるなら flex とかやったみたらどうかな。
752デフォルトの名無しさん
垢版 |
2017/06/14(水) 08:00:33.67ID:XYhnRuER
>>751
文字列定数の中か外かはどうやって判別するの?
753デフォルトの名無しさん
垢版 |
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 をかじっておけば理解しやすいと思うよ。
754デフォルトの名無しさん
垢版 |
2017/06/16(金) 07:59:43.13ID:ULLUKZU9
>>753
それはcase文の文字で状態遷移してるのと等価

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

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

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

ヒットしなかったのは再帰始まりのloopと干渉していたらしく、始まりをちゃんと書いたら動きました。
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
こんなの使いまわし効かなさすぎて嫌すぎる
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 一個作って、中で切り分けちゃえば?
2017/06/29(木) 15:18:22.72ID:/7f1HAmp
どもです。
URLで言うexample.comみたいな不可侵領域?的なのが無いのかなぁと思った感じでした。
2017/06/29(木) 17:00:57.00ID:sULhhpBu
>>760
この辺一通り読むと参考になるかもね
http://perldoc.jp/docs/perl/perlmodlib.pod#Guidelines32for32Module32Creation
2017/06/29(木) 17:25:38.71ID:/7f1HAmp
>>761
> もしプライベートな内部やプロジェクト固有の用途のために開発中のモジュールが 決して公開されることがないなら、
> 将来の公開モジュールと名前が 衝突しないことを確実にしてください。
> これは、予約済みの Local::* カテゴリを使うか、 Foo_Corp::* のように 名前にした戦を含めることで行えます。

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

> Foo_Corp::* のように 名前に下線を含めることで
2017/06/29(木) 18:03:16.93ID:/7f1HAmp
なるほど…
ちゃんと訳した上で漢字を変な読み方した状態でのタイポとはw
2017/06/30(金) 20:59:30.86ID:O3ckt/Q4
今とあるスクリプトを見たら
1 while(s/[\012\015]$//);
こんなん書いてあったんだけど、
たぶん改行とおぼしきものは全部消すってことだと思うんだけど、
いらんもんまで消しすぎたりしてない?
2017/06/30(金) 21:30:32.10ID:nK8Rv+fa
スカラー末の改行(の連続)を外す。
スカラー内の改行は外さない。
作者の意図通りに、余分なものは消さないと思うよ。

普通に、s/[¥012¥015]$//g ; すりゃいいと思うけど、、、
2017/06/30(金) 23:49:28.02ID:5o89YkXB
スカラー?
2017/07/01(土) 06:06:23.31ID:756r6lLe
whileとgは同じじゃない
2017/07/01(土) 06:27:43.88ID:756r6lLe
文字の末尾が012か015だったら消すんじゃない?
文字コードもわからないけど
2017/07/01(土) 06:43:42.49ID:LXXRZ/Ka
動作は >>769 の通りだと思うけど
1 while が意味不明だな
2017/07/01(土) 06:50:18.42ID:756r6lLe
while 1 はマニュアルにも記載されてる基本的な手法
条件だけで実行が完了する
2017/07/01(土) 09:11:09.64ID:vTsOeFgm
もっとくやしく
2017/07/01(土) 09:24:13.31ID:B+Q6GXxH
1は無視していいよ
2017/07/01(土) 10:05:39.83ID:756r6lLe
勉強し始めて1日で覚えるようなことを全然分からんようなやつが回答者ぶってるのかよ
2017/07/01(土) 10:10:49.16ID:756r6lLe
とりあえず一通り調べたけど、末尾に改行を使う文字コードはなかったから、
1 while(s/[\012\015]$//);
これは本当に改行を削除したいならあらゆる方法の中で最善だと思われる
本当にかたっぱしから消したいのなら、だけど…
2017/07/01(土) 10:11:51.33ID:756r6lLe
と言うより $ が自動でその判定してるから、関係ないものは消えないはずなんだよね
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% --
2017/07/01(土) 11:26:08.99ID:EnayukTL
あ、単純に変数最後の CRLF 削りたいだけなら、比べ物にならん程
chomp の方が早い。

local $/ = “¥r¥n” ;
chomp $_ ;
2017/07/01(土) 12:14:31.52ID:B+Q6GXxH
ActivePerlとCygwinの両方で動くようにしようと思うと、chomp使えないんだよな
2017/07/01(土) 12:31:21.77ID:EnayukTL
ん?
どっちが悪いか知らんが、
local $/ = “¥012¥015” ;
も効かんの?
2017/07/01(土) 12:36:32.24ID:756r6lLe
\rだの\nだの使ってることに神経を疑っちまうぜ
と言うかutf8にさえ文字とみなされない文字を使ってる時点で…

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

特に真ん中のは色々とひどいことになると予想した
2017/07/01(土) 12:40:25.72ID:756r6lLe
>>780
I/Oと言うのはその名の通りIとOがあってだな
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% --
2017/07/01(土) 12:51:34.83ID:EnayukTL
>>783 は上手く動いてねーw
すまん。全面的の俺のレスは脳内から消してくれ。
2017/07/01(土) 13:05:38.92ID:EnayukTL
連レスすまん。これを最後に消える。

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

出力を od -d -a で確認したから合ってると思う。
でベンチマーク取ったけど、記憶にある通りのベンチになった。
通りで>>777>>783が遅いわけだわ。
2017/07/01(土) 15:21:02.94ID:iaxNT7Vw
しかしなんで8進数?
これが普通なの?
2017/07/01(土) 20:55:02.68ID:LXXRZ/Ka
うーん いくら考えても 1 while() と書いてる意味がわからん
gオプションついてないから while の意味ないし
結果知りたいなら s/// の値を直で調べりゃ済む話だし
何故なんだ 誰か教えてください
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
2017/07/02(日) 08:10:30.13ID:cmIXSukt
ありがとう すごくよくわかった
1 whileの挙動をなにか勘違いしていたみたい

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

$とって、gつければ、改行全部きえるはずだよ。
(行単位に分離されてそうだけど。。。)
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 の方が速くなる。
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オプションつけると微妙に速くなる
面白い
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__
2017/07/03(月) 21:35:51.52ID:88Z7s+4Q
こちらこそ勉強になりました
まぬけな質問 >>787 やとんちきなベンチマーク >>792 でも
役に立つ(?)こともあるんですな
795デフォルトの名無しさん
垢版 |
2017/08/15(火) 19:10:26.36ID:mGHj5vlw
Perlに向いてるIDE教えて
デバッグ機能とかはいらない
補完と文法チェックとオートインデントが欲しい
2017/08/16(水) 00:53:07.53ID:83B6OrrB
一番要るのはCPANとの連携機能だろ
797デフォルトの名無しさん
垢版 |
2017/08/17(木) 08:11:08.69ID:3rgoYIbT
CPANとの連携機能はどっちでもいい
みんなメモ帳レベルのテキストエディタで書いてるの?
2017/08/17(木) 08:48:00.96ID:ewlyrxLm
IDEといいつつエディタでいいのか?
2017/08/17(木) 21:40:11.78ID:DvPmzIRV
vscode
800デフォルトの名無しさん
垢版 |
2017/08/17(木) 22:05:58.41ID:3rgoYIbT
どこまでがエディタでどこまでがIDEなのか分からないが、それなりの機能は欲しい
自作関数とかも補完して欲しいしなあ

サンクス
vscode調べてみる
2017/08/26(土) 14:13:33.64ID:zbaxfQ1B
これ誰が使うの?

https://docs.perl6.org/type/atomicint#Operators
802デフォルトの名無しさん
垢版 |
2017/08/27(日) 20:38:24.57ID:SUXQdIaA
Perl6?
2017/08/27(日) 21:17:36.95ID:l5ljwsJk
6は別物らしいね
2017/08/27(日) 22:40:07.20ID:eg2XZFIG
pythonもVBもバージョン上がると別物になる
そして大抵古い方が使いやすい
2017/08/27(日) 22:55:26.24ID:l5ljwsJk
pythonはそろそろLinuxのデフォルトが3になりそうだけど
Perlはそんな気配全く無いよねw
2017/08/27(日) 23:11:43.20ID:QvkIPToQ
システム付属のスクリプト言語っていう立ち位置がかつてのPerlからPythonに変わったからなあ
2017/08/27(日) 23:14:14.93ID:eg2XZFIG
過去の資産が多いほどおいそれとは変えられない
2017/08/29(火) 00:32:32.45ID:MFSwZwGT
Perl は5.005まで。5.6からは別物。
2017/08/29(火) 18:35:08.35ID:rhRVTFDq
<?=>
2017/08/29(火) 18:35:53.37ID:rhRVTFDq
>>801
なにそれどうやって書くの?
2017/08/30(水) 09:00:08.40ID:Lglrs9g0
>>810

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

おいらのPCでは、コピペしてもフォントが対応していないので出てが。
2017/08/30(水) 19:42:59.46ID:bbdqdnnx
環境によってはどうやってもアトミックにならんのでは
2017/08/31(木) 15:10:50.45ID:zaIZgwYc
$_ って正式名称はなに?
2017/08/31(木) 20:40:54.54ID:3/js14c9
>>813
特に決まっていない
use English した時の名前は ARG
http://perldoc.jp/docs/perl/5.22.1/perlvar.pod#General32Variables
http://perldoc.perl.org/perlvar.html#General-Variables
2017/08/31(木) 21:06:33.50ID:kksFNuyJ
日本だとparameterもargumentもどっちも引数と訳して区別しないから、
何故ARGなのかピンときにくいな
2017/08/31(木) 22:02:37.51ID:j9yVEoD5
引数は単に引数ってだけ。その使われ方は決まっていない。

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

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

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

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

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

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

ここで、aがパラメータで、xがアーギュメント
2017/08/31(木) 22:45:26.64ID:j9yVEoD5
それは数学での定義でしかない
2017/09/01(金) 15:00:43.14ID:H3SYi0Xx
引数として使ってるものが引数
パレメータとして使ってる物がパラメータ
821デフォルトの名無しさん
垢版 |
2017/09/02(土) 10:40:48.32ID:u6TVALzz
パレパレ
2017/09/02(土) 12:32:02.45ID:xOFD7X9t
パレメータでぐぐると600件くらいヒットするから、
それなりに認知された用語だ
2017/09/03(日) 01:01:13.45ID:93btyWjA
ネイティヴ風の発音だね
2017/09/03(日) 11:11:45.08ID:DIhXI1rF
たまにいるよな。
大抵のカタカナ英語は日本語風に書いているのに
特定の単語だけネイティブ風に書くやつ

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

元凶は日本のマスゴミなんだから逆らって
アイフォーンをアイフォンとかは全然いいんじゃない?
2017/09/03(日) 17:26:43.87ID:B/+QCXTV
そして突然迷い込む馬鹿二人(うち一人が発狂)
2017/09/04(月) 02:55:51.13ID:wDfrhDJb
パリミラァ
2017/09/04(月) 05:58:32.53ID:jkNKu/s3
なんてネイティヴな発音!
829デフォルトの名無しさん
垢版 |
2017/09/06(水) 01:01:55.01ID:G3iCmUe0
アイフォーンはアイフォーンだろうがゴミ
日本企業の商標を無視するとか朝鮮人かよ
2017/09/06(水) 19:33:55.21ID:sdZlzdoG
先にアイホンがあったから、アイフォンって名乗れないだけだけどな
2017/09/07(木) 01:22:55.82ID:Sk+IOtsg
>>825
おれには「フラメトル」としか聞こえん
2017/09/07(木) 07:54:03.77ID:J7Os68O5
disableをディセーブルだと判ってるのに、どうしてもディザブルと読んでしまう
2017/09/10(日) 19:11:13.56ID:PWIqhoXm
ディスエイブル
2017/09/10(日) 19:11:55.89ID:PWIqhoXm
deny はデニーではなくディナイ
2017/09/10(日) 19:13:03.02ID:PWIqhoXm
alias はアリアスではなくエイリアス
2017/09/10(日) 21:23:32.99ID:ktr8CX3U
dosは土座
2017/09/12(火) 21:58:39.86ID:a0beitbE
>>836
お前PCニュース板で荒らしって叩かれてるやつだろw
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)
839デフォルトの名無しさん
垢版 |
2017/09/15(金) 23:33:11.49ID:du4uxrUm
>>838=ゴミ言語に合理性や整合性を求める知恵遅れ

社会のお荷物だよお前
2017/09/15(金) 23:43:23.66ID:quelyH0d
訳: わかりません
2017/09/16(土) 00:35:28.29ID:r+6Dx5B1
>>838
http://perldoc.jp/docs/perl/5.16.1/perlmod.pod
プラグマは大体ブロックスコープだけどものによるから個別に調べて
http://perldoc.jp/index/core
2017/09/16(土) 10:28:48.29ID:ykCZuND/
>>841
レスdくすあり〜

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

パッケージの定義がグローバルな名前空間に行われてるのは同じ
strictの有効化はコンパイル時のperl内部のスイッチの切り替え
同じ use でもやりたいことが違うからスコープの違いという視点で整理しようとすると混乱しそう
844デフォルトの名無しさん
垢版 |
2017/09/21(木) 20:27:42.42ID:BpkTXd/3
文字列$str2から文字列$str1に含まれている文字以外を全て削除する
例えば$str2="あaかbさcたdなe";$str1="あかさたな";ならば
absdeが残るということです
モジュール使えない環境なのでモジュールなしのやりかたで
845デフォルトの名無しさん
垢版 |
2017/09/21(木) 20:29:23.07ID:BpkTXd/3
間違えたabcdeが残るではなくあかさたなが残る
2017/09/21(木) 21:26:21.38ID:YjUNPIX/
$str2="あaかbさcたdなe";
$str1="あかさたな";

$str2 =~ s/[^$str1]//g;
print $str2; # あかさたな
2017/09/21(木) 23:33:40.68ID:8ncmvgKd
正規表現は書けても実行しようとするとむちゃくちゃ遅くなったり
メモリ足りなくなったりして、結局ループに開いたりする
2017/09/22(金) 05:44:52.27ID:gzrtSK/2
あああああああああまははあああああああああああああああああああああなやたはあああああああああああああああなはわたはなたかかなななななああああああああああああああああああああああああああああかかかかあああああああああああああかささやなさはななけなわまややゆか
849デフォルトの名無しさん
垢版 |
2017/09/22(金) 09:19:14.94ID:fe+2x70v
>>846
そのやり方だと
$str2="あaかbさcたdなe";が
$str2="あaかbさcたdなはe";
だったら結果が文字化けする
2017/09/22(金) 09:42:25.43ID:45DIhC0E
utf8に変換して処理しなさい
2017/09/22(金) 09:45:38.48ID:AEpp9yrH
常識ですな
852デフォルトの名無しさん
垢版 |
2017/09/22(金) 12:47:50.13ID:gMAmIwCv
>>847
それは大抵バックトラックのせいだからバックトラックを減らしなさい。
たとえば、単に \s* ではなく (?>\s*) と書く。
2017/09/23(土) 15:14:55.50ID:J7EIO5I9
Perlは正則言語を最左導出に変換していないとか一体…
まあ一般に状態数が増えてメモリ食うけど
2017/09/30(土) 21:35:00.65ID:cxuNJ5cw
ファイルロック用のファイルを使ってロックしている最中に
他プロセスでそのロック用ファイルを削除すると
ロック解除されてしまうの?
855デフォルトの名無しさん
垢版 |
2017/10/01(日) 00:30:05.86ID:/pIW5dK5
す、す、すみません、どなたか教えてくららい。
2017/10/01(日) 02:02:03.44ID:aVSvWtqd
ロックしているファイルを、他のプロセスは削除できないだろ

試してみれば?
857デフォルトの名無しさん
垢版 |
2017/10/01(日) 04:19:01.01ID:ZfVcefoU
見事にヴァカが釣れたw
腹痛いwwwwwwwwwww
2017/10/01(日) 06:50:57.38ID:h9mcOQPA
10/1は裏エイプリルフール
何をしても許される
859デフォルトの名無しさん
垢版 |
2017/10/01(日) 23:10:23.34ID:y8Okh59a
試してみたけどwindowsサーバーだとロック中のファイルは削除できないけど
unixサーバーだと削除できてしまってロックが解除される
だからロック用ファイルは削除しないでそのまんまの方がいい
2017/10/02(月) 13:19:40.10ID:7H/ud9Uk
>>859
unixでファイル削除してもロックは解放されない
861デフォルトの名無しさん
垢版 |
2017/10/02(月) 13:31:28.69ID:SGi8KvwU
>>860
それどころか同名のロックファイルを作れるから 面倒なバグを生むよな

初心者がほんとによく作るバグが
「ロックを解放したらロックファイルも削除する」
2017/10/02(月) 18:11:00.25ID:zZtvHqX+
perl6についてスレすらないけどみんな無関心なの?
2017/10/02(月) 19:15:38.66ID:7PTk8Wzs
違う言語だからなあ
そんなんに慣れるくらいなら別の言語やる
2017/10/02(月) 19:19:54.66ID:zZtvHqX+
とんくす
やっぱそういう認識なんやね
2017/10/02(月) 19:54:37.34ID:W4ke7gLE
使えるとこではPerl使いたいけど
いよいよとなったら次はpythonかなぁ
866デフォルトの名無しさん
垢版 |
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を削除しない場合はロック待ちになった
だからロック用ファイルを削除するとロックが解除される
2017/10/02(月) 20:14:57.29ID:7PTk8Wzs
pythonも新バージョンへに移行したくない同じ現象になってて、
次の言語が待たれている

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

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

print FH "hoge", "fuga";
print "hoge", "fuga";
2017/10/07(土) 12:02:43.75ID:6wQnopu1
>>872
自分で定義する関数にprintのFHような渡し方をする引数を定義するということです。
スロットとかいう名前だった気がしたのですが、どうも違うようで
2017/10/07(土) 12:05:55.88ID:6wQnopu1
あ、スペースを伴わずに、じゃない
カンマを伴わずに…
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');

普通にメソッドを定義すればよく、呼び出す時の書き方が違うだけ
2017/10/07(土) 13:02:49.57ID:5L99WECK
>>875
そうだったー!!
ありがとうございます!!!
877デフォルトの名無しさん
垢版 |
2017/10/09(月) 21:30:40.03ID:EtpsZHXA
で、何をしたのかね?
2017/10/09(月) 21:33:56.63ID:EtpsZHXA
うう。リロード忘れ。
879デフォルトの名無しさん
垢版 |
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
880デフォルトの名無しさん
垢版 |
2017/10/12(木) 22:11:19.78ID:5bT9xlHu
そのモジュールのことは知らないけど、とりあえず「cpp が無い」と言ってるようだね。
make と C をインストールすればいいと思うよ。
2017/10/12(木) 22:58:50.94ID:4iOww/iD
makeがちゃんとした文法になる日は来るんだろうか
882デフォルトの名無しさん
垢版 |
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
883880
垢版 |
2017/10/13(金) 21:28:27.18ID:4p1OUNBb
問題は解決しましたか? Solaris のことは分からないのでこれ以上お役に立てそうにありません。
まだ解決していないのなら perlsolaris というマニュアルがあるはずですから読んでみてください。
その上で、Solaris のことをよく知っている人に聞くのがよろしいかと思います。
884デフォルトの名無しさん
垢版 |
2017/10/14(土) 22:03:44.55ID:7hq5DvWK
ダメですね。。
もうちょっとネットで調べてみます。
885デフォルトの名無しさん
垢版 |
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で標準モジュールの利用で行いたいです。どなたかよろしくお願いします。
886デフォルトの名無しさん
垢版 |
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 を使ってみてはどうでしょう。
887885
垢版 |
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)がうまくいっていないというか
それ以前の変換がうまくいっていないようです・・・。
888855
垢版 |
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バイトとなってしまいます・・・。
889885
垢版 |
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を使うアドバイスありがとうございました。助かりました。
890デフォルトの名無しさん
垢版 |
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行目の構文エラー。 "){"
と出るんですが何が原因か分かりません。もしよろしければ教えていただけないでしょうか?
2017/10/28(土) 14:36:19.07ID:yzxLOqe0
>>890
eval {require DBD::SQLite; }
の最後に ; が無い
892デフォルトの名無しさん
垢版 |
2017/10/28(土) 15:04:21.68ID:86e9E3uL
助かりました。ありがとうございました^−^
2017/11/01(水) 19:40:06.83ID:FhCkv10M
^−^
2017/11/01(水) 21:59:57.34ID:uQFQAfJE
(^_^;
895デフォルトの名無しさん
垢版 |
2017/11/22(水) 19:37:11.64ID:kPeZVcC+
(^────────────^)
2017/11/22(水) 22:55:47.27ID:oTRzAO+2
(^________________^;
2017/11/23(木) 00:10:28.02ID:kTaFEskE
:-)
898デフォルトの名無しさん
垢版 |
2017/11/23(木) 18:54:17.85ID:8ru0xFWh
:────────────)
899デフォルトの名無しさん
垢版 |
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' );
2017/12/07(木) 10:28:22.13ID:OnTOXu6z
ファイルに書くときに、closeをせず明示的にフラッシュしたいんだけど
どうしたらいいの?

selectやautoflushは明示的ではないのでできれば使いたくない
2017/12/07(木) 10:57:31.26ID:ULPWPGO9
>>900
http://perldoc.jp/docs/perl/perlfaq5.pod#How32do32I32flush47unbuffer32an32output32filehandle63-32Why32must32I32do32this63
> IO::Handle オブジェクトには flush メソッドもあります。

#!/usr/bin/perl -w
use strict;
for (1..10) {
  print '.';
  sleep 2;
  STDOUT->flush;
}
print "!\n";
2017/12/26(火) 21:57:47.00ID:PAyaH1Yv
=~ 正規表現で中身を置換ができる事は理解できたんですが、
中身を入れ替えたいんじゃなく別の変数に入れたいときはどう書けばいいんでしょうか?

現在の自分の知識だと、例えば引数にとった文字列を置換してある変数に入れるとき
$_ = $ARGV[0];
$_ =~ s/mukimuki/mukemuke/;
$hoge = $_;
こんな風に無駄に $_ を経由した書き方になってしまいます。
ほかの言語風に言うと
$hoge = $ARGV[0].replaceWith(s/mukimuki/mukemuke/);
こんな感じで書きたいのですが。
2017/12/26(火) 22:06:02.40ID:Vj82fll/
($hoge = $ARGV[0]) =~ s/mukimuki/mukemuke/;
こう書くのがセオリーかな
2017/12/26(火) 22:37:33.36ID:3f/g1GW0
>>902
Perl 5.14.0 以降なら /r も使える
http://perldoc.jp/docs/perl/5.14.0/perl5140delta.pod#Non-destructive32substitution
905902
垢版 |
2017/12/27(水) 03:38:54.44ID:885vGvc2
>>903-904
的確なご回答ありがとうございます。
試してみます。
2017/12/27(水) 15:34:07.71ID:yY2jVcTO
perlスクリプトの稼働率は今どれくらいなんだろうか?

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

cとセットで使いたくなったらpython?を勉強するかもしれない。
2017/12/28(木) 03:17:44.94ID:NczIEmFQ
10年ぐらい前の入門書で、カンマとドットを間違えて
人工衛星が明後日の方向に飛んで言ったとか何とか、小中学生ぐらいの時に読んだ記憶が有る。
914デフォルトの名無しさん
垢版 |
2017/12/28(木) 09:29:38.01ID:wX0EFIYP
そういやそんなことあったなあ。
915デフォルトの名無しさん
垢版 |
2017/12/28(木) 18:55:35.20ID:Er3In3fn
こんなのあったのな。知らなかったよ。
https://qiita.com/AnnPin/items/5f868f0c7cb5d1af306b
2017/12/28(木) 19:24:59.40ID:Ur1ocpFu
粗太陽センサーと精太陽センサーの取得先を取り違える
917デフォルトの名無しさん
垢版 |
2017/12/28(木) 20:38:10.17ID:9xNc6XZe
【IS自爆テロ】「死んだら天国へ行ける」 <九条は必要> 「死んだら靖国に祀られる」【神風特攻隊】
https://rosie.5ch.net/test/read.cgi/liveplus/1514253929/l50
【東海アマ】安倍晋三はどんな殺され方 <祖父の代りに絞首刑> 公約反故は自殺に繋がる【世界教師】
http://rosie.5ch.net/test/read.cgi/liveplus/1514425832/l50
918デフォルトの名無しさん
垢版 |
2017/12/31(日) 12:51:33.73ID:6G2PkezB
>>913
それ、打ち上げ延期
919デフォルトの名無しさん
垢版 |
2018/01/01(月) 05:59:15.42ID:4wMbPbHX
>>918
あ、それで済んだの?そうか、じゃあ都市伝説か。
2018/01/01(月) 12:14:32.50ID:rcsYJFXY
>>908
PHPが重宝されてるのはDB連携のPDOが便利すぎてハゲるから
PDO一つあれば、オラクル、ポスグレ、mysql、sqlサーバー、DB2、SQLITEなんでも
同じ記述で接続できるからな

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

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

> 各DB用のDBIモジュール

じゃなくて

各DB用のDBDモジュール
2018/01/03(水) 00:47:07.06ID:0mS9Giqv
>>925
なるほど、どこも似たような機能を実装してきてるわけか
2018/01/03(水) 01:45:39.60ID:mxmMGWxl
ORM使えば各DBのSQLの差異も気にせず使えるぜよ
2018/01/03(水) 20:21:48.88ID:vVUVg3Hi
Perl習得も今年の目標の一つなんだけど
Linuxの環境構築しておいた方がいい?

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

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

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

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

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

どうしても起動系とかハード周りになると
Perlの知識ないときつい部分が出てきたんで
935デフォルトの名無しさん
垢版 |
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等に本当にインストールする。
936デフォルトの名無しさん
垢版 |
2018/01/05(金) 22:44:53.33ID:2xeG2hRa
ファイルにロックをかけないでロックされているか調べる方法あったらやり方教えて
flockだとロックかけちゃうのでだめです
2018/01/05(金) 23:02:38.22ID:/B3nNmE2
アトミックが保証されてるコマンドが必要とかそんなことになるような
938デフォルトの名無しさん
垢版 |
2018/01/06(土) 06:45:30.55ID:MH4bKWED
fcntl のマニュアルには、できるようなことが書かれてるけどどうか。
申し訳ないが実際に試してみるほど暇じゃないから、役に立つかどうかは自分で判断してほしい。
2018/01/06(土) 11:11:20.45ID:3YD8ke1c
ロックしていないのに、ロックしていることを調べるとはこれ如何に。

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

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

不可能だよ

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

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

まあでもほとんどない事は確かだな。やはり自分でロックして成功するかどうかで見た方が良い。
949938
垢版 |
2018/01/07(日) 17:58:29.25ID:VUVSKv67
そのファイルに対して何かしたいとはどこにも書かれていないんだけどな。
彼が充分に説明しないのが悪いというなら確かにその通りだが。
2018/01/08(月) 02:39:29.72ID:3kxjIyqg
コマンドプロンプトを自動で開いてperl aaa.txtを自動起動させることはできませんか?
OSはwin7です
目的は複数のperlファイルを数秒で起動することです
日に何度かやるので、手間を省くために1個のperlプログラムを実行すれば10個のコマンドプロンプトが開かれてaaa1からaaa10まで全部実行、みたいにしたいです
951デフォルトの名無しさん
垢版 |
2018/01/08(月) 03:02:25.00
>>950
できるっちゃできるけど、その起動をPerlでやる必然性あるの?
バッチファイルでやればよくね?
perl_start.batに
start perl aaa1.txt
start perl aaa2.txt
みたいに書き連ねりゃいいだけじゃん
2018/01/08(月) 16:46:09.77ID:QsqxlxVF
そのbatファイルをタスク登録(ログオン時実行)とかにしとけば自動実行されるしね
2018/01/08(月) 18:09:00.53ID:uJ83jHj4
perl関係ねえ
954デフォルトの名無しさん
垢版 |
2018/01/23(火) 09:36:50.60ID:vYqw+N7N
open(ロック用ファイルハンドル,ロック用ファイル);
flock(ロック用ファイルハンドル,2);
unlink(ロック用ファイル);
close(ロック用ファイルハンドル);  #ロック解除

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

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

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

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

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

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

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

そのとおりだろうなw
996デフォルトの名無しさん
垢版 |
2018/02/15(木) 23:40:07.21
Perlコードでもレスでも変わらない真実

ぎっしり長文書くやつは無能
2018/02/15(木) 23:41:00.25ID:8SUVFt/S
短文なら有能!俺とか!
998デフォルトの名無しさん
垢版 |
2018/02/16(金) 10:21:33.25ID:OW1usLwi
俺も俺も
2018/02/16(金) 18:54:42.22ID:ZDCA61/e
die;
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を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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