2ちゃんねる★スマホ版★■掲示板に戻る■全部1-最新50

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

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/
3 :
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/
4 :
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
5 :
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;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。
6 :
2014/02/19(水) 23:46:41.13
糞スレいくつも立ててんじゃねーよ
いい加減にしろ

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

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

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

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

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

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

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

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

aaa 99 PPP
iii 87 XYZ
uuu 32 XXX

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


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

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

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

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


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

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

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

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

sub TOKYO {

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

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

バグ発見!

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

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

バグは治る!

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

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

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

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

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

$str="/*//////abcdef/////*/";の場合はうまくできませんでした。
どうすればうまくいくのでしょうか?
73 :
2016/02/19(金) 01:43:09.22 ID:jNAd9H+F
$str = ̄ s{(/¥*.*?¥*/)}{<font color=”green”>$1</font>}g;
74 :
2016/02/22(月) 17:33:02.93 ID: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.32 ID:mB6Cjpa0
それで合ってるよ。
http://perldoc.jp/pod/perldsc
を読みなさい。
$data->{
76 :
デフォルトの名無しさん
2016/02/22(月) 23:01:42.17 ID:mB6Cjpa0
ごめん、ちゃんと書いたのに何かアクシデントがあったようだ。もう一回送るよ。

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

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

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

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

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

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

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

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

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

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

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

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

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

例えば2月29日の1年前は何日なのか?っていう。
98 :
2016/03/06(日) 18:03:04.50 ID:OXa3i/Gy
$str =
99 :
2016/03/07(月) 00:42:40.54 ID:Gv57dso9
>>96
年月日に分けたのち、年を -1 する。
100 :
2016/03/07(月) 06:16:56.64 ID:eudRNLDZ
だからそうすると2月29日が出来てしまうって言ってるわけ
101 :
デフォルトの名無しさん
2016/03/07(月) 21:18:09.27 ID:jBGm+KXA
pythonのスクリプトの頭に、use strict;って書いた。頭いかれてきたw
102 :
2016/03/07(月) 23:50:19.65 ID: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);
}
# 基本に忠実に。応用はそれから
103 :
2016/03/08(火) 00:11:41.92 ID:2waKAzbH
>>102
$month -= 2;
my $str = "2/29 12:34";
したら、2015/02/29って答が出るコードなんぞ貼るなや

元の質問者のコードに、
ふつうに$obj->is_leap_yearの判定加えて、
2/29跨ぎなら、LEAP_YEAR
引けばいいだけだろ。
104 :
2016/03/09(水) 00:16:20.50 ID:Djq1Ua6S
この場合は 2015/02/29 が欲しい答え
105 :
2016/03/09(水) 05:51:47.62 ID:BRdU+Z94
バギーなコードが眼に見える様だ
106 :
2016/03/10(木) 00:41:03.49 ID:m8iGuBqw
要件にない仕様を自己満足で追加してはいけない
この件はTime::Pieceだとうまくこなせない問題
融通がきかないのがオレオブジェクトのつらいところだ
107 :
2016/03/10(木) 06:53:37.48 ID:cOoRDwdC
Time::Piece関係ねーだろ。
頭悪いな。
108 :
2016/03/13(日) 00:11:27.55 ID:W4AXq/NT
localtimeとTimelocalは次スレのテンプレに追加するか
同じ質問が繰り返されてみんな同じところではまるからなあ
109 :
デフォルトの名無しさん
2016/03/17(木) 15:49:56.51 ID:HmsCvSUF
クッキーへの書き込み処理での質問

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

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

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

}

print "\n";

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

というようにエラーメッセージの取得と表示の間に
print "Content-type:text/html\n";print "\n";を挟む形になってしまうので
これらをまとめてサブルーチン化したくてもできません
こういう場合でもうまくサブルーチン化できる方法を教えてください
110 :
2016/03/17(木) 17:41:21.64 ID:H1m/hwv2
エラーメッセージの出力時にContent-typeから出力すればいいのでは
111 :
2016/03/17(木) 18:09:04.11 ID:r8Uypp4J
>>109
そのためにCGI.pmなどのライブラリや
各種フレームワークがある。
112 :
2016/03/19(土) 22:54:54.53 ID:zQsVsKn8
my $kukkii =
113 :
2016/03/20(日) 14:44:26.98 ID:AaFdygkh
'';
114 :
デフォルトの名無しさん
2016/03/20(日) 23:05:38.19 ID:ZT1ttS3p
何をしたかったのかよくわからないけど、せめて cookie と書いてほしかった。
115 :
2016/03/21(月) 23:09:59.48 ID:mpXdX/cy
住所を入れる変数でさ
$adoresu = ・・・
みたいな名前つかうヤツ、いるよね
英語なのか何なのか、よくワカラン
116 :
2016/03/23(水) 01:56:25.05 ID:isz3o5XG
$message = エラーメッセージを取得;
print "Content-type:text/html\n";
if(エラー数が0の場合){
  投稿データをクッキーに書き込む処理
}
print "\n";
print $message; # エラーメッセージの表示処理
117 :
デフォルトの名無しさん
2016/03/23(水) 21:53:51.11 ID:ftv772ff
my $str = "あああabcあああcdefghあああ123456";

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

