板検索:
Perlについての質問箱 64箱目 (1009)
まとめビュー
1
デフォルトの名無しさん[sage]   投稿日:2014/11/30 05:11:36  ID:F+8+iHjq.net(6)
健全でない言葉が含まれているため表示しません 内容を確認する
コメント5件


2
デフォルトの名無しさん[sage]   投稿日:2014/11/30 05:12:30  ID:F+8+iHjq.net(6)
Perlの歴史
http://ja.wikipedia.org/wiki/Perl#.E6.AD.B4.E5.8F.B2

1.0 1987年12月18日 誕生
2.0 1988年6月05日 正規表現ライブラリ導入
3.0 1989年10月18日 バイナリデータ対応
4.0 1991年3月21日 O'Reilly&Associates, Inc. Programming perl 発売記念
5.0 1994年10月17日 リファレンスおよびオブジェクト指向に対応。
5.5.0 1998年7月22日 正規表現の拡張、JPerl がサポートする最後のバージョン
5.6.0 2000年5月22日 our文やウィークリファレンス、warningsプラグマの導入など。Unicode のサポートを開始
5.8.0 2002年7月18日 Encode が標準ライブラリに加えられ、Unicodeおよび Shift_JIS などの様々な文字エンコーディングに正式に対応した
5.10.0 2007年12月18日 静的変数を宣言する state 文や、switch文に相当する given 文、say などの導入
5.12.0 2010年4月13日 演算子(ヤダヤダ演算子)、後置の when 修飾子などの導入
5.14.0 2011年5月14日 Unicode 6.0 にほぼ完全に対応。push、pop、unshift、shift、each、keys、values などがリファレンス受け取れるようになった
5.16.0 2012年5月20日 Unicode 6.1 対応、デバッガ、CORE名前空間、XSインターフェイスなどの機能強化
5.18.0 2013年5月18日 レキシカルサブルーチンの追加、Unicode 6.2 への対応
5.20.0 2014年5月27日 スライス表記の強化、subキーワードのprototype属性サポート、64ビットプラットフォーム対応、Unicode 6.3 対応

3
デフォルトの名無しさん[sage]   投稿日:2014/11/30 05:13:18  ID:F+8+iHjq.net(6)
【本】
初めての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/dp/4798119172/
モダン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/
コメント2件

4
デフォルトの名無しさん[sage]   投稿日:2014/11/30 05:14:10  ID:F+8+iHjq.net(6)
[少し古めの良書】

プログラミング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/

5
デフォルトの名無しさん[sage]   投稿日:2014/11/30 05:15:04  ID:F+8+iHjq.net(6)
【日本語、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/cpanmi...
http://perldoc.jp/docs/modules/App-cpanminus-1.7001/lib/App/cpa...
コメント2件

6
デフォルトの名無しさん[sage]   投稿日:2014/11/30 05:16:03  ID:F+8+iHjq.net(6)
【Windows向け情報】

※PerlはLinuxで使うことをおすすめします。
使用実績はLinuxがほとんどでしょうし、Windowsの場合は
Windows特有の不具合が発生したりします。

今は仮想マシンでWindowsを使っていてもその上で
無料でLinuxを使うことが可能です。

Windowsでの利用は大変なだけでメリットがありません。

↓それでもWindowsを使いたい場合人向け

# [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;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。

7
デフォルトの名無しさん[sage]   投稿日:2014/11/30 05:17:30  ID:frlGdpGZ.net
以上、テンプレ終了です。



質問をどうぞ

8
デフォルトの名無しさん[sage]   投稿日:2014/11/30 10:49:51  ID:XYqV7W5h.net
Windows上で手軽にPerlを使いたい場合は以下のバイナリがあります

【ActivePerl Community Edition】
http://www.activestate.com/activeperl/downloads
直近2つのバージョンしか公開されておらず、再配布もできないので個人的な
学習用に使用

【Strawberry Perl】
http://strawberryperl.com/
Larry Wallも使っていて、長期的なプロダクトでも安心して利用できる

9
デフォルトの名無しさん[sage]   投稿日:2014/12/04 02:19:44  ID:TDiayB+/.net
Windows上のPerlの質問も分かる範囲で回答します。関連するソフトがあるならば
その名前とバージョンを書いてください。また説明に使う用語は可能な限り調べて
正しい用語を使ってください。質問文の用語がでたらめな場合、正しい回答が得
られず、お互いに無駄になってしまいます。
アンチPerlのレスは無視します。

10
デフォルトの名無しさん[sage]   投稿日:2014/12/05 13:23:17  ID:o40hdMhH.net
文字コードは「UTF-8」です。

aa/bb/cc → aa/bb
としたいので(切り取り)
s/\/\w+$//;
とすると  aa/bb と切り取りできます。

しかし、aa/bb/cc() だと文字列に記号が入ると
当然切り取りできなくなります

s/\/.+$//;のようにすると、全部切り取れます。

記号入りの
aa/bb/cc() → aa/bb にするにはどうすればよいでしょうか?

11
デフォルトの名無しさん[]   投稿日:2014/12/05 18:36:13  ID:wsf0zRCt.net(2)
s/\/[^/]+$//;

12
デフォルトの名無しさん[]   投稿日:2014/12/05 18:37:00  ID:wsf0zRCt.net(2)
s|/[^/]+$||;

13
デフォルトの名無しさん[sage]   投稿日:2014/12/06 15:23:32  ID:Oq8ILO6C.net
s{^(.*/).*}{$1};
ユニコードで \w は使いものにならなくなったと申し添えておく

14
デフォルトの名無しさん[sage]   投稿日:2014/12/06 17:18:16  ID:dYckGB2S.net
遅レスすんなら、案件に従えや、
イージーミスだけに、かっこ悪いぞ

15
デフォルトの名無しさん[sage]   投稿日:2014/12/06 18:34:56  ID:GPtOp1dg.net
前スレ埋めてから使ってくれ。

重複スレ:
Perlについての質問箱 63箱目

本スレ:
Perlについての質問箱 63箱目

16
10[sage]   投稿日:2014/12/07 11:54:39  ID:CEiqcgxp.net
split使っちゃいました・・・・

配列 = SPLIT(”¥/”) "aa/bb/cc/dd()”;

作業用文字列

ループ(配列 [配列個数-2] ){
 作業用文字列 .”$_” . ”¥/”;


作業用文字列 =^ s/¥/$//g #最後の/を消す

な感じで・・・・

17
デフォルトの名無しさん[sage]   投稿日:2014/12/07 13:38:36  ID:EVS/iDzZ.net
作業用文字列つかうとかありえねーw

18
デフォルトの名無しさん[sage]   投稿日:2014/12/12 00:56:09  ID:/vyLMUki.net
モジュールが使える環境に限定されちゃうけど
use File::Basename;
print File::Basename::dirname('aa/bb/cc/dd()');
# s|/[^/]*$||; デモイイヨ!

19
デフォルトの名無しさん[sage]   投稿日:2015/01/03 03:35:55  ID:z4sjuxFo.net
Perl の TMTOWTDI が好きだわ。

20
デフォルトの名無しさん[sage]   投稿日:2015/01/03 10:11:29  ID:9yXYqvm6.net(2)
ゴミが好きってどういうこと?

21
デフォルトの名無しさん[sage]   投稿日:2015/01/03 11:04:10  ID:Ukcf8MFp.net
そりゃ使うひと次第でゴミにもなれば有用なツールにもなるわけだけど
T-SQLでどんなアプリケーション書いてるのかそろそろ教えてよ

22
デフォルトの名無しさん[sage]   投稿日:2015/01/03 11:09:33  ID:9yXYqvm6.net(2)
T-SQLなんて使ってないよ

23
デフォルトの名無しさん[]   投稿日:2015/01/03 13:33:21  ID:b/9bEf+N.net
もはやcgiプログラムってperlじゃないの??
コメント1件

24
デフォルトの名無しさん[]   投稿日:2015/01/04 09:37:16  ID:w9Cj0tkO.net
PerlじゃないCGIプログラム見たことないけどな
なんか、CGI自体下火とか抜かしてたやつもどっかで見かけたが

25
デフォルトの名無しさん[sage]   投稿日:2015/01/04 09:58:06  ID:JDtmWI5y.net
そりゃぁ下火だろう。CGI.pmがCOREから落ちるんだから。
PythonやC++で書かれたCGIは未だに存在する。

26
デフォルトの名無しさん[sage]   投稿日:2015/01/04 10:28:22  ID:d5IQgmaJ.net

27
デフォルトの名無しさん[sage]   投稿日:2015/01/05 09:23:06  ID:NRlwke4r.net
「PerlじゃないCGIプログラム見たことないけどな」という文字列が通過するPerlじゃないCGIプログラムがあるよね?w
コメント1件

28
デフォルトの名無しさん[sage]   投稿日:2015/01/05 20:43:23  ID:KQNQflUf.net
>27
2ちゃんってPerlで書かれてないの?
コメント1件

29
デフォルトの名無しさん[sage]   投稿日:2015/01/05 20:48:10  ID:dcVDuqIP.net
>28
Perl+C+JSじゃないっけか

30
デフォルトの名無しさん[sage]   投稿日:2015/01/05 22:29:53  ID:HnMh9gyS.net
俺はファイルサーバーの複数台のディスク容量を調べるために
シェルスクリプトでCGIプログラム書いているよ。

Windows 7のガジェット(HTML+CSS+JS)から
アクセスすると残り容量をJSONPで返す。
そういうシェルスクリプト

31
デフォルトの名無しさん[sage]   投稿日:2015/01/06 02:51:10  ID:gxyFRR6U.net
@rem そういうバッチファイルのサンプル
echo Content-Type: text/plain
echo.
echo.
dir c:

32
デフォルトの名無しさん[age]   投稿日:2015/01/13 02:35:51  ID:WJdHMFeU.net
Ipアドレスとホスト名を表示させ、テキストドキュメントに記録したいのですが
#!/usr/bin/perl
use strict;
use warnings;
my $ip = $ENV{‘REMOTE_ADDR’};
my $host = gethostbyaddr(pack(“C4″, split(‘\.’, $ip)), 2) || $ip;
print “Content-type: text/html\n”;
print “\n”;
print “$host”;
print “\n”;
print “$ip”;
my $file = ‘output.txt';
#書き込みモードでファイルオープン
my $fh;
open ($fh,”>”,”$file”);
or die “Cannot open $file: $!”;
#ファイルへかきこみ
print $fh “$host\n”;
print $fh “$ip\n”;
close $fh;
この様にしてもエラーになってしまいます。どこに問題があるのでしょうか?
コメント3件

33
デフォルトの名無しさん[sage]   投稿日:2015/01/13 02:41:58  ID:fYHyjqVd.net
エラーメッセージに書いてある所に決まってるだろ

34
デフォルトの名無しさん[sage]   投稿日:2015/01/13 04:54:39  ID:pEsQ+pp8.net
>my $file = ‘output.txt';
ここのどちらかの、クォーテーションが変?

35
デフォルトの名無しさん[]   投稿日:2015/01/13 10:16:27  ID:Z0LRVUzM.net
ほぼ全部おかしい
ダブル "
シングル '
>32のダブル “
>32のシングル ‘

36
デフォルトの名無しさん[sage]   投稿日:2015/01/13 19:44:14  ID:DywLXJJx.net
$str = 'abc';
$str =~ s/ab(.)/$1$1/;
print $str;

これだと、
cc
と表示されるのに、

$str = 'abc';
$rep = '$1$1';
$str =~ s/ab(.)/$rep/;
print $str;

こうすると、
$1$1
になってしまう

うまく動くオプションとかある?
コメント3件

37
デフォルトの名無しさん[]   投稿日:2015/01/14 22:01:41  ID:bmsBHzdL.net
$rep = q("$1$1");
$str =~ s/ab(.)/$rep/ee ;

これが何をしてるか理解できないなら eval 使えばいいと思うよ。
eval したら $@ を確認しようね。
もっと柔軟にしたいならこんな感じか。

$func = sub { "$1$1" };
$str = "abc";
$str =~ s/ab(.)/ $func->() /e ;

38
デフォルトの名無しさん[sage]   投稿日:2015/01/15 01:48:30  ID:KHeQBVOf.net
>32
一般的にどの言語でも、ソースコードを書くときは、
コメント以外では、全角を使ってはいけない。
半角英数字記号のみを使う

" 半角のダブルクォーテーション
' 半角のシングルクォーテーション

>36
>$str =~ s/ab(.)/$1$1/;

>$rep = '$1$1';
>$str =~ s/ab(.)/$rep/;

Perlをよく知らないけど、
たぶん上は、正規表現オブジェクトか何かで、
下は文字列になるのでは?
コメント1件

39
デフォルトの名無しさん[sage]   投稿日:2015/01/15 02:22:21  ID:5irEx8LZ.net
>38
文字列リテラルもあるでよ

40
デフォルトの名無しさん[sage]   投稿日:2015/01/15 06:23:15  ID:l/H+BQr/.net
>36
$str =~ s/ab(.)/qq{"$rep"}/ee;

置換パターンが大量にないならパターンに応じて関数を定義するのがお勧め。

41
デフォルトの名無しさん[]   投稿日:2015/01/15 18:01:38  ID:BMxAFz1ca
>36
37 で重要なことを書き忘れたよ。
$str =~ s/ab(.)/ $func->() /e ;
が最も安全だよ。
$str =~ s/ab(.)/$rep/ee ;
は本質的には eval だから何でもできる。
完全に安全だと確信できないなら、大事なファイルを破壊したり
決して見られてはならない物を全世界に公開するかもしれない。
そういう危険を避けたいなら Safe モジュールを使ってみてほしい。

42
デフォルトの名無しさん[sage]   投稿日:2015/01/17 08:22:17  ID:ZvXMCZRd.net
eeは試したけど、それだけじゃダメだったのか
q()が鍵なのかな

43
デフォルトの名無しさん[age]   投稿日:2015/01/18 01:03:44  ID:WOJrRr7a.net
perlを覚えるのに良いサイト教えて下さいm(_ _)m

44
デフォルトの名無しさん[sage]   投稿日:2015/01/18 02:04:23  ID:aSyqWTeb.net
http://perldoc.jp/ でもサイトだと新旧の情報が混在してて、初心者は混乱
しそうなので俺的には「初めてのPerl」がおすすめ
Perl5のリファレンスを使い始める前にPerl4部分をしっかり覚えて欲しい。

45
デフォルトの名無しさん[sage]   投稿日:2015/01/18 02:38:31  ID:1HDk1G1l.net
Perl4? あっはっは。ネタなのか馬鹿かなのか
初心者を惑わせる罠のつもりなんだろうなw

Perl 5.0のリリースは1994年10月17日
もうこれだけで4を勉強する価値なんて無いってわかるでしょ

今となってはバッドノウハウでしかないものの塊で
Perl4なんか勉強したらマイナスになるだけだよ。時間の無駄
今となってはゴミ。その知識は脳の貴重な記憶容量の無駄に消費するだけ

46
デフォルトの名無しさん[sage]   投稿日:2015/01/18 18:20:13  ID:A5yzNlpG.net(2)
基本は変わらんよ

47
デフォルトの名無しさん[sage]   投稿日:2015/01/18 18:55:01  ID:H4Qq5dvf.net
Perl4とじゃ基本からして違う。

モジュールはuseで読むのが大半。
use strictだけではなくuse warnings使うのが常識
ローカル変数で常に使うmy。
リファレンス必須だし、リファレンス前提のオブジェクト指向も常識
使う文字コードはデフォがUnicode。そしてEncodeモジュール

これらを使う一般的なコードはPerl4では書けない

48
デフォルトの名無しさん[sage]   投稿日:2015/01/18 19:22:24  ID:A5yzNlpG.net(2)
そういう枝葉じゃなくて、Perlでプログラムの組むときの基本的なところは変わらん
配列とか連想配列とかダイアモンド演算子とか制御文とか
コメント2件

49
デフォルトの名無しさん[sage]   投稿日:2015/01/18 19:54:02  ID:9c4B87qA.net(2)
シェークスピアを学べば現代英語の理解に役立つ
紫式部読めば、現国のテストに役立つ

くらいの主張だな

50
デフォルトの名無しさん[sage]   投稿日:2015/01/18 20:13:55  ID:fm6KJFw0.net(4)
>48
4と5で変わらないならばこそ、
5でいいだろ。

4と5があるなかで、あえて4を使う理由がない。
4でできることは5でもできる。

何言ってんだ?

51
デフォルトの名無しさん[sage]   投稿日:2015/01/18 20:17:50  ID:fm6KJFw0.net(4)
>48
5でしかできない。ローカル変数(my)
オブジェクト指向(package)

これらはどんな言語でも常識とされる
プログラムを組むときの基本中の基本だが、
これがPerl4ではできない。

プログラムの基本を学ぶことに対して
明らかなデメリットも有る。

52
デフォルトの名無しさん[sage]   投稿日:2015/01/18 20:31:22  ID:evwOrnCS.net
myは4にもあるだろ
全部グローバル変数なのは大昔のBASICの頃の話だ

53
デフォルトの名無しさん[sage]   投稿日:2015/01/18 20:34:05  ID:/Es8fzpE.net
使えたっけ?
少なくとも5が出てしばらくは
4にそんな機能は無かったような
localならあったけど

54
デフォルトの名無しさん[sage]   投稿日:2015/01/18 20:45:21  ID:fm6KJFw0.net(4)
ないよw そんな基本的なことも知らずに
Perl4が〜とか言ってるわけさ。
な? 害悪でしか無いだろ?こいつの存在が。

55
デフォルトの名無しさん[sage]   投稿日:2015/01/18 20:48:05  ID:fm6KJFw0.net(4)
Perl4ではプログラムの基本すらも出来ないから
投げ捨てたほうがいいよwww

56
デフォルトの名無しさん[sage]   投稿日:2015/01/18 21:24:53  ID:LIlFSWHF.net
実用的なところでせいぜいperl5.8系からだろう。
さすがにperl4はないわ。

57
デフォルトの名無しさん[sage]   投稿日:2015/01/18 22:23:58  ID:y7kj+MYX.net
「初めてのPerl」がおすすめっていってるんだから
文字通りPerl4を学べっていいたかったわけじゃないんでしょう
最新版の「初めてのPerl」はPerl5前提ですよね?
たぶん「続・初めてのPerl」で書かれている内容に進む前に
「初めてのPerl」の内容をちゃんと理解して使いこなせるように
しといてと言いたかったんでしょう

58
デフォルトの名無しさん[sage]   投稿日:2015/01/18 22:50:12  ID:9c4B87qA.net(2)
んなわけねーじゃん

59
デフォルトの名無しさん[sage]   投稿日:2015/01/19 01:15:03  ID:3g+53XGQ.net
普通にPerl5を勉強すればいいわけで、
Perl4という名前を出すこと自体おかしい。

60
デフォルトの名無しさん[]   投稿日:2015/01/19 03:37:07  ID:xfteSUpK.net
そもそもperl4のドキュメント自体すでに見当たらんのだが

61
デフォルトの名無しさん[sage]   投稿日:2015/01/19 08:07:11  ID:4O8sQ6M+.net
そんなのないよ〜
ありえない

62
デフォルトの名無しさん[sage]   投稿日:2015/01/19 20:13:43  ID:KRgt1oEf.net
赤ラクダ読んでる最中ですが何か

63
デフォルトの名無しさん[sage]   投稿日:2015/01/20 02:01:11  ID:qh3uAgM0.net
生きている間に読み終われよ。
perl5は…来世で学べばいいよ。
ゆっくりやってくれたまえ。

64
デフォルトの名無しさん[sage]   投稿日:2015/01/20 05:59:29  ID:p5BhMaBc.net(2)
おまいらが仕様と実装の区別が付かないのがよくわかった
コメント1件

65
デフォルトの名無しさん[sage]   投稿日:2015/01/20 06:16:18  ID:B1RIAFel.net(3)
ここ読んで、仕様でどれだけの罠があったか、
学んでからレスれな。
触った事も無いくせに perl4とかウゼーよ、釣り師

http://perldoc.jp/docs/perl/5.14.1/perltrap.pod

66
デフォルトの名無しさん[sage]   投稿日:2015/01/20 06:19:03  ID:YBhsuE8k.net
>64
うん。仕様はPerl。実装はPerl4。
Perl4はPerlの仕様の一部しか実装されてない
myやpackageなどの超基本が実装されてない。
だからPerl5を使えって話だよね。

67
デフォルトの名無しさん[sage]   投稿日:2015/01/20 06:24:28  ID:B1RIAFel.net(3)
言語仕様とインタプリタの話なら、
言語仕様も、同名なだけで変更されただろ、

68
デフォルトの名無しさん[sage]   投稿日:2015/01/20 06:39:05  ID:B1RIAFel.net(3)
何が「仕様と実装」だよw
本人か釣り師か知らんが、前スレでは、
同様のperl4に言及する馬鹿は、perl5.005とperl5.5の
区別が付いてなかったぜ

69
デフォルトの名無しさん[sage]   投稿日:2015/01/20 06:44:29  ID:tNNew0EG.net
あれは酷かったな

70
デフォルトの名無しさん[]   投稿日:2015/01/20 20:16:29  ID:LXStG+t6.net
use strict;
use Encode;
コメント1件

71
デフォルトの名無しさん[sage]   投稿日:2015/01/20 21:07:30  ID:THOt6njy.net
>70
use warningsしろや

72
デフォルトの名無しさん[sage]   投稿日:2015/01/20 22:17:59  ID:C0ccJEs9.net
strictはもう古い

73
デフォルトの名無しさん[sage]   投稿日:2015/01/20 23:07:31  ID:p5BhMaBc.net(2)
おれはPerl4を使え、とは言っていないんだがな。なぜそう読めるのか?あほなのか

74
デフォルトの名無しさん[sage]   投稿日:2015/01/21 01:14:29  ID:7CfJSlyJ.net
みんな2月16日のEffective Perl 第2版買おうよ
Perlがまだまだ生きてることを知らしめれば
Perl本出版事情も改善するかもしれない

75
デフォルトの名無しさん[sage]   投稿日:2015/01/21 02:33:54  ID:TKQcMheJ.net
改善ってモダンPerl入門増補改訂版(仮)のこと?
刊行日: 2014年1月予定

76
デフォルトの名無しさん[sage]   投稿日:2015/01/21 08:24:18  ID:iPVXK3uG.net
正直Perl4を今からってのは、保守以外にはありえんだろう
そもそも「敢えて入れないと」Perl4自体が無いのが基本だし…

77
デフォルトの名無しさん[sage]   投稿日:2015/01/21 21:42:02  ID:n02BC3Ph.net
まあ、
use strict;
use warnings;
は、開発後には捨てるものだけどな

78
デフォルトの名無しさん[sage]   投稿日:2015/01/21 21:46:25  ID:mXw559ef.net
ほら、また来たよ。ネタw
Perl4ネタじゃ満足できなかったんだろうねw
コメント1件

79
デフォルトの名無しさん[sage]   投稿日:2015/01/22 23:11:08  ID:CypOiZre.net
海外の本だと日本語周りの情報はあんまり期待できないかもなあ
Encodeのことちゃんと書いた紙の本ってないのかな?特に罠のところとか詳しい
解説が載ってるのが欲しいんだけど
コメント1件

80
デフォルトの名無しさん[sage]   投稿日:2015/01/23 00:03:47  ID:6Fnjy6es.net(2)
asciiと同じ手抜きをしようとするからはまるのであって、
ちゃんと文字コードとして扱えば何の問題もない

81
デフォルトの名無しさん[sage]   投稿日:2015/01/23 00:07:05  ID:eqfcLCWo.net
>79
一般的にはEncode::EUCJPMSを使った方がいいというやつだね。
Encodeモジュールは文字コードを正しく扱うがゆえに
現実に合わせた変換を行ってくれない。

確かにUnicodeの仕様はそのとおりだけど(間違った実装の)Windowsの
せいで、その変換ではだめなんだってことがある。
そして一番現実的なのはNKFだったりする。

所で実はEncodeモジュールを拡張するのは簡単で、
新しいエンコーディング名に対応するのは
モジュール一個作って、encodeとdecodeメソッドを用意するだけでいい。
なので、nkf-eucjpとかnkf-shiftisとかいうエンコーディング名を作ってるよ。

日本語以外にも対応する必要があったので、Encodeモジュールの仕組み自体は使う
だけど文字コード変換自体は内部でnkfを使っている。

82
デフォルトの名無しさん[sage]   投稿日:2015/01/23 00:31:01  ID:bLSRjsAV.net(2)
>(間違った実装の)Windowsのせいで、その変換ではだめなんだってことがある。
例えば?
コメント1件

83
デフォルトの名無しさん[sage]   投稿日:2015/01/23 00:38:57  ID:DAkROUe3.net
>82
どうぞよんでね。

Encode - 規格のバグまでは直せません
http://blog.livedoor.jp/dankogai/archives/50488765.html
コメント1件

84
デフォルトの名無しさん[sage]   投稿日:2015/01/23 00:44:55  ID:bLSRjsAV.net(2)
>83
なるほど
辛い話しだね

85
デフォルトの名無しさん[sage]   投稿日:2015/01/23 08:20:15  ID:6Fnjy6es.net(2)
変なティルダはよく見るな

86
デフォルトの名無しさん[sage]   投稿日:2015/01/23 23:44:32  ID:PLrM2j7r.net
日本語以外に何語に対応したの?テーブルは自分でこさえたの?PKF使ったの?
コメント1件

87
デフォルトの名無しさん[sage]   投稿日:2015/01/23 23:51:58  ID:8Ft3ozd1.net
>86
基本はEncodeモジュールが対応しているものだよ。
それ+日本語は特別に拡張対応w

メールソフトみたいなものだと思ってくれればいい。
送信者はいろんな言語を送ってくるわけで

88
デフォルトの名無しさん[sage]   投稿日:2015/01/24 00:14:01  ID:8Lo2ixHg.net(2)
いろんな言語って、自分で読める言語なの?読めない言語だとちゃんとできてる
のか不安じゃない?おれは不安だな
コメント1件

89
デフォルトの名無しさん[sage]   投稿日:2015/01/24 01:47:16  ID:H0FHHZ5/.net
>88
そんなもの翻訳ツール使えばわかることだよ。
日本語のように波ダッシュとかある種の文字だけ
化けるなんてのには対応できてないだろうが概ね表示できればOK。
何か問題があったらその時報告でもくるだろ。

90
デフォルトの名無しさん[sage]   投稿日:2015/01/24 12:49:13  ID:8Lo2ixHg.net(2)
それで商品説明の日本語がおかしいのか?ときどきEUC⇔SJISを取り違えてるような
半角カナだらけで読めないのがあったり・・・
コメント1件

91
デフォルトの名無しさん[sage]   投稿日:2015/01/24 14:20:27  ID:pFUl8Xhj.net
Unicode統一前の文字コードが
ややこしいのは日本くらいだろ。

ほかの言語なら変な文字化けとかは
あんまり心配いらんのでは。
コメント1件

92
デフォルトの名無しさん[sage]   投稿日:2015/01/24 14:37:53  ID:3WuJ0aJV.net
>90
日本語が(読めるけど)おかしいのは、翻訳の問題であって
文字コードの話とは関係ないだろ。

EUC⇔SJISを取り違えると、全く読めない文章になるわけで
所々化けるわけじゃないよ。

翻訳ソフトでそれなりの文章になれば
少なくとも大筋では正しく文字コードを扱ってるといえるだろう。


93
デフォルトの名無しさん[sage]   投稿日:2015/01/24 23:54:07  ID:lCRanfvM.net
>91
欧米は欧米で苦労してるよ。
国の数だけでもえらい多いのに、同じ字形のダイアクリティカルが
別々の符号化方式で実装されてるんだから。
コメント2件

94
デフォルトの名無しさん[sage]   投稿日:2015/01/25 00:05:27  ID:WeB4tC0Z.net(2)
>93
そこからダイアクリティカルマークの統合が実施されて、その勢いでハンユニフィケーション。
欧米の文字は数字の仲間なんだろうけど、漢字は絵の仲間。最近、絵文字をサポートし始めて
ようやく漢字がどんなものなのか、C,J,K,Vの漢字をどうサポートすればよかったのか悟りつつ
あるようだ。

95
デフォルトの名無しさん[sage]   投稿日:2015/01/25 07:49:47  ID:VXh7McAu.net
>93
欧米は基本全部ISO-8859シリーズだと
思ってたが、違うの?
コメント1件

96
デフォルトの名無しさん[sage]   投稿日:2015/01/25 12:57:56  ID:rE6cly2M.net(2)
>95
iso-8859シリーズじゃ我慢できないレベルで圧倒的に足りなかったんだと思うよ。
cp737とか見るとダメ文字使ってでもめいっぱい領域よこせ的な雰囲気がある。

そもそも8859以下のエンコーディングは全部別々だからその間では化けるし、日本語以上に自動判別なんて無理そう。
メールなんかでSMTPに流そうとすると8ビットクリーンにしなきゃいけないから結局MIMEの出番だし。

日本の都道府県が勝手に符号化方式を拡張してるイメージなのかな。
北海道が独自にアイヌ語表記用のひらがな追加してたらやっぱり混乱してたと思う。

97
95[sage]   投稿日:2015/01/25 13:04:32  ID:rE6cly2M.net(2)
あ、マルチバイトじゃないからダメ文字って言い方は間違ってるね。訂正するよ。

98
デフォルトの名無しさん[sage]   投稿日:2015/01/25 13:13:32  ID:puUqp4ZN.net
中点(・)ってasciiに無いけど、英文とかに普通に出てくる
どうしてたんだろ

99
デフォルトの名無しさん[sage]   投稿日:2015/01/25 13:49:48  ID:WeB4tC0Z.net(2)
日本の文字は4バイト領域にJIS順で重複して掲載する。シフトJISをなくしてユニコード
だけにしたいなら、そういう方法になる。異体字セレクタとかは一般民は使うはずがない。

100
デフォルトの名無しさん[sage]   投稿日:2015/01/25 14:47:05  ID:GYzk0joc.net
> 異体字セレクタとかは一般民は使うはずがない。
普通に使われてる。

正確には異体字セレクタではないが、
絵文字は異体字セレクタと同様の仕組みで
絵文字化している。

101
デフォルトの名無しさん[]   投稿日:2015/02/15 22:15:31  ID:4RXg+5Yt.net
グローバル変数はourやuse vars qwを省略してつけなくても問題ないですか?

102
デフォルトの名無しさん[sage]   投稿日:2015/02/16 10:07:10  ID:McaEaMoK.net
変数名にぱっくあげ名も含めてあげれば警告も無いよw

103
デフォルトの名無しさん[sage]   投稿日:2015/02/18 00:30:45  ID:b4QEjz5u.net
お前が単純なスペルミスのバグを問題ないと考えてるのであれば問題ない。

104
デフォルトの名無しさん[]   投稿日:2015/02/22 20:14:32  ID:jGeuUSRA.net(3)
ファイルをロックする場合はflockでいいのですが
負荷のかかる処理を排他する場合の関数ってありますか?

例えば
ロック
データを30万行1行ずつ読み込み(高負荷)
ロック解除
というようにしたいんです

というか30万行でも高負荷といえるのしょうか?
コメント1件

105
デフォルトの名無しさん[]   投稿日:2015/02/22 20:16:05  ID:jGeuUSRA.net(3)
あ、読み込みだけじゃなく検索の処理もあります

つまり
ロック
30万行読み込み
検索
ロック解除
というようにしたいんです

106
デフォルトの名無しさん[sage]   投稿日:2015/02/22 20:31:03  ID:UZqTxAid.net
>104
そういう時はデータベースを使う。

知らないからって甘えないように
データベースを勉強すればいいだけ。

みんなそれで解決している典型的な問題。

107
デフォルトの名無しさん[]   投稿日:2015/02/22 22:03:26  ID:jGeuUSRA.net(3)
データベース使うほどじゃないけど解決しました
mkdirを使ってロックディレクトリが残っていれば処理をしないというようにすれば
検索処理を排他することができました

108
デフォルトの名無しさん[sage]   投稿日:2015/02/22 23:16:47  ID:Tf8seuYj.net
まさにそのときのためにflockはある。
オプションを調べるといい。まさかPerl4なのか?

109
デフォルトの名無しさん[sage]   投稿日:2015/02/23 00:32:57  ID:pG3LwxQC.net
Perl4部分を先に覚えろ、というのは時代遅れのノウハウを習得しろという
意味ではなくて、基本をまず覚えろって意味
おれはこのスレで覚えたlocaltimeには今でも感謝している
データベースだのTime::Pieceだのを持ち出す前にPerlをよく知ってほしい

110
デフォルトの名無しさん[sage]   投稿日:2015/02/23 06:58:42  ID:eK56KkkA.net
すっげー遅レスの釣り

>おれはこのスレで覚えたlocaltimeには今でも感謝している
このスレで覚える様なアホが、Perl(4も5も)語るなよ

111
デフォルトの名無しさん[]   投稿日:2015/02/23 08:12:30  ID:EFdND4ro.net
flock使えない環境なのでmkdirで排他ロックと共有ロックを作っているところですが
mkdirで排他ロックのやりかたはいろんなサイトに書いてありましたが、mkdirで共有ロックについては書いてありませんでした

そこでmkdirでロック用ディレクトリを作りそのディレクトリの中に排他ロックがかかっているのか
または共有ロックがかかっているかを判別するためのディレクトリを作ることにしました。
ロック用ディレクトリの中にrwというディレクトリがあれば読み書き禁止の排他ロック
wというディレクトリがあれば読み込みOKで書き込み禁止の共有ロックという感じです

この方法だと何か問題ありますか?
もっといい方法があれば教えてください
コメント2件

112
デフォルトの名無しさん[sage]   投稿日:2015/02/23 09:06:18  ID:feaNRgVg.net
mkdirは、ファイルシステムによっては、非常に負荷がかかる。
いまどきは大丈夫だけど、flockが使えない環境ってことは、
10年以上前のシステムを使ってるってことだから、その辺は心配だな。

113
デフォルトの名無しさん[sage]   投稿日:2015/02/23 12:30:29  ID:hyNQWBte.net
>111
もっといい方法の前に
だめな理由をかいておく。

まずデータが30万件だ。
つまりいかなるロック方法であっても
そのデータを処理している間、他の処理ができなくなる。

それを避けるには、行ロックがが必要。
データ30万件の1行毎にロックが掛けられるようになる。

これを使えば並列に処理できるようになるから
パフォーマンスが大幅に上がる。

だが行ロックできるようにするためには、ファイルのフォーマットを
変えないといけない。単純なテキストファイルやCSVファイルでは
行ロックは不可能。

そして、行ロックが出来るようにしたものが
データベース。

114
デフォルトの名無しさん[sage]   投稿日:2015/02/23 16:09:07  ID:jEdpJRTO.net
そこでdbmopen
行ロックとかしないけど

115
デフォルトの名無しさん[sage]   投稿日:2015/02/23 17:05:18  ID:zNLn6pFR.net
>111
中にディレクトリを作るための排他ロックと共有ロックの使用数をカウントするものがほしくなるなw

116
デフォルトの名無しさん[sage]   投稿日:2015/02/24 03:03:40  ID:OzhdDlTU.net(2)
mkdirできればロックを取得、できなければブロックなのでカウントはいらないよ
コメント1件

117
デフォルトの名無しさん[sage]   投稿日:2015/02/24 06:17:15  ID:ri5TzV3b.net
>116
じゃあ共有ロックは誰が解除するの?wwww

118
デフォルトの名無しさん[sage]   投稿日:2015/02/24 12:27:40  ID:6vv1mCHr.net(2)
データベースを使えば簡単なのに、
なぜわざわざ茨の道をいこうとするのか?

それは先人がこれではだめだと引き返した道。
その道を進む行為は賢くないよ。愚かだよ。

119
sage[]   投稿日:2015/02/24 20:40:05  ID:aDKRFdov.net
mroonga&MeCabに対応している、Perl用クライアントって
どれがお勧めなのでしょうか?

ネットで検索してもそれらしいライブラリが見つからないようで
教えて頂けると助かります。

7年くらい前は、全文検索ライブラリにmecab-perlとかを使っていた記憶があります。

120
デフォルトの名無しさん[sage]   投稿日:2015/02/24 21:42:36  ID:OzhdDlTU.net(2)
mkdirできたプログラムが解除するんだよ

121
デフォルトの名無しさん[sage]   投稿日:2015/02/24 22:11:47  ID:6vv1mCHr.net(2)
データベース使えば簡単なのに
オレオレロック機構を実装して
アプリが異常終了してロックが解除できなくなって
壊れたとかよくあるよなw

122
デフォルトの名無しさん[sage]   投稿日:2015/02/25 01:12:24  ID:u9apSz6m.net
そうだね。でもここで求められているのはデータベースじゃなくてmkdirでの
解決の仕方だからね。いいのが出来たらライブラリとして公開してくれるだろ。

123
デフォルトの名無しさん[sage]   投稿日:2015/02/25 06:40:27  ID:vrjMDbEA.net
エクセルでそのまま表示できるような状態の
データが詰め込まれたデータベースほど
恥ずかしいものはないw

124
デフォルトの名無しさん[sage]   投稿日:2015/02/26 12:06:49  ID:9YTrvgco.net
ロックを制御する専用の別プロセスを1個だけ走らせて(複数不可)
排他ロック・共有ロックともにそのプロセスを介するというのはどうか

まあDBMSがやってる仕事をかわりにやるだけな訳だが
コメント1件

125
デフォルトの名無しさん[sage]   投稿日:2015/02/26 12:25:50  ID:0ruku8I/.net
>124
そんなことできる技術もないし、
そんなことが許されるサーバーも使っていないし使えない。

http://kotowaza-allguide.com/he/hetanokangae.html

【下手の考え休むに似たりの解説】
【注釈】 囲碁や将棋で、下手な者がいくら長時間考え込んでも名案など浮かばず、まるで駒を手にしたまま何も考えずに休んでいるようなものだということから、よい考えなど浮かぶはずもないのに、あれこれ考えて時間を無駄にするという意味。
【出典】 −
【注意】 「下手な考え休むに似たり」というのは誤り。
【類義】 下手な思案は休むに同じ/下手の考え休むに如かず
【対義】 下手の考え休むに如かず
【英語】 Mickle fails that fools think.(馬鹿が考えていることは、たいてい役に立たない)
【用例】 「そういうのは下手の考え休むに似たりというものだよ。いい加減降参したらどうだい」

126
デフォルトの名無しさん[sage]   投稿日:2015/02/27 00:48:13  ID:88OXUGFl.net
そういや昔この掲示板のソースみたらダメダメなロックやってたような。
コメント1件

127
デフォルトの名無しさん[sage]   投稿日:2015/02/27 02:33:17  ID:F989SPSP.net
Perl4縛りなら、俺ならシングルタスクで解決する。

128
デフォルトの名無しさん[sage]   投稿日:2015/02/28 07:54:32  ID:6vZKnEo0.net
>126
追記するだけでいい場合はだめだめロックでもわりとなんとかなっちゃったりするんだよな

129
デフォルトの名無しさん[sage]   投稿日:2015/03/07 00:31:09  ID:639b0hNr.net
排他制御のまとめ
.轡鵐哀襯織好OS上でアプリを書く
▲侫ルダを使ってロックする
flockを使う
DBMSを使う
ツ謬の場合はだめだめロックでも可
次スレのテンプレに追加すること
コメント1件

130
デフォルトの名無しさん[sage]   投稿日:2015/03/07 08:07:08  ID:jW+ek3hJ.net
追記されるファイルの直読みを禁止する以上、読んでいる間に追記されないということが
保証されるようになるはずだよね?w
コメント1件

131
デフォルトの名無しさん[sage]   投稿日:2015/03/10 05:33:44  ID:dWaMJNFM.net
>130
わりとなんとかなっちゃう、というのは、大丈夫、とか、なにかが保証される、というのとはちょっと違う。

132
デフォルトの名無しさん[sage]   投稿日:2015/03/11 02:12:12  ID:bSZHOSLF.net
>129
2と5は間違いなので追加してはいけない。

133
デフォルトの名無しさん[sage]   投稿日:2015/03/13 13:02:28  ID:+e2bgrgv.net
1も嘘だね。割り込みとかシグナルとか考慮してない

134
デフォルトの名無しさん[]   投稿日:2015/03/14 13:28:00  ID:ra/AMlN3.net
use strict;やuse warnings;ってrequireするファイルにあるプログラムのチェックは行われないんですか?
されないのならrequireするファイルにもuse strict;とuse warnings;を記述しないとだめってことですか?

135
デフォルトの名無しさん[sage]   投稿日:2015/03/17 01:17:39  ID:nEqloX6Q.net
そのスクリプトをuse strict;したければ、スクリプト自身にuse strict;が必要。
use warnings;も同様。インタプリタにひと手間かけて欲しければ、その指定を
プログラマがひと手間かけて行う必要がある。それがラリーのセンスだ。

136
デフォルトの名無しさん[sage]   投稿日:2015/03/21 00:43:34  ID:jjT9Gnx+.net
EncodeのおっさんはPerlに限定しないEncode的なインターフェイスを作る巨大な仕事が残っているだろ。
たとえば猿真似のpythonなんか2015年にもなってまだ日本語が不得手だ。
LLの種類に関係なくEncodeの神になれよ。

137
デフォルトの名無しさん[sage]   投稿日:2015/03/29 12:42:33  ID:5vNHXOnn.net
Encode的なインタフェースは失敗だったと考えてるので他のLLでは受け入れてくれない
んじゃないか?Perlは今後ともLLのモルモットとして役に立っていくのだろう。

138
デフォルトの名無しさん[]   投稿日:2015/03/29 18:08:31  ID:F8+FjfS7.net
アクセスカウンタ作りですが

1:open関数の読み書きモードで開いてflockで排他ロックして書き込むアクセスカウンタ
2:読み込みモードで開きflockで排他ロックしtmpファイルに書き込んでからrenameするアクセスカウンタ

2つを同時に貼り付け100回連打したら、2の方がカウント数が全然少なかったです
renameは遅いのでやめたほうがいいんでしょうか?
コメント1件

139
デフォルトの名無しさん[sage]   投稿日:2015/03/30 03:26:34  ID:x/GhIrok.net
>138
読み込みモードは他人の読み込みを邪魔しない。
AさんとBさんは同じ数字を読む可能性がある。

140
デフォルトの名無しさん[age]   投稿日:2015/03/30 12:19:57  ID:Lq0egyTj.net(2)
ファイルの中のデータを行単位で削除する方法と
seekで指定した位置から1文字ずつ削除する方法を教えてください
どちらもテンポラリファイルを使わない方法でお願いします

141
デフォルトの名無しさん[age]   投稿日:2015/03/30 12:28:01  ID:Lq0egyTj.net(2)
それと@lines = <IN>;のように配列にまとめて読み込む方法はデータが多いとメモリをくうので
一括読み込みじゃない方法でお願いします

142
デフォルトの名無しさん[sage]   投稿日:2015/03/30 12:32:32  ID:O9aguycE.net
無理

143
デフォルトの名無しさん[]   投稿日:2015/03/30 14:12:22  ID:FyB5h3Ft.net
perlってまだ生き残ってるんだな
コメント1件

144
デフォルトの名無しさん[sage]   投稿日:2015/03/30 15:23:59  ID:eFvOQ4Yd.net
>143
CGIバブルが終わってからは、あるべき姿に落ち着いてそのままだよ
てかそれは随分と昔の話なんで、未だにPerl終了と声高に叫ぶ輩が生き残ってることのほうが不思議
コメント1件

145
デフォルトの名無しさん[]   投稿日:2015/03/31 00:03:39  ID:OIxY6GET.net
while(1){

open(IN, $datafile) || last;
$data = <IN>;
close(IN);

}

これってファイルが開けたらループから抜けるという意味ですか?
コメント2件

146
デフォルトの名無しさん[sage]   投稿日:2015/03/31 01:19:44  ID:kv4yZW7+.net(2)
>145
人に訊くより自分で試した方が早く解決できると思います。

まぁ答えはとしてはそれであってるけど、そのままだとファイルが開けないときにcpu食い潰すよ。
コメント1件

147
デフォルトの名無しさん[sage]   投稿日:2015/03/31 02:14:23  ID:DVVpWgeR.net(2)
まあ>146は間違ってるんだけどな(笑)
コメント1件

148
デフォルトの名無しさん[sage]   投稿日:2015/03/31 02:26:22  ID:kv4yZW7+.net(2)
>147
あ、ほんとだ。すんません。スーパー恥ずかしい...

っつーと、ループ内で$datafileのファイル名が変わるのかな。

149
デフォルトの名無しさん[sage]   投稿日:2015/03/31 09:01:50  ID:IugrT7n6.net
>145
一応回答すると、ファイルが開けなかったらwhileループから抜ける。念のため

150
デフォルトの名無しさん[]   投稿日:2015/03/31 11:54:41  ID:SqSmYtEX.net
activeperlの5.20.1をインストールしてあります

use strict;use warnings;use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';
#コメントテスト;
my $i = 10;
print $i, "\n";

これをコマンドプロンプトで実行しても何も表示されなくて
コメントの行を消すとちゃんと10って表示されるんですが何か設定がおかしいのでしょうか?

151
デフォルトの名無しさん[sage]   投稿日:2015/03/31 15:08:39  ID:xBEas+F+.net(2)
>144
poor client相手に、月額1000円のサーバの固定費とCMSの運用費払わせる方がどうかしてる

152
デフォルトの名無しさん[sage]   投稿日:2015/03/31 16:11:46  ID:DVVpWgeR.net(2)
それは本当に貧乏人だなw
月1000円って小学生のお小遣いじゃんかw

153
デフォルトの名無しさん[sage]   投稿日:2015/03/31 17:14:17  ID:xBEas+F+.net(2)
投稿フォームだけで済むような更新頻度の低いサイトにCMSなんてイラナイから
イニシャルコストと導入後のメンテ費用を考えたら素のhtmlとcgiで書いた方が良心的

154
デフォルトの名無しさん[]   投稿日:2015/04/01 08:41:54  ID:JORFK8wq.net
local $SIG{ALRM} = sub { die "timeout" };

この部分についての質問です
まずsubで関数名がないのと、戻り値がないのに$SIG{ALRM}にはどんな値が格納されるのですか?
そしてdie関数はwindowsだと使えないのでwindowsではどのように書けばいいのでしょうか?
コメント2件

155
デフォルトの名無しさん[sage]   投稿日:2015/04/02 00:14:11  ID:tnulMQUl.net
>154
$SIG{ALRM} には関数を代入してるよ。
dieはWindowsのばあ

156
デフォルトの名無しさん[sage]   投稿日:2015/04/02 09:04:28  ID:aIeKvK0i.net
>154
ActivePerl 5.16.1 だけど die 使えてるっぽいけど

C:\>perl -e "print 'ABC'; die 'timeout'; print 'DEF';"
timeout at -e line 1.
ABC

157
デフォルトの名無しさん[sage]   投稿日:2015/04/02 10:23:28  ID:4ZZsgi5w.net
イチゴもだいじょぶだ

158
デフォルトの名無しさん[sage]   投稿日:2015/04/02 21:08:36  ID:JH1Mqqb4.net
dieは例外送出として多く使われるので
これが動かなかったら大変なことになるぞw

159
デフォルトの名無しさん[sage]   投稿日:2015/04/02 21:53:22  ID:sYN9b325.net
Windowsで使えないのってdieじゃなくてalarmじゃないの

160
デフォルトの名無しさん[]   投稿日:2015/04/04 17:17:39  ID:xbtlZw9Y.net
our($n);

foreach(1..100){

print "aaa=====$n<br>";

}

$nに変数を何も代入しなくてループ処理をするとperlがフリーズしました
原因を教えてください

161
デフォルトの名無しさん[sage]   投稿日:2015/04/04 17:26:39  ID:sl6pa7sN.net
いいえ、フリーズしません

162
デフォルトの名無しさん[sage]   投稿日:2015/04/07 16:19:35  ID:y6ne4vkD.net
Windows8.1でmsys2のminttyからperlをビルドするため sh Configure をすると
Configure: 行 16472: /proc/curproc/exe: No such file or directory
で失敗しました。どうすればmsys2から成功させられますか

ちなみに行 16472付近の記述は下記のようになっているのでLinux扱いにさせれば上手くいきそうに思えます
case "$d_readlink" in
  "$define")
  : NetBSD first as /proc/self is a symlink to /proc/curproc, and it feels
  : more tidy to avoid an extra level of symlink
  set NetBSD /proc/curproc/exe Linux /proc/self/exe FreeBSD /proc/curproc/file Solaris /proc/self/path/a.out
コメント2件

163
デフォルトの名無しさん[]   投稿日:2015/04/08 19:14:41  ID:ajF3hp/Z.net(3)
0から9までの整数の乱数を固定取得したいんですけど

srand(900);
int(rand(10));だと0になってしまいます
どうすればいいんですか?
srand使わないとアクセスするたびに乱数が変わってしまうので値を固定したいんです
コメント2件

164
デフォルトの名無しさん[sage]   投稿日:2015/04/08 20:12:07  ID:CYuqSHdu.net
>163
ちょっと何言ってるかわからない

最大限努力してエスパーすると0から9の整数を適当に並び替えた配列が欲しいという意味かな?

165
デフォルトの名無しさん[sage]   投稿日:2015/04/08 20:25:03  ID:WFBZO/E0.net(2)
>162
/proc/curproc/exe
Winのパス区切り文字は、\ では?
/ も使えるの?
それは、Win向けのスクリプトなの?

\proc\curproc\exe
それか、\ を、\ でエスケープして、
\\proc\\curproc\\exe

>163
固定取得とはどういう意味?
例示して説明せよ

166
デフォルトの名無しさん[sage]   投稿日:2015/04/08 20:45:13  ID:gn+rALV1.net(2)
> Winのパス区切り文字は、\ では?
> / も使えるの?

Win32 APIも含めて、パスの区切りは
/でも動くような気がする。

いろんな言語、ライブラリで/で動くから
深く考えないで動くもんだと思ってしまってる。
どのレイヤーが変換してるんだろうか?

167
デフォルトの名無しさん[sage]   投稿日:2015/04/08 20:58:58  ID:WFBZO/E0.net(2)
/proc/curproc/exe: No such file or directory
だから、パスと認識しているね。
そういうファイル・ディレクトリが存在しない

NetBSD /proc/curproc/exe
このパスは、NetBSDという事?

よく見ると、exe というファイル名は変だね。
ファイル名.exe じゃないの?
それとも、ディレクトリ名かな?

168
デフォルトの名無しさん[]   投稿日:2015/04/08 21:18:07  ID:ajF3hp/Z.net(3)
int(rand(10))だと実行するたびに0から9のどれが出るか結果が毎回違うだろ
だけど何回実行しても結果が同じようにしたい
例えば乱数の基数を1にしたら8が何回実行しても出る
基数を2にしたら3が出る
基数を5にしたら9が出るという感じ

169
デフォルトの名無しさん[sage]   投稿日:2015/04/08 21:20:19  ID:gn+rALV1.net(2)
srandでぐぐれかす

170
デフォルトの名無しさん[]   投稿日:2015/04/08 23:13:04  ID:ajF3hp/Z.net(3)
いやだからそのsrandの性能がよくないから困ってる

for($m=0;$m<10;$m++){

srand($m);
my($r) = (rand(10));

print "value=$r<br>";

}

これの実行結果が
value=0.0115966796875
value=0.01251220703125
value=0.01373291015625
value=0.0146484375
value=0.01556396484375
value=0.0164794921875
value=0.0177001953125
value=0.01861572265625
value=0.01953125
value=0.020751953125
なのでintすると全部0になっちゃう
コメント2件

171
デフォルトの名無しさん[sage]   投稿日:2015/04/08 23:57:25  ID:cLFBRghz.net
srandはループの外に出せよ

172
デフォルトの名無しさん[sage]   投稿日:2015/04/09 01:42:19  ID:r2hp3hxj.net
エスパー参戦すると、randとかであらかじめ乱数を大量に作って、ファイルに
とっておき、プログラムの実行時にそのファイルを参照することで毎回同じ
乱数を使えるようにする、でいいですか?

173
デフォルトの名無しさん[sage]   投稿日:2015/04/09 02:40:04  ID:+7hvEmMb.net
srandをループの外に出したら、どうなるの?

srandに同じ種を与えて、2回実行したらどうなる?

174
デフォルトの名無しさん[]   投稿日:2015/04/09 11:45:47  ID:E0v+Buu6.net
my($n,$m);

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

srand($n);

for($m=0;$m<10;$m++){

my($r) = int(rand(10));

print "value=$r<br>";

}

print "<br><br>";

}

3回とも最初が0になってしまいます
0にならないにはどうしたらいいんですか?

175
デフォルトの名無しさん[sage]   投稿日:2015/04/09 12:37:38  ID:kiIKr2Os7(2)
>170
そもそも結果からしておかしい。

codepad Perl5.8
http://codepad.org/964As0Wc
ideone Perl5.20
http://ideone.com/WGY1jq

どうやってもこうなる。
value=1.7082803610629
value=0.416303447718782
value=9.12432653437467
value=7.83234962103055
value=6.54037270768644
value=5.24839579434232
value=3.95641888099821
value=2.66444196765409
value=1.37246505430998
value=0.080488140965862

176
デフォルトの名無しさん[sage]   投稿日:2015/04/09 12:43:05  ID:kiIKr2Os7(2)
記憶が10数年前で止まってるPHPerの工作員だろ、ここんとこの質問者。

177
デフォルトの名無しさん[sage]   投稿日:2015/04/09 12:39:17  ID:f/5UDar+.net
>170
手元のマシンもcodepad.orgもこうだけど
http://codepad.org/0nMtoGOe
#!/usr/bin/perl
for($n=0; $n<10; $n++)
{
srand($n);
my ($r) = (rand(10));
print "value = $r\n";
}

value = 1.7082803610629
value = 0.416303447718782
value = 9.12432653437467
value = 7.83234962103055
value = 6.54037270768644
value = 5.24839579434232
value = 3.95641888099821
value = 2.66444196765409
value = 1.37246505430998
value = 0.080488140965862

178
デフォルトの名無しさん[sage]   投稿日:2015/04/09 16:45:39  ID:Vuzz2A3s.net
>162の件ですが誤解があるようなので補足します
Perl本体をビルドするときの
$ sh Configure
$ make
$ make test
$ make install
の最初の段階で失敗するという話です(参考:http://www.linuxfromscratch.org/lfs/view/development/chapter06/perl.html
msys2には/proc/curprocが存在せず/proc/self/exeはあるみたいです

それとパスの区切り文字は\の方がむしろ不都合になりやすいと思われます
事実mintty上からstrawberry perl(C:\path\to\perl.exe)でcpanmを使用したところdmake中に下のログを吐いて失敗しました
-MExtUtils::Command: C:pathtoperl.exe: コマンドが見つかりません

179
[]   投稿日:2015/04/09 17:31:03  ID:bPVf1A9q.net(3)
#!/usr/local/bin/perl

use strict;
use warnigs;

my $text="12";
my $count="1";
print "Content-type: text/html\n\n";
print <<"EOS";
<html><head><title>アクセスカウンター</title></head><body>$count<br><br>更新履歴<br><br>$text<body>
</html>
EOS

これが機能しないんですがどなたか理由教えてもらえませんか?
属性は755です。内容に特に意味はないです。ヒアドキュメントが調べてもよくわからない。
初歩的な質問ですいません。
コメント1件

180
デフォルトの名無しさん[sage]   投稿日:2015/04/09 18:00:46  ID:d4jlQFlQ.net(2)
エラーになる時に何と表示されるかを書いた方がいい

181
デフォルトの名無しさん[sage]   投稿日:2015/04/09 19:30:15  ID:Zaj1yAit.net
use warnings;

182
[]   投稿日:2015/04/09 20:49:02  ID:bPVf1A9q.net(3)
Script Error

The script did not produce proper HTTP headers.
Please see the error log to see the detail of the errors.
Depending on the server configuration,
you can also run thisscript under CGIWrap debugging.
Usually, either rename or linkthe script temporarily to a file which ends with .cgidextension, or
add a AddHandler cgi-script-debug .cgiline to your .htaccess file.

こう表示されます;
コメント1件

183
デフォルトの名無しさん[sage]   投稿日:2015/04/09 21:00:50  ID:peeQLIsX.net(2)
CGIの話は禁止なんだぜ?

まずは、warnings のタイポ直してから、それでも駄目だったら、
PHP板に行けば?

184
[]   投稿日:2015/04/09 21:37:17  ID:bPVf1A9q.net(3)
warnings直しても駄目でした。
>1 さんのレスみてcgiの話題大丈夫かと思ってました・。
コメント1件

185
デフォルトの名無しさん[sage]   投稿日:2015/04/09 21:41:38  ID:peeQLIsX.net(2)
そもそも、スレの合意も得てない単なる私見だし。
>1がどう言おうと、板全体の方針の方が優先されるぜ。

186
デフォルトの名無しさん[sage]   投稿日:2015/04/09 23:52:30  ID:d4jlQFlQ.net(2)
>182
アパッチのエラーログに詳細情報があるんじゃない?
それを見てみたら?

187
デフォルトの名無しさん[sage]   投稿日:2015/04/10 00:22:13  ID:XYVxfdln.net
>184
perlのパスは/usr/local/bin/perlであってるのか?
サーバーの設定によっては755では動かないようにしてある場合もあるがあってるか?
スクリプトの文字コードは問題ないのか? メモ帳でUTF-8で保存してBOMが付いてるとかありがち

188
[]   投稿日:2015/04/10 21:42:02  ID:k00nOeV8.net
ターミナルインストストールします^^;
perlパスはあってます。755で他のcgiは動いています。(同一サーバー)
文字コードはshift-jisになってます。テキストエディターはterapadを使ってます。
コメント1件

189
デフォルトの名無しさん[sage]   投稿日:2015/04/10 21:51:58  ID:XnlVh9yU.net
>188
動作している環境はもしかしてUNIX?
ソースの編集をWindows上で行ってるんですよね?
行末にゴミが残っているかも知れません。

190
[]   投稿日:2015/04/11 00:31:09  ID:YBDEAPKu.net(2)
使っているサーバーはxreaで、ブラウザ火狐。 ソースの編集はテキストエディターです。
コマンドプロンプトでは、syntax okっと出たので、謎です^^;
コメント1件

191
デフォルトの名無しさん[sage]   投稿日:2015/04/11 00:37:56  ID:pm/uZPWM.net(2)
>190
ためしに、terapad使って、ソースの改行コードを
[ CR+LF ] から [ LF ] に変換してから
サーバーに上げてみて。

192
デフォルトの名無しさん[sage]   投稿日:2015/04/11 01:07:58  ID:DGTXgMDH.net
179のエラーメッセージにも書いてあるけど
xreaは拡張子を.cgidにしてうpればエラー詳細出せるみたいだけどやってみれば?
コメント1件

193
デフォルトの名無しさん[sage]   投稿日:2015/04/11 01:25:48  ID:hRe3cPjf.net
tiobeのランクで巻き返したね。

194
[]   投稿日:2015/04/11 04:37:47  ID:YBDEAPKu.net(2)
>192さん助言ありです。
エラ-原因が
Script is not executable. Issue 'chmod 755 filename'
属性が755じゃ駄目だってことなのかな・・。 
コメント1件

195
デフォルトの名無しさん[sage]   投稿日:2015/04/11 08:36:37  ID:TjKNTTtC.net(3)
こんだけくだぐだになるから、CGIの話は禁止になってんのに、
続けるのか?

196
デフォルトの名無しさん[sage]   投稿日:2015/04/11 09:52:08  ID:xPz3Wm/g.net
結局perl関係ないじゃねーか

197
デフォルトの名無しさん[sage]   投稿日:2015/04/11 10:26:58  ID:pm/uZPWM.net(2)
>194
Script is not executable. Issue 'chmod 755 filename'
スクリプトが実行可能ではありません。'chmod 755 filename'を実行しなさい。

その通りにパーミッションが設定され、シェルで実行できる場合は、以下を調べてみてください。

サーバー上で file というコマンドを実行出来るなら、file filenme を実行する。
「with CRLF, LF line terminators」と表示が出る場合は、
#!/usr/local/bin/perlの行末にゴミがつくため、apacheはperlを見つけられず、
「Internal Server Error」となり実行できません。

違う理由の場合はごめん。

198
デフォルトの名無しさん[sage]   投稿日:2015/04/11 13:56:57  ID:ykBWyHan.net(2)
優先順位は
 質問者(初心者) >>> スレ主(中級者) >>> 回答者(ベテラン)
でお願いします。

199
デフォルトの名無しさん[sage]   投稿日:2015/04/11 14:03:51  ID:hp4FkV79.net
二週間初心者スレでスルーされたので

my $tmp = {
 $a => sub { $_ = 処理A},
 $b => sub { $_ = 処理B},
 $c => sub { $_ = 処理C},
};

ループ中に↑のように書いている場合、一つの変数に対して複数の処理($a に 処理A' やA''を追加)を
加えたい場合、どのように書くのでしょうか?
コメント1件

200
デフォルトの名無しさん[sage]   投稿日:2015/04/11 15:34:33  ID:UKPnNYb6.net
>179
Perlの構文はよく知らないので、
一般論で、ヒアドキュメントについて書くが、

print <<"EOS";
ここに書いたものは、改行も含めて、
見たままそのままに、変数に代入される
EOS

print は変数名ではない。
そこに何か変数名を書く。
そして、print 変数名 とすればよい
コメント1件

201
デフォルトの名無しさん[sage]   投稿日:2015/04/11 15:52:09  ID:TjKNTTtC.net(3)
知らないんだったら書くなよ。

202
デフォルトの名無しさん[sage]   投稿日:2015/04/11 15:55:52  ID:TjKNTTtC.net(3)
済まん、ミスった。
質問者のその部分自体にはperl的ミスはねーよ。
ヒアドキュメントは変数に突っ込まなきゃつかえない訳じゃねーぞ。
$ cat <<FOO
heredoc> foo
heredoc> bar
heredoc> FOO
foo
bar

それ以外の部分のトラブルだから、とっととWebProgに行けと言われてんのに。
コメント1件

203
デフォルトの名無しさん[sage]   投稿日:2015/04/11 16:37:52  ID:jprZbhPv.net
>199
> ループ中に↑のように書いている場合、

それ自分が書いたコードじゃないだろ?

まず他人のソース、会社のソースを弄る前に
Perlの基礎を勉強してからにしろよ。

単純に変数に関数の戻り値の結果を入れるだけの話だから、
↑のように書いているかどうかは全く関係ない。

つまり、その質問はあんたが自分のやりたい事と書いてあるコードを
全く読めてないってことを告白していることになってるんだよ。
レスつかんはずだわw

204
デフォルトの名無しさん[sage]   投稿日:2015/04/11 22:44:04  ID:d2KPF5yq.net
>202
ヒァ〜〜!

205
デフォルトの名無しさん[sage]   投稿日:2015/04/11 22:59:11  ID:ykBWyHan.net(2)
動いているCGIスクリプトがあるようなので、そのプログラムをお前の使っている
テキストエディタで開いて、何も編集せずに、お前の行っている操作方法で元の
名前で保存(上書き保存)する。この操作でCGIスクリプトが動作しなくなったら
テキストエディタ、ないしその操作方法に問題がある。
問題なく動くのであれば、その動くプログラムを少しずつ書き換えていって、自分の
作りたいスクリプトに近づけていく。一度にたくさん書き換えず、ちょっと変えて
保存して、実行して、を繰り返すと、どこで不具合が発生しているかが分かる。

206
[]   投稿日:2015/04/12 13:54:34  ID:jIVNY2vP.net
176ですが、ヒアドキュメント使わずに、printだけで表記すると、問題なく表示できるので、
ヒアドキュメントがあるとうまくいかないってことがわかりました。
ヒアドキュメントをもう少し個人的に調べてみます。
色々助言してくだった方、親切にありがとうございました。

207
デフォルトの名無しさん[sage]   投稿日:2015/04/13 07:58:16  ID:wj7rKPvK.net
>200
これだけの痛さはそうそう出せるもんじゃないな
実に味わい深いw

208
デフォルトの名無しさん[sage]   投稿日:2015/04/13 23:38:15  ID:+3GTN8vq.net
ヒアドキュメントはPerl4時代からあるから、基本のPerl4を知るのは今でも大事なんよ

209
デフォルトの名無しさん[sage]   投稿日:2015/04/14 00:42:23  ID:oXtat876.net
また来たよw 4がまた来たよw

210
デフォルトの名無しさん[sage]   投稿日:2015/04/15 00:59:37  ID:8TvJxe7E.net
Perl5って明記しない限り、PerlはPerl4のことであってる

211
デフォルトの名無しさん[sage]   投稿日:2015/04/16 00:57:11  ID:bLWn78BU.net
また来たよw 馬鹿来たよw

212
デフォルトの名無しさん[sage]   投稿日:2015/04/16 19:53:32  ID:DU3YUAwL.net
localtimeも知らずにいきがっていた俺が通るゼぃ☆

213
デフォルトの名無しさん[sage]   投稿日:2015/04/17 22:37:47  ID:UHVCP2Vk.net
localtimeほどクソコードを量産させた関数もないだろうな。

正解
print strftime("%Y/%m/%d", localtime)

正解その2
print localtime->strftime("%Y/%m/%d")

クソコード
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime;
$year += 1900;
$mon += 1;
コメント1件

214
デフォルトの名無しさん[sage]   投稿日:2015/04/17 23:12:42  ID:OFoEPQZ/.net
おまえがここでlocaltime覚えたのはみんな知ってるから
コメント1件

215
デフォルトの名無しさん[sage]   投稿日:2015/04/17 23:15:03  ID:UDbFCugu.net
お前ってどのレスことだ?

216
デフォルトの名無しさん[sage]   投稿日:2015/04/17 23:52:03  ID:eADhUYSQ.net
5.8.8にTime::Pieceが入ってないのが全ての元凶

217
デフォルトの名無しさん[sage]   投稿日:2015/04/18 00:42:24  ID:28SXig6k.net
POSIXなら入っているだろ

218
デフォルトの名無しさん[sage]   投稿日:2015/04/18 17:51:31  ID:TTmK2bDQ.net
>214
なんだ、そゆことかw

219
デフォルトの名無しさん[sage]   投稿日:2015/04/18 21:43:34  ID:K7f11N+p.net
たかだか時刻を扱うのにモジュールを呼び出し、人柱になる。日本向けの必要な
機能はなく、ひとたび使ってしまうとメンテで苦労する。それがTime::Piece。

220
デフォルトの名無しさん[]   投稿日:2015/04/18 23:09:50  ID:dV26hKK2.net
$FORM_DATA{$form_name} = $form_value;という形でフォームからのデータを格納しています

ところがuse warnings;を使うとフォームに何も入力してない場合は変数にデータが入ってないらしく、が初期化がされてないといわれエラーが出てしまいます。

print "$FORM_DATA{'textbox1'}";のようにtextbox1のフォームが未入力の場合です。
このような入力フォームハッシュは初期化しようがないと思うんですが、どうすればエラーを回避できるんでしょうか?
コメント1件

221
デフォルトの名無しさん[sage]   投稿日:2015/04/18 23:30:48  ID:j/wjXDDU.net
Perl はよく知らないが、
最初に空文字列でも代入して、初期化しておけば?
$FORM_DATA{$form_name} = "";
$FORM_DATA{$form_name} = $form_value;


それか、$FORM_DATA{'textbox1'}を使う前に、
エラー処理を入れる

if($FORM_DATA{'textbox1'} == nil){
 エラー処理
}else{
 print "$FORM_DATA{'textbox1'}";
}
コメント2件

222
デフォルトの名無しさん[sage]   投稿日:2015/04/18 23:50:04  ID:09otItWe.net
>221
クソコード書くな。

>220
一旦変数に入れると良い。
特にPerlはリストコンテキストとスカラコンテキストの問題で
フォームからのデータを変数にいれないで扱うとバグの元になる。

まずフォームからの入力だが、フレームワークを使っているならそのやり方をするとして
使ってないならば、おそらくCGIモジュールを使っているだろう?
ならば、こうだ。

my $q = CGI->new;
my $value = $q->param('value') // '';

'' の代わりに、何も入力されていない時の初期値を入れれば良い。

223
デフォルトの名無しさん[sage]   投稿日:2015/04/19 07:33:57  ID:Z1tOTu1C.net(2)
一応「CGIの話は禁止」と釘は刺しとくが。

>221
お前、レスんなよ。

224
デフォルトの名無しさん[sage]   投稿日:2015/04/19 09:44:55  ID:KgvSDjWg.net
FORM_DATAというワードが出てたからCGIの話、かw
糞初心者ガキが
コメント2件

225
デフォルトの名無しさん[sage]   投稿日:2015/04/19 12:22:34  ID:Z1tOTu1C.net(2)
>224
初心者認定は構わんが、%FORM_DATA なんぞ使ってる
コマンドラインアプリがあったら教えてくれよ

それよか == nil なんぞ、このスレに書くアホに怒るべきじゃねーの?

226
デフォルトの名無しさん[sage]   投稿日:2015/04/19 12:31:02  ID:qB4dXJA/.net
>224
直前のレスに
>my $q = CGI->new;
こんなのがあんのに、そのレスする度胸は凄いわ

227
デフォルトの名無しさん[sage]   投稿日:2015/04/19 17:08:28  ID:vTL3Mzew.net
CGIをコマンドラインでテストするための
プログラムを作りたいんだけど、それって
CGIじゃないからここでいいよね?

228
デフォルトの名無しさん[sage]   投稿日:2015/04/19 17:33:10  ID:EueKgq+R.net
あっちでやれば?
↓こんなのとかいっぱいあるよ
依頼されたツールを誰かが作るスレ /WebProg板

229
デフォルトの名無しさん[sage]   投稿日:2015/04/19 21:48:27  ID:7svrhlbQ.net
未定義値で警告が出るみたいなperlレベルの話ならまあ
どこどこのサーバーでperlで書いたCGIが動かないみたいなのはさすがにね

230
デフォルトの名無しさん[sage]   投稿日:2015/04/20 00:39:31  ID:xc0HJa8r.net
{
no warnings 'uninitialized';
print "$FORM_DATA{'textbox1'}";
}

http://perldoc.jp/docs/perl/5.18.1/perllexwarn.pod

231
デフォルトの名無しさん[sage]   投稿日:2015/04/22 16:23:38  ID:CYsRD/7P.net
>213
localtimeの値を全部取得して一部だけ取り出そうとする人はいないだろ
コメント1件

232
デフォルトの名無しさん[sage]   投稿日:2015/04/22 18:11:20  ID:sdnJBf1e.net
>231
年月日だけ必要な場合とかあるよw
コメント1件

233
デフォルトの名無しさん[sage]   投稿日:2015/04/23 02:31:54  ID:/mzS0WKL.net
もともとPerlによるCGIプログラミングの話題はOKだったが、64箱目では加えて
Common Gateway Interface関係の話題もOKになったと読める。初心者対策だな。

234
デフォルトの名無しさん[sage]   投稿日:2015/04/23 18:44:54  ID:uaw1qxyQ.net(3)
今日の無駄にハマった記述
$::fnc{ shift @in }->(@in)
shiftが実行されてるのに値が捨てられてねぇ
コメント1件

235
デフォルトの名無しさん[sage]   投稿日:2015/04/23 22:33:20  ID:uaw1qxyQ.net(3)
久しぶりにPerlをやったら数値の初期化がわからんくなった

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

# @_ は標準入力から入ってきた数字の文字。shiftすると0が出てくる。
my @ccc = qw(aa bb cc dd ee);
$aa[0]->{'bbb'}->{ $ccc[shift] } = 1;

Use of uninitialized value in array element

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

$aa[0]->{'bbb'}->{ $ccc[(shift) + 0] } = 1; # +0して数値だと教えてやる

Use of uninitialized value in array element

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

my $SUUTI = int( (shift) + 0 ); #もうこれは絶対数値だろ
$aa[0]->{'bbb'}->{ $ccc[$SUUTI] } = 1;

Use of uninitialized value in array element

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

どれも全部警告が出る以外は正しく動作します。
もう警告消そうかな…
コメント2件

236
デフォルトの名無しさん[sage]   投稿日:2015/04/23 22:45:03  ID:WIyghc2rN(2)

237
デフォルトの名無しさん[sage]   投稿日:2015/04/23 22:55:15  ID:WIyghc2rN(2)
>235
何の問題もなし。

http://ideone.com/5cdgTX

238
デフォルトの名無しさん[sage]   投稿日:2015/04/23 22:56:48  ID:RQ6uYe2n.net
shift が実行されてないから値が捨てられて無いんだよ
$ perl -le 'my @d = qw( 3 4 5 6 ); my %h = (4 , sub { print @_ } ) ; $h{ shift @d }->( shift @d) ; '
3

暗黙の shift @_ は、どの状況下でも起るわけじゃねーよ?
$ perl -le '@_ = qw( 1 2 ) ; print @{[shift @_]} ;'
1
$ perl -le '@_ = qw( 1 2 ) ; print @{[shift ]} ;'
Use of uninitialized value in print at -e line 1.

239
デフォルトの名無しさん[sage]   投稿日:2015/04/23 23:31:29  ID:uaw1qxyQ.net(3)
天才
0を受け取ってたのが勘違いに拍車をかけていた

240
デフォルトの名無しさん[sage]   投稿日:2015/04/23 23:33:21  ID:usUmjU70.net
>232
全部取得したいなら
@t=localtime;
今の時間だけなら
($s,$m,$h)=localtime;
でいいって事を言いたかっただけ
コメント1件

241
デフォルトの名無しさん[sage]   投稿日:2015/04/24 11:39:22  ID:W/fXv6jM.net(2)
>240
今の年月日だけ必要な場合は?

そういう風に途中だけ必要なのに
明らかに何処かのクソコードをコピペしただけの
コードが多いなって話をしてる。

年を取り出して+1900する
月を取り出して+1する
それを何も考えずに繰り返してる奴。
コメント1件

242
デフォルトの名無しさん[sage]   投稿日:2015/04/24 11:43:00  ID:W/fXv6jM.net(2)
>235
一言言っておくは。

Perl知ってる、知らない以前の問題で
自分が困るような、複雑な書き方をするんじゃない。
きっとあんたPerl以外でもそんな書き方をするだろう?

リーバブルコードでも指摘されてることだぞ。
無理やり一行に詰めこむことで、自分が賢いと勘違いしているだけだ。
式の何にshiftを入れるんじゃなくて、一旦先にshiftしておくなどして
わかりやすいコードを書くようにしろ。

243
デフォルトの名無しさん[sage]   投稿日:2015/04/25 00:10:15  ID:48xF3CQb.net
むしろそこはコピペでいいところ。そんなところでオリジナリティを発揮しても
何のメリットもない。漢数字なら一、二、三、ローマ数字ならI, II, III だ。
プリミティブなものは分かりやすいから廃れない。工夫しました系は塗り替えら
れて終わる。

244
デフォルトの名無しさん[sage]   投稿日:2015/04/25 21:44:28  ID:1Xoffzaq.net
>241
月や曜日が0から始まらないと月名とか参照するのに少し困るけどな。
strftimeは外部モジュール入れるから使う人は少ないだろう。
use utf8;やstrict、warnings すら極力使わずに負荷を下げて処理したい人は多いだろうし
コメント1件

245
デフォルトの名無しさん[sage]   投稿日:2015/04/25 21:46:16  ID:TJPbTXdw.net(2)
>244
そういう話じゃねーよ。
毎度毎度、使うたびに年に+1900、月に+1する
単純作業やるなっていってるんだよ。
コメント1件

246
デフォルトの名無しさん[sage]   投稿日:2015/04/25 21:46:38  ID:TJPbTXdw.net(2)
> strftimeは外部モジュール入れるから

標準モジュールだが?
コメント1件

247
デフォルトの名無しさん[sage]   投稿日:2015/04/25 23:10:56  ID:VJ48Az80.net
それぞれやりたいようにやってくれ。俺はlocaltimeに一票。こちらに分がある。

248
デフォルトの名無しさん[sage]   投稿日:2015/04/26 01:54:46  ID:JEE8tkGa.net
>245
言いたいことはわかるけど
ジャンル柄、ライブラリを一切使いたくない時もあるので
まあそんときは怒らずに付き合ってくれよ

249
デフォルトの名無しさん[sage]   投稿日:2015/04/26 09:54:33  ID:uRRZSCQD.net
>246
訂正。外部モジュールじゃなくて、単にモジュール入れるという意味。
ライブラリ使いたくないからなあ。
全ての主要な標準ライブラリから、strict と warnings 外してやったよ
コメント1件

250
デフォルトの名無しさん[sage]   投稿日:2015/04/26 10:50:44  ID:Ovagqc5g.net
>249
議論自体はどーでもいいが、
>単にモジュール入れるという意味。
糞意味不明。元々入っているものを「入れる」???

更に、
>全ての主要な標準ライブラリから、strict と warnings 外してやったよ
こんな事言ってるし。
コメント1件

251
デフォルトの名無しさん[sage]   投稿日:2015/04/26 10:53:06  ID:lX4K+qPz.net
strictやwarningsすら使いたくなくなるような状況とはいったい

252
デフォルトの名無しさん[sage]   投稿日:2015/04/26 11:46:26  ID:HAckIWsW.net
ベンチマークもしないで、
自称高速なコードを書く俺は天才
じゃね?w

253
デフォルトの名無しさん[sage]   投稿日:2015/04/26 14:34:59  ID:FlkKeK75.net
モダンパールの無理すんなPerlの時代は終わったのさ。Perlは本来のPerlの使い方をしてこそ活きてくる。
CGIモジュールもそろそろ外れるし、もしかしたらE

254
デフォルトの名無しさん[sage]   投稿日:2015/04/27 09:11:38  ID:wWpiPENM.net
>250
小さいことに拘るなって。
localtimeに、POSIX.pm入れないと動かないstrftimeを例に出してくる事だって可笑しく見えるだろ

strict・warnings は開発終わったソースから外したんだよ。
他人の所に有る鯖にPerlのソースupするのに、
少しでも軽くして運営を楽にしてやろうと、改行やらスペースやらタブやら、
同じスクリプトとか自分で書いて外すだろ。
Encode.pm や utf8_heavy.pl とかどんな事やってるのかソース開いたら、
strict・warningsが入ってるからこれってこんなに必要なのか?
と疑問に思って試したらやっぱり必要なくて軽くなったからだよ。
今、部分的にCに直してる所。
自鯖運営した事がある人なら分かると思うけど、
JAVA PHP Perl と弄ってみて、JAVAとPHPは速攻で特アの攻撃でやられて、
結局少し古いPerlがセキュリティ的にとりあえず安全だと判断したためだよ。
でもPerlも分からん所があってCに直してるんだよ。
糞だというなら、Perlいまだに弄ってる事自体が糞だろ。
PHPみたいな明らかに情報抜き取るためにあるような怪しい奴はともかく、
最近のJAVAもPerlも可笑しいからなあ
コメント1件

255
デフォルトの名無しさん[sage]   投稿日:2015/04/27 10:27:35  ID:d1QnfTlA.net(2)
> localtimeに、POSIX.pm入れないと動かないstrftimeを例に出してくる事だって可笑しく見えるだろ

いや、だから、POSIX.pmは標準モジュールだから
最初っから入ってるんだってw

256
デフォルトの名無しさん[sage]   投稿日:2015/04/27 10:59:30  ID:vaJOoflW.net(2)
>254
>軽くなったから
労力に対して具体的にどの程度の効果があったの?
コメント1件

257
デフォルトの名無しさん[sage]   投稿日:2015/04/27 11:24:02  ID:W95auXF3.net
>256
労力は必要ないって。
自分で正規表現使って圧縮するスクリプトぐらい書けるだろ

258
デフォルトの名無しさん[sage]   投稿日:2015/04/27 11:54:07  ID:vaJOoflW.net(2)
で、その具体的な効果は如何程で?

259
デフォルトの名無しさん[sage]   投稿日:2015/04/27 19:45:36  ID:GvO7a/ob.net
この間のヒアドキュメント君と同じ奴だろ。
相手するだけ無駄だわ。

260
デフォルトの名無しさん[]   投稿日:2015/04/27 19:45:53  ID:yuVlndLM.net(2)
質問です。
windows xp 32bitでactive perl 5.20.1 + AN HTTPD DaemonでCGIとして動かしています。
EUCだとopendirがうまく動かなかったのでソースは全てshift_jisです。
moveでファイルを移動させると、移動後に特定のファイルだけファイル名が変わってしまいます。
対処法があれば教えて下さい。

例)
木曜ドラマ9「潜入探偵トカゲ」第4話 “医療ミスを暴け!!vs天才外科医” [TBS] 2013年05月09日(木) 21時00分〜21時54分

け!!vs天才外科医” [TBS] 2013年05月09日(木) 21時00分〜21時54分
コメント2件

261
デフォルトの名無しさん[sage]   投稿日:2015/04/27 19:51:51  ID:d1QnfTlA.net(2)
>260
一番最初にUTF8に変換してから扱う
コメント1件

262
デフォルトの名無しさん[]   投稿日:2015/04/27 19:59:03  ID:yuVlndLM.net(2)
>261
事故解決しました。
move ディレクトリ名+ファイル名, 移動先ディレクトリ名
でやっていたのを
move ディレクトリ名+ファイル名, 移動先ディレクトリ名+ファイル名
に変えたところ動作するようになりました。

263
デフォルトの名無しさん[sage]   投稿日:2015/04/29 23:37:44  ID:ijRzeJvh.net
木曜ドラマ9「潜入探偵トカゲ」第4話 “医療ミスを暴け!!vs天才外科医” [TBS] 2013年05月09日(木) 21時00分〜21時54分
木曜ドラマ9「潜入探偵トカゲ」第4話―@“医療ミスを暴\け!!vs天才外科医” [TBS] 2013年05月09日(木) 21時00分〜21時54分

264
デフォルトの名無しさん[sage]   投稿日:2015/04/30 03:57:32  ID:4/nMvxH/.net
なんかwindowsだと入出力多い時はsjisで正規表現の時だけエスケープすんのが楽になってきたんだけど。
あんま入出力せずに記述の中だけでかなり色々やりたい時はutf8
どっちつかずの時はもう昔の方法でいいよってことでEUC

265
デフォルトの名無しさん[sage]   投稿日:2015/05/01 22:18:04  ID:JkgSPIp9.net
cでハッシュの実現法知りたいんだけど、検索するとめんどくさいような方法と言うか、
perlのように便利なハッシュとは程遠い感じだった。

perlのハッシュってどうなってんの?

266
デフォルトの名無しさん[sage]   投稿日:2015/05/02 17:27:32  ID:R7a0WGMJ.net
PerlはCで書かれているのでハッシュの実現方法は同じはず。Perlのハッシュが
便利なのはプログラマが値のデータ型を区別しなくていいから。
コメント1件

267
デフォルトの名無しさん[sage]   投稿日:2015/05/02 21:29:19  ID:ve2TTn4S.net
あるコマンド文字列解析をするプログラムがあって、
書いてあるコマンドに対応したクラスを呼び出して処理している。

クラスはモジュールとしてファイルがわかれていて、
プログラムの先頭でuseして読み込んでいる。
対応するコマンドを増やすときは、モジュールを増やす。
モジュールのBEGINで、メインプログラムにある
「コマンド解析用リスト」にオブジェクトを追加すると
対応できるコマンドが増える という仕組みを作ったんだけど

こういうのは普通はどういうロジックで作るものなの?

268
デフォルトの名無しさん[]   投稿日:2015/05/02 22:08:11  ID:gGCqgUJN.net
ファイルハンドルを
my($IN) = *IN;のように変数に格納すると
used only once possible typoという警告が出るんですが
どこが間違っていますか?
コメント1件

269
デフォルトの名無しさん[sage]   投稿日:2015/05/03 00:41:54  ID:o9NCZLQk.net(2)
>260-264
UNIX系では、半角 ! は、sh では通常の文字だったが、
csh, bash では特殊文字となった

! はコマンドヒストリ。
!! は直前のコマンドを実行する

! は、' '(シングルクォーテーション)で囲むか、
\でエスケープすれば、通常の文字として扱われるが、
" "(ダブルクォーテーション)では展開されてしまう

echo '!!', echo \!\! → 展開されない
echo "!!" → 展開される

以前もLinux板で、同じ質問を見かけたが、
ファイル名に特殊文字など、
まぎらわしい文字を使わない方がよい

また、- ハイフンなどでも、何種類もあるから、
どのハイフンを使ったのか、わからなくなるかも

誰かが入力した文字列をチェックせず、
そのままファイル名に使うと、
システム設計上、バグになることは明らか
コメント1件

270
デフォルトの名無しさん[sage]   投稿日:2015/05/03 01:26:26  ID:G0S6iNs3.net
>266
すまん意味がわからん。
俺がハッシュを作ろうとしてんのに、「おまえが作ろうとしてるハッシュと同じだよ」って返答だぜ、それは。
コメント1件

271
デフォルトの名無しさん[sage]   投稿日:2015/05/03 01:48:45  ID:KzoPxOzk.net(3)
>268
INがファイルハンドルじゃないのでは?
抜粋や加工せず、コードもエラーも全文載せてみては?

272
デフォルトの名無しさん[sage]   投稿日:2015/05/03 02:15:29  ID:cXs5Mf40.net(2)
英文載ってんのに、なんつーレスだよ。
そんなミスだったら、他のワーニングが出てるよ

>(変数が)一回しか使われてませんよ?
>タイポ(タイプミス)じゃありませんか?
ワーニングの先頭に変数名が来ているはずだけど、
$INなのか、はたまた他の変数なのかは伺い知れん。
コメント1件

273
デフォルトの名無しさん[sage]   投稿日:2015/05/03 02:29:55  ID:o9NCZLQk.net(2)
PythonのHashはオープンアドレス法で、
Rubyはチェイン法

Rubyではバケット数は、
2の累乗(2の30乗以下の)付近の素数を使う。
8+3, 16+3, 32+5, 64+3, 128+3, 256+27, 512+9...

最初のバケット数は11で、
55個(11*5=55、バケット数の5倍)挿入すると、
バケット数は19に再構成される

そこで、95個(19*5=95)まで挿入すると、
バケット数は37に再構成される

「Rubyのしくみ」という本を参照
コメント1件

274
デフォルトの名無しさん[sage]   投稿日:2015/05/03 03:06:08  ID:KzoPxOzk.net(3)
>272
わかってないな
警告メッセージが抜粋で、全体を見ればどこが悪いか自明だって
言ってるんだよ

$ perl -we 'my($IN)=*IN;'
Name "main::IN" used only once: possible typo at -e line 1.
コメント1件

275
デフォルトの名無しさん[sage]   投稿日:2015/05/03 03:07:43  ID:KzoPxOzk.net(3)
あと、ウォーニングね
コメント1件

276
デフォルトの名無しさん[sage]   投稿日:2015/05/03 03:15:11  ID:cXs5Mf40.net(2)
>273
rubyが好きならrubyスレに行け

>269
「File::Copyのmoveの使い方が間違ってた」
と真っ当な、perlの自己レスが付いてんのに、
とんちんかんなレスをすんな。

>274
なんで、
>INがファイルハンドルじゃないのでは?
なんて突飛な発想になるんだ?
そのワンライナーをレスれるくせに。

>275
そのレスすんなら、更に訂正してやろうか?
ヲーニングだよ。

277
デフォルトの名無しさん[sage]   投稿日:2015/05/03 13:40:03  ID:NDCsHZKI.net
>270
そう言ったつもり。ハッシュを実装するための質問ならむしろC言語スレに行くといいよ。
perlの実装についての質問なら、質問するよりソースを読んだほうが早くて正確。うそは言わない。

278
デフォルトの名無しさん[]   投稿日:2015/05/03 17:49:26  ID:rnYVSqga.net(2)
<div class="t_h">1:<span style="font-size: x-small;"> <span style="color: GREEN;">風吹けば名無し@\(^o^)/</span>
<span style="color: GRAY;"> 2015/02/17(土) 13:25:15.51 <i class="specified" style="color: #1628f0; background-color: #dddddd; font-weight: bold;">ID:ffaeaf.net</i>
</span></span></div>

これらのタグが沢山ならんでいるのですが
<span style="font-size: x-small;"></span>タグを消したいです

どうやってこれだけをうまく消せばいいのでしょうか?
教えてください

279
デフォルトの名無しさん[]   投稿日:2015/05/03 17:52:33  ID:rnYVSqga.net(2)
すみません自己解決しました

280
262[sage]   投稿日:2015/05/04 03:09:05  ID:W+jyRLQV.net
できた

281
デフォルトの名無しさん[sage]   投稿日:2015/05/04 09:10:48  ID:q3PB8X63.net
AUTOLOAD eval require import、だろ?

282
デフォルトの名無しさん[sage]   投稿日:2015/05/08 07:29:51  ID:1J2HFFyn.net
ここ一ヶ月ほどPerlばっかやってたら頭がパーになったのを実感できる
新規でcを作り始めたらイライラする上、発想が貧弱になってやりかたが思いつかなくなった。

283
デフォルトの名無しさん[sage]   投稿日:2015/05/11 00:41:36  ID:XZpFHT1X.net
C言語はCPUの命令を隠蔽できてもメモリーの扱いまでは隠蔽できないからねぇ。
しかもデータ型が限られてて文字列すらライブラリ頼みだ。

284
デフォルトの名無しさん[sage]   投稿日:2015/05/11 06:13:37  ID:1M4Z8WO8.net
限られてると言うか型はどうでもええんやけど、
長さが自動可変長じゃないのと、perlだと全部ハッシュが片付けてくれてたんで、その二つが根本的に設計を直撃する。
まぁ自分本位の怠惰な事情なんだろうけど。
ビットいじりもイライラするし。しかもいい発想出てこないし。
最近perlやったもんだからなんでもポインタリンク主義で解決したがるようになってるし。

まぁ全く違う言語やな…やるべきことも求められてることも。

285
デフォルトの名無しさん[sage]   投稿日:2015/05/12 21:05:05  ID:5u+T/3/k.net
でもCの後継はC++でもなくJavaでもなくPerlだと思う。プリミティブなデータ型「も」
扱えたならC言語を置き換えられるのになあ。

286
デフォルトの名無しさん[sage]   投稿日:2015/05/12 21:12:49  ID:Nft3ZZ/H.net
Perlはないよw
この言語特殊すぎるから。
何が特殊かというとリストの存在。
このせいで他の言語との相互運用が難しくなってしまっている。

287
デフォルトの名無しさん[sage]   投稿日:2015/05/12 21:36:27  ID:Jpq+T55S.net
俺はCとPerlは真逆だと思ってたが・・・

288
デフォルトの名無しさん[sage]   投稿日:2015/05/12 23:07:05  ID:0UY5oEQ6.net
Cの後継とは思わんが、ソケットなど、C言語でプログラムを組む場合と
同様に使えるものが用意されてるので、置き換えられる場合はあるね
ただ、Cの構造体を pack/unpack で扱うのはちょっとやりづらい

289
デフォルトの名無しさん[sage]   投稿日:2015/05/12 23:15:22  ID:itMmLqyr.net(2)
> ソケットなど、C言語でプログラムを組む場合
> 同様に使えるものが用意されてるので

それはどの言語にもあるなw

290
デフォルトの名無しさん[sage]   投稿日:2015/05/12 23:17:15  ID:itMmLqyr.net(2)
C言語に一番近いスクリプト言語は
PHP(からオブジェクト指向部分を抜いたもの)
だと思うけどな。strlenとかあるし。

291
デフォルトの名無しさん[sage]   投稿日:2015/05/13 15:50:29  ID:AQKm/Bi2.net
ちょっと質問っつーか確認なんだけど、

NAME: {    #NAMEはなんでもないただのブロック
 foreach my $ (){
  foreach my $ (){
   last NAME;  #※ここ
  }
 }
 foreach my $ (){
  foreach my $ (){
   last NAME;  #※ここ
  }
 }
}

処理の途中でこうゆう風に一気にNAMEブロック脱出しても原始的な言語みたいに変な問題おきないよな?
例えば、古いベーシック系で起きるみたいな、内部のどこかで一部制御の現在位置の混乱みたいな感じの問題。

いや、適切に全ブロックとループが終了してて、NAMEから脱出できてればそれでいいんだ。

292
デフォルトの名無しさん[sage]   投稿日:2015/05/13 20:04:42  ID:eNOTZ+er.net
問題無い

293
デフォルトの名無しさん[sage]   投稿日:2015/05/13 22:16:49  ID:NgVHOpPE.net
perlは配列周りを綺麗に整理してほしい。
phpなみにすっきりまとめてくれ。
コメント1件

294
デフォルトの名無しさん[sage]   投稿日:2015/05/15 01:22:42  ID:moFEFGKE.net
>293
どこが気にいらないのか?

ま、配列じゃなくてリストなんだが。

295
デフォルトの名無しさん[sage]   投稿日:2015/05/20 01:32:05  ID:EkW2PCYt.net(6)
perl 5.16.1
Windows7

#-------------
# srand を100回ほど動かしながら乱数を5個づつ生成していく。

foreach my $srand (0..99){
srand $srand;
print "srand:$srand\n";

my @print = map{ int(rand(100)) } 0..4;
foreach my $p (@print){
print $p . ", ";
}
print "\n\n";
}
#---------------

srand直後の最初のrandが 0 ばっかになるんだが…
乱数やないやん。
みんなどう対処してるの?
コメント1件

296
デフォルトの名無しさん[sage]   投稿日:2015/05/20 05:18:09  ID:+vwzLual.net(3)
実際に動かしたコードと質問に使ってるコードが違うと思うが
そこは置いといて。
srand(値) は、明示的に同じ乱数を使いたい時に使うもの。
srand() は、明示的に違う乱数を使いたい時に使うもの。

$ perl -le 'srand() ; print int rand 42'
27
$ perl -le 'srand() ; print int rand 42'
21
$ perl -le 'srand() ; print int rand 42'
11
$ perl -le 'srand(42) ; print int rand 42'
31
$ perl -le 'srand(42) ; print int rand 42'
31

そのコードは、
「複数回実行しても同じ結果になる様に組んでますよ」
ってコード
$ diff <( perl CODE.pl) <( perl CODE.pl)
して確認してみりゃいい

297
デフォルトの名無しさん[sage]   投稿日:2015/05/20 05:26:24  ID:EkW2PCYt.net(6)
いやアルゴリズムの名前は忘れたけど、
win98の頃は二回乱数を捨てなければならなかった。
unix系では大丈夫。
そうゆう質問よ
コメント1件

298
デフォルトの名無しさん[sage]   投稿日:2015/05/20 05:30:55  ID:EkW2PCYt.net(6)
ええと、補足すると、
srandは明示的に同じ乱数にするのには向いてなくて、
Perlのバージョンにもよるけど、やや古いperlはOS依存になってて、
新しいのでもバージョンによって挙動が違ってて、
それの対処をどうしてるの?
んで、俺が書いた環境だと欠陥じゃない?って感じの質問。

299
デフォルトの名無しさん[sage]   投稿日:2015/05/20 05:34:22  ID:EkW2PCYt.net(6)
srandが変わっても、乱数が同じになるって意味ね

300
デフォルトの名無しさん[sage]   投稿日:2015/05/20 05:45:49  ID:+vwzLual.net(3)
質問の主旨が変ってるぞ?
「0」になったのが問題じゃないのか?
そのコードだと、0に複数回なる可能性が無くはないが、
Windowsだろうと、凄く少ないと判断せざるを得なかった。


>297,294
同じ結果にならないコードが、同じ結果を吐くなら
問題だけど、同じにするコードを書いてんだから、

$ diff <( perl CODE.pl) <( perl CODE.pl)
これ100回回して同じじゃなければ問題
バグ報告しろ。

301
デフォルトの名無しさん[sage]   投稿日:2015/05/20 05:56:32  ID:EkW2PCYt.net(6)
全部0だぞ
コメント1件

302
デフォルトの名無しさん[sage]   投稿日:2015/05/20 05:57:01  ID:EkW2PCYt.net(6)
なくないと言うか、0とかになって乱数を捨てるのは有名な話しだと思ってた

303
デフォルトの名無しさん[sage]   投稿日:2015/05/20 05:59:17  ID:jDYIVmVy.net
>295
>乱数やないやん。
この時点で、どう多レスで弁解しようが、理解してないのまるわかり

304
デフォルトの名無しさん[sage]   投稿日:2015/05/20 06:02:55  ID:+vwzLual.net(3)
>301
全部0なら、バグ報告しなよ。
windowsだろうと有り得ない挙動だから。

305
デフォルトの名無しさん[sage]   投稿日:2015/05/20 06:16:43  ID:QJ/TKUao.net(4)
そうゆうアルゴリズムがあってそれはそれで有名なんだよ。
正直その絡みはどうでもいいんで、普通はどうするのか知ってる人お願いします。

306
デフォルトの名無しさん[sage]   投稿日:2015/05/20 06:17:19  ID:QJ/TKUao.net(4)
普通はと言うのはもちろん環境についてです

307
デフォルトの名無しさん[sage]   投稿日:2015/05/20 06:18:59  ID:QJ/TKUao.net(4)
昔、そのアルゴリズムと同じ乱数の関数を書いて2ちゃんに投稿したことがあって、
しょうがないからそれ検索してるけど見つからない。

308
デフォルトの名無しさん[sage]   投稿日:2015/05/20 07:04:44  ID:QJ/TKUao.net(4)
2ちゃんに書いたのは見つからんかったけど、過去のテストが出てきたぜ。

13年前の俺が言うには、OSに加えてPerlバージョン、さらにPerlの種類で乱数の挙動が変わるらしい。
あとアルゴリズム名分かった。ActivePerlは線形合同法。上に書いた症状が発生する。
これは二回値を捨てる必要があるっぽい。と言うかwin98と変わってなかった。

あと、srandが乱数が同じ物になるように統一されたのは けっこう前みたいなことを書いちまったけど、5.20.0からでつい最近らしかった。
それ以前はlibc依存。と言うことでPHPやrubyでも環境を合わせれば同じ症状が出るんじゃないかしら。

まぁ俺が聞きたいこととは違う話しになったが…

309
デフォルトの名無しさん[sage]   投稿日:2015/05/20 09:27:09  ID:MSIXrSmQ.net(2)

310
デフォルトの名無しさん[sage]   投稿日:2015/05/20 09:37:15  ID:MSIXrSmQ.net(2)
とまあこうゆうことなんだ。

311
デフォルトの名無しさん[sage]   投稿日:2015/05/20 11:36:45  ID:nU7YL/JRG
ランダムシードには出鱈目な値を使うか、省略するのが基本。
連番使うとか、頭がおかしい。

312
デフォルトの名無しさん[]   投稿日:2015/05/26 00:20:05  ID:lBi0G/Bn.net
PerlでJunitやPHPUnitのような使い勝手のテスティングツールって存在しますか?
コメント1件

313
デフォルトの名無しさん[]   投稿日:2015/05/28 02:17:35  ID:QsWIpiyLs(2)
10年前は当たり前のように使ってたサブルーチンの配列を逐次参照する方法が思い出せません。
型グロブを使った記憶があるのですが、どうにも思い出せません。
C言語で言う「関数のポインター配列」です。

例えば、「f1」〜「f5」と5つのルーチンをリスト(配列)化し、
ループ文で順番に逐次実行する方法です。

C言語版を記しておきます。

#include <stdio.h>
#define TASKS 5
void f1( void ){ puts( "1" ); }
void f2( void ){ puts( "2" ); }
void f3( void ){ puts( "3" ); }
void f4( void ){ puts( "4" ); }
void f5( void ){ puts( "5" ); }
int main( void ){
  static void (*tasks[TASKS])( void ) = { f1, f2, f3, f4, f5 };
  int i = 0;
  for( ; i < TASKS; i++ ) tasks[i]();
  return 0;
}

Perlでの型グロブを用いた実装方法をお分かりの方、お教え下さい。
お願いします。
コメント1件

314
デフォルトの名無しさん[sage]   投稿日:2015/05/28 05:48:04  ID:CrDWBWfb3(2)
>313
標準的に書くとこんな感じ。
あと、こっち(2ch.sc)は人が居ない。

sub f1 { print "1\n" }
sub f2 { print "2\n" }
sub f3 { print "3\n" }

my @tasks = (\&f1, \&f2, \&f3);
foreach my $task (@tasks){
$task->();
}
コメント1件

315
デフォルトの名無しさん[sage]   投稿日:2015/05/28 12:02:30  ID:dLzzlyDA.net
5.22まだ?

316
313[sage]   投稿日:2015/05/28 15:51:14  ID:QsWIpiyLs(2)
>314
あっ!ありがとうございます。
色々試してたんですが…これでしたか!>「->」
完全に記憶から抜けてました(^^;)

> あと、こっち(2ch.sc)は人が居ない。
どこにいらっしゃるのですか?
コメント1件

317
デフォルトの名無しさん[sage]   投稿日:2015/05/28 16:24:34  ID:CrDWBWfb3(2)
>316
2ch.net

別板リンク(tech)

318
デフォルトの名無しさん[sage]   投稿日:2015/05/30 10:15:52  ID:NSTSE0WA.net
>312
まず、Test::Tutorialを読む。殆どの場合Test::Moreで十分。
本当にxUnitみたいなものが欲しい場合はTest::Clsas

319
デフォルトの名無しさん[sage]   投稿日:2015/06/10 04:04:07  ID:IQPOUpH4.net(4)
windowsです。
基本的にUTF8で動かしてますが、コードに関わらず正規表現を1バイト単位で動かしたい時があります。

たとえば、
my $val = '文字列';
while( $val =~ s/^(.)// ){
}

これが先頭から1バイトづつshiftされてるとか、そうゆうようなことがしたいです。
この文字コードだとこう、とか変更が起きるとめんどうの元で、いつでも安心して使える記述が良いです。

320
デフォルトの名無しさん[sage]   投稿日:2015/06/10 04:38:44  ID:IQPOUpH4.net(4)
たぶん解決しました。
間違ってたら教えてください。

my $val = '文字列';
{
 use bytes;
 while( $val =~ s/^(.)// ){
 }
}

321
デフォルトの名無しさん[sage]   投稿日:2015/06/10 05:07:59  ID:IQPOUpH4.net(4)
何度もすみません。utf8フラグの意味がいまいち分かってないのですが、
例えば以下の記述をutf8で動かしたとき、


use strict;
use warnings;
use utf8;
use Encode;

my $val = '文字列';
my $re;
{
 use bytes;
 while( $val =~ s/^(.)// ){
  $re .= $1
 }
}
$re; #ユニコードが関わってなければ元通りに復帰してる自信あるが…

これはutf8フラグと言うのが付いてるんですか?付いてないんですか?
コメント1件

322
デフォルトの名無しさん[sage]   投稿日:2015/06/10 09:15:15  ID:KBe3FxtO.net
>321
print utf8::is_utf8("$re") ? "utf8 flag\n" : "not flagged\n";
自分で確認

323
デフォルトの名無しさん[sage]   投稿日:2015/06/10 12:42:57  ID:IQPOUpH4.net(4)
うむ分かった。やっぱこの辺はCで書いて呼び出すことにした。
バグの元やで。あと来年あたり全部忘れて意味分からなくなってそう。

324
デフォルトの名無しさん[sage]   投稿日:2015/06/10 14:30:16  ID:M6KJWGtt.net
また君かあ

325
デフォルトの名無しさん[sage]   投稿日:2015/06/20 18:49:23  ID:kIXF5uCD.net(2)
1bitづつのブーリアンが欲しいのですがどうすればいいでしょうか?
コンテキストとやら(?)で表面的な動作をしたいわけではなくて、値として扱いたいです。

具体的には 1億*1億 くらい並べたオンオフの表が必要です。
(実際には、1ビットでも1PB以上メモリを食うので、ない物を正しくあると見せかける技術も使います)。
コメント3件

326
デフォルトの名無しさん[sage]   投稿日:2015/06/20 19:03:22  ID:e4r9zs3/.net
>325
http://perldoc.jp/docs/perl/5.14.1/perlfaq4.pod#How32do32I32manipulate32arrays32of32bits63

327
デフォルトの名無しさん[sage]   投稿日:2015/06/20 20:00:17  ID:kIXF5uCD.net(2)
ありがとうございます。
初心者なので確認方法(抽象化を伴わない値の出力方法)がよく分からないのですが、おそらく今の所意図したように動作してると思います。

また、これらを扱い際は常にこのような特別な書きかたになるのでしょうか?
例えばですが、値の自動変換や文字の処理、位置管理、その他は不要なので全ての内部フラグは落とし、演算はメモリ位置になるなど。
なるべくごくごく普通な処理。

普通とか特別は>325の文意から汲んで頂けると助かります。

328
デフォルトの名無しさん[sage]   投稿日:2015/06/21 13:41:35  ID:7rMevX/A.net
一体何のための課題なのか気になるな。

質問の答に関しては、俺だったら
やりたいようにやるだけの話でどうでもいいが、
1ビット単位で扱って1PBもメモリ食うなら、
Perlの書き方以前にPerlを選択することをやめるだろう。

1PBもデータが有るならその処理時間だって重要だろうし
Perlで省メモリとか期待できない。

表自体が広いだけでデータ量自体が少ないならいいけど。

(プログラミングの)初心者だから知ってる言語で許してくれよっていう
考えで適当な道具を使うと本職(学生かもしれんが)のプロの仕事にも
影響出てくるぞ。

本職ではないプログラミングの仕事でも、それを本職のプロの仕事の
一環としてやるなら、初心者だからという甘えは通用しない。

>325の内容にとっての「普通」というのは、
C言語と圧縮とアルゴリズムを駆使する世界だからな。

329
デフォルトの名無しさん[sage]   投稿日:2015/06/21 17:15:14  ID:3oiA9SUT.net
メモリとその値に対する一般的な扱いはPerlでは無理だよ
それを普通と言うなら普通の言語を使わないと

330
デフォルトの名無しさん[sage]   投稿日:2015/06/23 23:26:09  ID:uWCupYQ4.net
ではせめてメモリの取りかたを教えて貰えないでしょうか
dllかなにかで実装します
コメント1件

331
デフォルトの名無しさん[sage]   投稿日:2015/06/24 20:40:18  ID:OWJG3RlT.net
>330
Perl XSで検索。

332
デフォルトの名無しさん[sage]   投稿日:2015/06/29 17:10:35  ID:yUlXNQEP.net
誰か型グロブについて丁寧で親切に解説してくれー
大雑把に質問は二つ

一つ目
*aaa;
全てのグローバルなaaaを扱うとかなんとからしいけど、なにに使えばいいの?


二つ目
あるモジュールを使ったら、よく分からない物が返ってきたんで、
いろいろ出力とかして確かめると型グロブとやららしい。
なんだこれ?どうすりゃいいんだ?って思ってたらどうやらそのままファイルハンドルとして使えば機能するとかなんとか。
じゃあ普通にファイルハンドル返せよ
コメント1件

333
デフォルトの名無しさん[sage]   投稿日:2015/06/29 19:52:24  ID:2OqWgX4Q.net
>あるモジュールを使ったら、よく分からない物が返ってきたんで
どのモジュールをどう使ったの?

334
デフォルトの名無しさん[sage]   投稿日:2015/06/30 23:38:06  ID:pIdYzRhMV
ファイルハンドルにはシジルがないので引数、戻り値として使えなかったんよ

335
デフォルトの名無しさん[sage]   投稿日:2015/07/01 12:49:33  ID:58p68Ksc.net
>332
ファイルハンドルは、
今はクラスオブジェクトだけど、
大昔は違ったと思う。

そのあたりの歴史的事情なのでは?

336
デフォルトの名無しさん[sage]   投稿日:2015/07/03 14:14:59  ID:zArdkwEu.net(2)
sub name (&@){}
の宣言で
name {...} @array;
と呼べるらしいのですが、

name(){...}
みたいに書きたい時があるのですができないでしょうか。
ifとかwhileみたいに。

337
デフォルトの名無しさん[sage]   投稿日:2015/07/03 14:51:20  ID:zArdkwEu.net(2)
いろいろやってみましたが、
sub name($&){}
と宣言することで
name $val, sub{};
と書けましたがこれはダサいです。

338
デフォルトの名無しさん[sage]   投稿日:2015/07/03 21:26:07  ID:H1Uvo7jA.net
ダサさは変らんが、
sub name(¥@&)

339
デフォルトの名無しさん[sage]   投稿日:2015/07/22 06:36:20  ID:AXEGyECQ.net(4)
古いperlではこんなような記述がコンパイルされてたのですが、
どうも最近はコンパイルされないようです。

{
my %vit;
sub fnc (\@){
my $ref = shift;
$vit{"$ref"}++;
}
}

なにがやりたいかと言うと、通常のサブルーチンを簡易的なクロージャのように使いたいのです。
fncをサブルーチンのリファレンスにすれば解決するのだろうと思いますが、それだとプロトタイプが使えません。(呼び出し方が気に入らなくなります)。

おそらくは、関数を別ファイルにし、それをスコープとして扱うと意図した通りに動くんだろうと思いますが、
簡単にぱっと書きたいときに、なんでそんなファイルをいちいち用意しなければならないのか、気に入りません。

なにかいい方法を思いついたらお願いします。

340
デフォルトの名無しさん[sage]   投稿日:2015/07/22 11:06:40  ID:4RCoKAal.net
バージョンはいくつでどういうエラーメッセージ吐いてるの?

341
デフォルトの名無しさん[sage]   投稿日:2015/07/22 11:17:17  ID:AXEGyECQ.net(4)
5.16.1
Illegal declaration of subroutine main::fnc

342
328[sage]   投稿日:2015/07/22 12:08:18  ID:AXEGyECQ.net(4)
ごめん、エラーじゃなかった。
ほんとにごめん。

343
デフォルトの名無しさん[sage]   投稿日:2015/07/22 22:12:52  ID:+pCybLMV.net(2)
質問させてください

open (OUTFILE, ”>”, ”/tmp/test.txt”);
print OUTFILE ”output_test\n”;

上記のような記述で外部ファイルに出力をしたい場合、実際に書き込まれるタイミングはprint文の箇所ではないのでしょうか?
あとでまとめて出力されるといったことはあるのでしょうか?

344
デフォルトの名無しさん[sage]   投稿日:2015/07/22 22:25:33  ID:AXEGyECQ.net(4)

345
デフォルトの名無しさん[sage]   投稿日:2015/07/22 23:09:32  ID:+pCybLMV.net(2)
>344
早急なご回答ありがとうございます
まさしく私が知りたかったことそのものでした
非常に助かりました

346
デフォルトの名無しさん[]   投稿日:2015/07/31 22:23:44  ID:C/XN/G20.net
フォームから送信されたデータを&jcode'convert (\$form_data,"euc");で
変換すると半角カタカナの部分だけ文字化けしてしまうけど
&jcode'convert (\$form_data,"euc");をコメント文にしたら
文字化けしなくなりました。
これはどういうことですか?
&jcode'convert (\$form_data,"euc");は使わないほうがいいんでしょうか?
コメント1件

347
デフォルトの名無しさん[sage]   投稿日:2015/08/01 05:55:46  ID:fbUoNrmE.net
今の時代はPerl標準のEncodeモジュールを使う
jcodeは使いません。

348
デフォルトの名無しさん[sage]   投稿日:2015/08/01 10:36:34  ID:Y7CrlKgG.net
フォームってなんの話しだよ。

> &jcode'convert
20年前のPerl4みたいなサブルーチンの呼び出しかた
コメント1件

349
デフォルトの名無しさん[sage]   投稿日:2015/08/01 15:15:11  ID:LRIfaa64.net
今時eucて。
コメント1件

350
デフォルトの名無しさん[]   投稿日:2015/08/05 21:38:04  ID:X8gF+qpc.net
>348
えっフォームも知らないの?
テキストボックスやチェックボックスやテキストエリアなどを総称して
フォームって言うんだよ

>349
Perl5.0
とかだとエンコードpm使えないし
まだまだshift-jisやeucは現役やで
この掲示板だってだってShift-jisだろ

351
デフォルトの名無しさん[sage]   投稿日:2015/08/05 22:12:19  ID:HdJkl2eK.net
Perl5.0はもう使われていない。

352
デフォルトの名無しさん[sage]   投稿日:2015/08/05 22:21:33  ID:uhvt+B/O.net
Perl5は使っちゃダメだよ。ここでその話もしないほうがいいレベル。
あとフォームはperlと関係ないよ。
コメント1件

353
デフォルトの名無しさん[sage]   投稿日:2015/08/06 00:16:35  ID:mpzuHEeG.net(2)
テキスト処理はテンプレで書かれてるのに。
触るべきじゃないか

354
デフォルトの名無しさん[]   投稿日:2015/08/06 00:29:58  ID:iPVP1S8W.net
板の掟としてウェブは専門の板でやれってことになってる。

355
デフォルトの名無しさん[sage]   投稿日:2015/08/06 01:02:05  ID:mpzuHEeG.net(2)
HTMLのフォームとも書かれてないが。
win32APIかもしれんし、Tkかもしれない。そもそも実行環境OS書かれてない。
ま、ソースのコードも不明で改行コードもないが。
関わらんほうが良いだろう

356
デフォルトの名無しさん[sage]   投稿日:2015/08/06 07:13:22  ID:AHIdLQWD.net
>352
Perl5≠Perl5.0
ケッ

357
デフォルトの名無しさん[]   投稿日:2015/08/06 09:40:47  ID:mQCtqpjA.net
馬鹿丸出しなツッコミにみんな釣られすぎだろう。

>346
多分もう読んでないと思うけど、ひょっとして
Perl 4 時代のスクリプトを使ってるの?
jcode'convert という表記はもう理解できる人も少ないから
jcode::convert に書き改めた方がいい。
文字化けの方は、変換前のエンコーディングを明示的に指定しなさい。
もっと大幅に変更する必要が生じたら現代的な書き方を勉強して
スクリプトを utf8 で書き、Encode.pm を使いなさい。
全角半角変換とかが必要なら Unicode::Japanese で出来るよ。

358
デフォルトの名無しさん[sage]   投稿日:2015/08/06 15:27:27  ID:4IBTADIH.net(3)
バイナリ名は5
5.0は便宜名称。呼び出されん。
ってこれでさえ20年以上前のバージョンか。いまどきそんな扱い知ってる人もいないか

359
デフォルトの名無しさん[sage]   投稿日:2015/08/06 19:23:19  ID:A31S3kLv.net
バイナリ名、、、ねぇ。

処理系の名称がPerl5
実装がperl 5.00Xとかperldoc perlhistに書かれてる書き方。
もしくは、perldoc versionで明記されてる書き方。
Perl5.0なんて便宜名称で呼ばれた事なんざ一度もない。

360
デフォルトの名無しさん[sage]   投稿日:2015/08/06 19:33:25  ID:4IBTADIH.net(3)
あっそ
じゃあそれで使ってればそれでいいじゃないか

361
デフォルトの名無しさん[sage]   投稿日:2015/08/06 19:35:21  ID:4IBTADIH.net(3)
話の流れからして、Perl5で指定しない限り、決して動く事のないバイナリなんだがな

362
デフォルトの名無しさん[]   投稿日:2015/08/23 22:58:46  ID:Y4Dx2VDC.net
教えてください。。
perl(LWPかMechanize)を使って画像をダウンロードしようとしているのですが、
対象のURLがサーバー側でステータスコード404を吐くようにされています。
画像自体はちゃんと存在していて、安易にダウンローダーなどでダウンロードされないような
処理をされていると思うのですが、404でもステータスコードを無視して
ダウンロードするような処理は作れませんか?
コメント2件

363
デフォルトの名無しさん[sage]   投稿日:2015/08/23 23:58:48  ID:nc+24S0l.net
>362
LWP::UserAgent
コメント1件

364
デフォルトの名無しさん[]   投稿日:2015/08/24 08:59:09  ID:w9FQ7B6l.net(3)
>363
すみません、それ試してました。
コメント1件

365
デフォルトの名無しさん[sage]   投稿日:2015/08/24 17:53:36  ID:BAr9V/Jb.net(2)
>364
my $response = $ua->get('http://example.com/example.jpg');
して
$response->contentをファイルに出力すればいいだけではないのかな。
コメント1件

366
デフォルトの名無しさん[]   投稿日:2015/08/24 19:07:50  ID:w9FQ7B6l.net(3)
>365
試してみたのですが、LWPだと0byteファイルしかできません。
Mechanizeのほうは0byteファイルすら生成されません。。
コメント1件

367
デフォルトの名無しさん[sage]   投稿日:2015/08/24 19:41:34  ID:nHOQqKXp.net
>362
普通404はエラーなので無視してもデータは返ってこない
たぶんrefererで判定してると思うので、それを設定すればいいと思う
コメント1件

368
デフォルトの名無しさん[sage]   投稿日:2015/08/24 19:43:59  ID:NZbDfDwI.net
一般的に、404だからって
データが取れないなんてことはない。

そんな仕様だと、手が込んだ404エラーページを
表示するブラウザさえ作れなくなってしまう。
コメント1件

369
デフォルトの名無しさん[]   投稿日:2015/08/24 20:05:56  ID:w9FQ7B6l.net(3)
>367
対象画像はサイト内では<img>タグにて開かれており、
レスポンスヘッダをみると、コードは404なのですが、
画像としてはimgタグでちゃんと開かれるのです。
もちろん通常アクセス(リファラ込)でも404ですし、
Perl経由でリファラをセットしても404です。
>368
仰るとおりで、404ですが、ブラウザからでしたらデータはとれているんです。
でも、Perl経由でその画像を取得しようとすると、モジュールの仕様からか、
404の判定が優先されてしまい、どうしても取得できません。。
コメント1件

370
デフォルトの名無しさん[sage]   投稿日:2015/08/24 20:33:32  ID:nAxI1L2Z.net
agentもブラウザと同様なもの設定してみた?

371
デフォルトの名無しさん[sage]   投稿日:2015/08/24 21:25:16  ID:Wm5DDpbg.net
&amp;jcode'convert (\$form_data,"euc","z");
にしたら文字化けしなくなりました。

372
デフォルトの名無しさん[sage]   投稿日:2015/08/24 21:34:27  ID:BAr9V/Jb.net(2)
>366 >369
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $res = $ua->get('http://www.google.co.jp/to404.jpg');
SaveAs($res->content, '404file.test');

sub SaveAs {
my $content = shift;
my $filename = shift;
my $fh;
open($fh, '>'.$filename);
binmode($fh);
print $fh $content;
close($fh);
}

試しにこんな風にしたけど404でも問題なくデータは取れてるけども、
取れなかったらAccept-Language、User-Agent、Refererとか、
ブラウザと異なる部分が無いかを確かめるぐらいしかないんじゃないかなあ。
コメント1件

373
デフォルトの名無しさん[sage]   投稿日:2015/08/25 01:06:45  ID:bK3l+CW7.net
LWP::Simple::Cookies

まずimgタグがあるページにアクセスして、cookie保存して、それからjpg取得してみ
コメント1件

374
デフォルトの名無しさん[sage]   投稿日:2015/08/25 19:23:24  ID:19KHv/f4.net
>372
>373
大変申し訳ございません、、結論から言うとできました。
というのも当初とある有料レンサバでやっていたのですが、
そこのサーバー側の仕様でどうにもこうにもならなかったようでして、
別サーバーで試しにやってみたところあっけなく、問題なく取得できました。。
Perlのせいにしていた自分に反省します。あと皆さま、本当にご丁寧にありがとうございました。
皆さんへの御礼にTポイント貯まってたので、かわりにちょっとだけ寄付させていただきましたm(_ _)m
http://i.imgur.com/bX7q9ed.jpg

375
デフォルトの名無しさん[sage]   投稿日:2015/08/25 19:29:37  ID:pfa9oRBx.net
俺に寄付しろ

376
デフォルトの名無しさん[sage]   投稿日:2015/08/26 12:19:13  ID:g32nt69a.net(2)
# 以下の記述があからさまに遅いです。(Perlのループ自体が遅いです)
# なにか速くなる方法のご提案があればよろしくお願いします。
# 普段、楽な記述を優先させているため、速くするための妥当な記述がよくわかりません。(何をやってもどうでもいいから速くするならいろいろ手はあるのですが)
# あとおそらく意図した通りに動いてるとは思いますが、これはあからさまに違うだろってのがもしあれば、お願いします。
# なお、pack_widget_all は何度も呼び出されるほか、一度の呼び出しでの出力量が2万行前後です。
#--------------------------------------------
open G_OUT, ">", "g_out.txt";
sub out_print{
while(my $line = shift @::out){
print G_OUT $line . "\n"; #デバッグ用。あまりに大量送信されるので不要な時は消しておく。
print $line . "\n";
}
}

{
#▼%::widgetが保持してるものを成型して送信
my %back; #前回と同じデータを再出力しないための記憶 (受信側が、同じ物と違う物の区別を付けずに全く同じ処理をやり直してしまうため)。
sub pack_widget_all {
foreach my $name (keys %::widget){
foreach my $name2 (keys %{ $::widget{$name}->[1] }){
my $back = join ',', @{ $::widget{$name}->[1]->{$name2} };
next if($back{$name}->{$name2} eq $back); #; 前回と同じ物は再出力しない
$back{$name}->{$name2} = $back;
push @::out, (join ',', $name2, $::widget{$name}->[0], $back);
out_print; #受信側の都合上、小刻みに何度も出力したほうが速かった。perl側やこの質問には関係ない
}
}
push @::out, "pack_widget";
out_print;
}
}
コメント3件

377
デフォルトの名無しさん[sage]   投稿日:2015/08/26 15:57:28  ID:nL2sda9W.net(4)
>376
クソコードだな、

%::widget とか @::out ってなんだよw

そんな書き方初めて見たわw
コメント1件

378
デフォルトの名無しさん[sage]   投稿日:2015/08/26 16:07:53  ID:nL2sda9W.net(4)
>376
えとな、まず %:: とか $:: とか @:: な
普通こんな書き方はしないから、:: を消せ。
もちろん単純に消すんじゃないぞ。消して動くようにしろ。

あとな、データ構造の説明をしろ。
特に、%widgetと%backの中身が何か。

あと意味が無いout_print関数はなくせ。

とりあえずそこをやって再提出。

379
デフォルトの名無しさん[sage]   投稿日:2015/08/26 16:16:50  ID:nL2sda9W.net(4)
読む気がしないから、間違ってるかもしれんが、
もしかして、これ「全ての値が同じ場合」とかやってるな?

だから前回と同じものを再出力しないだけなのに、
%backってハッシュになって、いかにも遅そうな
ぐるぐるループしてるわけか。

んなもん、joinして一つの文字列にすれば良い。

my $values = join("\0", values @values)
$back{$values} = 1
とかやれば、前回と同じチェックは単純なチェックで終わるだろ。

そのロジックでいいのかっていうか、間違ってる気がするがね。
前回と全く同じデータが出た場合どうするんだってな。
コメント1件

380
デフォルトの名無しさん[sage]   投稿日:2015/08/26 16:34:24  ID:g32nt69a.net(2)
our 使えばそのまま動くけど、
ベンチが遅くなったので無理でごわすです。
(たしか最速が名前付きのグローバル変数だったと思うけど、カレント空間名は一度しか参照されないのでループによる遅延はないはず。この辺記憶あいまい)

>379 すみませんが違うです…
それはバグ出るです
コメント2件

381
デフォルトの名無しさん[sage]   投稿日:2015/08/26 19:11:52  ID:rtOTeoRp.net(4)
>380
myは使わないほうがいい。
ベンチは取ってないけど、keysは使わずに、シミュレートしたほうがいいかもしれない $array[n*2]。

もし$::widget{$name}->[1]->{$name2}が指すリファレンスが変わらないことが保証されるならば、
 $back{$address} = $value もまた保証される。
 そうでないのなら、今までのコードと同じでなければならない。

実行環境に最新に近いPerlが保証されるのならば、%backはクロージャでなくとも構わない。が、これで速くなる量はほぼ0だろう。
ourを使わないのは正解。丁寧な形式から乱雑なourに直す必要はない。ただしmod_perlなどコンパイルが自動維持されない場合に限る。
 ちな動作が速い順序 $main::aaa > $::aaa >>>>> ourした$aaa >= localした$aaa > stateした$aaa >> myした$aaa > 宣言なし$aaa

関数外の変更が可能であるならば、どこが変更された可能性があるのかと言う基準で%::widgetの種類を分ける。
 その際、可読性や保守性ではなく変更の可能性がある場所で区分けする。
または、変更が加えられた際、その場でそれを知ることが出来るのが最も望ましい。
 その際、オブジェクト指向を利用しても良いが、クロージャが好きならそれでも構わない。
 ただし、既存の記述の代入は、全て関数の呼び出しに書き換える必要がある。

保守性が失われても良いのなら、pack_widget_allの先頭で最初に一度だけout_printを呼び、pack_widget_all内では直接printを記述する。
 これで@::outの順位性が崩れることはないはず。ただしタイミングも厳格に同期させている場合はだめ。

unix系であればforkする。これは速い。

その関数だけ見た結論としては、関数内の最適化では難しいように思う。
あと保守性と可読性を重視しすぎ、記述に楽をしすぎ、に感じる。
もしかして、なんでも%::widgetにスタックして、あとから自動判別させればいい、と考えてはいないだろうか?
楽をしたり保守性を考えなければ、60秒が5秒に縮まるのもよくあることよ。

あと、出力行数よりも、$nameのと$name2の量比率を。
もし互換性について間違ってても保証はしない。
むしろこうゆうのを考えるマニアがよくいるので、そうゆうのが出て来るまで待て
コメント1件

382
デフォルトの名無しさん[sage]   投稿日:2015/08/26 20:34:24  ID:nL2sda9W.net(4)
>380
> our 使えばそのまま動くけど、
ourじゃなくてmy使えって話だよ。

一般的に外から見えるよりも、
中しか見えないほうが速くなる。
コメント1件

383
デフォルトの名無しさん[sage]   投稿日:2015/08/26 20:52:40  ID:rtOTeoRp.net(4)
それはない

384
デフォルトの名無しさん[sage]   投稿日:2015/08/26 21:47:35  ID:kyRbEfPb.net(2)
こんなもんコードの書き方でいくらでも変わるのに
「それはない」もへったくれもなかろう。
コードも書いてないのに、主張すんのはどっちもどっち。

もちろん以下のコードが正義だと言うつもりも毛頭ない。

use Benchmark qw( timethese cmpthese ) ;
use v5.18;

cmpthese timethese ( undef, {
'my' => sub {my $i ; $i = 1 for 100000 },
'our' => sub { our $i ; $i = 1 for 100000 },
'state' => sub { state $i ; $i = 1 for 100000 },
});
Benchmark: running my, our, state for at least 3 CPU seconds...
my: 4 wallclock secs ( 3.10 usr + -0.01 sys = 3.09 CPU) @ 1697152.43/s (n=5244201)
our: 4 wallclock secs ( 3.07 usr + -0.01 sys = 3.06 CPU) @ 1713787.91/s (n=5244191)
state: 3 wallclock secs ( 3.15 usr + 0.01 sys = 3.16 CPU) @ 1659554.11/s (n=5244191)
Rate state my our
state 1659554/s -- -2% -3%
my 1697152/s 2% -- -1%
our 1713788/s 3% 1% --
コメント1件

385
デフォルトの名無しさん[sage]   投稿日:2015/08/26 22:10:15  ID:rtOTeoRp.net(4)
myとtateとourは書式は似てるけど別物だからそのベンチマークでは意味ないかもね
まあ遅いのはそこじゃないと思うが

386
デフォルトの名無しさん[sage]   投稿日:2015/08/26 22:54:41  ID:kyRbEfPb.net(2)
>意味ない
うん。意味ない。
意味ないけど、少なくともこのコードでは、(ourはアンフェアだけど。)
「my > state」
で、あなたの
>stateした$aaa >> myした$aaa
の主張はなり立たない。

だから、
>「それはない」もへったくれもなかろう。

387
デフォルトの名無しさん[sage]   投稿日:2015/08/26 23:15:23  ID:rtOTeoRp.net(4)
何と戦ってるんだ?
君はずいぶん無意味なコードばかり書いてホルホルしてそうだね。推定だけど。
こっちゃ君に用はないよ

388
デフォルトの名無しさん[sage]   投稿日:2015/08/27 00:46:17  ID:VDg17niR.net
>381
Perlは最適化の際は変数のスコープも直すですか?
冷静に考えてスコープの変更はちょっと出来ないです。(グローバル、レキシカル含めて)

環境はwindowsでPerlはたぶん5.8以上でごわす。実際はほぼ5.20以上だと思うですけど。

>記述に楽をしすぎ、に感じる。
すみません関数の外を直すのは私のやる気にも影響されるです。これ実は一番大事。

$nameと$name2の量は$nameが超大量で$name2がたぶん全部8以下です。
バケットのようなので分けたほうがいいんでしょうね。

>既存の記述の代入は、全て関数の呼び出しに書き換える必要がある。
どのくらい速くなるかは分かりませんが、これやってみるです。
ざっと検索かけたら2000以上出てきたので苦労した挙句にバグりそうな予感が大…
コメント1件

389
デフォルトの名無しさん[sage]   投稿日:2015/08/27 02:13:30  ID:zsRIAfpU.net
指摘された点すら修正しない奴に
レスは付かない。

390
デフォルトの名無しさん[sage]   投稿日:2015/08/27 09:34:05  ID:WH8/GkYNz
データを書き換える度にpack_widget_all()を呼び出してるのだろうけど、
書き換える部分だけ重複するかどうか検査するのが一番楽だな。

391
デフォルトの名無しさん[sage]   投稿日:2015/08/27 12:16:29  ID:EKT+uFsl.net
面白そうだからやってみた。
すでにやったかもしれないけど。というか役にもたたないだろうけど。
use strict;
use warnings;
use Benchmark qw(:all);
$| = 1;
sub NUM (){ 19999 }
my %hash = map{ ($_, 1) } (0..1999);
my @array = map{ ($_, 1) } (0..1999);
my %sub = (
key => sub{ foreach my $k (keys %hash){ $hash{$k} = $hash{$k} } },
sim => sub{ foreach my $n (0..1999){ $array[$n * 2] = $array[$n * 2] } },
Practical => sub{
my @ar = %hash;
foreach my $n (0..(@ar / 2)){ $array[$n * 2] = $array[$n * 2] }
},
);
cmpthese timethese (NUM, \%sub);

Benchmark: timing 19999 iterations of Practical, key, sim...
Practical: 16 wallclock secs (15.77 usr + 0.00 sys = 15.77 CPU) @ 1268.01/s (n=19999)
key: 10 wallclock secs ( 9.45 usr + 0.00 sys = 9.45 CPU) @ 2115.62/s (n=19999)
sim: 6 wallclock secs ( 5.94 usr + 0.00 sys = 5.94 CPU) @ 3365.14/s (n=19999)
Rate Practical key sim
Practical 1268/s -- -40% -62%
key 2116/s 67% -- -37%
sim 3365/s 165% 59% --
結論
ハッシュは使うな
個数が分からない配列も使うな
配列の数をPerlに数えさせるな
以上で昼休み15分消化

392
デフォルトの名無しさん[sage]   投稿日:2015/08/27 20:16:15  ID:H5OCxJPQ.net(2)
use Benchmark qw( timethese cmpthese ) ;
use feature qw( state);
no warnings ;
no strict ;

cmpthese timethese ( undef, {
'foo' => sub { $i = 1 for 1 .. 100 },
'local' => sub { local $i = 1 for 1 .. 100 },
'my' => sub {my $i = 1 for 1 .. 100 },
'our' => sub { our $i = 1 for 1 .. 100},
'state' => sub { state $i = 1 for 1 .. 100},
'main' => sub { $main::i = 1 for 1 .. 100},
'main2' => sub { $::i = 1 for 1 .. 100 },
});

393
デフォルトの名無しさん[sage]   投稿日:2015/08/27 20:17:51  ID:H5OCxJPQ.net(2)
Benchmark: running foo, local, main, main2, my, our, state for at least 3 CPU seconds...
foo: 4 wallclock secs ( 3.17 usr + 0.00 sys = 3.17 CPU) @ 114473.19/s (n=362880)
local: 3 wallclock secs ( 3.12 usr + 0.00 sys = 3.12 CPU) @ 60726.60/s (n=189467)
main: 3 wallclock secs ( 3.10 usr + 0.01 sys = 3.11 CPU) @ 105601.29/s (n=328420)
main2: 3 wallclock secs ( 3.06 usr + 0.00 sys = 3.06 CPU) @ 114251.31/s (n=349609)
my: 2 wallclock secs ( 3.15 usr + 0.01 sys = 3.16 CPU) @ 87341.77/s (n=276000)
our: 3 wallclock secs ( 3.10 usr + 0.01 sys = 3.11 CPU) @ 112414.47/s (n=349609)
state: 4 wallclock secs ( 3.07 usr + 0.00 sys = 3.07 CPU) @ 160466.12/s (n=492631)
Rate local my main our main2 foo state
local 60727/s -- -30% -42% -46% -47% -47% -62%
my 87342/s 44% -- -17% -22% -24% -24% -46%
main 105601/s 74% 21% -- -6% -8% -8% -34%
our 112414/s 85% 29% 6% -- -2% -2% -30%
main2 114251/s 88% 31% 8% 2% -- -0% -29%
foo 114473/s 89% 31% 8% 2% 0% -- -29%
state 160466/s 164% 84% 52% 43% 40% 40% --

394
デフォルトの名無しさん[sage]   投稿日:2015/08/29 00:53:19  ID:g7aWBHc9.net(5)
>388
もういないだろうけど、本当に速くしたいんだったら、最初からそのつもりで設計する
まるでC(≠C++)であるかのように記述するとそれなりに速くなると思うけど、Perl使う意味もなくなる

>Perlは最適化の際は変数のスコープも直すですか?
そこをあとから直したりはしない
作る物を作ってから最適化
グローバルにせよレキシカルにせよ、やるなら最初から全部やり直し

俺の勘ではたいして遅くないと思うんだけど、その記述
どのくらいnextが入るのかは知らんけど、たかが数万行
それで遅かったりハッシュで問題が出るほどならPerlはやめときな

でもそんなことまではしないか、出来ないのだろう。だから現状で満足するのも普通の選択
それに速度主義者はニーモニックで最適化して誰も読めない(解析出来ない)スパゲティになっても遅いと言い始める
時間は0にはならんことよ

395
デフォルトの名無しさん[sage]   投稿日:2015/08/29 08:57:06  ID:WZg0ljDs.net(2)
>384,380
まわりくどい
態々、ベンチ結果貼らんでも
$ perl -Mstrict -Mwarnings -MO=Deparse -le '{ my $i = 1 } ; { our $i = 1 } ; $main::i = 1 ; $::i = 1 ; $i = 1'
実行させれば、回答者の件の行の主張が、どれだけ頓珍漢かは分る

396
デフォルトの名無しさん[sage]   投稿日:2015/08/29 13:25:12  ID:g7aWBHc9.net(5)
変数の話はしてもしょうがないでしょう
それ以前に見事に >377-388,>382 これが全部間違ってるのだが
ここまで連打で知ったかぶって嘘だけ書けるのもすごい


でな、>376がおかしいのは毎回全チェックを入れるところ
どんな使いかたされてるかは知らんけど、widgetが10万行として、
widgetへの代入が2回だけありました、pack_widget_allで全チェックしたのち、その2行分を出力します。
まだ同じことをします。なんて繰り返しだったら目も当てられない。

widgetへの代入をインスタンスの呼び出しで統一すれば何回も同じチェックをする必要はない
これはさすがに作り直すに値するんじゃないかな
いくらめんどうくさがりでも
コメント1件

397
デフォルトの名無しさん[sage]   投稿日:2015/08/29 13:26:28  ID:g7aWBHc9.net(5)
盛大に安価の範囲間違った
許せーー

398
デフォルトの名無しさん[sage]   投稿日:2015/08/29 13:56:12  ID:haT66cVy.net
> これはさすがに作り直すに値するんじゃないかな

だから俺が最初に言ったじゃん。
可読性低いからまずコードを書き直せって。
それやらんやつにレスはしないよ
コメント1件

399
デフォルトの名無しさん[sage]   投稿日:2015/08/29 14:12:32  ID:WZg0ljDs.net(2)
>396
全部突っ込んだらきりがないんだよ
ID: rtOTeoRp のレスは。

400
デフォルトの名無しさん[sage]   投稿日:2015/08/29 14:18:33  ID:g7aWBHc9.net(5)
>398
レスしないならしないでそうしてほしいんだが
あんた今まで全部間違ってるよ

401
デフォルトの名無しさん[sage]   投稿日:2015/08/29 14:20:01  ID:g7aWBHc9.net(5)
レスが増えるのもこうゆう夏休み系が出てきた時だけってのもなんだかな

402
デフォルトの名無しさん[sage]   投稿日:2015/08/30 01:35:04  ID:28DrIhRn.net(2)
setlocale(LC_ALL, "");
printf("%'d\n",123456789);

これをperlで書くとどのようになるでしょうか

403
デフォルトの名無しさん[sage]   投稿日:2015/08/30 12:52:50  ID:FzpJCTFz.net
use POSIX qw(setlocale LC_ALL);
setlocale(LC_ALL,"");
printf("%d\n", 123456789);

404
デフォルトの名無しさん[sage]   投稿日:2015/08/30 15:16:11  ID:28DrIhRn.net(2)
ありがとうございます
なぜか出力が違います

405
デフォルトの名無しさん[sage]   投稿日:2015/08/30 15:30:28  ID:VBiBUr/D.net
my @array = (1234567890.1234);
foreach (@array){
1 while s/^([^\.\D]+)(\d{3})/$1,$2/;
print;
}
おそらくこうでしょう。
Perlのprintfは同じじゃないですし普通は使わないと思います。
コメント1件

406
デフォルトの名無しさん[sage]   投稿日:2015/08/31 00:53:41  ID:5oSj39BW.net
>405
やっと意味が分かりました
ありがとうございます

407
デフォルトの名無しさん[sage]   投稿日:2015/09/10 07:40:12  ID:VXdhBPLa.net
特定の条件の時、一度ループを終了(last)して再度ループを最初からやり直したいのですが、
以下の制御構造は内部のスタックは狂ったりしないでしょうか。
foreachに対するlastを記述していません。

LABEL:{
 foreach my $n (@array){
   #〜なんらかの処理〜
   redo LABEL if($n); # 一度ループを終了して最初からやり直したい。
 }
}

408
デフォルトの名無しさん[sage]   投稿日:2015/09/13 00:16:28  ID:nrUJjYfy.net
my @array_org = @array
while (my $n = shift @array) {
  # 〜なんらかの処理〜
  if ($n) {
    @array = @array_org;
  }
}

409
デフォルトの名無しさん[sage]   投稿日:2015/09/13 08:42:47  ID:aY0WQWM2.net
$ perl -le 'my @d = 0 .. 9 ; for my $n ( @d ){ $n = undef } print join q{;}, @d '
;;;;;;;;;
$ perl -le 'my @d = 0 .. 9 ; for my $k ( @d ){ my $n = $k ; $n = undef } print join q{;}, @d '
0;1;2;3;4;5;6;7;8;9

単に、このレベルの質問?
redo 全く無関係

410
デフォルトの名無しさん[sage]   投稿日:2015/09/13 10:40:48  ID:HkNeW234.net
>以下の制御構造は内部のスタックは狂ったりしないでしょうか。
しない

411
デフォルトの名無しさん[sage]   投稿日:2015/09/14 22:58:53  ID:DgKRXoMO.net
スレッドについて教えてください。環境はwin7 ActivePerl。

以下を実行すると、当たり前だが 1 2 1 2 ... と改行されて表示される。
でも、★1にある改行を外すと何も表示されず、Ctrl+Cで終了させても何もない。
更に★2行を丸ごと消すと、 121212121212... と延々と表示される。
なぜこんな動作になるの?

my $t1 = threads->new(\&loop, 1);
my $t2 = threads->new(\&loop, 2);
$t1->join;
$t2->join;

sub loop{
my $v = shift;
while(1){
print $v."\n"; ★1
sleep 1; ★2
}
}
コメント1件

412
デフォルトの名無しさん[sage]   投稿日:2015/09/15 00:07:53  ID:lLlN6+xs.net
>411
標準出力は改行来るまでキャッシュされるから。

改行が来たらドンっと出る。
あと、ある程度キャッシュが貯まっても出る。
sleep挟まないとガーッと回ってどんどん貯まるから出る。

ラインバッファをオフにするとかすると
改行しなくても出るようになる。

413
デフォルトの名無しさん[sage]   投稿日:2015/09/15 00:30:14  ID:474V8Q6+.net(2)
$|=1; のこと。

414
デフォルトの名無しさん[sage]   投稿日:2015/09/15 01:13:54  ID:clufgPym.net
なるほど
ありがとう、勉強になりました

415
デフォルトの名無しさん[]   投稿日:2015/09/15 08:37:56  ID:bdsDky8L.net
異なるn個の数字からr個取り出す全組み合わせを表示するやり方を教えて

416
デフォルトの名無しさん[sage]   投稿日:2015/09/15 21:57:03  ID:474V8Q6+.net(2)
http://search.cpan.org/~allenday/Math-Combinatorics-0.09/

use Math::Combinatorics;

my @n = qw(a b c);
print "combinations of 2 from: ".join(" ",@n)."\n";
print "------------------------".("--" x scalar(@n))."\n";
print join("\n", map { join " ", @$_ } combine(2,@n)),"\n";

combinations of 2 from: a b c
------------------------------
a b
a c
b c
コメント1件

417
デフォルトの名無しさん[]   投稿日:2015/09/16 08:04:20  ID:+0ylx/BY.net
>416
レンタルサーバーがmathモジュール入ってないのでモジュールを使わない方法でお願いします
コメント1件

418
デフォルトの名無しさん[sage]   投稿日:2015/09/16 08:55:40  ID:nf18HxN0.net

419
デフォルトの名無しさん[sage]   投稿日:2015/09/16 13:34:47  ID:LGFhZh75.net
>417
これはPure Perlモジュールなので
ファイルをコピーしてライブラリのパスを
調整するだけで使えるよ。

この技術(って言う程でもないがw)をマスターすれば、
さまざまなライブラリを使えるようになるので
できるようになったほうがいい。

420
デフォルトの名無しさん[sage]   投稿日:2015/09/17 20:46:31  ID:lPbqQua0.net(3)
$hashref[$i] にハッシュのリファレンスが入っている

このまま使うと煩雑なので、
%hash = %{$hashref[$i]}
のようにすると、
$hash{'key'}
のようにアクセスできる

でもこれは、ハッシュごとコピーしているので、あまりやりたくない
\%hash = $hashref[$i]
みたいなことができればいいけど、それはできない
なんとかいい方法はないものか
コメント2件

421
デフォルトの名無しさん[sage]   投稿日:2015/09/17 21:19:24  ID:OTZMM8Po.net(2)
意味がよく分からんが
my $h = $hashref[$i];
$h->{'key'};
まさかこれのこと・・・ではないと思うが
コメント1件

422
デフォルトの名無しさん[sage]   投稿日:2015/09/17 22:14:36  ID:SaZ5cJAP.net(2)
>420

$hashref[$i]->{key};

または

]->{ の間の -> は省略化なので単に

$hashref[$i]{key};

公式のマニュアル perlref をはじめとしていろいろなところに書いてある。
Perlはこういうところのconvenienceは考えて設計されている。

423
デフォルトの名無しさん[sage]   投稿日:2015/09/17 22:20:55  ID:SaZ5cJAP.net(2)
もしかして
$hashref[$i]->{key};
$hashref[$i]{key};
こういう書き方を「煩雑」と書いているのなら
>421のreferenceをスカラーに入れる書き方だね。

424
デフォルトの名無しさん[sage]   投稿日:2015/09/17 22:59:30  ID:lPbqQua0.net(3)
やりたいのは、
$hash{'key'}
こういう書き方

構造体の真似事がしたくて、Cみたいに、
hash.key と書けるのが一番タイプ数が少ない
コメント1件

425
デフォルトの名無しさん[sage]   投稿日:2015/09/17 23:08:13  ID:OTZMM8Po.net(2)
抽象型の参照渡しのことか?


426
デフォルトの名無しさん[sage]   投稿日:2015/09/17 23:22:19  ID:sALNH7F9.net
>424
タイプ数が少し増えたって
可読性には何の影響もないだろ?

重要なのは可読性であって
そんなわずかなタイプ数の違いじゃないだろ。

427
デフォルトの名無しさん[sage]   投稿日:2015/09/17 23:46:49  ID:lPbqQua0.net(3)
能書きはどうでもいいけど、とにかく不可能なんだね

428
デフォルトの名無しさん[sage]   投稿日:2015/09/18 00:19:10  ID:K2vhYwr7.net(3)
真似事もなにも単一のハッシュで完全な上位互換だが

429
デフォルトの名無しさん[sage]   投稿日:2015/09/18 11:39:03  ID:eERM2gdU.net
>420
http://perldoc.jp/docs/perl/perlmod.pod#Symbol32Tables

#!/usr/bin/perl
use strict;
use warnings;

my $i = 6;
my @hashref = map +{ a => $i--, b => $i-- }, 1 .. $i / 2;

our %hash;
*hash = $hashref[$i];
print "a=$hash{'a'} b=$hash{'b'}\n";

430
デフォルトの名無しさん[sage]   投稿日:2015/09/18 19:08:20  ID:hGzfSnPs.net(3)
おおー、出来るんだ

\% じゃなくて * だよ、で済んだのに、
なんでわざわざ面倒なやり方を教えようとしたんだろう

431
デフォルトの名無しさん[sage]   投稿日:2015/09/18 19:16:26  ID:7DIRmH9E.net
シンボルテーブルを触るのは
一般的なやり方じゃないから。

432
デフォルトの名無しさん[sage]   投稿日:2015/09/18 19:26:47  ID:hGzfSnPs.net(3)
何かの変数のエイリアスを作りたい、というのはどの言語でも自然な発想でしょう

perlで特にそれが忌避される理由が判らない

433
デフォルトの名無しさん[sage]   投稿日:2015/09/18 20:01:43  ID:+sKaLThi.net
>421で済むから、需要が無い。
で、話が終わるからじゃねーの。

更に、今となっては、for keys $r とか書ける時代になってるし。

434
デフォルトの名無しさん[sage]   投稿日:2015/09/18 20:04:14  ID:K2vhYwr7.net(3)
型グロブは20年前の流行だから

435
デフォルトの名無しさん[sage]   投稿日:2015/09/18 20:26:48  ID:uVB9l/bg.net(2)
$hash{key} と $hash_ref->{key} にそんな耐えがたい差があるのか…
コメント1件

436
デフォルトの名無しさん[sage]   投稿日:2015/09/18 20:47:10  ID:uVB9l/bg.net(2)
http://perldoc.jp/docs/perl/5.22.0/perl5220delta.pod#Aliasing32via32reference
手元にあるのが5.20で試せなかったけど5.22なら \%hash で出来そうな記述が

437
デフォルトの名無しさん[sage]   投稿日:2015/09/18 21:02:14  ID:hGzfSnPs.net(3)
やっぱり需要はあるんだな

perlの哲学として、暗黙のデリファレンスはしない、というのがあるので、
リファレンスとして扱ってる限りちょっと面倒になるのは仕方ないと思うけど、
それは別名を作ることを妨げるものでもない

438
デフォルトの名無しさん[sage]   投稿日:2015/09/18 21:56:27  ID:K2vhYwr7.net(3)
おたくもけっこう能書き好きね

439
デフォルトの名無しさん[sage]   投稿日:2015/09/19 01:35:51  ID:kuDThZXk.net(2)
>435
> $hash{key} と $hash_ref->{key} にそんな耐えがたい差があるのか…

これをしないで短く書きたい。
という希望を叶えるために、

our %hash;
*hash = $hashref[$i];

これだけのコードを追加で書いてるからなw

440
デフォルトの名無しさん[sage]   投稿日:2015/09/19 09:23:10  ID:34HrKgNM.net
別名定義部分は一箇所だけだろ

441
デフォルトの名無しさん[sage]   投稿日:2015/09/19 11:31:26  ID:uSgpwfZq.net
perlはshiftを使うのがすごくめんどうに感じることはある

val.fst
$val{'fst'}
後者は3倍くらいタイプに時間かかる
文章の延長の感覚でタイプ出来ないんだよね

442
デフォルトの名無しさん[sage]   投稿日:2015/09/19 18:31:48  ID:kuDThZXk.net(2)
× $val{'fst'}
○ $val{fst}

自分でタイプ数増やしてるんじゃねーよw

443
デフォルトの名無しさん[sage]   投稿日:2015/09/20 07:25:23  ID:V0uh8XKx.net
実際にはタイプしてプログラムは作られない。コピペで作られる。

444
デフォルトの名無しさん[sage]   投稿日:2015/09/21 09:30:17  ID:A7LfSNZR.net
業界内では、インターネットの普及が、プログラミングできるようになったと勘違いするバカが増える
原因の一つになっているとする危惧の声が上がっている

445
デフォルトの名無しさん[sage]   投稿日:2015/09/21 17:48:46  ID:I6tq2NCA.net
それどこの業界?

446
デフォルトの名無しさん[sage]   投稿日:2015/09/21 17:58:14  ID:aZYOVHiY.net
隣の教室とかだろう?

447
デフォルトの名無しさん[sage]   投稿日:2015/09/21 23:46:10  ID:AhyKUb5y.net
ハーバード爆熱教室

448
デフォルトの名無しさん[sage]   投稿日:2015/09/23 01:04:24  ID:c1Tz5tb8.net(2)
社内のツールが昔からPerlだけで一貫されてるだかとのことで、
らくだ本なるものを貸してもらった。(押し付けられた)。
まぁ基本元々あるスクリプトを使うだけで済むらしいが、1週間の休みと引き換えに全部読んで来いだとよ。

今5日目。
言いたいことがいっぱいある。
分厚すぎる。
覚え切れるわけない。
抽象化しすぎ。多すぎる。どんだけだよ。
覚え切れない。
遅そう。これは無条件で遅いだろ。
それでも少しでも速そうな記述を書くと読みにくくなりそう。

しかもこれどう見てもプログラムじゃない。
ただの莫大な仕様を持ったアプリケーション。
コーダーにやらせとけよスクリプトは。

ああ全部CとFORTRANで書き直したい


今読んでるのがオブジェクト指向の所。
ここが一番意味わからん。
なんでこんな実装になってんだよ。
突っ込みきれないほどおかしいだろこれ。
使いたくない。
コメント3件

449
デフォルトの名無しさん[sage]   投稿日:2015/09/23 01:33:43  ID:sohVsCxT.net
Cで書くより10倍楽だけどな

バイナリの扱いにくさはCの100倍だし
配列の書き方のうんこっぷりはCとどっこいだが

450
デフォルトの名無しさん[sage]   投稿日:2015/09/23 01:48:27  ID:G8G+Dk45.net(2)

451
デフォルトの名無しさん[sage]   投稿日:2015/09/23 09:54:46  ID:fFX5DRXp.net(2)
>448
??「早く質問しろよ」

452
デフォルトの名無しさん[sage]   投稿日:2015/09/23 14:26:53  ID:RxLhKlLu.net(2)
これまでVBやJavaをやっていましたがPerlへ移行したいと思っています。
しっかり文法を学びたいのですが、
「::」や、「->」「=>」と言った記号について丁寧に説明されている本か
サイトを教えていただけませんでしょうか。
コメント1件

453
デフォルトの名無しさん[sage]   投稿日:2015/09/23 15:31:44  ID:G8G+Dk45.net(2)

454
デフォルトの名無しさん[sage]   投稿日:2015/09/23 15:57:35  ID:RxLhKlLu.net(2)
>453
if文やfor文、$_などと違って、
:: や -> って暗黙の了解になってません?
コメント1件

455
デフォルトの名無しさん[sage]   投稿日:2015/09/23 18:46:06  ID:MSwfmqLK.net(2)
perlのオブジェクト指向は、後付けと思えないほどシンプルで使える

いろいろ難しいこと言うけど、要は名前空間の管理なんだよ、という
オブジェクト指向の本質そのままのインプリメント

456
デフォルトの名無しさん[sage]   投稿日:2015/09/23 19:55:19  ID:rS2z7ubJ.net(2)
C言語でも特殊なルールをつくってああやって、こういう風に
やればオブジェクト指向はできる。アセンブラでもできるだろう。
だが、それでやろうとするのは、間違った考えだ。

言語の発展というのは、単純な命令を組み合わせてできたパターンから
概念を生み出し文法を定義してきた。

forだってアセンブラで見れば、比較命令とジャンプ命令があればできる。
だがそれでは使いにくいから、ループという概念を生み出して
ループのための命令を文法に追加した。そこからさらに発展して
イテレータとかまあいろいろあるわな。

話を戻すと、Perlはオブジェクト指向のための文法を入れなかった。
オブジェクト指向というパターンが存在するのに、それを文法に入れずに
人が頑張って特殊なルールを作ってやろうとしている。

ルールが少ないという意味でシンプルだろうが、
プログラミングするという意味ではシンプルではない。

457
デフォルトの名無しさん[sage]   投稿日:2015/09/23 19:59:37  ID:MSwfmqLK.net(2)
既にあるパッケージを楽に使うだけなら十分

新しく作ろうとすると設計が大変なのは、どの言語でも同じ
オブジェクト指向は全員が楽できるような夢の技術ではない
コメント1件

458
デフォルトの名無しさん[sage]   投稿日:2015/09/23 20:09:24  ID:c1Tz5tb8.net(2)
>448-449, 443-445
んで、だから?
馬鹿しかいねぇ

459
デフォルトの名無しさん[sage]   投稿日:2015/09/23 20:18:56  ID:rS2z7ubJ.net(2)
>457
話が違ってる。

Perlは"言語の文法"がシンプルすぎて
"オブジェクト指向"をシンプルにやることが出来ない
ってことだよ。

シンプルっていう言葉でごまかしてるけど、
誰に対してシンプルなのかを正しく認識しないとだめ。

殆どの人はPerlという言語を作ってるわけじゃない。
言語をシンプルに使えるということが重要。
その為に実装者はシンプルな実装でやめずに、がんばれや〜
コメント1件

460
デフォルトの名無しさん[sage]   投稿日:2015/09/23 21:11:01  ID:vTCFtDkl.net
>459
Mooseでも使ったら?

461
デフォルトの名無しさん[sage]   投稿日:2015/09/23 23:29:11  ID:fFX5DRXp.net(2)
おい、質問しろよ

462
デフォルトの名無しさん[sage]   投稿日:2015/09/24 01:04:31  ID:JIAkcEUy.net
>454
全てマニュアルに明記されている。
:: (パッケージセパレータ): http://perldoc.jp/docs/perl/perlmod.pod
-> (矢印演算子): http://perldoc.jp/docs/perl/perlop.pod#The32Arrow32Operator
コメント1件

463
デフォルトの名無しさん[sage]   投稿日:2015/09/24 05:59:43  ID:1EmTlpBT.net
そもそも今どきオブジェクト指向をネタに叩く奴って…

464
デフォルトの名無しさん[sage]   投稿日:2015/09/24 07:19:17  ID:BiAksuKa.net
Perlが何も進化してないのだからしょうがない。

465
デフォルトの名無しさん[sage]   投稿日:2015/09/24 18:58:27  ID:+UNTIAIN.net
>462
本当にありがとうございます。
僕が探していたのはこれです。

466
デフォルトの名無しさん[sage]   投稿日:2015/09/24 22:16:09  ID:Z8bJCWrt.net
いえいえ
それほどでも

467
デフォルトの名無しさん[sage]   投稿日:2015/09/25 05:47:25  ID:3unY/bbY.net
perldocが「僕が探していたのはこれ」とか、ネタかよw

468
デフォルトの名無しさん[sage]   投稿日:2015/09/25 08:10:23  ID:3ZesCZUY.net(2)


perldocに含まれる、perlmod.pod や perlop.pod#The32Arrow32Operator の
ことだろう?

何いってんだか意味わかんない。

469
デフォルトの名無しさん[sage]   投稿日:2015/09/25 18:57:05  ID:Of/BacRY.net(2)
そりゃ、「マニュアル読め」って指摘されてんのに
「僕が探していたのはこれ」ってレスりゃ、突っ込み入るよ

470
デフォルトの名無しさん[sage]   投稿日:2015/09/25 19:03:03  ID:Of/BacRY.net(2)
てめー、探してもいないくせに、って意味でね。

471
デフォルトの名無しさん[sage]   投稿日:2015/09/25 19:07:51  ID:3ZesCZUY.net(2)
マニュアルと言っても何ページもあるわけだし、
探していたページはこれっていっても何の不思議もないのでは?

472
デフォルトの名無しさん[sage]   投稿日:2015/09/25 21:05:35  ID:QgiMtBoz.net(2)
ディレクトリ構造とファイル一覧を取得したい
cmd.exeから dir /s とやってもできるけど、やたらと時間がかかる
似たようなことを再帰的にreaddir()でやっても余計に遅いので、
fork()か何かで並列にやれば速いんじゃないかと思ったけど、
実装がさっぱり判らない
コメント4件

473
デフォルトの名無しさん[sage]   投稿日:2015/09/25 22:27:34  ID:pfLpBFTm.net
cmd.exeってwindows?なのにfork?

まぁ可能な限り意訳して受け止めるとして、
先にプロセス数と割合を。(場合によっては一度検査するプログラムを走らせて定期的に記憶するなど)。
そして数と割合をそれぞれ割り当て。
Perlはその管理のみに留めて使用すること。

それでSSDにしても遅いと思うならもう限界。

474
デフォルトの名無しさん[sage]   投稿日:2015/09/25 23:19:37  ID:UlZdBulH.net
>472
ディスクアクセスに時間が掛かってるだろうから
並列に処理しても意味は無い。

475
デフォルトの名無しさん[sage]   投稿日:2015/09/25 23:56:47  ID:QgiMtBoz.net(2)
相手はサーバなので、ファイル情報くれ、次の情報くれ、みたいなことを
ちまちまとやってて遅いと想像してる

っていうか、そんな話はどうでもいいんだよ

forkしてファイル情報持ってこさせて、それをどう集めるのか
プロセス間通信するのか
最大のプロセス数を制限したいけど、どうするのか
そのへんに詳しい人はいない?
コメント1件

476
デフォルトの名無しさん[sage]   投稿日:2015/09/26 00:00:48  ID:o/KY4BpZ.net
馬鹿ちゃうんか

477
デフォルトの名無しさん[sage]   投稿日:2015/09/26 01:05:19  ID:NLV89G9+.net

478
デフォルトの名無しさん[sage]   投稿日:2015/09/26 17:59:20  ID:VNbKJFfm.net
1フォルダ内のファイル数が多いのが遅い理由。2階層とか3階層とかにして、1つのフォルダに入るファイル数を減らすとよい。それならば dir で十分の速度が出る。ファイル一覧の取得方法を変えてもあまり速くはならない。

479
デフォルトの名無しさん[sage]   投稿日:2015/09/26 18:19:26  ID:SmPakz2h.net
知らないことを聞かれても何か答えないといられないんだな

480
デフォルトの名無しさん[sage]   投稿日:2015/09/26 20:28:00  ID:xWCYZ6+4.net
>472
perlでやりたいのなら、
use File::Find;
これを使うと楽

481
デフォルトの名無しさん[sage]   投稿日:2015/09/27 00:38:29  ID:hWonz5kx.net
>472
相手がs3のようなクラウドストレージならfuse経由ではなく
REST APIを並列で叩いて高速化出来るよ。

482
デフォルトの名無しさん[sage]   投稿日:2015/09/27 00:43:55  ID:MWIygilv.net
>472
『すぐわかる Perl』あるいは『すぐわかるオブジェクト指向 Perl』にそのもの
ずばりが書かれている。
forkの話ならPerlクックブックがよい。
誰でもいつか通る道だ。まあ、がんばりたまえ。

483
デフォルトの名無しさん[sage]   投稿日:2015/09/28 01:47:05  ID:ndjcMxsV.net
過去ログで
my @files=split(/\n/,`dir /s /b *.* 2>NUL`);
見つけてうまくいきました。
コメント2件

484
デフォルトの名無しさん[sage]   投稿日:2015/09/28 21:11:57  ID:WfjXYy6D.net(2)
>483 だけ読んで、やっぱりPerlって分かりにくいと思いました。

485
デフォルトの名無しさん[sage]   投稿日:2015/09/28 21:49:11  ID:Aor/5DQQ.net
そりゃ>483はPerlのコードじゃないものw
シェルスクリプトを呼び出してる。

486
デフォルトの名無しさん[sage]   投稿日:2015/09/28 22:43:31  ID:WfjXYy6D.net(2)
/が多いからDOSの結果に対して正規表現の置換を実行してるのかと思った。
よく見ると全然そんなことしてないのね。

487
デフォルトの名無しさん[sage]   投稿日:2015/09/29 06:00:19  ID:lP+91DkH.net
dirコマンドはプログラミング以前だから知らないと話しにならないよ

488
デフォルトの名無しさん[sage]   投稿日:2015/09/30 01:30:17  ID:LX543PJu.net
chomp(my @files=`dir /s /b *.* 2>NUL`);
正規表現は皮がむけてからでも遅くはない
おれも結構、手擦ったほう

489
デフォルトの名無しさん[sage]   投稿日:2015/09/30 06:10:28  ID:qavjpflM.net
VBScript流の正規表現に慣れてるから
Perlの正規表現はグローバル設定やサブマッチが使いにくい

490
デフォルトの名無しさん[sage]   投稿日:2015/10/04 17:02:01  ID:hS6rgTy5.net
VBScriptの前にcmd覚えて欲しいなあ

491
デフォルトの名無しさん[sage]   投稿日:2015/10/05 05:48:03  ID:iwULxFWZ.net(4)
#windows7
open FILE, '>', "test.html";
print FILE $print;
close FILE;
`test.html`; #ファイルダブルクリックと同じ動作

このような感じでテストファイルを開いたとき、
元々 test.htmlがあった場合はうまく行くのですが、
ファイルが存在しなかった場合、開かれるのにかなりの時間がかかり、
cmd.exeからperlに制御が戻ってこなくなります。(関連プロセスは全部ゾンビになります。ファイルにロックがかかって居た場合はadministratorでも手出しが出来なくなって大変です)。

原因はなんでしょうか
コメント1件

492
デフォルトの名無しさん[sage]   投稿日:2015/10/05 08:44:17  ID:E3yE+rIA.net(2)
>491
こちらの環境(Win7のコマンドプロンプト上で ActivePerl 5.16.3)では再現しない。

>perl -e "`nonexistent.html`"
'nonexistent.html' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

→すぐにエラーメッセージが出て終了。

>perl -e "`existent.html`"

→関連付けされたブラウザ(Firefox)が起動している場合はタブが開いて終了。
起動していない場合はブラウザが立ち上がり、ブラウザを終了させるまで待機。

バッククォート演算子はコマンドの出力を得る為の物なので、単に別プロセスを
立ち上げたい場合は system か exec を使う方がいい。

>perl -e "exec('C:/PROGRA~1/MOZILL~1/firefox.exe', 'nonexistent.html')"

→コマンドはすぐに終了し、ブラウザが立ち上がりファイルが無い旨表示される。

http://perldoc.jp/docs/perl/perlfaq8.pod#Whats32wrong32with32using32backticks32in32a32void32context63
http://perldoc.jp/docs/perl/perlipc.pod

493
デフォルトの名無しさん[sage]   投稿日:2015/10/05 10:35:24  ID:iwULxFWZ.net(4)
違う違う。
openで新規にファイルが出来た場合にcmd.exeからperlに制御が戻ってこなくなる。
もとからあったファイルをopenで開いた場合は制御が戻ってくる。
コメント1件

494
480[sage]   投稿日:2015/10/05 12:05:22  ID:E3yE+rIA.net(2)
>493
以下のようなスクリプトで flock したまま閉じずに呼んでさえも、

>perl test.script text
create test.html
プロセスはファイルにアクセスできません。別のプロセスが使用中です。

とエラーを吐いて即座に終了するだけで、こちらの結果は変わらない。

#!/usr/bin/perl -w
use strict; use Fcntl qw(LOCK_EX);
open my $fh, '>', my $file = 'test.html' or die $!;
flock $fh, LOCK_EX;
warn "create $file\n";
print $fh $ARGV[0];
# close $fh or die $!;
# -e $file and warn "exist $file\n";
`$file`; # exec('C:/PROGRA~1/MOZILL~1/firefox.exe', $file);
__END__

問題の本質は

・open と close が成功しているか確認していない。
・ファイルの存在を確認していない。無い場合でも有る場合と同じ処理を強行している。
・新規に子プロセスを立ち上げた場合はそれを終了させないと進まない、という挙動は
 望んでいるものか

の3点で、「ファイルに真っ当にアクセスできるか」は関係しても
「スクリプト中で作られたものか」は関係無い。前者がディスクキャッシュや
ネットワーク越し環境やアクセス権限によって困難なのなら、相応の対処を
呼び出し前にやるべきだ。

495
デフォルトの名無しさん[sage]   投稿日:2015/10/05 12:25:14  ID:iwULxFWZ.net(4)
いや違うと思うけど。
windowsの問題だと思いますが。
例えばディスクに対するキャッシュとか

496
デフォルトの名無しさん[sage]   投稿日:2015/10/05 12:40:26  ID:iwULxFWZ.net(4)
いろいろテストしたけど結局よく分からんかった
まぁ付き合ってくれてありがとう

497
デフォルトの名無しさん[sage]   投稿日:2015/10/05 16:05:45  ID:qy+Vl9o/.net
ファイル作成時と言うあたりセキュリティソフトが腐ってたりして
コメント1件

498
デフォルトの名無しさん[sage]   投稿日:2015/10/06 09:27:47  ID:OYbykycg.net(7)
>497
ありえそうな気もするけど、
ファイルがスムーズに開けなかったからってゾンビになるcmd.exeってどうなの
しかも最終的には開けてるから処理待ちの部類でもなくcmdのバグとしか思えない

499
デフォルトの名無しさん[sage]   投稿日:2015/10/06 16:47:40  ID:IvHNq8Az.net(6)
どうせゾンビじゃないだろw
cmd自体は正常。
コメント1件

500
デフォルトの名無しさん[sage]   投稿日:2015/10/06 17:09:37  ID:OYbykycg.net(7)
なにを根拠に?

501
デフォルトの名無しさん[sage]   投稿日:2015/10/06 17:44:36  ID:IvHNq8Az.net(6)
何を根拠にゾンビだと言ってるの?
そもそもWindowsにゾンビという概念はない。

502
デフォルトの名無しさん[sage]   投稿日:2015/10/06 18:24:44  ID:OYbykycg.net(7)
なぜ質問で返す?
俺が聞いたのは情報も得てない状態で>499を判断するに至った理由。
筋としてそちらが先にべき。

いじわるしてもしょうがないから、昨日テストした結果。
書いたところで良い回答が得られるとも思えないから一回だけね。

実行プロセスが擬似的に置換されていること。
プロセスからの入力が "ほぼ"間違いなくcmd.exe側で捨てられていること。
cmdが終了せずに入力を待っていること。
その際必要な処理は終了していること。
事実上プロセスの終了手段が関係のない外部(タスクマネージャーなど)から二つのプロセスを殺す以外の方法がないこと。
再現性は100万ループで2〜3回程度。(予想。途中で処理が止まるので正確には分からない)。ただしなるときは一発でなる。原因は不明。

言っとくけど役に立たない言葉遊びはいらないよ

503
デフォルトの名無しさん[sage]   投稿日:2015/10/06 18:29:22  ID:IvHNq8Az.net(6)
いや、先に質問しているのは俺。

「どうせゾンビじゃないだろw」は質問。

「cmdが終了せずに入力を待っていること」はゾンビじゃない。
ただ入力をを待っているだけ。

504
デフォルトの名無しさん[sage]   投稿日:2015/10/06 18:31:53  ID:IvHNq8Az.net(6)
そもそもファイルを開けないで待っている状態っていうのは
ファイル読み込みがブロックされたっていうんだよ。
こういうのはNFSでよく起きる話。

ゾンビじゃない。OSにもcmdにも問題ない。
仕様通りの動作で、ブロックしているしている奴が悪い。

505
デフォルトの名無しさん[sage]   投稿日:2015/10/06 18:34:23  ID:OYbykycg.net(7)
まぁ何も読んでないって事は分かった

506
デフォルトの名無しさん[sage]   投稿日:2015/10/06 18:37:19  ID:IvHNq8Az.net(6)
はいはい、じゃあ次。

507
デフォルトの名無しさん[sage]   投稿日:2015/10/06 18:46:59  ID:OYbykycg.net(7)
態度悪いからつっついてやりたいんだけど、
cmdに問題が起きてない根拠はなに?
他にも突っ込みどころはあるけど。

今回は情報渡さないよ。渡しても正確に読んでないからどうだって感じだけど。

508
デフォルトの名無しさん[sage]   投稿日:2015/10/06 18:50:19  ID:OYbykycg.net(7)
>「どうせゾンビじゃないだろw」
あと世間ではこれは質問って言わないからね。最低限の日本語教養として。
別につっついてもメリットはないんだけど、

>cmdにも問題ない。
これが質問と言い始められても困るのでね。

509
デフォルトの名無しさん[sage]   投稿日:2015/10/06 19:58:13  ID:IvHNq8Az.net(6)
> cmdに問題が起きてない根拠はなに?

Windowsにはゾンビプロセスという概念がないのに、
ゾンビだと言っているから。

Perlが動かなくなるのであれば、単なるPerlの問題。

510
デフォルトの名無しさん[sage]   投稿日:2015/10/06 20:40:10  ID:OYbykycg.net(7)
ふーーーん。
俺がwindowsでゾンビと言えばcmdに問題がないことが確定するんだね。
すげぇな。
ここに何か書きたいならプログラムの基本から学んだ方がいいよ。
でないと迷惑だから。

あとこれは三回目だけど動かないのはcmd.exeであってPerlではないからね。

511
デフォルトの名無しさん[sage]   投稿日:2015/10/06 21:04:57  ID:DiRpFITQ9
Windowsのファイルロックは強制ロックだから、他のプロセスが握ってるとそこで止まる。
下手すりゃリブートするまで握りっぱなしとかあるある。

Unix系の勧告ロックと異なる点は注意だな。

512
デフォルトの名無しさん[sage]   投稿日:2015/10/07 00:16:22  ID:NaSjQcCl.net
はいはい、じゃあ次w

513
デフォルトの名無しさん[sage]   投稿日:2015/10/07 02:45:07  ID:bi7UjXPc.net(3)
次はお前待ち状態だけど

514
デフォルトの名無しさん[sage]   投稿日:2015/10/07 02:52:18  ID:bi7UjXPc.net(3)
まぁつついても結局意味の分からんこと書くか話流すかしか出来ないんだよね。
さいなら

515
デフォルトの名無しさん[sage]   投稿日:2015/10/07 03:15:13  ID:A/Ws6vCF.net
>>openで新規にファイルが出来た場合にcmd.exeからperlに制御が戻って
>>こなくなる。 もとからあったファイルをopenで開いた場合は制御が戻っ
>>てくる。
んで、
>>再現性は100万ループで2〜3回程度。ただしなるときは一発でなる。
...ってディスクの不良セクタが原因ではないよね?
sysopen でオープンして sysread,syswrite で1バイトづつアクセスする
のを試したかい?

516
デフォルトの名無しさん[sage]   投稿日:2015/10/07 04:00:55  ID:bi7UjXPc.net(3)
はいどうもありがとう。
ただもうめんどうになってるから、解決できなかったらもうそれはそれでいいんだ。

それは試してないけど、cmd.exeは最終的には必ず 「ブラウザが」 ファイルを開いてコマンドの処理は完了する。
おかしくなるときは、数秒コマンドの完了が遅延して、そのあとcmd.exeが終了せず制御がperlに戻らなくなる。

結果としてcmd.exeはフリーズ状態になる。

use FileHandle;
use IPC::Open2;
$| = 1;
my $pid = open2($Reader, $Writer, "cmd.exe");
print $Writer "test.html\n";
print $Writer "exit\n";
close $Writer;
close $Reader;

こんな感じで書いても結局は同じ
コメント1件

517
デフォルトの名無しさん[sage]   投稿日:2015/10/08 00:59:16  ID:OLbkW7bG.net
どうやらPerlは関係なさそうだね。ここはWindowsユーザーが多いからforkや
ゾンビは分かる人がいないんだよ。また新しい単語覚えたら教えて。

518
デフォルトの名無しさん[sage]   投稿日:2015/10/08 01:11:46  ID:OU3psdJf.net
forkやzombieはWindowsが提供している機能じゃないので、
それを提供している所が悪いのでは?

519
デフォルトの名無しさん[sage]   投稿日:2015/10/08 04:55:25  ID:dRl2/m15.net(3)
>どうやらPerlは関係なさそうだね
んなこたない。
最初に疑いがかかるのはメモリ渡しのタイミングから。
実装した人にはPerlの関係性はあるだろう。

520
デフォルトの名無しさん[sage]   投稿日:2015/10/08 15:21:12  ID:6qBtQH4V.net(2)
Perlインストールしたらファイルサイズ7GBもあるんだがこんなもんか
コメント1件

521
デフォルトの名無しさん[sage]   投稿日:2015/10/08 18:09:27  ID:dRl2/m15.net(3)
ないだろ

522
デフォルトの名無しさん[sage]   投稿日:2015/10/08 19:55:02  ID:6qBtQH4V.net(2)
あるんだが
まさか何かいらんもんでも入れたかな?
ちなみに全部入れた

523
デフォルトの名無しさん[sage]   投稿日:2015/10/08 21:03:08  ID:dRl2/m15.net(3)
フォルダ全部で240MB

524
デフォルトの名無しさん[sage]   投稿日:2015/10/08 21:55:32  ID:V0YO39rT.net
マジかよなんなんや・・・

525
デフォルトの名無しさん[sage]   投稿日:2015/10/09 01:00:01  ID:1LQDPMmM.net
容量の半分はあの太っちょおじさんのせい

526
デフォルトの名無しさん[sage]   投稿日:2015/10/09 06:02:59  ID:USwXoDjJp
>516
今更IPC::Open2かよ。
あれはOpen3と並んで使い物にならん。

おとなしくIPC::run3でも使え。

527
デフォルトの名無しさん[sage]   投稿日:2015/10/09 06:23:45  ID:u+nfRRLs.net
全部の意味が分からんけど、
unix用を全バージョンいれて
windows用を全バージョン入れて
Mac用を全バージョン入れて…
みたいな?サイズ的に。(適当)

528
デフォルトの名無しさん[sage]   投稿日:2015/10/09 07:16:09  ID:3gjlJhds.net
どうせシンボリックリンクを重複して計算してるんだろ

529
デフォルトの名無しさん[sage]   投稿日:2015/10/09 08:03:17  ID:Ev6MQNJn.net
シンボリックリンクなんて、そんなにたくさんあったか?

530
デフォルトの名無しさん[sage]   投稿日:2015/10/09 21:10:44  ID:ZkgHYZod.net
>520だけど
気持ち悪いから再インストールしてみたら80MBくらいに落ち着いた
一体何だったのか…

531
デフォルトの名無しさん[sage]   投稿日:2015/10/10 10:42:49  ID:5dP181+h.net
インストールの前にDVDの中身全部ディスクにコピーしていました
以後気をつけてやります…

532
デフォルトの名無しさん[sage]   投稿日:2015/10/10 11:16:55  ID:oHa0fz9h.net
Perl6 発表だぜ、みんな使いな
コメント1件

533
デフォルトの名無しさん[sage]   投稿日:2015/10/10 13:06:07  ID:MTAKB3YA.net(2)
えーー、どうせバグだらけだし
それに趣味で覚えたい以外に覚える理由もないし
ネイティブだったら覚えてもいいけど、Perl系覚えるのは絶対無駄にしんどい

534
デフォルトの名無しさん[sage]   投稿日:2015/10/10 15:00:19  ID:tVB9B9ox.net
15年かけただけあって流石につよい

535
デフォルトの名無しさん[sage]   投稿日:2015/10/10 18:23:30  ID:DZMVFwsO.net
>532
ニュースリリースでも出てた?
URL教えて。
コメント1件

536
デフォルトの名無しさん[sage]   投稿日:2015/10/10 18:43:24  ID:syR2upNL.net
他人が書いたPerlは絶望的に読みにくい。

537
デフォルトの名無しさん[sage]   投稿日:2015/10/10 19:03:50  ID:d7o7LjAv.net
全部自分で書こう

538
デフォルトの名無しさん[sage]   投稿日:2015/10/10 19:07:27  ID:MTAKB3YA.net(2)
読みに関しては、結局「俺が読みやすいんだもん」って書き方しか存在しないしな
開発者ですらそのようなこと言ってると言うか、人が読めなくても気にしなくて良いみたいなことさえ言ってた気が。

539
デフォルトの名無しさん[sage]   投稿日:2015/10/10 19:56:40  ID:Vyjb9OtN.net
>535
長文だが
http://www.pigdog.org/auto/software_jihad/link/3138.html

あと、perl6.orgでもオッケ

540
デフォルトの名無しさん[sage]   投稿日:2015/10/11 14:06:11  ID:Ql11MBBU.net(2)
日本語のドキュメントが整備されて、日本語が楽に使えるようになるまで様子見
こないだ動物本の会社に問質したら出版予定はないってさ、だからまだ早い

541
デフォルトの名無しさん[sage]   投稿日:2015/10/11 14:20:42  ID:AjiKJ1b+.net
Pugs から10年
Rakudo からも6年

本気で興味あるやつは、全体像は把握しとる。

542
デフォルトの名無しさん[sage]   投稿日:2015/10/11 14:22:59  ID:7eCDMK6Q.net
もう時代が違うってさ。別に本が無ければ勉強出来ない分けはないよ。ネットでマニュアルを読み、掲示板、ircで討論、自分で実験。それこそ今時の流れだろう。

543
デフォルトの名無しさん[sage]   投稿日:2015/10/11 17:06:12  ID:qoAVCBwR.net
Camelia かわいいよ Camelia

544
デフォルトの名無しさん[sage]   投稿日:2015/10/11 18:51:37  ID:Ql11MBBU.net(2)
エンタープライズと個人的趣味は別だから

545
デフォルトの名無しさん[sage]   投稿日:2015/10/13 09:46:19  ID:Itl+5Xbt.net(2)
大雑把に以下のような構造があったとする (この場ではスコープ管理とする)。

NAME_A:{ #NAME_Aと言う名前の関数群
 my NAME_A共用変数 #(インスタンス、またはクロージャと解釈しても良い);
 関数a宣言と定義;
 関数b宣言と定義;
 以下略
}
NAME_B:{
 my NAME_B共用変数; #関数群ごとにデータ構造の形式は全く違う
 関数a宣言と定義;
 関数b宣言と定義;
 以下略
}
NAME_C:{
 my NAME_C共用変数;
 関数a宣言と定義;
 関数b宣言と定義;
 以下略
}
#…以下略。もしかするとNAME_Zまであるかもしれない。

#---------------------------------------------------

この時、
NAME_A内の関数を呼び出し、次に別のNAME_A内の関数を呼び出した時、NAME_Aの共用変数はそのまま生存する。(つまり上記のままの記述で良い)。
しかし、NAME_Aを呼び出したあと、NAME_Bを呼び出した場合、NAME_Aの変数をundefしたい。(NAME_Bを呼び出せばNAME_B以外の変数を全てundefしたい。)
抽象的な表現をすれば、NAME_Bが使用されれば、それ以外の関数群の処理経過を全て初期化したい。

これを手っ取り早く書くにはどうすりゃええでしょうか。
NAME_Aの中にNAME_Bをいじくるような処理は書きたくないです。
良さそうな方法がいくつか思いついたけど、私が思いついた処理よりいい方法があるような気がするので、人様の意見をうかがってから書き始めようと思います。

546
デフォルトの名無しさん[sage]   投稿日:2015/10/13 11:16:23  ID:Itl+5Xbt.net(2)
遅いので締め切り

547
デフォルトの名無しさん[sage]   投稿日:2015/10/13 12:21:24  ID:YZ+LqeLQB
オブジェクト指向使えば一応解決できるな。
絶対、作り方を間違えてるけど。

548
デフォルトの名無しさん[sage]   投稿日:2015/10/14 00:10:02  ID:CP+grbm/.net
単純にハッシュでいいでしょ

549
デフォルトの名無しさん[]   投稿日:2015/10/14 01:21:43  ID:5USmhD5Y.net
多分、何をしたいのかもう少し考えた方がいいと思うよ。
考えた上でそのやり方が適していると思うならこんな感じになるだろう。

# グループ $G の関数 $F を呼ぶ
if ( $lastgroup != $G){
 group_end( $lastgroup) # もし必要なら
 group_begin( $G);
 $lastgroup = $G;
}
$F->(); # 実装方法によって呼び出し方は違うだろうね

要するに、どう実現するかという以前に考え方がおかしい。
「使い始める時」に初期化すればいいのであって、
別のグループのことまで考える必要は無いと思うよ。

550
デフォルトの名無しさん[sage]   投稿日:2015/10/15 02:51:43  ID:Ctgvk7MF.net
sub func_a {
  delete @hash{grep(/^$_[0]$/,keys %hash)};
}
sub func_b {
  delete @hash{grep(/^$_[0]$/,keys %hash)};
}

551
デフォルトの名無しさん[sage]   投稿日:2015/10/17 17:37:45  ID:QDrnQrmx.net(2)
オブジェクト指向ってプロトタイプが使えないんですか?

package My::test;
sub new(\[$@%]){
#……
}
#---------------------

My::test->new($test);
コメント1件

552
デフォルトの名無しさん[sage]   投稿日:2015/10/17 17:44:14  ID:HgXI9gSF.net

553
デフォルトの名無しさん[sage]   投稿日:2015/10/17 17:49:39  ID:QDrnQrmx.net(2)
>メソッド呼び出しはプロトタイプを行う/行わないによる影響を受けません。 なぜなら正確な呼び出しコードは、継承に依存しているために コンパイル時には不確定だからです。
これか
もうちょっと工夫して創って欲しかった

554
デフォルトの名無しさん[sage]   投稿日:2015/10/18 01:42:52  ID:KigiPqDZ.net
そもそもデータ型がない(ないようにした)のがPerlの利点だからのう

555
デフォルトの名無しさん[sage]   投稿日:2015/10/18 02:05:25  ID:/3dtuYD6.net(2)
いや型しかないだろ

556
デフォルトの名無しさん[sage]   投稿日:2015/10/18 08:43:14  ID:xrpLizdm.net
リファレンスを効率的に調べるために、
変数や戻値の型の名称を調べたいのですが、
VBでいう TypeName に相当する関数はありませんか?

557
デフォルトの名無しさん[sage]   投稿日:2015/10/18 13:30:02  ID:/3dtuYD6.net(2)
ようわからんけど

my $ref_type = ref $ref; # ObjectName or hash or array or sub or etc... http://perldoc.jp/func/ref
注※一緒くたにまとめられているので、痛い目を見たくなければオブジェクト名をデフォルトのリファレンスタイプ名と同じにしてはいけない。

my $defined = defined $val; #is this undef? (bool)
my $length = length $val; #「値の」長さ(unicodeかどうかで挙動が変わるので注意。ここに関わらず基本的にPerlは1文字を1単位としたがる)。

use Devel::Size qw(size total_size);
my $size = size$val; #「変数の」バイト数

メモリの長さ単位 → perl内部抽象型 (手出し不可)
数値か文字か → perl内部自動変換(ほぼ手出し不可)
 (ほとんどの場合は数値演算子のオペランドに使えば演算子に渡される値が数値変換済みであることが保証され、文字演算子のオペランドならば…以下略。
 ビット演算子やコンマ演算子などの、どうとでも取れる場合は各演算子や関数などの仕様を参照のこと。ほぼ一貫して(演算子や関数などの)値を要求する側が変換内容を決定する)。

558
デフォルトの名無しさん[]   投稿日:2015/10/20 22:36:05  ID:1gKOYeaX.net
ハッシュのkeyに漢字やひらがなを入れても問題ないですか?
またどれくらいの文字数までkeyに使ってもいいですか?
$hash{'てすと'};
こんな感じで

559
デフォルトの名無しさん[sage]   投稿日:2015/10/20 22:36:56  ID:vVqPHhnQ.net(2)
それどころかヌル文字(\0)を入れても問題ないよ!

560
デフォルトの名無しさん[sage]   投稿日:2015/10/20 22:38:07  ID:vVqPHhnQ.net(2)
さて問題です。

ウソかホントか?
コメント1件

561
uy ◆e6.oHu1j.o [sage]   投稿日:2015/10/21 11:51:32  ID:bkabQcdE.net
入れられないようなゴミ言語なら今すぐ全てのPerl本燃やして歴史から葬り去ったほうが良い

562
デフォルトの名無しさん[sage]   投稿日:2015/10/21 17:48:06  ID:Y5IiyPT4.net
>560
「さりげない自分自慢」かw

563
デフォルトの名無しさん[sage]   投稿日:2015/10/21 22:12:54  ID:CfDtLcv1.net
不安な環境なら半角カタカナまでに留めておいたほうがいい。それならlatin1レベルで扱える。

564
デフォルトの名無しさん[sage]   投稿日:2015/10/21 23:20:04  ID:G8ulW2Zt.net
全角でもlatin1(00-FF)で扱えるし今はutf8が多いからあんまり関係無い
コメント1件

565
デフォルトの名無しさん[sage]   投稿日:2015/10/22 00:14:43  ID:T+i/NslY.net
>564
Perl4前提の話をしてます。
どこでも動くスクリプトです。

566
sage[]   投稿日:2015/10/22 15:33:23  ID:qmntQeh8.net(3)
メールアドレスチェックのために、
メジャーどころのEmail::Valid::Looseを使用しているのですが、
サーバーを移転(CentOS 5.3-perl 5.8からCentOS 6.7-perl 5.1)しましたところ、
500エラーとなり動作しなくなってしまいました。

エラー内容は、
Can't call method "answer" on an undefined value at /usr/local/share/perl5/Email/Valid.pm line 153.
で、該当部分は下記の通りです。
※Net::DNSはインストール済みです。

digやnslookupも正常に動いていて、いろいろと勉強はしてみたのですが、
はまってしまいました。
原因と解決法を教えてくださいませ。

567
デフォルトの名無しさん[sage]   投稿日:2015/10/22 15:37:36  ID:qmntQeh8.net(3)
551です。
(すみません、上がってしまいました)

Valid.pm の153行目近辺です。

131 sub _select_dns_method {
132 # Configure a global resolver object for DNS queries
133 # if Net::DNS is available
134 eval { require Net::DNS };
135 return $DNS_Method = 'Net::DNS' unless $@;
136
137 $DNS_Method = 'nslookup';
138 }
139
140 # Purpose: perform DNS query using the Net::DNS module
141 sub _net_dns_query {
142 my $self = shift;
143 my $host = shift;
144
145 $Resolver = Net::DNS::Resolver->new unless defined $Resolver;
146
147 my @mx_entries = Net::DNS::mx($Resolver, $host);

568
デフォルトの名無しさん[sage]   投稿日:2015/10/22 15:38:21  ID:qmntQeh8.net(3)
551です。

148
149 if (@mx_entries) {
150 foreach my $mx (@mx_entries) {
151 my $mxhost = $mx->exchange;
152 my $query = $Resolver->search($mx);
153 foreach my $a_rr ($query->answer) {
154 return 1 unless $a_rr->type ne 'A';
155 }
156 }
157 }
158
159 return $self->details('mx');
160 }

569
デフォルトの名無しさん[]   投稿日:2015/10/23 08:27:13  ID:uleDOfSS.net
my(@list) = ("aaa","bbb","ccc");という配列があって
my($listsuu) = @list;としてもリストの要素数は得られないけど
my $listsu = @list;とうるとリストの要素数は得られるのはどうしてですか?
カッコをつけるつけないの違いは何でしょうか?
コメント1件

570
デフォルトの名無しさん[]   投稿日:2015/10/23 10:42:00  ID:PiyRQFJ3.net(2)
>569
括弧を付けるとリストコンテキスト、付けないとスカラコンテキストになる。詳しくは
http://perldoc.jp/docs/perl/5.8.8/perldata.pod
辺りを読んでいただければ……


571
デフォルトの名無しさん[sage]   投稿日:2015/10/23 10:53:26  ID:WlL3xp3n.net(3)
リストコンテキストとスカラコンテキストというアイデアは間違いだった。
素直に関数を分けるか引数で指定するようにすべきだった。

= の右側が一緒でも、 =の左側で関数の動作が変わってしまう。
= ならまだわかりやすいが、関数の引数やハッシュに入れた時とか。
キーと値がずれてバグの原因になる。
コメント1件

572
デフォルトの名無しさん[sage]   投稿日:2015/10/23 11:26:52  ID:k4LuROKH.net
また君か壊れるなあ

573
デフォルトの名無しさん[sage]   投稿日:2015/10/23 12:12:25  ID:WlL3xp3n.net(3)
とくに言い返すことがないなら、
レスしなくていいと思うんだがねw
コメント1件

574
デフォルトの名無しさん[sage]   投稿日:2015/10/23 21:40:39  ID:Wo6jmHxQ.net
一方、Python にはタプルの罠がある。

575
デフォルトの名無しさん[sage]   投稿日:2015/10/23 23:12:17  ID:HfDhF3Ys.net
一方システム言語は個別に対応しなきゃらななくて迷路になってるのであった
と言うか同じなんだけどね。本当は

576
デフォルトの名無しさん[]   投稿日:2015/10/23 23:28:08  ID:PiyRQFJ3.net(2)
>573
よろしい、言い返してあげよう。
言語仕様に責任転嫁してもしようがない(ドヤァ)

577
デフォルトの名無しさん[sage]   投稿日:2015/10/23 23:32:34  ID:WlL3xp3n.net(3)
言語仕様に責任転嫁?何を言ってるのかわからない。
よくない言語仕様だったって話をしてるんだが。
コメント1件

578
デフォルトの名無しさん[sage]   投稿日:2015/10/24 00:20:40  ID:cXc3ufNP.net
>577
ダジャレにマジレスかよ

579
デフォルトの名無しさん[sage]   投稿日:2015/10/24 00:26:13  ID:oNYKYVpJ.net
>571
そうゆうアピールをしたくて必死なわけですね
そしてかまって欲しくてたまらない的な
コメント1件

580
デフォルトの名無しさん[sage]   投稿日:2015/10/24 02:27:17  ID:ymg0YeVe.net
>579
構いたくないならレスしなければいいのにw

581
デフォルトの名無しさん[sage]   投稿日:2015/10/24 14:02:41  ID:/lDQ+xm1.net
@rray = $calar は @rray = ($calar) の省略形で便利!
$calar = @rray は $calar = scalar(@rray) の省略形なので注意!
($calar) = @rray でリストの先頭を代入
これ、テンプレ追加で解決。
コメント1件

582
デフォルトの名無しさん[sage]   投稿日:2015/10/24 15:17:36  ID:obIKqu8m.net
>581
日本語で説明している時点でだめだと思うわw

583
デフォルトの名無しさん[sage]   投稿日:2015/10/25 01:09:37  ID:eAvcdeNT.net
Perlが覚えられず、日本語が理解できず、何語ならいいの?
英語で書けるCOBOLならもうあるけど
コメント1件

584
デフォルトの名無しさん[sage]   投稿日:2015/10/25 03:16:33  ID:vd4L6iLU.net
>583
コード見るだけでわかるようにする。

585
デフォルトの名無しさん[sage]   投稿日:2015/10/25 04:13:42  ID:IJsK62Z7.net
頭の悪い書き込みがダメってことだろ

586
デフォルトの名無しさん[sage]   投稿日:2015/10/25 21:16:54  ID:+VcrnbUt.net(2)
オブジェクト指向の書き方と言うか使い方がいまいちよくわからんのだけど、
なんかいろいろあるんだけど、

use strict;
{
package obj;
sub new {
my $class = shift;
return bless { NAME => 'hoge', }, $class;
}
sub method{
my $self = shift;
}

}

package main;
my $instance = obj->new();
print $instance->{NAME} . "\n"; #1: 普通にアクセス出来ますが…? カプセル化とはいったい…?
obj::new(); #2: 使用側の呼び出しによってクラス名が自動送信されたりされなかったりする。オブジェクトかどうかは「呼び出し側が」決めるの? どうにかしてくれ
my $instance2 = obj->method(); #3: コンストラクタなのか通常のメソッドなのか区別が付かない。誤った使用法が普通に発生出来る。なんとかしてくれ。


ちょっとだけperldocだかを見てきたけど、なんでも自由にアクセス出来るのが売りだみたいなことを自慢げ(?)に書いてあった。
いやそれオブジェクト指向じゃねぇから。対策教えてくれ。
使用者がモジュールごとの仕様を熟知して地雷をよけながら歩くのがデフォルトかよ
コメント1件

587
デフォルトの名無しさん[sage]   投稿日:2015/10/25 21:18:06  ID:+VcrnbUt.net(2)
質問その2
呼び出し側で
my $instance1 = obj->new1(); #普通のインスタンス
my $instance2 = $instance1->new2(); #インスタンス1から発生するインスタンス2

みたいに書きたいんだけど、どうすりゃいいだろう?
呼び出しは出来ればこの書式をこのまま使いたい。
new2内部でクラス名を得られない。なのでblessできない。



質問その3
今の所あんま重要じゃないんだけど、
Perlのオブジェクト指向ってシンボリックリファレンスとかgotoとかと同じたぐいに見えるんだけど合ってる?
packageがラベル名やgotoと同じたぐいに感じるのだけど。



また何かあったら質問します。
よろしく

588
デフォルトの名無しさん[sage]   投稿日:2015/10/25 22:50:46  ID:rvQcLuia.net
・質問1への答え
perlのオブジェクト指向は良くも悪くも後付けなんでそういうものだとある程度は妥協してください(カプセル化の方法もありますが一般的とは言えません)
一応Mooseなどのモジュールで補助は出来るし、実質別の言語ですがクリスマスにリリースされるperl6でかなり改善されてます
それとオブジェクト指向は哲学であってカプセル化などの機能とイコールでないと個人的に思います

・質問2への答え
意味がよくわからないけど、 ref $instance でパッケージ名を取得できます、で求めた答えになってるかな?
my $class = ref $_[0] || $_[0]; のような書き方はよくあります

・質問3への答え
よくわからないです


perlのオブジェクト指向の実装の仕方はオブジェクト指向について考える上で参考になるけど実際に書くときは標準機能の貧弱さに泣く…
まあ何にせよ慣習に頼る部分は多いけれども「いやそれオブジェクト指向じゃねぇから」というのは違うと思いますよ

589
デフォルトの名無しさん[sage]   投稿日:2015/10/26 10:40:05  ID:vmWW28spH
>586
#1 カプセル化されてなくても中を触らなければいいだけ。
オブジェクト指向の基本だが、オブジェクトの操作は全てメソッドを介せ。

#2 定義したクラスを、別のクラスで継承する。
クラスメソッドは継承できないのでエラーになる。

#3 メソッドとコンストラクタの違いが無いのは仕様。
誤った使用法とは何か?

質問2
http://perldoc.jp/docs/perl/5.10.0/perlmodlib.pod#Guidelines32for32Module32Creation

質問3
シンボリックリファレンス(変数参照)とgoto(制御構文)は別物。

590
デフォルトの名無しさん[sage]   投稿日:2015/10/26 14:25:17  ID:908fhS8d.net(2)
Perlの正規表現について、
gオプションの使い方の質問です。

HTMLなどの長いテキストから特定のタグの中身をまとめて取りたいのですが、
どのように使用したらよいでしょうか。

例えば、HTMLから下記のようなパターンを探して
<a href="〜〜〜">********</a>
〜〜〜 と ******** の一覧を配列で受取るか標準出力に出力するかしたいです。
コメント1件

591
デフォルトの名無しさん[]   投稿日:2015/10/26 17:43:39  ID:GFinoAL6.net(2)
>590
a 要素が全部その通りの表記になってるなら

while ( m%<a href=\"(.*?)\">(.*?)</a>%g ){
 push( @anchor_a,[$1,$2]);
}

みたいな感じか。
その通りになっていない可能性があるなら HTML::TreeBuilder を使う方がいいと思うよ。
軽い方がいいならせめて HTML::Parser を。
コメント1件

592
デフォルトの名無しさん[sage]   投稿日:2015/10/26 18:14:25  ID:JWNZzJ9D.net
木(親子)構造のものは、正規表現ではムリ

<A> <A></A> <A><A></A></A> </A>

593
デフォルトの名無しさん[sage]   投稿日:2015/10/26 20:02:31  ID:lmfrq9M4.net
複数行に分かれている場合も対応した方が良いと思う
コメント1件

594
デフォルトの名無しさん[]   投稿日:2015/10/26 20:18:39  ID:GFinoAL6.net(2)
>593
href 以外の属性が書かれてる場合もね。
正規表現でも出来なくはないがちょっと大変だ。
だから無理せず専用のパーサを使う方がいいと思うんだ。

595
デフォルトの名無しさん[sage]   投稿日:2015/10/26 20:30:02  ID:908fhS8d.net(2)
>591
ありがとうございました。

596
デフォルトの名無しさん[]   投稿日:2015/10/28 18:54:34  ID:EUVQ3J2j.net(2)
C言語のプログラムから関数を抜き出す方法を教えてくれ。
ハマってるのは{}の一致だ。

int testA(){
   if (xxx==0){
      a=1;
   }
   return 0;
}

int testB(){
   return 0;
}

testAの関数を抜き出したくても、最短マッチだとifの}で終わる。
最長マッチだとtestBの}までいってしまう。
{}の個数が分かっていれば指定できるがそんなのはマチマチ。
コメント1件

597
デフォルトの名無しさん[sage]   投稿日:2015/10/28 19:04:05  ID:KWnsoHPL.net(2)
>596
Perlを投げ捨てて、

$ ctags -f - source.c

testA a.c /^int testA(){$/;" f
testB a.c /^int testB(){$/;" f

はい、終了。
コメント1件

598
デフォルトの名無しさん[sage]   投稿日:2015/10/28 19:06:46  ID:KWnsoHPL.net(2)
この場合は、-xオプションつけた方が良さそうだな。

$ ctags -x source.c
testA function 1 source.c int testA(){
testB function 8 source.c int testB(){

599
デフォルトの名無しさん[]   投稿日:2015/10/28 22:50:35  ID:EUVQ3J2j.net(2)
>597-598
ctagsがWinでもLinuxでも見つからないからダメ元でMacで試したら入ってたわ。

このスレで油売ってるゴミ共でも役に立つことがあるんだな。
ありがとよゴミ共。
コメント1件

600
デフォルトの名無しさん[]   投稿日:2015/10/28 23:21:26  ID:42E/OAJG.net(2)
@A=(1..10);
@B=(2,4,5,6,8,9);

この二つの配列から@Aのうち@Bに含まれていない
(1,3,7,10)という配列を抽出したいのですがどうすれば
いいでしょうか?

601
デフォルトの名無しさん[sage]   投稿日:2015/10/28 23:27:04  ID:42E/OAJG.net(2)
my @C = grep { my $N=$_; ! grep { $N==$_} @B } @A;
こういうコードだとデータの件数が多くなると異常に遅くなってしまいます
コメント1件

602
デフォルトの名無しさん[sage]   投稿日:2015/10/29 00:58:13  ID:dmkvBav+.net
Ruby, Pythonのように、配列に差集合は無いのか?

@A - @B
コメント2件

603
デフォルトの名無しさん[sage]   投稿日:2015/10/29 01:30:36  ID:ywbX+Z6L.net(2)
>599
> ctagsがWinでもLinuxでも見つからないから

自分でインストールしろよ。WindowsはともかくLinuxならパッケージあるんだろ。

あとゴキブリのくせにうぜーよ。

604
デフォルトの名無しさん[sage]   投稿日:2015/10/29 01:35:10  ID:ywbX+Z6L.net(2)
>601
そりゃそうだろうね。
@Aの配列からチェック用のハッシュを作り、そこにあるかないかを
チェックする処理を1行で書けばいいんだよ。

>602
List::Compareとかいうモジュールがある。
コメント1件

605
デフォルトの名無しさん[sage]   投稿日:2015/10/29 02:11:24  ID:MsWbl26g.net(4)
windowsで処理が遅い場合、複数プロセスに分離したいのですが、
どのようにするのが一般的でしょうか?

forkはwindowsでは表面上の互換が取れるだけで無理と言うようなことが書いてありました。

606
デフォルトの名無しさん[sage]   投稿日:2015/10/29 09:18:01  ID:MsWbl26g.net(4)
まだ回答を得られていませんがもう一つ質問です。

{
my $Instance = new;
# なんらかの処理
}
#ここでInstanceは消えている。

Instanceが消えるとき、自動でデストラクタを呼び出したいです。(自動だとPerlの従来どおりmyの記述を崩さず同等のため)。
と言うのは、コンストラクタは他のプロセスに対してデータ構造の同期を取っています。
これがmyのスコープを抜けたかたと言って、自分のプロセスの中でだけ勝手に消えると困ります。

myの自動処理に対して割り込むよう方法はありますか?

607
デフォルトの名無しさん[sage]   投稿日:2015/10/29 09:20:05  ID:MsWbl26g.net(4)
やっぱ590は無茶な質問のような気がしましたので大人しくグローバル変数使っておきます。
オブジェクトは常にグローバルでしかないので、そのほうがで良いデザインのような気がしてきました。

608
デフォルトの名無しさん[sage]   投稿日:2015/10/29 13:59:54  ID:MsWbl26g.net(4)
やっぱ590はオブジェクト側で保持して勝手に消えないインスタンスにすることにしますた。
名前付きでコンストラクトして、なければ作る、すでにあればそのまま返す。
でないとインスタンスの量や構造関係が爆裂になった時に呼び出し側がスパゲティ。

回答ないからまるで独り言みたいだ。

609
デフォルトの名無しさん[sage]   投稿日:2015/10/29 16:49:05  ID:+uGpQesu.net
>604
一行で書けますか?
my %H;
map { $Hash{$_}++ } @B;
@C = grep { ! $Hash{$_} } @A;

3行になってしまいましたorz

>602
Ruby Pythonはそういう書き方でするんですか便利ですね
コメント2件

610
デフォルトの名無しさん[sage]   投稿日:2015/10/29 18:25:15  ID:kMHBYIC37
一行で書くとこんな感じだな。
sub{ grep{ ! $_[0]->{$_} } @_[1 .. $#_] }->({ map{ $_ => 1 } @b }, @a);

普通はやらんが。

>609
Set::Scalar 辺り使えばPerlでもできる。
Perlで集合はなぜか話題にならんな。

611
デフォルトの名無しさん[sage]   投稿日:2015/10/29 19:59:34  ID:5rO3eYIk.net
別人の横レスだけど、
普通に3行でいいだろ。

上二つは速度が遅いだろうし
最後のは、あなたのと何ら代りはない。
@C = grep { !${ { map{ $_, 1} @B } }{$_} } @A;

# 5.21 以降。
@C = grep { ! defined { reverse %B[ 0 .. $#B ] }->{$_} } @A ;

use feature qw(state);
@C = grep { state $h = { map{ $_, 1} @B } ; ! $h->{$_} } @A;
コメント1件

612
デフォルトの名無しさん[sage]   投稿日:2015/10/29 21:45:50  ID:oKoprbCw.net
>609
Pythonの配列(リスト)に集合演算はないよ
集合型っていうデータ型に変換すればできるけど
値の重複を許さないので厳密に言えば配列とは違う


613
デフォルトの名無しさん[sage]   投稿日:2015/10/30 01:10:11  ID:sxH0vLLx.net
grepの中にgrepがあると気持ち悪い。
別に1行じゃなくていいじゃないか
あとスライスは遅いのけ?

@h{@b} = undef; #valueが欲しいなら (1) x @b; とでも。(同じ値があれば数が合わなくなる気がするが)。
grep{ !exists $h{$_} } @a;

614
デフォルトの名無しさん[sage]   投稿日:2015/10/30 06:01:57  ID:VBZUNtox.net
>611の上二つの「遅い」の言及から発想したのなら、
誤解してる。
アレは、両方ともgrep毎に、新規に無名ハッシュ作くるからその分遅いだろう。
最後のは、stateで一回しかリファレンス作ってないから早いだろう、
って意味。

615
デフォルトの名無しさん[sage]   投稿日:2015/10/31 00:19:52  ID:8+WZrGwR.net(2)
requireに引数を送る方法はありますか?

616
デフォルトの名無しさん[]   投稿日:2015/10/31 00:40:04  ID:llkezMza.net(2)
明示的に import を呼びなさい。詳しく知りたければ
perldoc -f use
あるいは
http://perldoc.jp/func/use

617
デフォルトの名無しさん[sage]   投稿日:2015/10/31 01:26:54  ID:8+WZrGwR.net(2)
requireに引数を送る方法はありますか?

618
デフォルトの名無しさん[sage]   投稿日:2015/10/31 09:08:36  ID:OL8aBQAL.net
ある

619
デフォルトの名無しさん[]   投稿日:2015/10/31 20:46:17  ID:llkezMza.net(2)
ご期待に添えなかったかな?
use Alpha 'Beta','Gamma';
的なことをしたいんだろうと想像したんだけど。

620
perl初心者[]   投稿日:2015/11/06 21:09:59  ID:2g7/WV7u.net(4)
local (*in) = @_ if @_;

これってどんな意味になるんですか?

621
603[]   投稿日:2015/11/06 21:42:18  ID:2g7/WV7u.net(4)
cgi-lib.pl っていうライブラリの
sub ReadParse  っていう関数の初めにあるんですけど
local (*in) = @_ if @_;
これを
local (*in) = @_ ;  
に書き換えても動作するんですけどこれってローカル変数宣言で配列を宣言してるんですよね?
でもこのif @_の意味がわからない

どなたか知ってませんか?

622
デフォルトの名無しさん[sage]   投稿日:2015/11/06 22:44:26  ID:A8OcAOd1.net(2)
@_ が存在すれば(nullじゃ無ければ)、代入する

じゃないの?よく知らないけどさ
コメント1件

623
perl初心者[]   投稿日:2015/11/06 22:49:44  ID:2g7/WV7u.net(4)
>622
local (*in) = @_ ; だと送信データがnullのときエラーが起こった

local (*in) = @_ if @_; だと送信データがnullでもちゃんと動作した


なんでなの?

624
606[]   投稿日:2015/11/06 22:53:28  ID:2g7/WV7u.net(4)
ごめん606で書いたことは嘘

なんかコード終了の;をうち忘れてただけだった

やっぱlocal (*in) = @_ if @_; のいみがわからん・・・

625
デフォルトの名無しさん[]   投稿日:2015/11/06 23:03:24  ID:6b5vFxa5.net
コメントに書いてあるんだけどね。
パースした結果は %in,@in,$in に入れるよ。
でも、リファレンスをくれたらそこに入れるよ。

626
デフォルトの名無しさん[sage]   投稿日:2015/11/06 23:05:21  ID:A8OcAOd1.net(2)
if A とは、Rubyにもある後置記法じゃないの?
if True 真なら、
if False 偽なら

X = A if A;

if A then
X = A
end

もしAが真なら(Aが存在すれば)、Xに代入する。
もしAが偽なら(Aが存在しないなら)、何もしない

よく知らんけどさ

627
デフォルトの名無しさん[sage]   投稿日:2015/11/07 05:22:22  ID:7PiJ/e4L.net(2)
if修飾子自体の挙動は、ぐぐりゃ終わる話

問題のコードって、
http://cgi-lib.berkeley.edu/
のv1.14のコードだよね?

local(*in) =の行は、作者の望んだ代入は成立してないんじゃね?
$ perl -MData::Dumper -le 'my $in ; local (*in) = (2,3,4) ; print Dumper $in, *in;'
$VAR1 = undef;
$VAR2 = *{'::2'};

仮に機能したとしても、
$inも、@inも、%inも後から上書きしてんじゃん。
# v2.18でも同様
コメント2件

628
606[]   投稿日:2015/11/07 10:46:18  ID:H7agZdU4.net(2)
>627
perlって同じ名前で型かえれば変数何個もつくれるんじゃないの?

629
デフォルトの名無しさん[sage]   投稿日:2015/11/07 11:59:27  ID:7PiJ/e4L.net(2)
すまん、>627のワンライナーは間違いだわ。
代入自体は成立するね。
ただし、no warnings, no strict の条件でだけど。

$ perl -MData::Dumper -le '$a = 42 ;@a = 1 .. 10 ; sub { local(*in) = @_ if @_ ; print Dumper $in, ¥@in }->(*a) '
$VAR1 = 42;
$VAR2 = [1,2,3,4,5,6,7,8,9,10];

630
デフォルトの名無しさん[]   投稿日:2015/11/07 11:59:44  ID:wmMRTXvg.net
Version 1.14 を見てるならコメントに使用例が書いてあるでしょ? 型グロブを渡すんだよ。
Perl 5 ならリファレンスも渡せる。

http://perldoc.jp/docs/perl/5.20.1/perldata.pod
を読んで勉強しなさい。

631
デフォルトの名無しさん[sage]   投稿日:2015/11/07 17:25:15  ID:hsJw7ECk.net
グダってんなー
単なる研究ならいいけど今時cgi-lib.plの書き方は参考にすべきではないとだけ言っておく
コメント1件

632
606[]   投稿日:2015/11/07 20:45:37  ID:H7agZdU4.net(2)
>631
Perl 5 とも互換性ちゃんとあるんだね!
構文とか結構みてなんとなくわかってきたw

ふえた構文とかあるの?
どこかいいサイトない?
コメント1件

633
uy ◆Qawu9.2l1E [sage]   投稿日:2015/11/07 21:33:13  ID:oj5NSdiM.net
英語追試レベルの俺ですら公式リファレンス読むのに

634
デフォルトの名無しさん[sage]   投稿日:2015/11/08 11:33:55  ID:iOvet9fD.net
uy生きてたのかよ

635
デフォルトの名無しさん[]   投稿日:2015/11/08 17:07:37  ID:Rsk88cb5.net
>632
http://perldoc.jp/
をブックマークしとけばいいと思うよ。

636
デフォルトの名無しさん[sage]   投稿日:2015/11/08 20:54:11  ID:by3hLAgU.net(2)
perlのモジュール読み込み(use文)について質問です。

呼び出し元のモジュール ***.pl ファイルと同じフォルダに、
xxx.pm ファイルを置いています。(フォルダはデスクトップにあります)

@INC に . があるので、これで
use xxx.pm すれば読み込めるはずなのに、実行すると
Can't locate xxx.pm in @INC
のエラーが出ます。

この場合、どのようにしたらよろしいでしょうか。

637
デフォルトの名無しさん[sage]   投稿日:2015/11/08 21:05:19  ID:AfSZKK5w.net
@INCの.は、スクリプト実行時のカレントディレクトリの事

use lib して、パスを @INCに追加するコードを ***.pl に加える
コメント1件

638
デフォルトの名無しさん[sage]   投稿日:2015/11/08 21:11:49  ID:by3hLAgU.net(2)
>637
ありがとうございました。動きました。


639
デフォルトの名無しさん[]   投稿日:2015/11/11 21:58:09  ID:IZk3uYUW.net
->
ってどんな意味があるのですか?

640
デフォルトの名無しさん[]   投稿日:2015/11/11 22:47:27  ID:VZfzcqFQ.net

641
デフォルトの名無しさん[]   投稿日:2015/11/12 10:35:24  ID:lxsWFQ/W.net
>640
あざます

642
デフォルトの名無しさん[]   投稿日:2015/11/12 14:03:48  ID:DhWMoO2o.net(2)
秀丸エディタって使いにくくね?
大学のPCにも最初から入ってたし、会社のPCにも最初から入ってたが、
何でこんなに使いにくいものを金出してまで入れてるのか意味不明
馬鹿なの?
K2EditorとかTeraPadのほうがマシだろ

まあいつまでも時代遅れのゴミにしがみついてるPerl厨は低知能のクズしかいないから秀丸エディタがおすすめだけども

643
デフォルトの名無しさん[sage]   投稿日:2015/11/12 14:39:07  ID:XCvL4gE3.net
ふつう vi
それ以外は認めない

644
デフォルトの名無しさん[]   投稿日:2015/11/12 19:10:20  ID:DhWMoO2o.net(2)
普通はviだわな
そして普通はPerlなんてゴミは使わずにPHP使うわな

色々と(悪い意味で)普通ではないPerl厨

645
デフォルトの名無しさん[sage]   投稿日:2015/11/12 21:26:17  ID:IFYI+LPx.net
君何しに来たの?

646
デフォルトの名無しさん[sage]   投稿日:2015/11/13 00:45:40  ID:ikUKmVnv.net
PHPしか触れないマンは能力が低いとだけ

647
デフォルトの名無しさん[sage]   投稿日:2015/11/15 16:06:14  ID:fMss6NJA.net
Notepad++, Sublime Text, Emacs 使いもみとめてくれ

648
デフォルトの名無しさん[age]   投稿日:2015/11/16 23:57:04  ID:uzaWZioD.net
ファイルハンドルを変数に格納するには
local(*IN);
my($fh) = *IN;

open($fh,"log_file.dat");
close($fh);
というやりかたで正しいですか?

649
デフォルトの名無しさん[sage]   投稿日:2015/11/17 00:39:11  ID:c7Lcp+iz.net
そのコードを、デバッグ実行してみれば?

650
デフォルトの名無しさん[sage]   投稿日:2015/11/17 00:41:00  ID:Lol1yQT9.net(4)
おそらくだめ。動きはするけど。
型グロブはグローバル識別子の値の共有。
すごく古いPerlやモジュールではない限り型グロブを使ったファイルハンドルの受け渡しはしない。

目的と周辺環境がいまいちわからんけど、
古すぎる何かを使ってない限り
open my $fh, '>', $file_name;
でいきなり作れるし扱える。

INはどこから来たの?
おそらくINにグローバル共有で渡してるのが間違い。

モジュールが古すぎるなら別も物を使用する。(戻り値などでファイルハンドルを返したりできる形式の物)。
自分で作った関数なら、作り直す。(戻り値などにファイルハンドルを返したり受け取ったりする形式)
openする時に、無意味にINを作ってるだけなら、作る必要はない。 (上記の記述で、自動で「無名のグローバル識別子の実体」と「そのリファレンス(型グロブ)」と言う、謎の物が生成される。(つまりINと言う識別子名を必要としない))。
コメント2件

651
デフォルトの名無しさん[]   投稿日:2015/11/17 01:56:10  ID:FRdVd2Wo.net(2)
今時 open のために local は使わないかな。少なくとも直接は使わない。

open( my $fh,"log_file.dat");
close( $fh);

でいいと思うよ。
http://perldoc.jp/docs/perl/5.18.1/perlopentut.pod
の「間接ファイルハンドル」のところを読みなさい。
または標準モジュールの IO::File を使う。

$fh = IO::File->new("log_file.dat");

いずれにしても必ずエラーチェックすること。
それから、この書き方では入力しかできない。入力でいいなら >650 の真似をしてはいけない。
入力以外をしたいならマニュアルを読むこと。
ちなみに、local で作られるのはローカル化されたパッケージ変数。グローバル変数ではない。
どうも >650 はあまり理解できていないように見受けられる。

652
デフォルトの名無しさん[]   投稿日:2015/11/17 02:52:54  ID:FRdVd2Wo.net(2)
ごめん、聞きたいのはその書き方が正しいかどうかだよね。
書き方に明らかな間違いは無い。IN がそこにしか現れないならちゃんと動くだろう。
しかしバグを避けたいならその書き方はやめておいた方がいい。
理由を一言で言うならパッケージ変数はダイナミックスコープを持つからだ。

653
デフォルトの名無しさん[sage]   投稿日:2015/11/17 02:55:17  ID:Lol1yQT9.net(4)
>ちなみに、local で作られるのはローカル化されたパッケージ変数。グローバル変数ではない。
へぇー
まぁ何も言うまい

654
デフォルトの名無しさん[sage]   投稿日:2015/11/17 11:14:19  ID:ioFPJbGAY
Perlのグローバル変数議論になると、グローバル変数とは何かの議論になって、実に不毛。
Perlにおいて、どこからでも参照できて、同じ内容を参照してることが保証されるのは、
特殊変数ぐらいなもの。

655
デフォルトの名無しさん[sage]   投稿日:2015/11/17 18:51:49  ID:Lol1yQT9.net(4)
たった今から外国人縛りなるものを始めた。

最初に全部解雇。
ドラフトは最下位の選手を取ってそのまま破棄
あとは安い外国人をどんどん雇う。2000万の外人とか超掘り出し物
トライアウトも外人は全部買い占め。


でも、なんだかバグったんだよね。

656
デフォルトの名無しさん[sage]   投稿日:2015/11/17 21:19:27  ID:SsP+S201.net

657
デフォルトの名無しさん[sage]   投稿日:2015/11/17 22:19:10  ID:Lol1yQT9.net(4)
その再帰のスタックは一番最適化した時で、
ループの時の (3 * 2 / 6 * 5) / 3 だよ

だた最終的な順番性の保持が必要じゃないと思うけど。
なのでおそらく最低資源量の理論値が間違い

658
デフォルトの名無しさん[age]   投稿日:2015/11/25 23:17:39  ID:nppNKaNJ.net
POST送信の場合でブラウザの戻るボタンを押したとき
ページの有効期限切れとか出るんだけど
これが出ないようにすることはできますか?
PHPではこれが出ないやり方が書いてあったけどperlではなかったので

659
デフォルトの名無しさん[sage]   投稿日:2015/11/26 03:04:16  ID:oAsmLq1R.net(2)
PHPと同じやり方すればいいよ

660
デフォルトの名無しさん[sage]   投稿日:2015/11/26 03:04:50  ID:oAsmLq1R.net(2)
訂正
PHPと同じやり方すればいいにょ

661
デフォルトの名無しさん[sage]   投稿日:2015/11/27 00:44:55  ID:VvUYa3rN.net
ブラウザの種類もバージョンも書かれていないが、そもそもperlはサーバー側
で動作するのでクライアント側の動作はコントロールできない。
JavaScript で書いて、ドキュメントに埋め込む方法で解決するべし。

662
デフォルトの名無しさん[]   投稿日:2015/11/27 16:35:45  ID:xA1zct9c.net(2)
decodeしてするとprintfが多バイト、1バイト両方を1文字として扱うため
表示がずれるんですが、printf関数だけは多バイト文字を2文字として扱うようにする
いい方法はないでしょうか?

$ perl -e 'use Encode; binmode STDOUT,":encoding(cp932)";printf"%05s\n",decode("Shift_JIS",qq/あい/)'
000あい
これを「0あい」と表示するようにしたいです

663
デフォルトの名無しさん[sage]   投稿日:2015/11/27 16:50:33  ID:xA1zct9c.net(2)
http://okwave.jp/qa/q7039163.html
事故レスですが、ここに答えありました

binmode(STDOUT,":bytes");

と出力をバイトモードにすればいいみたいですね

664
デフォルトの名無しさん[sage]   投稿日:2015/11/27 22:14:46  ID:bQBvJ959.net
printfの成形の段階で文字じゃなくバイトで扱いたいならその時点でencodeすべき(decodeされた"文字"を渡すべきでない)と思う
コメント1件

665
デフォルトの名無しさん[sage]   投稿日:2015/11/28 00:57:52  ID:5xoIDpx5.net
似たようなところで、Perlが様々な所で1文字を1単位として扱うのをやめさせるには
use bytes;
と言うのもあるよ。
レキシカルスコープだから好きなところでだけ使うといい。

use utf8;
my $p = 'あいうえお';


{
use bytes;

print + length($p) . "\n"; # バイト数(utf8なら15のはず)

my $byte_p = $p; # 置換用コピー
$byte_p =~ s/./0/g;
print + $byte_p . "\n"; # utf8なら0が15個になってるはず

}
{
print + length($p) . "\n"; # 文字数(5文字のはず)

my $string_p = $p; # 置換用コピー
$string_p =~ s/./0/g;
print + $string_p . "\n"; # 0が5個
}
コメント1件

666
デフォルトの名無しさん[sage]   投稿日:2015/11/28 14:29:18  ID:YlOdRsn5.net
ActivePerlのPPMに登録するCPAN用のロケーションを教えてください。
以前のcpan.uwinnipeg.ca/PPMPckagws/10xx/は使えなくなっているようです
コメント1件

667
デフォルトの名無しさん[sage]   投稿日:2015/11/28 23:34:39  ID:UVtxAzTA.net
>666
今は ActiveState のリポジトリが充実してるから、
網羅的な外部リポジトリだと Bribes de Perl ぐらいしか有用な所は残っていない
http://www.bribes.org/perl/
コメント1件

668
デフォルトの名無しさん[]   投稿日:2015/11/28 23:42:57  ID:fFFKFgep.net
Perlの正規表現でUTF-8のマルチバイト文字にマッチさせるにはどうしたらいいの?
色々試したら、16進数に変換してから、その16進数を使えばマッチするようになったんだが
めんどくさすぎる
コメント3件

669
デフォルトの名無しさん[]   投稿日:2015/11/29 00:13:48  ID:DITQRgW6.net
【 オンラインTCGエディター 】 >1

デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。

例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
バトスピ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、ガンダム・ウォー、ライブオン、ディメンション・ゼロ、カードヒーローなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書いて。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストして。
WEB通信での対戦は、個vs個、多数乱戦、チームvsチーム、個vsチームを可能な仕様とする方針。

設計思想は 《 RPGツクール 》 が良いかな?  他に、優れたエディター有ったら挙げてみて。

個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。

エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。

遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
なるべく前述3つで可能な再現は全て実装させる方向を目指す。 まぁ努力する・・・
バトスピ、ヴァンガ、バディ、デュエマなど発売済みゲームソフトが存在してるケースはベンダーに研究させる。

各社TCGを再現するテストプレイ ⇒ 更に改良や修正。

機能制限した下位版を5万円以上で発売 + デュエリ−グ用に改造した上位版でサーバー稼動=営業開始。

下位版の改造および商用利用には、別途で当社との契約が必要。

さ〜て、製作ベンダー見つけよっと!ww(クス
【報酬制カード】DUELEAGUE【デュエリーグ】13 /ラウンジクラシック板-13
コメント1件

670
デフォルトの名無しさん[]   投稿日:2015/11/29 01:13:07  ID:3h4H/kBH.net
>669
何の宣伝か分からない。
カードゲームのシステムを安く作るってことか?
コメント1件

671
デフォルトの名無しさん[sage]   投稿日:2015/11/29 01:16:30  ID:p0UOa4e5.net

672
デフォルトの名無しさん[sage]   投稿日:2015/11/29 01:58:55  ID:a1noPb1L.net
>664
なんでもかんでもデコードすればいいってもんじゃないんですね
>665
これは便利ですね!いったんデコードした文字列もdo{use bytes;}
の中ならバイト列として扱えるのですね

673
デフォルトの名無しさん[sage]   投稿日:2015/11/29 02:23:31  ID:+AoBy21/.net
>667
CPANが網羅できてて安定してればいいんだが、そのURLが良さそうだな
サンクス

674
デフォルトの名無しさん[sage]   投稿日:2015/11/29 03:13:39  ID:rf1AiNx3.net
win10の64bit版でperl32bit版動くかな?
ちなみにwin7の64bitではperl32動いてます

675
デフォルトの名無しさん[sage]   投稿日:2015/11/29 11:43:31  ID:caDIIhtW.net
文字として扱いたいならdecodeする(perlにこのバイト列は文字だよと教えてあげる)、この場合出力するときはencodeが必要
基本的な考え方はこれだけで、バイトのまま扱いたいならdecodeする意味がない

>668の場合「『文字』にマッチさせる」ならdecodeしようぜというだけの簡単な話

676
デフォルトの名無しさん[sage]   投稿日:2015/11/30 01:24:27  ID:krhCx465.net
>668
(?:[\x00-\x7F]|[\xC0-\xF4][\x80-\xBF]+)
こういうのを求めているのかい?

677
デフォルトの名無しさん[]   投稿日:2015/11/30 08:15:05  ID:yyLLqUKU.net
>670
非電源トレーディング・カード・ゲーム(TCG)をオンライン対戦化できるソフト。
更に様々な組み合わせでカードゲームのシステムを好みにエディット可能。

678
デフォルトの名無しさん[sage]   投稿日:2015/12/02 08:12:04  ID:GMHMoCLy.net(3)
リファレンスカウンタが動くとき手を加えたいのですが、
これはどのようにすれば良いのでしょうか。

具体的には、スコープを抜けたときの処理が自動 (イベントハンドラ?) なので、
連動して自動処理を組み込みたい場合などです。
コメント1件

679
デフォルトの名無しさん[sage]   投稿日:2015/12/02 11:52:28  ID:bHvwVQ5s.net
>678
何をしたいのかさっぱり分からんが、恐らくとてもPerlらしくないコードを書いてるんだと思う。
http://search.cpan.org/~pevans/Devel-Refcount/
http://perldoc.jp/docs/perl/perlobj.pod#Destructors

680
デフォルトの名無しさん[sage]   投稿日:2015/12/02 12:33:56  ID:GMHMoCLy.net(3)
上のリンクで半分だけ解決しますた。(まぁ元から知ってたけど)。
すまんが残りの半分(ハンドラ相当の部分)も頼む

681
デフォルトの名無しさん[age]   投稿日:2015/12/02 12:56:43  ID:uQGCYyvQ.net(4)
perlでget送信で未入力のフォームを送信しない方法って
location使って未入力のデータを省いたURLを作りリダイレクトるす以外にありますか?

682
デフォルトの名無しさん[sage]   投稿日:2015/12/02 13:04:56  ID:Qr4XnEb4.net
そういうのはWebProg板じゃないの?

683
デフォルトの名無しさん[sage]   投稿日:2015/12/02 13:13:42  ID:xfNgImPx.net(8)
> location使って未入力のデータを省いたURLを作りリダイレクトるす

酷い方法だな。そんなこと絶対にやらない。
コメント1件

684
デフォルトの名無しさん[sage]   投稿日:2015/12/02 13:52:48  ID:GMHMoCLy.net(3)
たぶん解決しますたー
解決法が分かって逆にPerl使うのやめようかと思うほどだったけど。
分かる人は分かるだろうからなぜかは言うまい。
コメント1件

685
デフォルトの名無しさん[sage]   投稿日:2015/12/02 14:09:54  ID:skx8YAXh.net(3)
>684
で、どうやったの?
最初の質問からはデストラクタを連想したけど

686
デフォルトの名無しさん[age]   投稿日:2015/12/02 15:43:50  ID:uQGCYyvQ.net(4)
>683
location使う方法のどこがひどいのか答えろ
じゃあ他にいい方法あるの?
コメント1件

687
デフォルトの名無しさん[sage]   投稿日:2015/12/02 16:16:30  ID:FA69z9wL.net
送信しないって、
フォーム上に何が入っていても無効にしたいということなんだろう?
HTML上にキャンセルボタンを付けたいと言う意味だと思うんだけど、
違うの?

688
デフォルトの名無しさん[sage]   投稿日:2015/12/02 16:32:42  ID:xfNgImPx.net(8)
>686
if フォームが空なら
 処理をキャンセル


これだけじゃんw

689
デフォルトの名無しさん[sage]   投稿日:2015/12/02 17:27:24  ID:skx8YAXh.net(3)
まず質問の意味がよくわからん
もっと詳しく

690
デフォルトの名無しさん[age]   投稿日:2015/12/02 17:59:46  ID:uQGCYyvQ.net(4)
<FORM METHOD="get" ACTION=\"test.cgi">
<input name="aaa">
<input name="bbb">
<input name="ccc">
<input type="submit" name="soushin" value="送信">
</FORM>

このフォームのaaaに100、bbbに200、cccに300を入れて送信すると
test.cgi?aaa=100&bbb=200&ccc=300となるやろ
そしてaaaに100を入力してbbbとcccに何も入力しなくて送信した場合
test.cgi?aaa=100&bbb=&ccc=となるけど
入力してないフォームのbbb=&ccc=の部分までurlに表示されてしまうので
test.cgi?aaa=100だけの形にしたいってことやで
コメント1件

691
デフォルトの名無しさん[sage]   投稿日:2015/12/02 18:47:39  ID:xfNgImPx.net(8)
>690
それで、未入力のフォームを送信しない方法ですよね?

送信しちゃダメなんですよ?

692
デフォルトの名無しさん[age]   投稿日:2015/12/02 18:53:06  ID:uQGCYyvQ.net(4)
書き方がおかしかったかもしれないけど
送信しないというよりURLに表示させないということを書きたかった
コメント1件

693
デフォルトの名無しさん[sage]   投稿日:2015/12/02 19:31:38  ID:skx8YAXh.net(3)
クライアントの動作なんてperlでどうにもできないのでjavascriptとかで頑張ってください

694
デフォルトの名無しさん[sage]   投稿日:2015/12/02 19:50:18  ID:G6CksgA0.net(2)
>?aaa=100&bbb=&ccc=
普通こういうのは、Form送信(Post)でする。
Getではやらない

>送信しないというより、URLに表示させない

普通はFormで(クライアント側のJavaScriptで)、
入力チェックするから、未入力項目があれば送信されない

初歩的なアプリの作り方がわかっていないのでは?

695
デフォルトの名無しさん[sage]   投稿日:2015/12/02 19:56:41  ID:xfNgImPx.net(8)
> 普通こういうのは、Form送信(Post)でする。
> Getではやらない

へぇ〜検索も?(・∀・)ニヤニヤ

> 初歩的なアプリの作り方がわかっていないのでは?
クスクスw

696
676[sage]   投稿日:2015/12/02 20:43:48  ID:G6CksgA0.net(2)
GETを使う場合は、そのURLをお気に入りに登録したいとか、
リンクとして使いたいなど

だから、そのURLが常に存在しないといけない。
誰かがアクセスしたら、そういうURLが存在しないではいけない

Formの入力欄に記入するようなものは普通、Postを使う

697
デフォルトの名無しさん[sage]   投稿日:2015/12/02 21:19:51  ID:xfNgImPx.net(8)
> Formの入力欄に記入するようなものは普通、Postを使う

へぇ〜検索も?(・∀・)ニヤニヤ

698
デフォルトの名無しさん[sage]   投稿日:2015/12/02 22:15:13  ID:ReYMJI7v.net(3)
普通って書いてるじゃん。気持ち悪いなぁ。質問への答えも的外れだし。
初心者うざいからどっか行ってくれない?

699
デフォルトの名無しさん[sage]   投稿日:2015/12/02 22:18:24  ID:xfNgImPx.net(8)
検索機能は普通の機能ですが?

700
デフォルトの名無しさん[sage]   投稿日:2015/12/02 22:32:49  ID:ReYMJI7v.net(3)
健全でない言葉が含まれているため表示しません 内容を確認する

701
デフォルトの名無しさん[sage]   投稿日:2015/12/02 22:34:37  ID:xfNgImPx.net(8)
> 普通こういうのは、Form送信(Post)でする。
> 普通って書いてるじゃん



そっかー、普通かどうかが重要なところなんだなー



> 検索機能が普通の機能かどうかなんてお前しか話題にしてないんだが。

ワロタwwwww

702
デフォルトの名無しさん[sage]   投稿日:2015/12/02 22:37:28  ID:ReYMJI7v.net(3)
<FORM METHOD="get" ACTION=\"test.cgi">
<input name="aaa">
<input name="bbb">
<input name="ccc">
<input type="submit" name="soushin" value="送信">
</FORM>

「こういうの」が検索に見えるか?

703
デフォルトの名無しさん[sage]   投稿日:2015/12/02 22:43:35  ID:xfNgImPx.net(8)
AND検索で有りそうだなw

704
デフォルトの名無しさん[sage]   投稿日:2015/12/03 00:30:55  ID:57HAAYTY.net
([\x00-\x7F]|[\xC0-\xF4][\x80-\xBF]+)
にしたらperl4でもデコード(このバイト列は文字だよと教えてあげる)、できました

705
デフォルトの名無しさん[sage]   投稿日:2015/12/03 13:28:03  ID:SmbrklNs.net
AND検索なら、スペース区切りでやりたいな
コメント1件

706
デフォルトの名無しさん[]   投稿日:2015/12/03 15:10:38  ID:+xl+clky.net
>692
問題は解決したかい?
そんなことしなくても誰も気にしないと思うんだけどね。
Google だってそんなことしてない。
どうしてもやりたいなら止めないけど少なくとも「javascript 必須」などという不親切はしないでほしい。

707
デフォルトの名無しさん[sage]   投稿日:2015/12/03 15:46:18  ID:z7gVyZ5r.net
>705
重要じゃないことなんだらいちいち言わなくていいよ。
「なら OR検索で」で終わる話だろ?

708
デフォルトの名無しさん[]   投稿日:2015/12/04 12:43:39  ID:V2tRhvU9.net
test1.plに
package test1;
sub aaa{}という関数があり

これをtest2.plで呼び出すにはtest1::aaa();とするんだけど
aaaという関数をtest1.plからtest3.plにあるpacage test3;に移した場合
全てのtest1::aaa()を呼び出しているところをtest3::aaa()に書き換えなければならないのがめんどくさいです
違うpakageに関数を移して上記のように書き換えなくても処理できる方法を教えてください
コメント1件

709
デフォルトの名無しさん[sage]   投稿日:2015/12/04 16:28:36  ID:IO9RpOoW.net(4)
まずなぜ名前を変えるのか。名前を変えたらアクセス先が変わるのは当たり前。普通は名前を変えるなんて事態はおこさない。どんな言語でも。
それでもどうしてもそうしたいなら、オブジェクト指向かそれ相当の仕組みを作れば、名前に左右されるのはコンストラクタだけで済む。
メソッドについては、インスタンスが自分の所属を知っているから。
そんな理由でオブジェクト指向相当の仕組み作る人いないとは思うけど。
コメント1件

710
デフォルトの名無しさん[sage]   投稿日:2015/12/04 16:29:50  ID:a4wJK9sN.net
普通にやれば、javascript 必須になるだろ

プログラミングの前にまず設計フェーズで、
画面構成を考える

画面入力 → 送信 → エラー
は、どう見てもおかしい

画面入力 → 入力チェック → 送信
送信の前に、未入力などは入力チェックではじくのが普通

一々、送信して確かめるまでもない。
もし送信エラーにでもなれば、ずっと待たないといけないし、
未入力を確かめるだけに、待つのはアホらしい
コメント1件

711
デフォルトの名無しさん[sage]   投稿日:2015/12/04 16:39:47  ID:X5G422Yr.net(2)
>709
> まずなぜ名前を変えるのか。

適切じゃなくなったからだろ。
普通は最初は小さく作って大きくなったら
それぞれの役割に分けるものだよ。

最初から大規模を考えて作ったりしない。
時間の無駄だからね。

712
デフォルトの名無しさん[sage]   投稿日:2015/12/04 16:48:42  ID:IO9RpOoW.net(4)
俺にちょっかいけけてどうする
そう思うなら答えてやれよ。その知識()で。

713
デフォルトの名無しさん[sage]   投稿日:2015/12/04 16:51:05  ID:IO9RpOoW.net(4)
まぁさっき書いた方法以外にもいくつかあるが
どっちにせよ基本デザインから癖にしたほうがいいさ

714
デフォルトの名無しさん[]   投稿日:2015/12/04 17:30:17  ID:+8iGMfAv.net
>710
当人そっちのけでまだ続けるの? それは無能な奴の「普通」だ。
動作しなくても問題無いように書いて、動作させるかどうか
クライアントに選ばせるのがまともな人の「普通」だ。

715
デフォルトの名無しさん[sage]   投稿日:2015/12/04 17:35:53  ID:2UHuclpm.net(2)
>708
適当なところで
*test1::aaa = *test3::aaa;
これで呼び出し元を書き換えなくてもtest3:::aaa()を呼んでるのとほぼ同じ

名前で指定している以上名前に依存しているので変更する可能性があるなら名前に依存しないようにするのがいいね
最初に依存させてしまった場合面倒でも書き換えるか上記のように小手先で凌ぐしかない

716
デフォルトの名無しさん[sage]   投稿日:2015/12/04 17:47:14  ID:IO9RpOoW.net(4)
ちゃちゃ入れたいわけじゃないが、それでは名前を変えてる意味自体がないような。
と言うか名前を変えたいのに呼び出しの名前は変えたくないって設計自体がおかしいんだが。

俺は山田太郎だったが、今日から鈴木太郎にすることにする。
でもお前らは山田太郎と呼べ。鈴木太郎と呼ぶな。
コメント1件

717
デフォルトの名無しさん[sage]   投稿日:2015/12/04 17:55:12  ID:X5G422Yr.net(2)
>716
ご結婚おめでとうございます。

718
sage[]   投稿日:2015/12/04 19:12:31  ID:nXWHZn48.net
こんなのどう?
# test1.pl
package test1;
use test3.pl;
sub aaa{
return test3::aaa(@_);
}

719
デフォルトの名無しさん[sage]   投稿日:2015/12/04 19:20:46  ID:2UHuclpm.net(2)
>use test3.pl;
アウト

720
デフォルトの名無しさん[]   投稿日:2015/12/04 20:02:59  ID:M6a+qJl9.net
怠慢で傲慢な人間はすぐプログラムに逃げる!!!!!!!!!!!!!!!
コメント1件

721
デフォルトの名無しさん[sage]   投稿日:2015/12/05 00:29:23  ID:ri/S3r3P.net
use Exporter; でエクスポートして、パッケージ修飾なしで呼び出すとよい。

722
デフォルトの名無しさん[sage]   投稿日:2015/12/06 01:04:28  ID:IvZuYvTu.net
>720
それでええんやで。
怠惰であるための努力は惜しまないのはプログラマの美徳。

723
デフォルトの名無しさん[sage]   投稿日:2015/12/06 05:10:20  ID:8XEspSV4.net(3)
関数やオブジェクトで想定済みのエラーが発生した際、
呼び出し元でエラーが発生したように die みたいのを出力する仕組みがあったと思うのですが、思い出せません。
どうやるのでしょうか

724
デフォルトの名無しさん[sage]   投稿日:2015/12/06 05:13:24  ID:8XEspSV4.net(3)
自己解説しました(速)

725
デフォルトの名無しさん[sage]   投稿日:2015/12/06 10:43:20  ID:s7gSNx8c.net
自己解決したならその方法残してけよ
Carp::croakでしたとか

726
デフォルトの名無しさん[]   投稿日:2015/12/06 16:05:37  ID:LGfwZwX+.net(3)
Perlはとことんゴミだな
APNS使おうとしてもエラーでどうにもならない
CPANとかゆうゴミをいれたくなかったが入れたらどうにかなるかと思いきやこれもエラーでまともに動かない
サーバーが汚れただけ
そして数時間試行錯誤しても動かない
こんなゴミ言語が未だに存在してることに驚き
簡単な処理しかできない、簡単な処理ならわざわざこんなゴミを使わなくてもシェルスクリプトで十分

存在価値も学ぶ価値もないゴミ
それがPerl
コメント2件

727
デフォルトの名無しさん[sage]   投稿日:2015/12/06 16:06:39  ID:0+P86g0v.net
>726
perlもろくに使えない子かよ

728
デフォルトの名無しさん[sage]   投稿日:2015/12/06 16:09:59  ID:tvkQIcTy.net
自分が使えない、できないことはなんでもゴミ扱いになる奴、いるよねぇwww

729
デフォルトの名無しさん[sage]   投稿日:2015/12/06 16:29:49  ID:mcZOC1Ov.net
面接時に、「Perl使えますか?」って聞くと良いかもな

730
デフォルトの名無しさん[]   投稿日:2015/12/06 19:33:37  ID:LGfwZwX+.net(3)
健全でない言葉が含まれているため表示しません 内容を確認する
コメント1件

731
デフォルトの名無しさん[]   投稿日:2015/12/06 19:37:39  ID:LGfwZwX+.net(3)
2023年に消えてなくなるとかってスレ建ってたが、そんなにもつわけないだろww
オリンピックまでもつかどうかwwwwwww

732
デフォルトの名無しさん[sage]   投稿日:2015/12/06 19:41:27  ID:3UcP48Kh.net
理解できないと言うのは、個人の能力だから仕方ないな。

CGIに限らず、Perlはサーバー管理のいたるところで使っている。
プログラム作成時にもPerlが必要。
管理者を目指したいならマスターと使いこなせる能力がどうしても必要になる。
管理者になりたくないなら必要ないかも知れないな。

733
デフォルトの名無しさん[sage]   投稿日:2015/12/06 19:58:26  ID:8XEspSV4.net(3)
触らなくもいいぞ

734
デフォルトの名無しさん[]   投稿日:2015/12/07 07:30:47  ID:DL/Ny2Dm.net
偽サイト扱いにしようとしてるんだけど
見る方法あるかな?
http://webcache.googleusercontent.com/search?q=cache:I--rFvcld7oJ:item.rakuten.co.j...;cd=2&hl=ja&ct=clnk&gl=jp

735
デフォルトの名無しさん[]   投稿日:2015/12/07 10:10:21  ID:g2cewZx1.net(2)
>726
APNSもCPANもロクに動かせないで可哀想
高校生の俺でもできるんだが?
コメント1件

736
デフォルトの名無しさん[]   投稿日:2015/12/07 10:11:28  ID:g2cewZx1.net(2)
>730
君にはPHPがお似合いだよ

737
デフォルトの名無しさん[sage]   投稿日:2015/12/07 17:56:48  ID:WaL6xLeX.net(2)
>735
「ゴキブリも食べられないなんて可哀想
高校生の俺でも食べられるんだが?」
と言ってるのと同じだということに気付かない

子供は自分の世界が全てだからそれが世間でどう見られるか分からないんだろうな
バカッターで犯罪自慢するガキとある意味同じ精神構造

738
デフォルトの名無しさん[sage]   投稿日:2015/12/07 22:19:18  ID:7ldc1+VM.net(3)
APNSもCPANはゴキブリじゃないので全く検討違いのたとえだなw

739
デフォルトの名無しさん[sage]   投稿日:2015/12/07 23:18:48  ID:sV5LLRP4.net
もう触るなよ(呆れ)

740
デフォルトの名無しさん[sage]   投稿日:2015/12/07 23:24:22  ID:WaL6xLeX.net(2)
丸一日かかっても文字化けが直らない
これはもう完全にPerlがゴミだからだろう
マルチバイト文字すらまともに扱えないゴミそれがPerl

プログラム全般の腕は神クラスだからちょっとした機能追加程度ならPerlでもできるだろうと思って引き受けたのが間違いだった
Perlがゴミすぎて多少金もらったところで割に合わん

CPAN=世の中に不要=ゴキブリ
だから例えになってる
APNSゴキブリかどうか怪しいライン

文字コードすらまともに扱えないゴミ言語Perl

741
デフォルトの名無しさん[age]   投稿日:2015/12/07 23:25:34  ID:g3R3jQC/.net
$str = "abcdef";
$str = substr($str,0,4);
print "str=$str";
の場合はstr=abcdですが

$str = "abcあいうえお";
$str = substr($str,0,4);
print "str=$str";
の場合だと全角文字の1バイト分を切り取ってしまうのでabc?のように文字化けしまいます

そこで全角文字の1バイト分を切り取ってしまっている判定をするにはどうしたらいいんですか?

742
デフォルトの名無しさん[sage]   投稿日:2015/12/07 23:30:39  ID:7ldc1+VM.net(3)
> の場合だと全角文字の1バイト分を切り取ってしまうのでabc?のように文字化けしまいます

正しく扱っているならば「abcあ」とちゃんと4文字分表示されるはずですが?
ソースコードをUTF8で書いて、use utf8;をファイルの頭に入れてください。

743
デフォルトの名無しさん[sage]   投稿日:2015/12/07 23:32:19  ID:7ldc1+VM.net(3)
RubyでもPythonでもJavaScriptでもUTF8がソースコードの文字コードの標準なので、
ソースコードは必ずUTF8で書くようにしてください。

744
デフォルトの名無しさん[sage]   投稿日:2015/12/08 01:32:22  ID:Vr6uKUE9.net
cpanがゴキってのはおかしくないか。世間一般では、cpanそのもはゴキではなく、ゴキの集まる排水溝や汚物入れのイメージだろう。

745
デフォルトの名無しさん[sage]   投稿日:2015/12/08 01:53:20  ID:XWTC8s4u.net
cpanってなにかと思ったらRubyでいうGemsみたいなもんか。
ゴキブリ?

746
デフォルトの名無しさん[]   投稿日:2015/12/08 18:23:20  ID:4zt2FdXQ.net(2)
open(LOCK,"test.lock");
my($locked) = flock(LOCK,6);

print "locked=$locked<br>";

foreach(1...10){

sleep(1);

}

close(LOCK);#ロックの解除

これを実行して別プロセスで10秒以内にこれを実行すると
あとから実行したプロセスの$lockedが1なのでロックできたことになり排他処理にならないです
理論的にはあとから実行したプロセスは前のプロセスがロック中なのでロックできないので
$lockedが0にならないとおかしいのにロックできてしまう理由を教えてください
コメント2件

747
デフォルトの名無しさん[sage]   投稿日:2015/12/08 23:31:16  ID:MH5dvwqp.net
>746
実行環境ぐらい書いてくれんか。

http://perldoc.jp/docs/perl/perlfaq5.pod#How32can32I32lock32a32file63
http://perldoc.jp/func/flock
http://perldoc.jp/func/sleep

#!/usr/bin/perl -w
use strict;
use Fcntl qw(:DEFAULT :flock);
my $file = './count.txt';
$|++;
sysopen my $fh, $file, O_RDWR|O_CREAT or die "can't open $file: $!";
flock $fh, LOCK_EX|LOCK_NB or die "can't flock $file: $!";
my $num = <$fh> || 0;
seek $fh, 0, 0 or die "can't rewind $file: $!";
truncate $fh, 0 or die "can't truncate $file: $!";
print "count up $num -> ", $num + 1, ', wait...';
print $fh $num + 1 or die "can't write $file: $!";
sleep 10;
close $fh or die "can't close $file: $!";
print "done.\n";
__END__

Win7だとこれで後から実行したプロセスは
can't flock ./count.txt: ブロック不可のソケット操作をすぐに完了できませんでした。 at test.p line 7.
とすぐにエラー吐いて終わる。

748
デフォルトの名無しさん[]   投稿日:2015/12/08 23:41:12  ID:4zt2FdXQ.net(2)
win 7でperl5.8やで

749
デフォルトの名無しさん[sage]   投稿日:2015/12/09 02:01:44  ID:Rl0M6cqs.net
Perl3の時点で8ビットクリーンだから文字コードの件は解決されてるよ
まさかPerl2を使ってるんじゃないだろうね?
コメント1件

750
デフォルトの名無しさん[sage]   投稿日:2015/12/09 04:34:41  ID:ZwktDk40.net
>749
文字コードの問題って?
言い方がアバウトすぎる。その言い方だと文字コードに
関する全ての問題が解決したかのようだ。

あたり前だが、どんな文字コードも扱えるってだけで
文字コードの変換は必要。

751
デフォルトの名無しさん[sage]   投稿日:2015/12/09 07:53:11  ID:C7vm2jzF.net
>746
こっちだと後からの$lockedは0になった
win7でcygwinでperl5.14.2

752
デフォルトの名無しさん[]   投稿日:2015/12/09 08:58:01  ID:FsDy/hTq.net(2)
open(LOCK,"test.lock");
my($locked) = flock(LOCK,6);

print "locked=$locked<br>";

foreach(1...10){

sleep(1);

}

close(LOCK);#ロックの解除

をlock_test.cgiファイルに保存して実行し、その数秒あと別プロセスでlock_test.cgiを実行すると
あとのプロセスのlockedも1になったが
同じプログラムでlock_test2.cgiを作りlock_test.cgiの数秒あとにlock_test2.cgiを実行したら
lockedが0になった
違うファイルとして実行すると結果が変わりました
これはどうしてですか?

753
デフォルトの名無しさん[sage]   投稿日:2015/12/09 10:15:10  ID:RETk1FrE.net
プロセスが関係してると思われる。
それ以上は実行環境がわからんとわからん。

754
デフォルトの名無しさん[age]   投稿日:2015/12/09 15:32:32  ID:FsDy/hTq.net(2)
foreach(1...10){

sleep(1);
my($time) = time;
print "time=$time";

}
このようにtimeを入れてプロセスを調べてみたら
プロセス1の処理中にプロセス2を実行しても
プロセス2の最初のtimeがプロセス1の一番最後のtimeより大きい値になっていたので
プロセス1と2は被らないことがわかりました。
たぶんプロセス1の処理が終わるまで待機しているんだと思う。

755
デフォルトの名無しさん[]   投稿日:2015/12/10 17:59:54  ID:3u6QjuZw.net
パスワードを暗号化する場合crpty関数を使うのはやめたほうがいいですか?
この関数の暗号化は解読されにくいですか?
コメント1件

756
デフォルトの名無しさん[sage]   投稿日:2015/12/10 18:42:16  ID:Ti4G586p.net
>755
どんな暗号化でも、暗号に使ったキーがばれれば解読されます。

757
デフォルトの名無しさん[sage]   投稿日:2015/12/10 18:43:53  ID:T5ZWNGJ6.net
cryptのことだと思うけど、そもそも非可逆です

758
デフォルトの名無しさん[sage]   投稿日:2015/12/12 11:34:57  ID:l5nWdIDH.net
文字コード変換の話を持ち出してわざわざ問題を作っちゃいけないよ

759
デフォルトの名無しさん[]   投稿日:2015/12/15 10:42:06  ID:lk10G3Xu.net
MACアドレスを取得する方法を教えてください
これが取得できればセッションIDなんて作らなくてもいいので
コメント2件

760
デフォルトの名無しさん[sage]   投稿日:2015/12/15 11:48:54  ID:DSeHdp2+.net
同一セグメント内でなければ無理

761
デフォルトの名無しさん[sage]   投稿日:2015/12/15 12:34:09  ID:xDMHhclP.net
>759
ifconfig呼べば?

762
デフォルトの名無しさん[sage]   投稿日:2015/12/15 15:05:13  ID:J0Uf6VI2.net
>759
Windowsなら、これでいいんじゃない?
encode と decode をちゃんとやれば。

print `net config workstation`;

763
デフォルトの名無しさん[sage]   投稿日:2015/12/15 15:52:58  ID:r7pOSKDf.net
どうせまたWebプログラムの話なんだろ?

764
デフォルトの名無しさん[]   投稿日:2015/12/15 22:15:28  ID:ECtQrB8h.net
my @nihongo = $_ =~ m/(?:[^\p{InBasicLatin}。-゚])/g;
my $output = sprintf "%-*s%s", 24 - scalar @nihongo, $ko, $page;

マルチバイトの文字を抽出するのにこれよりいい正規表現はないでしょうか?
\p{InHalfwidthAndFullwidthForms}では半角カナ以外に全角英数にもマッチしてしまい
使い物になりませんでした

765
デフォルトの名無しさん[sage]   投稿日:2015/12/16 01:02:45  ID:G9F0Y7Zn.net(3)
Ruby は鬼車という超強力な正規表現エンジンを採用しているので、

正規表現で日本語のひらがな・カタカナ・漢字にマッチさせるのも簡単です

766
デフォルトの名無しさん[sage]   投稿日:2015/12/16 02:15:49  ID:YMTo43VL.net(2)
簡易的なWebサーバー機能が必要で、超簡易的なソケットで最低限の物を組みました。いま手元にコードがないのですが最終的にPARでexeにする予定で、Perl単体で完結、Brewとかそっち系ではダメな状況です。

while(my $c=<sock>){
print $c "HTTP/1.1 200 OK/n"
print $c "content-type: image/png;/n/n";
print $c $imgbin;
close($c);
}
こんなレベルです。
ローカルだとこれが500Mbpsの速度で取得できますが、同じネットワーク内の他PCからだと20Mbps程度にしかなりません。
Windows上にApacheを入れて動かすと、てくださいPCでも500Mbps前後の速度が出るので、Perlの問題かなと思っています。
ファイヤーウォールも切りまた、Linuxサーバーでも試しましたが変わりませんでした。
何かこうした方がいい、というアイデアはありませんでしょうか。

宜しくお願いします。
コメント1件

767
デフォルトの名無しさん[sage]   投稿日:2015/12/16 02:26:32  ID:G9F0Y7Zn.net(3)
ネット回線は0.5秒もかかり、メモリの千倍以上遅い

プログラムの0.1秒の遅さは、
ネット回線の遅さにうずもれるから皆、RoR を使う

ネット通信で遅いのは、気にしない方がよい
コメント1件

768
741[sage]   投稿日:2015/12/16 04:21:18  ID:SEae+C8u.net
MACアドレスって偽造できるって本当ですか!?
他人のMACアドレスに簡単になりすませるって!
そしたらセッションIDどうやって作ればいいんですか

769
デフォルトの名無しさん[sage]   投稿日:2015/12/16 06:04:06  ID:G9F0Y7Zn.net(3)
MACを使うのは、同じLAN内だけでは?

スイッチングハブが同じLANのすべての機器に、ブロードキャストすると、
それをキャッチした各機器が、スイッチングハブにMACを伝える。
その後、各機器がスイッチングハブを通して、通信できるようになる

スイッチングハブにMACを伝える際、当然、
好きな数字を渡すこともできる

その結果、たまたま同じMACの機器が2台あると、通信できなくなるかも

770
デフォルトの名無しさん[sage]   投稿日:2015/12/16 08:46:08  ID:YMTo43VL.net(2)
>767
RoRもJAVAもVB他使えるor経験あるけど、Perlである必要があります

771
デフォルトの名無しさん[sage]   投稿日:2015/12/16 12:38:56  ID:IT3U5Wv/.net
>766
apacheとperlは本当に同じ条件なの?
というかapacheの500mbpsはローカル通信じゃないの?
コメント1件

772
デフォルトの名無しさん[sage]   投稿日:2015/12/16 13:02:21  ID:xeWyKFIm.net
>771 詳しく書きますね
なおキャッシュは無効にしているためキャッシュで速度が上がったわけではありません。
[A:開発PC(Win10)]
Perlで簡易的なHttpサーバーを作成
開発PC内ブラウザでアクセスし、50MBのデータをダウンロード、約500Mbpsで完了
[B:タブレット]
ブラウザでAで稼働中のサーバーのURLを開き、50MBのデータを取得。20Mbps程度の速度しか出ない。
[A] の環境でネットワークかPerlかの問題切り分けのため、Apacheにて起動。HTMLやダウンロードするファイルは同じもの。
[B] タブレットでダウンロードすると400Mbpsの速度でダウンロード完了
[A]をPerlで作った簡易サーバーに切り替え、[A]内ではやはり500Mbps程度の速度が出るが、[B]からは20Mbps程度になる。
現在JAVAで作り直しているが、JAVAでも400Mbpsの速度が出ており、やはりPerlの問題だろうと推定中です。
コメント1件

773
デフォルトの名無しさん[sage]   投稿日:2015/12/16 22:22:12  ID:WmK5OxGU.net(2)
以前windowsで簡易的なGUIが簡単に出来るクラスを作ったんだよな。
簡単にwindow生成したり、画像を読み込んで好きな位置に表示したり、
表示物のメモリ内データをどうこうしたりとか、
クリックとかのイベントハンドラを簡単に作れた記憶があるんだ。
使い方さえ知ってればな。


見たところ、コードとかデザイン設計は丁寧に作ったと思われるくさいんだけど、
クラスの使いかたとか説明書を一切残していなかったっぽいせいで、
まじ使いかた分からん。
仕様書っぽいの大量に同封されてたけど、全部内部仕様書。外部仕様書が見当たらない。

いったいこれは何が出来て何が出来ないんだ。
そして出来ることはどうやれば出来るんだ。
まじいい加減にしろや。使いかたの分からんソフトなんていらねぇんだよ。

774
デフォルトの名無しさん[sage]   投稿日:2015/12/16 22:23:13  ID:WmK5OxGU.net(2)
Perlで手っ取り早くアルゴリズム内部の視覚化テストやろうと思ったんだけど、
しょうがねぇからJava使うか。

775
デフォルトの名無しさん[sage]   投稿日:2015/12/17 01:30:00  ID:ldEcnmm8.net
Apacheを使って、同じネットワーク内の他PCからLWP::Simpleでgetしたら速い
の?それとも遅いの?遅いならPerlのソケット処理のせい。速いのなら"簡易的
なWebサーバー機能"の書き方の問題。そもそも

while(my $c=<sock>){
print $c "HTTP/1.1 200 OK/n"

は正しい?$c はソケットなの?パケットのデータなの?
コメント1件

776
デフォルトの名無しさん[sage]   投稿日:2015/12/17 09:13:09  ID:CLoQ9apk.net
>772
最初の書き込みの他のPCとはタブレットだったの?
もしかしてWiFi?
そうなら400Mbpsの方が速すぎ
コメント1件

777
デフォルトの名無しさん[sage]   投稿日:2015/12/17 15:57:06  ID:GhSUIBXP.net(3)
ハッシュについてですが

my %array = (
apple =>

778
デフォルトの名無しさん[sage]   投稿日:2015/12/17 15:58:48  ID:GhSUIBXP.net(3)
うまく投稿できなかったので再投稿。

my %array = (
apple => "red",
remon => "yellow",
melon => "green"
);

my $array ="fruit";

print "ARRAY: $array / APPLE: $array{'apple'} / REMON: $array{'remon'} / MELON $array{'melon'}\n";

という具合に%arrayでハッシュを定義しつつ、$arrayという変数って使っても問題ないんですか?
やってみたら大丈夫そうだったので$array = \%array;としてリファレンスを入れて使おうかなと思ったので。
それとも混乱を招くからやめておくべき?
コメント1件

779
デフォルトの名無しさん[sage]   投稿日:2015/12/17 16:55:37  ID:EBFCSaOt.net
その使い方で混乱した試しは一度もないが
hashにarrayと言う名前を付ける方が問題だろう
コメント1件

780
デフォルトの名無しさん[sage]   投稿日:2015/12/17 17:00:48  ID:pKEeQlLl.net(4)
>775
ごめん、雰囲気だけで入力したもんで違います

$data には画像データが入ってます。
while (accept( $sock_client, $sock_receive )) {
my $content;
while (my $line = <$sock_client>) {
$content .= $line;
if($line eq "\n" || $line eq "\r\n"){last;}
}

print $sock_client "HTTP/1.1 200 OK\n";
print $sock_client "Content-Type: image/jpeg;\n\n";
print $sock_client $data;
close $sock_client;
}

>776
11acはアンテナ1本でも800Mbps以上出る規格なんで不思議じゃないですよ
ユーチューバー避けたりしてるといい動画が見当たらなかったので適当に出してきましたが
外のサーバーに対する測定で
https://www.youtube.com/watch?v=qsVs0rWPKxc DL 230Mpbs / UP 130Mbps
https://www.youtube.com/watch?v=jsEutRQ2Zyo DL 228Mbps / UP 60Mbps
の速度が出ます。これをローカルで図ってるので400Mbpsでも不思議はありません(Surfaceでは530Mbps出てました)
コメント1件

781
デフォルトの名無しさん[sage]   投稿日:2015/12/17 17:04:29  ID:GhSUIBXP.net(3)
>779
レスthx
phpの連想配列のノリでarrayって名前を付けてました…。

782
デフォルトの名無しさん[sage]   投稿日:2015/12/17 17:18:18  ID:pKEeQlLl.net(4)
>780ですが
図解するとこういう感じです
http://i.imgur.com/ZjyQFEB.png

783
デフォルトの名無しさん[]   投稿日:2015/12/17 17:38:43  ID:tEQhDMc4.net
2ちゃんねる風の掲示板でCookieをセットしてないで書き込みを行おうとすると
http://i.imgur.com/92opkeI.png のような画面が出ますが
予めクッキーを設定する事ってPerlだとどのような関数を使うのでしょうか?
コメント2件

784
デフォルトの名無しさん[sage]   投稿日:2015/12/17 17:43:43  ID:2TBI1XHI.net(2)
内側からだと同じものが外側からだと遅くなるってこれもうわかんねぇな
本当にperlレベルの問題なのか?

>778
$var と @var と %varは全て別のものなので、そういう意味では問題ない(ややこしいが)
最初からリファレンスが欲しいなら $hash = {foo => 'bar'} のように () ではなく {} で作れる
コメント1件

785
デフォルトの名無しさん[sage]   投稿日:2015/12/17 17:45:39  ID:pKEeQlLl.net(4)
>783
それはHTTPの仕様で(ほぼ)Perlとか関係ないよ

print "Content-type: text/html\n";

と同じように

print "Set-Cookie: KEY=VALUE; path=/; expires=Wednesday, 09-Nov-99 23:12:40 GMT\n";

のように書く。

参考
http://www.tohoho-web.com/wwwcook.htm

786
デフォルトの名無しさん[sage]   投稿日:2015/12/17 17:46:56  ID:2TBI1XHI.net(2)
>783
>予めクッキーを設定する事
どういう意味?というかクッキーの仕組み分かってる?

787
デフォルトの名無しさん[sage]   投稿日:2015/12/17 17:47:31  ID:pKEeQlLl.net(4)
>784
>本当にperlレベルの問題なのか?
正直なんとも。Javaで作ったところこちらは400Mbpsの速度が出ました。
なので今のところ、Apache,Java => 400Mbps , Perl => 40Mbps という感じですね。
コード自体は問題ないとは思うんですが。
コメント1件

788
デフォルトの名無しさん[sage]   投稿日:2015/12/17 21:11:03  ID:X03/A5Pd.net
>787
perl製のサーバーとapacheで吐くヘッダーは同じ?
apacheではContent-LengthやTransfer-Encodingが吐かれてるけどperlでは吐かれてないとか。
後はchunk、rwinとかが怪しいかな。
perlの問題かアプリの問題かを切り分けるためにplackup等で想定の速度が出るか試した方が良いと思う。

789
デフォルトの名無しさん[sage]   投稿日:2015/12/17 21:28:26  ID:E7N+Lp99.net
いいかげんWebProgでやれや。
コメント1件

790
デフォルトの名無しさん[sage]   投稿日:2015/12/17 21:28:57  ID:TfrmoFMM.net
やずや

791
デフォルトの名無しさん[sage]   投稿日:2015/12/18 00:03:56  ID:F3M2aD/V.net
PerlでWebクライアント作って試してみたか?あと間にプロクシーを挟んで
パケットのダンプをとると予想外のことが分かるかも。

792
デフォルトの名無しさん[sage]   投稿日:2015/12/18 17:28:55  ID:cbXr3ozq.net
bashで、「command 2>&1 | tee file」のようにして、
Linuxコマンドcommandの標準出力と標準エラー出力を、ターミナルとファイルfileにリアルタイムに出力しています。
これをPerl上で、(1)(2)(3)のように行ったのですが、上手くいきません。
対処方法を教えて下さい。

(1) ターミナル、file 共に出力されない
my $command = "command 2>&1 | tee file";
open( my $handler, $command );

(2) 一部ターミナルとfileに出力される
  しかし、進捗(◯◯%)が出力されない
my $command = "| command 2>&1";
open( my $handler, $command );
open( my $out, '>', $file );

while(<$handler>){
chomp;
print $out $_, '\n';
}

(3) file、ターミナル共に出力されない
my $command = "command 2>&1 | tee file";
`my $handler, $command`;
コメント2件

793
デフォルトの名無しさん[]   投稿日:2015/12/18 18:12:43  ID:m1ruI8Ik.net(2)
flockを使ってロック用ファイルとテンポラリファイルを使わずに
直接ファイルをロックした場合
ファイルの一番最初の行にデータを追加していくようなことは不可能ですか?
コメント3件

794
デフォルトの名無しさん[]   投稿日:2015/12/18 18:16:27  ID:m1ruI8Ik.net(2)
それと@lines=<IN>のように全部一括読み込みはしないものとし
while($line=<IN>){}のように1行ずつ読み込むものとします

795
デフォルトの名無しさん[sage]   投稿日:2015/12/18 20:56:10  ID:AHc8NOa/.net
>792
perlでコマンドと同じ動作を再現したいのかperlで外部コマンドを実行したいのかはっきりして

>793-794
1行ずつしか読み込まないなら一時ファイルに書き出していくしかないんじゃないかな
なので安全にロックしながらやるなら「ロック用ファイルとテンポラリファイルを使」うのが最適解かと

796
デフォルトの名無しさん[sage]   投稿日:2015/12/19 02:05:18  ID:akpvQEZV.net
>793-794
1行ずつではなく追加する行のバイト長ずつだが

#!/usr/bin/perl
use strict; use warnings; use Fcntl qw(LOCK_EX SEEK_CUR);
my $ow_line = "append line to top of file.\n";
my $ow_len = length $ow_line;
open my $fh, '+<', $ARGV[0] or die $!;
flock $fh, LOCK_EX or die $!;
binmode $fh;
while (my $buf_len = sysread $fh, my $buf_line, $ow_len) {
  sysseek $fh, -$buf_len, SEEK_CUR;
  syswrite $fh, $ow_line;
  $ow_line = $buf_line;
  $ow_len = $buf_len;
}
syswrite $fh, $ow_line;
close $fh or die $!;

797
デフォルトの名無しさん[sage]   投稿日:2015/12/19 17:05:13  ID:3J24i6x7.net
>792
system使ってみては?

>793
多分アドバイサリロックを分かってない
ロックするとファイルアクセスできなくなると思ってるでしょ

798
デフォルトの名無しさん[]   投稿日:2015/12/20 11:26:07  ID:kojJskyY.net(2)
このソースってどこかに間違いがあるのでしょうか?
#!/usr/bin/perl
require "cgi-lib.pl";
print "Content-type: text/html; charset=Shift_JIS\n\n";
print <<EOL;
<html>
<body>
<h2>一行掲示板</h2>
<form method="post" action="bbs1.cgi">
メッセージ:<input type="text" name="message" size="60">
<input type="submit" value="送信">
</form>
<hr>
EOL
&ReadParse(*form);
$message = $form{"message"};
open(IN, "bbs1.txt");
@log = <IN>;
close(IN);
if ($message ne "") {
unshift @log, "$message\n";
open(OUT, "> bbs1.txt");
print OUT @log;
close(OUT);
}
foreach $data (@log) {
chop $data;
print "$data<br>\n";
}
print "</body>\n</html>\n";
コメント2件

799
デフォルトの名無しさん[sage]   投稿日:2015/12/20 11:40:35  ID:kVJMqtKU.net
何が問題なのかわからない

800
デフォルトの名無しさん[sage]   投稿日:2015/12/20 12:22:23  ID:mtCgH6UA.net
<script>location.href="http://google.com/";;</script> って発言してみて

801
デフォルトの名無しさん[sage]   投稿日:2015/12/20 13:53:14  ID:jqjYNF9z.net
>798
cgi-lib.plは過去のものなので今は使ってはいけない。
今時Shift_JISはありえない。動くだろうけど
&ReadParseのように関数名に&をつけるのは古い書き方、今は使わない
HTMLとPerlをそんなの混ぜて書くやり方は良くない。
ま、全体的に古い書き方で、今そんな書き方をしたら笑われるような
ものってのが原因かな。参考にしているものが悪い。

802
デフォルトの名無しさん[]   投稿日:2015/12/20 15:21:26  ID:THHI+nfG.net
健全でない言葉が含まれているため表示しません 内容を確認する

803
デフォルトの名無しさん[]   投稿日:2015/12/20 21:46:48  ID:kojJskyY.net(2)
500internal Server errorになってしまいます><
コメント2件

804
デフォルトの名無しさん[sage]   投稿日:2015/12/21 01:47:30  ID:Z/vHz/9R.net
>803
web serverのエラーログをチェック

805
デフォルトの名無しさん[sage]   投稿日:2015/12/21 03:10:05  ID:CPIsv/NK.net
cgi-lib.plうpってないんじゃねーの?

806
デフォルトの名無しさん[sage]   投稿日:2015/12/21 03:13:43  ID:6AgT1ZIG.net
板違いの話題をいつまでも続けるとはさすがPerl厨。
板のルール無視とか迷惑だからスレごと出ていけ。

リアルでもそうやってルール無視するからウザがられてるんだよ。
Perl厨は頭悪いし他人に迷惑かけても平気な奴しかいないから気付いてないのかもしれんが。

807
デフォルトの名無しさん[sage]   投稿日:2015/12/21 06:44:19  ID:sJg48j5/.net
WebProgがある以上、全面的にお前さんの言う事に賛成なんだけど、
まさかと思うけどPHPの人じゃないよねw

808
デフォルトの名無しさん[sage]   投稿日:2015/12/21 09:45:47  ID:w2+uVVcZ.net(7)
WebPrgとやらがなくてもPerlはPerlであってHTTPサーバーにもCGIにもブラウザにもHTMLにも関係ない

>803
500internal Server error って書いてあるじゃないか
インターネットサーバーエラーって読むんだ。分かるか?
Apacheスレかどっかに行け
コメント1件

809
デフォルトの名無しさん[sage]   投稿日:2015/12/21 09:47:32  ID:w2+uVVcZ.net(7)
インターナルだった

810
デフォルトの名無しさん[sage]   投稿日:2015/12/21 19:41:23  ID:xlJCQDSb.net(3)
>808
アホじゃね?Apacheスレがどこにあると思ってんだよ

811
デフォルトの名無しさん[sage]   投稿日:2015/12/21 19:55:50  ID:w2+uVVcZ.net(7)
さぁ?興味ないですけど。
ここでそんなこと言われてもね
コメント1件

812
デフォルトの名無しさん[sage]   投稿日:2015/12/21 20:05:36  ID:xlJCQDSb.net(3)
>811
WebProgだよバカ
なんで、板違い誘導だけど、煽り入ってるレスと、
それをやんわり諫めてるレスのあとに
とんちんかんなレスをカマして胸が張れるんだよ

あともう一つ言うとWebProgには、
「Perl初心者スレ」
もある。WebProg無関係に初心者も誘導できるんだよ

今更本気で誘導しようとは思わんが、
>PerlはPerlであってHTTPサーバーにもCGIにもブラウザにもHTMLにも関係ない
こんなこと言うアホは、PHP厨よりタチが悪い。
初心者スレに行ってこい

813
デフォルトの名無しさん[sage]   投稿日:2015/12/21 20:09:55  ID:w2+uVVcZ.net(7)
あ、急に思い出した。Apacheは自鯖板ですわ。
長文乙
コメント1件

814
デフォルトの名無しさん[sage]   投稿日:2015/12/21 20:15:54  ID:xlJCQDSb.net(3)
>813
自鯖でプログラムの話すんのか?
まさかと思うが、本当にズブの素人かよ

815
デフォルトの名無しさん[sage]   投稿日:2015/12/21 20:19:44  ID:w2+uVVcZ.net(7)
それについてこのスレが関知することではない。そちらでどうぞ。
何度同じこと言われれば分かるんだ?頭が弱い子なのか?
即ち邪魔だからさっさと消えろって言ってんだよ
コメント1件

816
デフォルトの名無しさん[sage]   投稿日:2015/12/21 20:22:33  ID:NuDtbaVg.net(2)
>815
おまえ、迷惑。

817
デフォルトの名無しさん[sage]   投稿日:2015/12/21 20:24:05  ID:w2+uVVcZ.net(7)
お、自演が始まったか?

818
デフォルトの名無しさん[sage]   投稿日:2015/12/21 20:30:24  ID:NuDtbaVg.net(2)
自分に反対する奴は全て自演かいw

>あ、急に思い出した。Apacheは自鯖板ですわ。
これで、御里が知れてるってのに、どっちが頭が弱いんだか

819
デフォルトの名無しさん[sage]   投稿日:2015/12/21 20:36:45  ID:w2+uVVcZ.net(7)
ほれ見ろ。自演だろ。
いい分けがましいことを言い続けても、板自体からしてム板内ではないものを必死でアピールするのがやっとなんだろ。
もういいから消えな

820
デフォルトの名無しさん[sage]   投稿日:2015/12/22 00:10:08  ID:diOEhBX7.net
>798
これはWebProgっての分かるけど
>789
これはHTTPだからWebProgって言いたいんだろうがソケット通信だからここでいいんじゃ?もう質問者居なさそうだけど

821
デフォルトの名無しさん[]   投稿日:2015/12/22 15:01:10  ID:zJUyXx9D.net
エラーログが、Software error:Can't find string terminator "EOM" anywhere before EOF at test1.cgi line 13.Can't find string terminator "EOL" anywhere before EOF at test1.cgi line 13.
13行目がヒアドキュメントの始まりでした。
(*こっちに貼ったソースは投稿の都合上編集してます
sssp://o.8ch.net/21ur.png
コメント1件

822
デフォルトの名無しさん[]   投稿日:2015/12/22 17:44:39  ID:Wi3bsd/I.net(2)
健全でない言葉が含まれているため表示しません 内容を確認する

823
デフォルトの名無しさん[]   投稿日:2015/12/22 20:23:21  ID:ugCyQzkf.net
荒れてんな〜

824
デフォルトの名無しさん[sage]   投稿日:2015/12/22 20:28:23  ID:46TQzEc+.net
すげえ自意識過剰な荒し

825
デフォルトの名無しさん[]   投稿日:2015/12/22 20:44:04  ID:Wi3bsd/I.net(2)
本日の荒らしID:zJUyXx9D

編集したソースで質問とかクズすぎる。
金払って業者に直してもらえクズ。

826
デフォルトの名無しさん[sage]   投稿日:2015/12/22 20:52:15  ID:V2XYGiCZ.net
数年前にもいたね攻撃だけする人

827
デフォルトの名無しさん[sage]   投稿日:2015/12/22 23:04:43  ID:mKaKHK+Q.net
同じ人が帰ってきただけと思われ

828
デフォルトの名無しさん[sage]   投稿日:2015/12/22 23:08:25  ID:lJMFjOKo.net
帰ってきたとか、それを知ってるってことは、お前らずっとやってんのか?

829
デフォルトの名無しさん[sage]   投稿日:2015/12/23 01:00:09  ID:RaRt0JiM.net(3)
やるってなにを…?
職種なら30年ほど同じなまま日本の歯車と化して使われ続けてるが
コメント1件

830
デフォルトの名無しさん[sage]   投稿日:2015/12/23 01:21:06  ID:+daiOjD/.net
>829
> やるってなにを…?
2ちゃんねるをだよw

攻撃だけする人を、同じ人って言ってるだろ? 攻撃をしている人が
本当に同じ人かは知る由もないが、数年前に居た人と同じ人じゃないか?って
思うのは数年前からずっとやってるってことだろう?

まあ数年前にやって、しばらくやめていて、再開したって
場合もあるけど、そんな都合のいい話はないだろうし。

831
デフォルトの名無しさん[sage]   投稿日:2015/12/23 02:07:35  ID:RaRt0JiM.net(3)
力説ご苦労

832
デフォルトの名無しさん[sage]   投稿日:2015/12/23 02:48:04  ID:/wOBmLFi.net(2)
攻撃だけする人ってザメフォンかw
ザメフォン元気?w

833
デフォルトの名無しさん[sage]   投稿日:2015/12/23 04:05:50  ID:RaRt0JiM.net(3)
いやおまえさんのことだろう。特徴的
コメント1件

834
デフォルトの名無しさん[sage]   投稿日:2015/12/23 04:56:22  ID:/wOBmLFi.net(2)
>833
自己紹介乙
ここまで簡単に炙り出されるとは

835
デフォルトの名無しさん[sage]   投稿日:2015/12/24 12:16:14  ID:aTU1cTcf.net
思い出せるだけ思い出してみるか。嵐の特徴

質問者に対し、質が低く (おそらく本人は低質と思ってない) 人間性に対しての攻撃を中心に行う。
攻撃の際は敵対心むき出しな書きかたをするが、話の流れや繋がりがなく、意味が分からないケースも多い。
罵れるなら、どんな理由で罵るのか内容を選ばない。とにかく理由をつけては罵りたがる。
その場で作り出した出鱈目で質問者などを攻撃することもあり。

質問者への攻撃以外では、Perlの悪口に終始する。

プログラムの実力は皆無で、情報系の高校生より低いと思われる。(ほとんどの場合一言目からおかしいので分かる)。
ある程度は高くなった可能性があるが、新入社員が1週間で覚え切る内容を、1年経ってもほとんど出来なかったので、現在でもレベルは低いと推察される。
少なくとも、CPUやメモリを使うような知識は全くない。(アセンブラやネイティブなど)。
質問者より理解が低かったり知識や経験が少なかったりすることはザラ。

時間はかなり一般的な学生、社会人とは違う活動帯。
異様な (←うまい表現が思いつかない) 自作自演をおこなうことも多数あり。

意味の分からない単語、本当に意味不明な攻撃、脈絡のない会話の(ようなもの)、などを突如始める。
造語や嘘、虚偽の内容を作ることにためらいがない。
辻褄が合わないこと、意味がないこと、内容が無いことを書くのにためらいがない。

全ての書き込みのレベルが低く、終始特有の雰囲気とうさんくささ (出鱈目さ) や無意味さをかもし出している。
人の反応が自分の思った通りにならないと突如無差別に暴れだす。
かまって貰えないと、様々な方法で暴れだす。
荒らすこと自体がほぼ目的であるような振る舞いを取り続けることがある。(一度始まると長期に渡る)
その気になれば3スレ粘着なんて当たり前。
本気を出した場合、質問者にいち早く返信するのは必ず彼。

おそらく知能レベルはかなり低い上、精神的(性格的)にも難ありで、人を不快にさせることを当然の権利と思っている。
おそらく他人との間合いや距離が計れず、まともな会話ができない。

まぁさらにこの数年前にはもっと強烈なのが居たんだが、それを思い出しちまった。
コメント1件

836
デフォルトの名無しさん[sage]   投稿日:2015/12/24 12:40:13  ID:ybAdxPqK.net
どーでもいいから元の空気に戻して

837
デフォルトの名無しさん[]   投稿日:2015/12/24 13:09:28  ID:MYEsZXge.net
Strawberry Perl 5.22.1.1 released.
http://strawberryperl.com/

838
デフォルトの名無しさん[sage]   投稿日:2015/12/25 05:46:37  ID:wx0vRYD+.net
>835
そうやって書いてれば自分が荒らしだとバレないと思ってるのか。
だとしたらかなりおめでたい。
お前頭悪そうだし、どうせブルーカラーの童貞なんだろうな。

839
デフォルトの名無しさん[sage]   投稿日:2015/12/25 09:16:09  ID:OJPyRqtL.net
そうやって書いてれば自分が童貞だとバレないと思ってるのか。

840
デフォルトの名無しさん[sage]   投稿日:2015/12/25 13:17:59  ID:Ug/OzCZs.net
悪口には自分が言われて嫌な言葉が選ばれるらしい
??「人の嫌がることを進んでやります」
コメント1件

841
デフォルトの名無しさん[sage]   投稿日:2015/12/25 14:30:21  ID:H65SAupI.net
この場合、>840が自分が言われて嫌な言葉として選んだ悪口とは
「人の嫌がることを進んでやります」ってことなのかな?

842
デフォルトの名無しさん[sage]   投稿日:2015/12/25 18:54:41  ID:kan7orvo.net
まったく俺と関係ないやつらが勝手に言い返し合ってって草なんだが…
コメント1件

843
デフォルトの名無しさん[sage]   投稿日:2015/12/26 07:01:51  ID:PQT39fnH.net(2)
>842
ああやっぱりだったか
相手は1人だろうとは思った
すまんね、スルーしとけばよかった。本人気づいてないみたいだし

844
デフォルトの名無しさん[sage]   投稿日:2015/12/26 11:24:03  ID:QraEy9L6.net
日本語文字を含む日付関係の処理をする効率の良いパッケージありませんか。
2015年12月29日 といった文字列を日付として扱い、
n日後の日付などを効率よく計算したいです。

845
デフォルトの名無しさん[sage]   投稿日:2015/12/26 12:40:03  ID:PQT39fnH.net(2)
Time::Local

846
デフォルトの名無しさん[sage]   投稿日:2015/12/26 17:19:03  ID:PiMfYnB0.net
use Time::Local 'timelocal';
my($year,$month,$day) = '2015年12月29日' =~ /(\d+).*?(\d+).*?(\d+)/;
my $epoch = timelocal(0,0,0,$day,$month-1,$year);
my $after_n_days = localtime($epoch + (60*60*24) * $n);

847
デフォルトの名無しさん[sage]   投稿日:2015/12/26 19:10:46  ID:h8/CI80S.net(2)
またクソひでーコードだなw

848
デフォルトの名無しさん[sage]   投稿日:2015/12/26 19:19:43  ID:h8/CI80S.net(2)
質問者が可哀想だw

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

my $date = '2015年12月29日';
my $t = Time::Piece->strptime($date, '%Y年%m月%d日');
$t+=ONE_DAY*3;
print $t->strftime('%Y年%m月%d日');

849
デフォルトの名無しさん[sage]   投稿日:2015/12/27 18:10:29  ID:pD3iRYFS.net
require "timelocal.pl";
sub ONE_DAY { 60*60*24 }
($year,$month,$day) = '2015年12月29日' =~ /(\d+)\D*(\d+)\D*(\d+)/;
$time = &timelocal(0,0,0,$day,$month-1,$year);
($year,$month,$day) = (localtime($time + &ONE_DAY * $n))[5,4,3];
printf("%04d年%02d月%02d日",1900+$year,$month+1,$day);
これでもいけました。

850
デフォルトの名無しさん[sage]   投稿日:2015/12/27 18:34:31  ID:YWwZOVBb.net
ムダなコードありすぎw

851
デフォルトの名無しさん[sage]   投稿日:2015/12/30 14:20:41  ID:HIAhfYzf.net
LWP::UserAgent

↑これでページのhtmlを取得するプログラムを書いたんだが
取得できるページとできないページがある
なんでだ???

852
デフォルトの名無しさん[]   投稿日:2015/12/30 21:45:20  ID:/v1xmcd/.net
どんなプログラムで何を取得できなかったのか書いてくれないと……

853
デフォルトの名無しさん[sage]   投稿日:2015/12/30 23:35:16  ID:Gf1fPU7V.net
v6はどうですか
いい感じですか

854
デフォルトの名無しさん[sage]   投稿日:2016/01/02 16:51:42  ID:8QYJ/a7C.net
まだ紙の本が出版されてないからなあ。ホライリーはふにゃちんだから期待できないぞ。

855
デフォルトの名無しさん[sage]   投稿日:2016/01/06 00:59:12  ID:Zgv3h2Jt.net
require "timelocal.pl";
($year,$month,$day) = '2015年12月29日' =~ /(\d+)\D*(\d+)\D*(\d+)/;
($year,$month,$day) = (localtime(&timelocal(0,0,0,$day,$month-1,$year) + 60*60*24 * $n))[5,4,3];
printf("%04d年%02d月%02d日",1900+$year,$month+1,$day);
月日の計算、ベタでしてた回答ってこのスレだったっけ?

856
デフォルトの名無しさん[sage]   投稿日:2016/01/06 07:31:37  ID:wURx2dCr.net
ベタっていうなら、関数使うな。

857
デフォルトの名無しさん[]   投稿日:2016/01/06 20:48:38  ID:Df/hMGBY.net(2)
#!/usr/local/bin/perl
$y =<STDIN>;
chomp($y);
if(0<$y){{$a =$y * 2 * 3.141592654;
print $a;}
else {print 0;}

これが間違っている理由教えてもらえませんか? syntax error でelse付近が間違っているってでるのですが
何が原因かわかりません。

858
デフォルトの名無しさん[]   投稿日:2016/01/06 20:51:28  ID:Df/hMGBY.net(2)
自己解決しました。

859
デフォルトの名無しさん[sage]   投稿日:2016/01/07 02:38:56  ID:uRL08pKF.net(2)
レスじゃなくてスレな。おれもよく間違えるけど。

860
デフォルトの名無しさん[]   投稿日:2016/01/07 21:17:47  ID:gH/noaIC.net(2)
#!/usr/local/bin/perl
print "last time,press control z\n";
chomp(@numbers=<STDIN>);
@lines2=qw(fred betty barney dino wilma pebbles bamm-bamm);
foreach ($lines2[@lines-1]){
print "$_\n";}

これで自分の入力した数字に対して名前を表示させたいんですが、
予期した結果が得られない。どうしてでしょうか?

861
デフォルトの名無しさん[]   投稿日:2016/01/07 21:25:00  ID:gH/noaIC.net(2)
@linesのとこが@numbersです。誤字しました。

862
デフォルトの名無しさん[sage]   投稿日:2016/01/07 22:29:34  ID:uRL08pKF.net(2)
#!/usr/local/bin/perl
print "last time,press control z\n";
chomp(@numbers=<STDIN>);
@lines2=qw(fred betty barney dino wilma pebbles bamm-bamm);
for my $number (@numbers) {
  print $lines2[$number-1], "\n";
}

863
デフォルトの名無しさん[sage]   投稿日:2016/01/08 10:59:45  ID:rjYD9Qf7E
https://ideone.com/Mt6KE0

何か問題があるのか?

864
デフォルトの名無しさん[]   投稿日:2016/01/08 22:13:44  ID:0MogF7lC.net
ありがとうございます。
また質問で申し訳ないのですが、


#!/usr/local/bin/perl
use strict;
use warnings;

my @fred=qw{1 3 5 7 9};
my $fred_total=total(@fred);
print "The total of \@fred is $fred_total.\n";
print "Enter some numbers on separate lines:";
my $user_total = total(<STDIN>);
print "The total of those numbers is $user_total.\n";

sub total {
my @array=@_;
foreach (@array){
my $number +=$_;}
}

これが変数展開されないんです。・・is.で終了してしまうのですが理由はわかりますか?
(コマンドプロンプトでやっています。
コメント1件


865
デフォルトの名無しさん[sage]   投稿日:2016/01/08 22:28:27  ID:VW69zanW.net
何をしたいか知らんけどとりあ
my $number +=$_
これはおかしいんじゃないかね
my は実行中に動的な新規メモリ宣言
コメント1件

866
デフォルトの名無しさん[sage]   投稿日:2016/01/08 23:15:13  ID:Gzfc+6YM.net
>864
total関数のように返り値が欲しいならちゃんとreturnしろ

867
デフォルトの名無しさん[]   投稿日:2016/01/09 11:39:51  ID:mFlxLm5Y.net(2)
returnで戻り値は返ってきたんですけど、パラメータリストの数字を合計した数を戻したい場合にはどのように書けばいいのでしょうか?
コメント2件

868
デフォルトの名無しさん[sage]   投稿日:2016/01/09 11:42:42  ID:qsis99MQ.net(2)

869
デフォルトの名無しさん[sage]   投稿日:2016/01/09 11:50:37  ID:5qP+Va2j.net(14)
つーか、totalなんてのを自作しないで、
List::Utilのsum(もしくはsum0)を使えばいいやん
自分で作るなよ。

870
デフォルトの名無しさん[sage]   投稿日:2016/01/09 12:14:03  ID:dZoBTR45.net(4)
>867
sub sum{
 my @array = @_;
 my $sum = 0;
 $sum += $_ for @array;
 return $sum;
}

あなたはこのサイトの「本体」や「関数」に目を通すなどして基本文法から学んだ方が良い
http://perldoc.jp/

あと原因を自力である程度特定できないのが一番まずい
変数に何が入っているのか?関数は予想通りに動いているのか?まず自分で問題を小さく整理して確認しようよ
コメント2件

871
デフォルトの名無しさん[sage]   投稿日:2016/01/09 12:21:56  ID:5qP+Va2j.net(14)
>870
だから標準モジュールにあるのを再実装するなって。

872
デフォルトの名無しさん[sage]   投稿日:2016/01/09 12:23:32  ID:5qP+Va2j.net(14)
しかも標準の名前と違う実装をしてるし、

873
デフォルトの名無しさん[sage]   投稿日:2016/01/09 12:32:15  ID:koh/iwz9.net(2)
俺的には自分で簡単に実装できる物をわざわざモジュールにするなよって感じがする。
コメント2件

874
デフォルトの名無しさん[sage]   投稿日:2016/01/09 12:37:32  ID:qqzsfGlZ.net
>873
sumみたいな単位でモジュールにせずに
rubyみたいに汎用的なやり方のなかで解決できるほうがいいってこと?
numbers.inject(:+)
コメント1件

875
デフォルトの名無しさん[sage]   投稿日:2016/01/09 12:59:56  ID:5qP+Va2j.net(14)
>873
標準モジュールとしてPerlに標準で付属している、
Perlの機能の一部を自分で実装するな

876
デフォルトの名無しさん[sage]   投稿日:2016/01/09 13:03:55  ID:qsis99MQ.net(2)
健全でない言葉が含まれているため表示しません 内容を確認する

877
デフォルトの名無しさん[sage]   投稿日:2016/01/09 13:14:54  ID:5qP+Va2j.net(14)
うざっ

878
デフォルトの名無しさん[sage]   投稿日:2016/01/09 13:45:25  ID:koh/iwz9.net(2)
いやただシンプルに、さらっと書ける物をわざわざモジュールにして、
そのモジュールあるんだから使えよ、作るなよってのはおかしいんじゃねーのって思っただけ。
無い方がいいとまでは言わないけど「俺的」にはそんな小単位モジュール不要って話
いろんな作り方できるよってのがPerlのモットーなんだし。好きにすればいいんじゃね。
無駄に標準関数的な物が増えるのは俺はPerlっぽくないとは思うけど。
コメント1件

879
デフォルトの名無しさん[sage]   投稿日:2016/01/09 14:28:51  ID:Xn2sBiMs.net(4)
健全でない言葉が含まれているため表示しません 内容を確認する

880
デフォルトの名無しさん[sage]   投稿日:2016/01/09 14:29:26  ID:5qP+Va2j.net(14)
>878
だからなんで新しくモジュール作る話してるの?

すでにモジュールが標準でPerlに付属されてるんだから
それを使えって話してる。

Perl標準モジュールを使えない(知らない)っていうのは
Perlを使えないのと同じ意味だよ。

881
デフォルトの名無しさん[sage]   投稿日:2016/01/09 14:37:36  ID:Xn2sBiMs.net(4)
>874
普段俺が自分で使ってるのを、例外チェックその他削って最小限にカットしまくった物。動作は遅い。

sub sfa (&@){ ## ScalarFromArray.
 my $code = shift;
 local ($a, $b); #不要だがマナーを弁えない人のためにlocalする。 ($_, $a, $b, は特殊変数のため)。
 my $res;
 $res = $code->() for(@_);
 return $res;
}
my @nums = (1..10);
my $sum = sfa { $a += $_ } @nums; #ここ。スカラーを返す処理ならなんでも可。でも長くなる場合は素直に普通のループ
print $sum;


これと速度重視用にxsでコンパイルした使いにくいやつと使い分けてる。
Cなので仕様はかなり違うけど。(例えば数値演算専用とか)
俺もこうゆうのはあんま標準モジュール使わないかな
コメント1件

882
デフォルトの名無しさん[sage]   投稿日:2016/01/09 14:55:43  ID:5qP+Va2j.net(14)
List::UtilはXSだから動作も早いんだよな。

883
デフォルトの名無しさん[sage]   投稿日:2016/01/09 15:06:27  ID:5qP+Va2j.net(14)
ちなみに>881のようなことをしたければ「Perl標準モジュール」を使ってこのように書く。

use List::Util qw(reduce);

my @nums = (1..10);
my $sum = reduce { $a += $b } @nums;
print $sum;


変更点
・sfaという世間で全く知られていない名前の関数はまるまる不要なので削除
・Perl以外の言語も含めて一般に知られているreduceを使う
・$_の代わりに$bにする
以上。これだけ。
コメント1件

884
デフォルトの名無しさん[sage]   投稿日:2016/01/09 15:09:15  ID:5qP+Va2j.net(14)
また書き忘れたけど、これもxsなので速い。

こういうのは基礎知識なので、こういうのがあると知った上で
独自実装する必要があるか?と自分自身に問いかけるという
プロセスを省いてはいけない。

知った上で、独自実装するのならいいが、
知っていたら独自実装しなかったと思ったら負けだからねw

885
デフォルトの名無しさん[sage]   投稿日:2016/01/09 15:14:37  ID:Tdn6T+zC.net
>883
せっかくだからつっこんでおくが
それreduceの動作を良くわかってない奴特有の勘違いなw
{ $a += $b }じゃなくて{ $a + $b }で良いんだよ
コメント1件

886
デフォルトの名無しさん[sage]   投稿日:2016/01/09 15:15:34  ID:5qP+Va2j.net(14)
>885
ごめんw
それはコピペしたから間違えただけw

887
デフォルトの名無しさん[sage]   投稿日:2016/01/09 15:18:19  ID:dZoBTR45.net(4)
変数の扱い方すら間違えている人に標準モジュール使えというのは解決になるのか…?
車輪の再発明以前の段階なのに
コメント1件

888
デフォルトの名無しさん[sage]   投稿日:2016/01/09 15:18:58  ID:/zf3lzOM.net
標準とは、バッテリーインクルードだろ?
それを使えばいい

自分で作るな。バグが出るだけ

889
デフォルトの名無しさん[sage]   投稿日:2016/01/09 15:21:43  ID:5qP+Va2j.net(14)
>887
揚げ足取りで引っ張るなよw

俺がいいたいのは、これが標準モジュールであり、
Perlを知るということは、標準モジュールを知るということでもあること。

標準ではないライブラリならまだしも、標準を知らないってことは
自分で車輪の再発明をして、時間をムダにすることにしかならない。

プログラミングの技術力をつけるってことは、先人の知恵を
学ぶことでもあるんだからね。

890
デフォルトの名無しさん[sage]   投稿日:2016/01/09 15:27:34  ID:dZoBTR45.net(4)
>変数の扱い方すら間違えている人
これはtotal関数が動きませんって言ってる人のことね
標準だからこっち使えとかそういうレベルの話じゃないでしょ
論点がずれてる
コメント1件

891
デフォルトの名無しさん[sage]   投稿日:2016/01/09 15:28:15  ID:5qP+Va2j.net(14)
>890
やっぱりそっちのことかw
俺が間違ったのは変数じゃなかったから
ちょっとおかしいと思ったんだw

892
デフォルトの名無しさん[sage]   投稿日:2016/01/09 15:31:18  ID:Xn2sBiMs.net(4)
触るなよ、居付いたぞ。
俺も触ったけど反省してる

893
デフォルトの名無しさん[sage]   投稿日:2016/01/09 15:33:40  ID:5qP+Va2j.net(14)
安心してください。反省していません。

894
デフォルトの名無しさん[sage]   投稿日:2016/01/09 15:58:14  ID:xdUtZYCE.net
ところで僕の宿題の件はどうなりましたか?火曜日に提出しないといけないんです。

895
デフォルトの名無しさん[]   投稿日:2016/01/09 16:03:41  ID:mFlxLm5Y.net(2)
>870
大変助かりました。基本から学びたいと思います。


もうひとつわからないことなのですが、

#!/usr/local/bin/perl
use strict;
use warnings;
my @fred=above_average(1..10);
print "\@fred is @fred\n";
print "(Should be 6 7 8 9 10)\n";
my @barney=above_average(100,1..10);
print "\@barney is @barney\n";
print "(Should be just 100)\n";

sub above_average {
my $number =0;
my @upper=0;
$number=($number+$_ for @_)/$#_
if(@upper=$number<$_ for @_){
return @upper;}
-1;}

これが14行目のnear $_ for、17行目のnear }のsyntax errorが考えたのですが、
よくわかりませんでした。教えていただけると幸いです。

896
デフォルトの名無しさん[sage]   投稿日:2016/01/09 17:06:32  ID:dZoBTR45.net(4)
セミコロンの付け忘れとかかっこの閉じ忘れのような単純な文法エラーの話はキリがないので自分で解決して

>my @upper=0;
配列を明示的に初期化するなら @array = () のように右辺をリストに

>$number=($number+$_ for @_)/$#_
後置の文は単純な場合にのみ限定すべき、こんなトリッキーな使い方しないで合計値が欲しいなら先ほどの関数を再利用しようぜ
$#array は配列の最後のインデックスだから要素の数が欲しいなら配列をスカラーコンテキストで評価する

>if(@upper=$number<$_ for @_){
ある条件で配列をフィルターしたいなら例えば grep { $_ > $average } @array のように書くのが一般的でわかりやすいと思う

897
デフォルトの名無しさん[sage]   投稿日:2016/01/09 17:34:13  ID:tT8a+Ei+.net
遅レスだが、標準モジュール盲信は辞めとけ。
コード見りゃクソコードってのは多い。

地雷モジュールは、そこらで話題になってるから、
ここで紹介されたモジュールでも一回はググってから
自分の判断で使え。

と、暗にTime::Pieceを批判しとく。

898
デフォルトの名無しさん[sage]   投稿日:2016/01/09 18:09:49  ID:5qP+Va2j.net(14)
調べた結果問題なければ使えばいい。

899
デフォルトの名無しさん[sage]   投稿日:2016/01/09 19:23:49  ID:fWScuht8.net
ウホウホ言ってんじゃねえぞこのゴリラが

900
デフォルトの名無しさん[sage]   投稿日:2016/01/09 21:10:17  ID:Xn2sBiMs.net(4)
Perlと言うかスクリプト系は変なのが出てくるもんだ

901
デフォルトの名無しさん[sage]   投稿日:2016/01/10 08:38:57  ID:CVYyQQ5m.net(2)
突っ込みどころは多いがevalをxsだと思うのはさすがに…

902
デフォルトの名無しさん[sage]   投稿日:2016/01/10 09:19:08  ID:NOoJBtEZ.net(2)
>最新 Perl 5.20.1 2014年9月22日リリース

perl5は、もうバージョンアップ終了なの?

903
デフォルトの名無しさん[sage]   投稿日:2016/01/10 09:19:53  ID:NOoJBtEZ.net(2)
チェルノブイリより酷いということは

904
デフォルトの名無しさん[sage]   投稿日:2016/01/10 09:33:49  ID:CVYyQQ5m.net(2)

905
デフォルトの名無しさん[sage]   投稿日:2016/01/10 13:12:14  ID:/ndDSiBm.net
971 名前:名無しさん@七周年[] 投稿日:2006/11/11(土) 00:56:10 ID:M8+ahUZV0
自称スーパープログラマー某

強烈加齢臭
メール見ない メール無視
ドキュメント見ない ドキュメント無視
説明聞かない 説明無視
話聞かない 話無視
ガム→むっちゃー むっちゃー むっちゃー むっちゃー
煎餅→バリバリバリバリバリバリ
菓子パン→モグモグモグモグモグモグモグモグモグモグ
カップアイス→むっちゃー むっちゃー ペロペロペロペロ

フロアすべてに響き渡る 超ばかでかいくしゃみ 当然手でおさえない

異音と異振動
ドスーン!ドスーン! ドカーン!ドカーン! バコーン!バコーン! ズドン!ズドン!
机が近いとマウスポインターが飛ぶ 誤操作誘発
書類だしたりしまうだけでドカンドカン

30秒ごとに口と鼻から異音
ふんっっ!    ふんっっ!   

備品破壊 貸与P C 破壊 他人のもの破壊

奴の作ったスクリプトとプログラムは使えない バグ製造機

電話や共有携帯電話 キーボードが油ベタベタ
奴に電話とPCとコンソールは触らせてはいけない

906
デフォルトの名無しさん[sage]   投稿日:2016/01/10 17:49:06  ID:B3HWZnWD.net
Time::PieceよりDate::Timeの方が標準にふさわしいと思うんだ

907
デフォルトの名無しさん[sage]   投稿日:2016/01/10 20:08:45  ID:mfbMaCRH.net
むしろ関数はすべてCPANに格納してもらっても構わない。
モジュールがなければその場で自動インストールさせるスイッチのOnOffがあればなお良し

908
デフォルトの名無しさん[]   投稿日:2016/01/13 12:48:14  ID:/DjkzKjX.net(3)
"フォームタイプ_use_使用するデータリスト"という形式の文字列があるんだけど
例えばmy $str = "select_use_todouduken_list";
(これはセレクトボックスで都道府県データリストを使うフォームという意味)で
フォームタイプ部とデータリスト部に分けたいんだけど
if($str=~/(.*)_use_(/*)/){
$form_type = $1;
$use_data_list = $2;
}
でやると取得できたんですが$str="select_use_use_list";のように_use_が2つある場合だとうまく分けられません
どうすればうまく分けられるんですか?この場合$form_typeがselectで$use_data_listがuse_use_listになればいいんですけど

909
デフォルトの名無しさん[]   投稿日:2016/01/13 12:56:56  ID:/DjkzKjX.net(3)
訂正
$use_data_listがuse_use_listではなくuse_listです

910
デフォルトの名無しさん[]   投稿日:2016/01/13 13:49:55  ID:/DjkzKjX.net(3)
もう1つ訂正
if($str=~/(.*)_use_(/*)/)ではなくif($str=~/(.*)_use_(.*)/)です

911
デフォルトの名無しさん[sage]   投稿日:2016/01/13 15:26:24  ID:hQopSc6Z.net
正規表現最短マッチの問題?


912
デフォルトの名無しさん[sage]   投稿日:2016/01/13 15:43:17  ID:eEc9xDJtx
(.*?)_use_(.*)
([^_]*)_use_(.*)

913
デフォルトの名無しさん[sage]   投稿日:2016/01/13 17:48:49  ID:wRKDQAF7.net
split /_use_/, $str, 2

914
デフォルトの名無しさん[]   投稿日:2016/01/14 00:59:02  ID:PztBbIzN.net
if($str=~/(.*?)_use_(.*)/)でできた

915
デフォルトの名無しさん[sage]   投稿日:2016/01/14 18:15:10  ID:xIeZvwhR.net
use utf8;を全てのcgiに入れるのが面倒です。
htaccessみたいにまとめて入れたようにするとかできないでしょうか

916
デフォルトの名無しさん[]   投稿日:2016/01/14 21:17:36  ID:K+NWQdoJ.net
いや、それを面倒と言われても……気持ちはわからなくもないけど。
eval("use utf8; $text")
みたいなことはあるけどね。
多分、新規ファイルにエディタが

#!/usr/bin/perl
use utf8;
use strict;

みたいなテンプレートを挿入するとかそういうことをお望みですか?

917
デフォルトの名無しさん[sage]   投稿日:2016/01/14 22:39:28  ID:GBHRpQtn.net
php.iniみたいに一回で全部

918
デフォルトの名無しさん[sage]   投稿日:2016/01/15 00:23:48  ID:9J5ucqYC.net(2)
プラグマっていうのはそういう使い方するものじゃないしなあ
新たに書くならエディタの設定などで解決する話だし、既にあるものを外から一括で解決するような類でもないかと
結局は何のために use utf8 するの?と

919
デフォルトの名無しさん[sage]   投稿日:2016/01/15 05:35:22  ID:+ccYGEMj.net
use common::sense
すりゃいいって話か

他のモンもあるんちゃうん?

920
デフォルトの名無しさん[sage]   投稿日:2016/01/15 06:56:16  ID:pw2OtLR4.net
サーバの引越しをするのに誰が作ったかもわからないcgiにuse utf8;を入れないといけないことが判明、涙目ですわ
コメント1件

921
デフォルトの名無しさん[sage]   投稿日:2016/01/15 15:16:30  ID:F13ndxIM.net
>920
それだけで済むならラッキーだろう

922
デフォルトの名無しさん[sage]   投稿日:2016/01/15 18:43:08  ID:upNVNMhN.net
たしかにuse utf8;だけではだめっぽいです

部分的にまだ文字化けが発生します。

発狂しそう

923
デフォルトの名無しさん[sage]   投稿日:2016/01/15 20:13:02  ID:3J5F25K4.net(2)
> たしかにuse utf8;だけではだめっぽいです

最初っからわかってたけどなw
無駄な作業ご苦労さんwwww

use utf8の意味をちゃんと知っていれば、
サーバーの引っ越しで、それが必要になることはないのは
最初からわかってる話。

924
デフォルトの名無しさん[sage]   投稿日:2016/01/15 21:11:03  ID:9J5ucqYC.net(2)
結局は何のために use utf8 するの?と

925
デフォルトの名無しさん[sage]   投稿日:2016/01/15 21:40:58  ID:3J5F25K4.net(2)
可哀想(ウソw)だが、他人が作ったcgiを
設定しているレベルの人には理解できないんですよ。

もう自分でフリーCGIを設置する時代じゃない
ブログなどのウェブサービスを使う時代だ
KENTとかの時代はとっくに終わってる。

926
デフォルトの名無しさん[sage]   投稿日:2016/01/15 23:51:32  ID:l565ucbK.net
EUCで書かれたスクリプトだったのでuse utf8;せずにそのまま実行できました。

927
デフォルトの名無しさん[sage]   投稿日:2016/01/15 23:54:35  ID:gi9M5Usq.net
うん、当たり前だよ?

928
デフォルトの名無しさん[sage]   投稿日:2016/01/16 00:07:15  ID:PzDjhQsr.net
ただしjcode.plの警告でログがいっぱいになりました。

929
デフォルトの名無しさん[sage]   投稿日:2016/01/16 01:04:40  ID:ZDbRl/Eo.net
jcode.plのような古いものを、新しいPerlで使えば
当然そうなるだろうねw

930
デフォルトの名無しさん[sage]   投稿日:2016/01/16 01:23:23  ID:hqdIojtX.net(3)
EUCで書かれたスクリプトをuse utf8したら壊れるだろうなあ
手直しレベルの現実的な解決策はjcode.plの部分をEncodeで置き換えるといったところだろう

931
デフォルトの名無しさん[sage]   投稿日:2016/01/16 07:34:54  ID:bEoGxi1M.net(2)
そこまで古くないんですけど
Jcode.pmを多用してるのはどうすればいいんですか?
utf8フラグとかイライラします

932
デフォルトの名無しさん[sage]   投稿日:2016/01/16 09:15:12  ID:JiyhPObB.net
意味不明だな。
#もちろん、新規に書くならJcodeなんて御呼びじゃねーが
Jcode.pmのコードなら今でも動くだろ。
なんで、use utf8入れにゃあかん?

他の要因で移植失敗してるだけじゃねーのか?

933
デフォルトの名無しさん[sage]   投稿日:2016/01/16 09:30:15  ID:ORxbMq6u.net
それがperl5.8.8ではちゃんと動いていたんですが新しいサーバが5.10.1で
移設したら文字化けしはじめまして、use utf8;で一部直ることはわかったのですが
まだ完全に直ったわけではなく、どうもJcode.pmも直さないといけないのかなと

934
デフォルトの名無しさん[sage]   投稿日:2016/01/16 13:41:29  ID:hqdIojtX.net(3)
Jcodeってutf8フラグ周り触るような使い方したっけ
聞き方が悪すぎてアドバイスしようがないぞ

935
デフォルトの名無しさん[sage]   投稿日:2016/01/16 18:33:06  ID:bEoGxi1M.net(2)
DBIのmysqlで、blobのバイナリデータをスカラに入れたら文字化けしてます
テキストデータは文字化けしていません。これはフラグの問題ですか?
バイナリもUTF8です
コメント1件

936
デフォルトの名無しさん[sage]   投稿日:2016/01/16 20:07:12  ID:hqdIojtX.net(3)
直接コードを抜粋して貼るのが早そうだな
エンコーディングとか文字フラグのことわかってなさそうだし

937
デフォルトの名無しさん[sage]   投稿日:2016/01/17 00:28:41  ID:ROqcaX3c.net
http://blog.iss.ms/2007/03/22/051610
は読みましたか?INSERT時にプレースホルダを使いましたか?

938
デフォルトの名無しさん[]   投稿日:2016/01/17 19:27:28  ID:QAXp5FFb.net

939
デフォルトの名無しさん[sage]   投稿日:2016/01/17 22:49:04  ID:pSWLpytB.net
>935
>バイナリもUTF8です

文字コードがあるのはテキストのみで、
バイナリには文字コードなどない

バイナリをテキストとして読み込んではいけない。
バイナリはバイナリとして読み込む
コメント1件

940
デフォルトの名無しさん[sage]   投稿日:2016/01/18 07:25:02  ID:9Tlb62GQ.net(2)
>939
あざすやってみます

941
デフォルトの名無しさん[sage]   投稿日:2016/01/18 10:37:19  ID:YJeMRYLJ.net(2)
>1
RPGツクール2000 , RPGツクールMV https://tkool.jp/mv/ ( JavaScript 採用 )

WOLF RPGエディター http://www.silversecond.com/WolfRPGEditor/

デュエル・マスターズ Android版 ,i-OS版、公式 http://dm.takaratomy.co.jp/extra/dmapp/entrygate_ds/
デュエル・マスターズ対戦CGI ex
https://web.archive.org/web/20150809154946/http://www53.atwiki.jp/dms...

デュエル・マスターズ(デュエマ)DM ONLINE 1.8a  /  VanGuard ONLINE 1.5a
https://web.archive.org/web/20150809160254/http://uhyohyohyo.sak ura.ne.jp/hsp.html

ヴァンガード専用ネット対戦ツール【 VanGuard Online 】
https://web.archive.org/web/20150809155032/http://kiimaa.jugem.jp/?ei...

「カードファイト!!ヴァンガード」のネット対戦ができる公式オンラインゲーム「Cardfight!! Online」 2015年冬スタート
https://web.archive.org/web/20150809153724/http://supersolenoid.blog6...

遊戯王 Automatic Dueling System
https://web.archive.org/web/20150809164855/http://www3.atwiki.jp/ads-...

遊戯王 デュエル・オンライン
https://web.archive.org/web/20150809171527/http://www31.atwiki.jp/vip...
https://web.archive.org/web/20140628005202/http://do.yugioh-portal.ne...

ウィクロス( WIXOSS ) WEBXOSS http://webxoss.com/about_en.html http://webxoss.com/DeckEditor/

BG(ボードゲーム)Engine https://web.archive.org/web/20151209080842/https://bgengine.net/
https://web.archive.org/web/20151209172205/http://14owl.hateblo.jp/en...

アプレンティス  マジック:ザ・ギャザリング(MtG)オンライン化 http://homepage1.nifty.com/Q_Q/ap.html
https://web.archive.org/web/20151202202725/http://homepage1.nifty.com...
コメント1件

942
デフォルトの名無しさん[]   投稿日:2016/01/18 10:38:28  ID:YJeMRYLJ.net(2)
【 オンラインTCGエディター 】   >1,>941

デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。

例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
デュエマ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、旧ガンダム・ウォー、ライブオン、ディメンション・ゼロ、シャーマン・キング、カードヒーローなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書け。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストしろ。
個vs個、多数乱戦、チームvsチーム、個vsチームを実現し、P2P通信対戦プラグイン有り。

設計思想は 《 RPGツクール 》 が良いかな?  他に、優れたエディター有ったら挙げてみろ。

個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。

エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。

遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
バトスピ、ヴァンガ、デュエマなど発売済みゲームソフトが存在してるTCGはベンダーに研究させる。

各社TCGを再現するテストプレイ ⇒ 更に改良や修正 + コード記述の仕様書(設計書)を作成。

機能制限した下位版を制作しても原則として発売せず + 上位版デュエリ−グ用でサーバー稼動。

下位版を仮に発売した場合の改造および商用利用には、別途で当社との契約が必要。

さ〜て、インド人ベンダーと日本人の翻訳担当SEを見つけよっと!ww
【報酬制カード】DUELEAGUE【デュエリーグ】17 /ラウンジクラシック板-16

943
デフォルトの名無しさん[sage]   投稿日:2016/01/18 15:55:25  ID:2lazm5To.net(9)
解決しませぬ、mysqlの問題なのか、perlの問題なのかもよくわからない


dbiでblobの中にutf8のテキストがあって

これだと文字化け
SELECT blobtxt FROM table;

これだと文字化けしません、
SELECT CAST(blobtxt AS CHAR(10000) CHARACTER SET utf8) FROM table;

perl5.8.8+mysql-5.0.95-5.el5_9だと文字化けしません、
perl5.10.1+mysql-5.5.47-1.el6だと文字化けします。
コメント1件

944
デフォルトの名無しさん[sage]   投稿日:2016/01/18 16:16:10  ID:xk2uumt0.net
>943
blobtxtの型定義に問題があるんじゃないの?
もしかしてbinaryだったりして
コメント1件

945
デフォルトの名無しさん[sage]   投稿日:2016/01/18 16:26:36  ID:2lazm5To.net(9)
>944
blobなのでbinaryです。
ん〜

946
デフォルトの名無しさん[sage]   投稿日:2016/01/18 17:18:41  ID:h0S1UEJK.net(3)
・mysql_enable_utf8の設定値は?
・文字化けはどういう風に確認している?

947
デフォルトの名無しさん[sage]   投稿日:2016/01/18 17:24:09  ID:2lazm5To.net(9)
接続時にまずこれを実行して
${ *hDB }->{mysql_enable_utf8} = 1;
${ *hDB }->do( "SET NAMES utf8" );
${ *hDB }->do( "SET CHARACTER SET 'utf8'" );

blobがある場合は
${ *hDB }->do( "SET NAMES binary" );
を実行してから取得していました。これを外したりしてますが変化ありません

/etc/my.cnfは
[mysqld]
character-set-server=utf8
skip-character-set-client-handshake

[client]
default-character-set=utf8
となっております。

948
デフォルトの名無しさん[sage]   投稿日:2016/01/18 17:38:23  ID:h0S1UEJK.net(3)
perl            mysql
コード EUC
$blob UTF8?     ← blob 文字化けする
$text 内部文字列? ← text 文字化けしない

Jcodeなどをどこで何にどういう風に使っているのかコード持ってきて

949
デフォルトの名無しさん[sage]   投稿日:2016/01/18 17:55:33  ID:2lazm5To.net(9)
複数の箇所で文字化けを起こしているので、
まずはblobについてのみです。

単純に読み込んで出力しています。

950
デフォルトの名無しさん[sage]   投稿日:2016/01/18 18:02:42  ID:2lazm5To.net(9)
blob入れた変数にdecode_utf8でフラグを立てれば直りました。

951
デフォルトの名無しさん[sage]   投稿日:2016/01/18 18:30:08  ID:2lazm5To.net(9)
blobの話は終わりです。

つぎの文字化けはjfoldをしてるところで文字化けしています。
これはどう直したらよいでしょうか
use utf8;
use Encode;
use Jcode;
$Swap = Jcode->new($utf8txt, 'utf8');
($Folded, $Rest) = $Swap->jfold(10);

952
デフォルトの名無しさん[sage]   投稿日:2016/01/18 18:32:57  ID:2lazm5To.net(9)
decode_utf8($Folded)で直りました。すいません。

953
デフォルトの名無しさん[sage]   投稿日:2016/01/18 18:35:13  ID:2lazm5To.net(9)
次ですが三点リーダが文字化けします。
「…」これ使ってはいけない文字でしょうか

954
デフォルトの名無しさん[sage]   投稿日:2016/01/18 19:21:20  ID:2lazm5To.net(9)
全部どっかにdecode_utf8を入れれば解決するような気がしてきました。

955
デフォルトの名無しさん[sage]   投稿日:2016/01/18 20:04:04  ID:9Tlb62GQ.net(2)
utf8のフラグがついた変数から別に新規に宣言した変数に代入するときに
utf8のフラグが付かずdecode_utf8をしないといけないというのが文字化けの原因ぽいのですが、
これ継承されることできないんでしょうか

956
デフォルトの名無しさん[sage]   投稿日:2016/01/18 20:45:56  ID:h0S1UEJK.net(3)
>utf8のフラグがついた変数から別に新規に宣言した変数に代入するときにutf8のフラグが付かず
そんなことはない
どこかでフラグ有りと無しをくっつけているとかJcodeを通ってフラグが剥がれていると思われる

957
デフォルトの名無しさん[sage]   投稿日:2016/01/18 21:53:37  ID:RaE8va4R.net
だからフラグは付けるなって口が酸っぱくなるほど言ってあったのに・・・

958
デフォルトの名無しさん[sage]   投稿日:2016/01/19 00:36:16  ID:lFJIU7vI.net
キスはお酢のように酸っぱい。
口が酸っぱくなる。

959
デフォルトの名無しさん[sage]   投稿日:2016/01/19 09:18:03  ID:RZ9UlhQV.net
perl5.8.8と5.10.1のuse strict;ではutf8フラグの扱いが変わったということなんでしょうか
そもそもなぜ文字化けしたのかの根本の理由が知りたいです

960
デフォルトの名無しさん[sage]   投稿日:2016/01/19 09:48:11  ID:iNNfG/UU.net
そんな話聞いたことがない

961
デフォルトの名無しさん[sage]   投稿日:2016/01/19 22:11:07  ID:qpKC7Im2.net
perlが原因なのかmysqlが原因なのか調べるために
perl5.8.8+mysql-5.5.47-1.el6
perl5.10.1+mysql-5.0.95-5.el5_9
を試してみたらどう?一度に2つのものを変更したら、どっちが原因なのか分から
ないからね

962
デフォルトの名無しさん[sage]   投稿日:2016/01/20 01:12:34  ID:X0JkwFym.net
めんどくせーからろくすっぽ読んでなかったが
MySQLがからんでるのか?
じゃあ単なるお前の設定の問題だろ

963
デフォルトの名無しさん[sage]   投稿日:2016/01/20 02:17:26  ID:NsmSPaQP.net
俺ならDBD::mysqlPPに手を加えて、DBから取得直後のデータをヘキサダンプするよ

964
デフォルトの名無しさん[sage]   投稿日:2016/01/20 07:40:38  ID:qWryGyIX.net
だいたい落ち着いたのでまとめると、

use utf8;をつける

BLOB型がある場合は以前から文字化け対策としてSET NAMES binaryをクエリ直前に実行していた。
しかしこれをやると、CHARや全てのutf8フラグが付かなくなる。以前は何もしなくても文字化けしなかったが
これをやった後は取得したもの全てにdecode_utf8を実行するようにする。

あとJcodeの機能を使ったらdecode_utf8を実行するようにする。

あと自分のコーディングの方法では画面出力前に出力関係で使うものを一括で処理できる部分があるので
そこでフラグが外れているものがあってもいいようにdecode_utf8を実行するようにする。

とりあえずこれで今のところ文字化けは全て解消
前よりutf8フラグに対してシビアになってる気がします。

965
デフォルトの名無しさん[sage]   投稿日:2016/01/20 10:56:00  ID:MFk6X+zP.net
>前よりutf8フラグに対してシビアになってる
お前のやり方が悪いだけ

966
デフォルトの名無しさん[sage]   投稿日:2016/01/21 01:21:32  ID:IBB4depX.net
またエンコードがらみか。早く卒業したいものだな、この話題は

967
デフォルトの名無しさん[]   投稿日:2016/01/28 04:33:18  ID:GDEXV+mQ.net
初心者 やることを制限してフラグを使わずに済ます
中級者 ネットの情報を頼りにフラグを使って処理をする(そして罠にはまる)←イマココ
上級者 フラグを使わずにやりたいことを全部こなす

968
デフォルトの名無しさん[]   投稿日:2016/01/28 18:26:52  ID:mFPQrw87.net
Perlはゴミすぎて使い物にならない
systemで&付けて外部コマンド実行してもバックグラウンド実行にならないゴミっぷり
こういう言語は消滅すべき

969
デフォルトの名無しさん[sage]   投稿日:2016/01/29 08:58:48  ID:uNLw2+tE.net
バックグランド実行されるよ

970
デフォルトの名無しさん[sage]   投稿日:2016/01/29 09:36:50  ID:G034Tjvl.net
なんや?Perlがゴミじゃなくて俺がゴミだっていいたのか?

971
デフォルトの名無しさん[]   投稿日:2016/01/29 21:29:34  ID:9Ge45nDk.net
2歳児が見慣れないおもちゃに手を伸ばしたけど思い通りにならなくて駄々こねてるって感じかな。
とりあえず、Perl はシェルじゃないよ。

972
デフォルトの名無しさん[]   投稿日:2016/01/30 08:08:14  ID:Xlz0mKM6.net
system("実行ファイル &");
で実行ファイルが終了するまで制御戻ってこず、数時間ハマる

実験用Perlスクリプトを作成し、中でsleep(5);を実行
このスクリプトをバックグラウンドで実行できるかテスト
system("./実験用スクリプト.pl &");
5秒間制御戻ってこず
sleep(10);なら10秒制御戻ってこず

PHPで試したら一発OK
最初からPHPでやれば人生を数時間無駄にしなくても済んだ

結論:Perlはゴミ
CGIどころかコマンドラインですら使えないことが判明

追記:環境による可能性あり
検索した結果だとバックグラウンドで動作させることに見事成功した人もいるみたい
環境によって成功するかどうか分かれる可能性あり
少なくともCentOS上では使えないことが確定
コメント2件

973
デフォルトの名無しさん[sage]   投稿日:2016/01/30 08:34:20  ID:1uFZLt6C.net
普通に、ミニマルに
$ perl -e 'system("sleep 5 &")'
で確かめろよ。
なんで実験用のスクリプトなんだか用意すんの?
コメント1件

974
デフォルトの名無しさん[sage]   投稿日:2016/01/30 14:21:32  ID:mLqIkhjr.net
オンラインマニュアルが読めないような奴に何を言っても無駄

975
デフォルトの名無しさん[sage]   投稿日:2016/01/30 23:59:02  ID:+Pg6hfQV.net
鯖設定の問題の気もしているのですが、質問させてください

いつの間にかモジュールのpathが通らなくなってしまい
例えばテンプレートツールキットで
> Can't locate Template.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 以下略
このようなエラーが出るようになってしまいました

元々はApacheの設定で環境変数を設定していたのですが
何かが悪さをしており上手く行かかなくなってしまい、
応急処置的に
> BEGIN {
>  push @INC, (必要なpath);
> }
としたのですが

> my $t = Template->new(これまでは動いていた各種引数);
> print STDERR Dumper($t);

これでログにundefが表示されており、悩んでいます。
エラーになるわけでもなく、インスタンスがundefになるという現象が初めてで困惑しているのですが
逆にここまで珍しい?なら何か知ってる人がいるかもと思い書き込みました。
原因について心当たりある方いましたら、ご教示お願いしますorz
コメント1件

976
デフォルトの名無しさん[]   投稿日:2016/01/31 02:05:33  ID:kB7BIzkV.net(2)
perlで既存のword文章を開いて編集保存って出来ないでしょうか?
具体的にはA4の宛名10面を印刷できるラベルシールのwordテンプレートファイルに対して、
既に用意されている宛名をperlで指定場所に挿入したいです。
htmlのように作成出来たりしないでしょうか?
宜しくお願い致します。
コメント1件

977
デフォルトの名無しさん[sage]   投稿日:2016/01/31 03:03:40  ID:GPj4igvU.net(2)
Word, Excel などは、単純なテキスト形式ではなく、
色んな見た目の形式なども含んだ、独自形式のファイルでしょ?

他のアプリで、その形式を解析するのは無理だと思う。
ただし、LibreOfficeなら出来るかも

978
956[sage]   投稿日:2016/01/31 03:16:38  ID:kB7BIzkV.net(2)
どうやらモジュールがあるようでした。
ここだと作成しか載ってませんが、編集が出来るかどうか調べてみます・・・
http://codezine.jp/article/detail/1567

979
デフォルトの名無しさん[sage]   投稿日:2016/01/31 03:23:53  ID:GPj4igvU.net(2)
>975
「perl can't locate pm in inc」で検索!

Perlモジュールの読み込みに失敗する場合のチェックポイント
http://qiita.com/Cside/items/14d82883a6e9741ea0ae

デバッグできないの?
それか、HelloWorldのような、もっと単純な構成のもので、
動くかどうか試してみる
コメント1件

980
デフォルトの名無しさん[sage]   投稿日:2016/01/31 11:18:36  ID:GhZKQ5FXR(2)
CPANに怪しげなモジュールあるじゃん。
https://metacpan.org/pod/MsOffice::Word::HTML::Writer

981
デフォルトの名無しさん[sage]   投稿日:2016/01/31 15:11:15  ID:h5e2cEyg.net(2)
>979
モジュールを読み込んでも、
インスタンスを作るとundefになってしまうという現象の質問です。
コメント2件

982
デフォルトの名無しさん[sage]   投稿日:2016/01/31 16:04:52  ID:0OoJBV50.net
>981
マニュアル読めよ

>A reference to a new Template object is returned, or undef on error. In the latter case, the error message can be retrieved by calling error() as a class method or by examining the $Template::ERROR package variable directly.
コメント1件

983
デフォルトの名無しさん[sage]   投稿日:2016/01/31 16:18:16  ID:GhZKQ5FXR(2)
>981
newしてるあとに、
or die($Template::ERROR, "\n");
を付けたせ。

エラーは全部拾う。
基本をしっかり守れ。

984
デフォルトの名無しさん[sage]   投稿日:2016/01/31 16:40:50  ID:h5e2cEyg.net(2)
>982
ありがとうございます…
下でコケてるのかorz

985
デフォルトの名無しさん[sage]   投稿日:2016/02/01 08:59:15  ID:2Lopcu1u.net
>976
オレ、同じようなことやってるよ。
1.wordで雛形の文章作って、html形式で保存する。
2.html形式の雛形ファイルをperl でいじって、新規htmlファイルを作る。
3.新規htmlファイルをword で開く
というふうにするといい。
コメント1件

986
デフォルトの名無しさん[sage]   投稿日:2016/02/01 18:46:47  ID:YLbRqwKb.net
>973
あたりまえだが、
普通にCentOSでバックグラウンドになるな。
単に、ヘボスクリプトでどっかミスってんだろ

987
デフォルトの名無しさん[sage]   投稿日:2016/02/01 20:59:27  ID:rMTqXsJZ.net
バックグランドで動かないって泣いてる人は、どうせ apache の cgi の
perlスクリプトとかじゃないの?
phpとか言ってるし

988
956[sage]   投稿日:2016/02/01 21:01:35  ID:qbG9bpQz.net
>985
サンクス、参考にします

989
デフォルトの名無しさん[]   投稿日:2016/02/02 10:41:09  ID:BLKJLUrI.net
>972
まだ見てる? 問題は解決した?
そのやりかただと Perl とシェルを使うから「シェルだけ」、「Perl だけ」でやってみるといいよ。

990
池田大作・人殺しの殺人鬼!  [池田大作・人殺しの殺人鬼!  ]   投稿日:2016/02/02 14:15:22  ID:dwq5YKX9.net
健全でない言葉が含まれているため表示しません 内容を確認する

991
デフォルトの名無しさん[]   投稿日:2016/02/02 19:58:47  ID:3wwqVUnZ.net(3)
すみません、どなたかわかる方、教えてください。

一般ユーザーで、webから情報をもってきて、テキスト整形、単純な演算して、内容をメールをするとい
うperlスクリプトを書きました。ターミナルからコマンド打つと、ちゃんと動いてメールも届きます。
しかし、cronに登録すると、動かないのです。atでもだめです。

他のスクリプト(bashスクリプト)はcronでもatでも動いています。当然crondも動いています(runレ
ベル2,3,4,5でON)。cronのログには、指定時間にこのスクリプトが起動がされていると記されて
います。(perlスクリプト内にデバグ用にFHでopenして、起動時刻書き込むのも動いていない、コマン
ドラインから起動すると書き込まれる)。

atの場合はちょっと変わっていて、時間がきても実行されないのですが、時間後に、atq(at -l)で確認す
ると、他の残っているタスクと記述が違うのです。以下のような感じ。(19:25頃に出力)
$atq
6123 2016-02-02 19:06 = User
5856 2016-02-21 12:45 a User
5857 2016-03-20 12:46 a User

実行されず、その時刻のあと、他のjobはaになってるところが=になっています。実行されなかったという
意味かもしれません。とにかく、atで動かなくてもcronで動けばいいのですが。

まさか、cronで起動できるのは、shスクリプトだけ、という事はないだろうとgglましたが、そういう事はな
いようです。実行権限(775)確認、パスは通っている。cronの書式には問題はない(フルパスでコマンド
記述)。crontab中、コマンド直後に標準エラーをログる指定しても何もなし。

ありうるとすると、perlの必要な環境変数とかが設定されていないとか、と。スクリプト先頭のおまじないは、
#!/usr/bin/env perl、plenvで5.22.1が動いています。

もう他にやりようがありません。どなたか、ヒントでもおねがいします。
コメント5件

992
デフォルトの名無しさん[sage]   投稿日:2016/02/02 20:08:30  ID:KYl+p0oO.net(3)
スクリプトはどこに置いているの?
フルパスで指定している?
コメント1件

993
デフォルトの名無しさん[]   投稿日:2016/02/02 20:16:37  ID:3wwqVUnZ.net(3)
>992

$HOME/hogehoge/check.pl

のような感じです。このhogehogeにはPATHは通っておらず、crontab内で、
スクリプトをフルパス指定しています。他のbashスクリプトはそれでも問題
なく動いていますが。perlだと違うのでしょうか?

よろしくお願いします。
コメント1件

994
デフォルトの名無しさん[sage]   投稿日:2016/02/02 20:37:08  ID:KYl+p0oO.net(3)
>993
/home/user/・・・

って指定して試してみて
コメント1件

995
デフォルトの名無しさん[]   投稿日:2016/02/02 21:20:43  ID:3wwqVUnZ.net(3)
>994

もともと、crontab内では、/home/User/hogehoge/check.plで指定しています。
コメント1件

996
デフォルトの名無しさん[sage]   投稿日:2016/02/02 22:12:48  ID:KYl+p0oO.net(3)
>995
crontabとシェルでの直接実行に違いがあるとすると
後は環境変数くらいしか思いつきません。
perlスクリプト内で環境変数を参照はしているのでしょうか?
もしもしている場合は明示的に教えた方が良いかもしれません。
コメント1件

997
デフォルトの名無しさん[sage]   投稿日:2016/02/02 23:40:33  ID:Fw307SWV.net
>991
スクリプトの先頭のshebangを、envじゃなくperlへのフルパスにしてみるとどう?
コメント1件

998
デフォルトの名無しさん[sage]   投稿日:2016/02/03 05:57:05  ID:Lo86feSu.net(3)
>991
なんかグダグダしてるなぁw

こういうのは最小の状態を作って実験するんだよ。
何やってるかわからんスクリプトじゃなくて、
例えば/tmp/hogeファイルを作成するだけの簡単なPerlスクリプト作って動くか確認する。
plenvも使わない。

そこからはじめて少しづつ増やしていくんだよ。

999
デフォルトの名無しさん[]   投稿日:2016/02/03 06:04:31  ID:U8rS0pSn.net(3)
>996 >997

ありがとうございます。

crontab内で、cd /home/User/hogehoge && /home/User/hogehoge/check.pl と
かやってみたものの状況変わらず。

別途、起動用のshスクリプト作って環境変数読み込んでplenv初期化してからperl
スクリプト呼べば行けそうな気はしますが、直接plファイル起動したいので、
/home/hogehoge/でplenvを呼び出し、global local systemにしてcentos7オリジ
ナルのperl 5.16に戻してみることにしました。

plenvすごくいいのですが、こういうところでつまずくとは。。。

1000
デフォルトの名無しさん[sage]   投稿日:2016/02/03 06:15:10  ID:Lo86feSu.net(3)
>78
plenvの仕組みとLinuxのユーザーの考え方がわかってないだけ。

plenvがどういう仕組で動いているのかと
cronがどのユーザーの権限で動いていて、セキュリティのために
環境変数を初期化しているということを知っていれば簡単に解決できる問題。
コメント1件

1001
デフォルトの名無しさん[sage]   投稿日:2016/02/03 06:15:57  ID:Lo86feSu.net(3)
> /home/hogehoge/でplenvを呼び出し、global local systemにしてcentos7オリジ
> ナルのperl 5.16に戻してみることにしました。

plenvの仕組みを勉強しろ。
これは全く意味が無い。

1002
デフォルトの名無しさん[]   投稿日:2016/02/03 06:24:40  ID:U8rS0pSn.net(3)
>991です。

さっそくやってみました。

system perlが参照する先にはモジュール足りなかったのでcpanで入れて
/home/User/hogehoge/でplenv local systemを叩きこのディレクトリでは
systemなperlが起動されるようにしたところ、cron起動で動き出しました。
という事は、似たような事が、pyenvな環境でも起きる可能性あるという事
でしょうか。

あとから情報ですが、gglと、同じような事で悩んでいる方多いようです。
plenvな環境の人ばかりのようです。

いくつかログを取ってても、何もそれらしい事は書かれておらず、まいり
ました。以上です。
コメント1件

1003
デフォルトの名無しさん[]   投稿日:2016/02/03 06:30:27  ID:U8rS0pSn.net(3)
>991 です。

>1000

あなたは、自分以外の人間も、自分と同じ力量であるという前提で
書かれていませんか?
相手をこきおろして、批判して、楽しいのでしょうか。スレの雰囲気が
悪くなるだけです。
コメント1件

1004
デフォルトの名無しさん[sage]   投稿日:2016/02/03 08:03:15  ID:/0P6zwpR.net
>991

スクリプト先頭を
#!/bin/sh
として

コマンドやファイルを
全てフルパスで指定してどうなる?

1005
デフォルトの名無しさん[]   投稿日:2016/02/03 15:27:57  ID:lxST4PlE.net
セッションのモジュールが使えないレンタルサバなので自作でセッションID作ってみたけど
どこか問題ある?

my $time = time;
my $rand = int(rand(10000000));
my $pro_id = $$;

my $session_id = $time.$rand.$pro_id;

1006
デフォルトの名無しさん[sage]   投稿日:2016/02/03 17:26:14  ID:UKSoJdac.net(2)
>1003
力量が下だと自覚したのなら、
力量を上げればいいだけだろう?

1007
デフォルトの名無しさん[sage]   投稿日:2016/02/03 17:29:12  ID:UKSoJdac.net(2)
>1002
> という事は、似たような事が、pyenvな環境でも起きる可能性あるという事
> でしょうか。

お前は、すべてを覚える気か?

理由もわからずに、pyenv環境では〜という謎なことが起きる。でいつも終わってるだろ?
原因を調べずに、いろんな発生する問題を覚えようとしている。
効率が悪すぎる。

まず仕組みを調べろって。そうすれば何故そうなるのかがわかるだろ。
お前がやろうとしているのは仕組みを知らないで、結果だけをしろうとしている行為だ。

1008
デフォルトの名無しさん[]   投稿日:2016/02/04 01:01:28  ID:WWqaejBP.net
そんなことのために system 関数使うとかないわー
……と、つっこみそこねた。いや、>972 に対してだけどね。

1009
デフォルトの名無しさん[sage]   投稿日:2016/02/04 02:02:24  ID:w2AdpGYg.net
>991
cronにはユーザの環境変数が引き継がれないため、
設定する必要がある

/etc/crontabと/etc/cron.d設定ファイルの書き方
http://www.server-memo.net/tips/etc-crontab.html

cronの環境変数は特殊だから、皆cronではまる
「cron 環境変数」で検索!

Linux板で聞いた方がよいかも。
もっと、HelloWorldとか、単純なものから始めること
更新情報
・スレッド一覧ページで過去ログのタイトル検索・一覧表示ができるようになりました(2016/1/20)
NGワード登録
登録する
スレッド内検索

プログラム板 タイトル検索

このスレッドが人気です(実況系)
羽鳥慎一モーニングショー★3 (955)テレ朝実況
実況 ◆ 日本テレビ 55270 (879)NTV実況
NHK総合を常に実況し続けるスレ 134101 ごま油 (663)NHK実況
実況 ◆ フジテレビ 83440 (74)フジ実況
ビビット 5/23(火) ★1 (515)TBS実況
はやドキ!& あさチャン!火曜日★2 (703)TBS実況
おはよう!時代劇 暴れん坊将軍4 #17(第18話)[字][再] (933)テレ朝実況
キスマイブサイク ★1 (816)フジ実況
このスレッドが人気です(ニュース系)
【速報】コンサートで事件 爆発可能性=英マンチェスター 20人死亡、200人負傷【動画】 (1000)ニュー速+
【音楽】<多数の死傷者>アリアナ・グランデさんのコンサート会場で爆発! (358)音楽・芸能ニュース
【レゴランド】来場者低迷、隣接店舗が2か月で閉店 売り上げが想定の10分の1 (124)ニュー速+
【英国】コンサートで事件 爆発可能性=英マンチェスター 犠牲者も【動画】 (609)ニュー速+
【フィリピン】ドゥテルテ大統領「信頼できるのは中国とロシアだけ」ロシア・中国との「軍事同盟」も辞さず? (223)ニュー速+
【天皇退位】「皇太子」称号に難色 秋篠宮さま意向で見送り (671)ニュー速+
【テレビ】<テレビを見ないとバカになる>という投稿に騒然!「価値観の違い」の声も 「テレビは見ない」という人も増えてきた。 (440)音楽・芸能ニュース
【中国6邦人拘束】「精神状態が心配だ」 社員が拘束の日本地下探査が会見 (693)ニュー速+
プログラム板の人気スレ
Excel VBA 質問スレ Part48 (164)
ふらっと C#,C♯,C#(初心者用) Part128 (442)
次世代言語議論スレ[Go Rust Kotlin Scala]第4世代 (624)
C言語なら俺に聞け 140 (218)
スレ立てるまでもない質問はここで 147匹目 (941)
【統計分析】機械学習・データマイニング15 (572)
くだすれPython(超初心者用) その33 (865)
Xamarin Part4 (206)
オブジェクト指向って自然な文法だな 3 (610)
ねねっちと一緒にプログラムを勉強するスレ第2話 (788)
Visual Studio 2017 Part2 (503)
Ruby 初心者スレッド Part 60 (255)
Java入門・初心者質問スレ Part.3 (498)
推薦図書/必読書のためのスレッド 81 (905)
Git 15 (818)
Swift part10 (630)
C++相談室 part130 (366)
スマホでは容量的にナンセンスなブロックチェーン (86)
Visual Studio 2015 Part8 (725)
ふらっと C#,C♯,C#(初心者用) Part127 (408)
プログラミング言語 Rust 2 (1002)
JavaScript の質問用スレッド vol.123 (260)
関数型プログラミング言語Haskell Part30 (513)
C# vs Java どっちが好き? その3 (268)
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part21 (66)
【PHP】下らねぇ質問はここに書き込みやがれ 8 (307)
このサイトについて
このサイトは2ちゃんねるからデータを取得し、表示するサービスです。
画像のインライン表示機能について
画像のURLの後ろにある[画像をインライン表示]をクリックすると、URLの下に表示します。
表示される画像は横幅100pxに縮小されていて、クリックすると原寸で表示します。
このサイトの特徴
1)スレッド内検索ができます
2)レス(「>>1」など)のポップアップができます
3)不適切な言葉を含む投稿を表示しません
4)ページ内で画像を直接表示できます
5)2ch他スレッドへのリンクはタイトル・板名つきでリンクします
6)すっきりとしたデザインで表示します
7)最新スレや前スレをチェック・一覧表示します
8)NGワード機能の搭載でイヤな言葉が目に入りません
9)荒らしを自動チェックします
10)スレッド内・同一IDの書き込みだけ表示できます
11)レスの返事をレスされた発言の下に表示する「まとめビュー」が利用できます
12)シリーズ化したスレッドの一覧を表示します
13)最新のスレッドがある場合はお知らせします
削除について
こちらをご覧ください
機能要望について
現在機能要望受付中です。
問い合わせについて
こちらのページからどうぞ
広告


首都圏の方、ソフトバンク光オススメですよ


このサイトは2ch.scからデータを取得・表示しています。削除などについてはこちらをご覧ください。 アクセスモード:差分取得 - 新着書き込みなし(304)