一度に、3行読み込む方法があればお教えくださいm(__)m
159 :
2016/05/05(木) 21:40:51.68 ID:AhXWZZ47
@line[0..2]
配列スライスのシジルは@
160 :
2016/05/05(木) 23:21:34.59 ID: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.90 ID: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.91 ID: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つのみ " に置換されるだけです
よろしくお願いします
163 :
162
2016/06/01(水) 12:36:41.40 ID:6wx+Ihuz
タグの外側だけ置換する方法としては下記がどこかに載っていました

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


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

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

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

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

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

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

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

本来は9.22KB程度出力されるはずで、これはプロセスが終了したら出力される。
183 :
2016/06/08(水) 05:03:29.17 ID:c/sFGpfw
ちゃんとcloseを記述したら直りました。
184 :
2016/06/08(水) 05:36:30.43 ID:tfudflM8
どうしても即時出力したいなら、バッファリングで検索
185 :
2016/06/08(水) 15:34:08.08 ID:1ofjxszc
10GBくらいのCSVで作成された辞書の文字を置換して出力する場合最も適切な方法はどんな感じ?
すぐ思いつくのは下記だけど、膨大な回数HDDにアクセスして大丈夫かと不安になるがバッファリングされるから影響はないかな?

open(IN,"<Wikipedia.txt");
open(OUT,">>test.txt");
while(<IN>){
$_ =~ s/<|>/<>/g;
print OUT $_;
}
close OUT;
close IN;
186 :
2016/06/08(水) 15:38:30.27 ID:c/sFGpfw
そら最低の理論値でも10GB分HDDから読み出しして10GB分HDDに書き出ししないとな
187 :
2016/06/08(水) 15:56:29.67 ID: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;
188 :
2016/06/09(木) 08:19:20.98 ID:5xTa9iMx
>>185
環境によるのでもう少し小さいデータと思いついたコードでベンチ取れとしか。
http://perldoc.jp/docs/perl/perlperf.pod
189 :
2016/06/09(木) 08:56:02.57 ID:a3MG4bWs
>>185
単純な置換、大きなファイルサイズなら、
perl より sed 使ったほうが速いかもな。
190 :
2016/06/12(日) 12:28:41.66 ID:JDueIOd3
どんな言語で書いても10GBのHDDをアクセスすること自体に変わりはない。
温度が上昇してエラーになるなら、扇風機で冷やしながら実行するとよい。
191 :
2016/06/12(日) 13:25:11.80 ID:ve4Ih4ce
そうかなー
スクリプトだとなにやられてるんだか分からない印象だけど
192 :
2016/06/12(日) 13:26:20.33 ID:0HO5/jac
そもそも10GBのテキストなんざ、
今の基準で言えば普通よりちょっとデカい程度。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

https://ideone.com/Nh4Esi

Linux 限定だけど無修正で実行できる。
実行時間は 5 分くらいかかるよ。正確なデータを得るにはそうした方がいいみたいなんだ……
216 :
デフォルトの名無しさん
2016/06/15(水) 13:23:28.38 ID: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.29 ID:rzJhZO2i
https://ideone.com/K0qeSx

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

https://ideone.com/639PgP
372 :
2016/07/24(日) 22:44:38.60 ID: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.46 ID:tVy4ghQr
>>371
windows環境だけどopen中のファイルのrenameはできなかった

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

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

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

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

このとき$a,$bをmy($a,$b)やlocal($a,$b);と宣言するとエラーになります
$a,$bはどのように宣言すればいいんですか?
386 :
2016/07/29(金) 22:20:02.88 ID:lqBNaMPB
aとbはあらかじめ用意された特殊変数。
特殊変数は全部グローバル変数
387 :
2016/07/30(土) 00:48:59.27 ID:pBzYHnSl
>>378
他のプロセスに使われる前にディレクトリ名をランダムな名前に変更
するとよい。変更後に rmdir する。
388 :
デフォルトの名無しさん
2016/07/30(土) 08:47:55.59 ID:k05zeajW
1:投稿ファイルをロックして書き込み
2:投稿数ファイルをロックして書き込み

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

これの意味は

$hoge3が数字のみなら$hogeに代入し、$hoge2にも代入するという意味でしょうか?
446 :
2016/09/23(金) 05:21:37.52 ID: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+ 」を代入
447 :
2016/09/23(金) 08:03:28.29 ID:Ay1vA5a9
>>446
ありがとうございます。
他言語の底辺SEなので助かりました。
448 :
2016/09/23(金) 14:09:14.63 ID:eBfGtRhY
普段それを読む文化にない人がいきなり読めたら逆にすごいと思う
PerlってPerlが分かる人だけの言語
449 :
2016/09/26(月) 17:38:36.14 ID: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
懐かし
450 :
2016/09/28(水) 02:39:45.69 ID:sK8+jqCL
ソースはサンプルコードな
451 :
2016/10/03(月) 14:01:12.25 ID: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.04 ID:tI+B9pP0
ザメフォン元気?
453 :
2016/10/06(木) 18:37:40.82 ID:fMpg74pi
ビット演算を多用したいんだけど、変数のサイズを指定したい。longとか。
とりあえず、16bitと32bitと64bitの整数が欲しい。
あと数値と文字が勝手に切り替わらないようにしたい。

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

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

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



use utf8;
use strict;
use warnings;

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

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

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

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

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

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

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

例えば
/^[0-9][0-9a-zA-Z]{4}[A-Z]$/;
だったら
5scDuZ
とかが得られますよ的な。
496 :
2016/10/22(土) 11:26:59.02 ID:PD3z3WkO
String::Random
497 :
2016/10/22(土) 11:46:10.43 ID:NzADNRlY
おいおいなんでもあるなPerlって
498 :
デフォルトの名無しさん
2016/10/22(土) 17:34:20.47 ID:BSsXTeb9
CPANのモジュールも更新されないものが増えてきた
もうオワコン
499 :
2016/10/25(火) 21:00:26.38 ID:EVpxycMx
Windows環境でUnixのテキストファイルを処理します
改行LFがCR+LFに変換されてしまうのを防ぐために
perl -i.bak -p -e "BEGIN{ binmode STDIN; binmode STDOUT; } s/unko/manko/g;" hogo.txt
みたいな風に書いてるんですけど
もうちょっとスマートな書き方ありませんか?
500 :
2016/10/25(火) 21:11:38.78 ID:U4JQUv53
binmodeしないと自動変換されるの?
まぁ試してないけど、ワンライナーをやめれば良いのさ
501 :
2016/10/26(水) 00:45:00.36 ID:IJ0r6zMc
perl -pe
502 :
2016/10/26(水) 03:02:37.18 ID: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.72 ID:SbD3rZb1
perlの場合は文字コードがEUCのデータファイルがあって
入力フォームからハングル文字で書き込むと自動的に&#○○○;の形に変換されて書き込まれるのですか?
504 :
2016/11/10(木) 22:56:55.76 ID:Him+SRv0
フォームってなに?
505 :
2016/11/10(木) 23:16:39.82 ID:e4bBCogG
日本語と知能が不自由なあちらの人じゃない?
506 :
2016/11/10(木) 23:30:34.65 ID:XrxEtHdJ
最近はフォームを知らない人がいるんだ
おぢさん、世代ギャップを感じるよ
507 :
2016/11/11(金) 00:26:38.27 ID:dQSao3i1
うわ、知能障害者がまた来たよ。
それともゆとり世代の代表例かな?
508 :
デフォルトの名無しさん
2016/11/11(金) 12:07:09.49 ID:PHyMHsut
my $str = "aaa〹&bbb&ccc";
という文字列があって
&#以外の&を&に置換するやり方は?
509 :
デフォルトの名無しさん
2016/11/11(金) 12:09:09.25 ID:PHyMHsut
my $str = "aaa&#12345;bbb&ccc";
という文字列があって
&#以外の&を&に置換するやり方は?

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ただ、そんなマシンは新しいソフトを入れたりもしないから、
互換性とかどうでもいい世界だけど
646 :
2017/02/17(金) 23:51:32.63 ID: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.65 ID:eUOj9Lyv
>>646
s/\s//g
648 :
2017/02/18(土) 00:53:08.66 ID:UURjaLCm
>>646
死んだ方がいいレベル
649 :
2017/02/18(土) 00:58:30.39 ID:np+iCDRO
とにかく学習しようという気がまったく見えないのが凄い
650 :
2017/02/18(土) 01:09:34.78 ID:oWVhdX8p
普通1時間以内に学習を完了してそうなものを、10日以上経ってるぞ
651 :
2017/02/18(土) 08:59:07.57 ID:64GKa0+N
>>647
ど素人に有難うございました。
652 :
2017/02/18(土) 21:00:13.31 ID:3ABB/Pla
だから土曜日に書いたと
653 :
2017/02/26(日) 10:31:20.73 ID:cj/RoW+L
active perlで、長いファイル名のあるフォルダに対して readdir すると、
エラーになって止まるんだけど、どうやって回避すればいいんだ

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

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

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

672です。
よく解りました。
ありがとうございました。
227KB

新着レスの表示

★スマホ版★■掲示板に戻る■全部前100次100最新50

名前:E-mail: