Perlについての質問箱 34箱目at TECH
Perlについての質問箱 34箱目 - 暇つぶし2ch1:デフォルトの名無しさん
08/01/11 00:07:22
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。

CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 URLリンク(pc11.2ch.net) )

CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。

URLリンク(www.perl.org)
● 2008/01/11現在の最新版: 5.10.0
● 2007/01/11現在の開発版: 5.9.5

前スレ
Perlについての質問箱 33箱目
スレリンク(tech板)

リンク集は>>2-3
過去スレは>>4 あたり


2:デフォルトの名無しさん
08/01/11 00:07:47
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: URLリンク(www.site-cooler.com)

[本]
リャマ: URLリンク(www.oreilly.co.jp)
駱駝: URLリンク(www.oreilly.co.jp)
Effective Perl: URLリンク(www.ascii.co.jp)
クックブック: URLリンク(www.oreilly.co.jp)
Perl ベストプラクティス: URLリンク(www.oreilly.co.jp)
Perl Hacks: URLリンク(www.oreilly.co.jp)

[オンラインマニュアル] (追加)
最新のドキュメント: URLリンク(search.cpan.org)
perl5.8.xのドキュメント(一部): URLリンク(www.kt.rim.or.jp)
perl5.005_03 のドキュメント: URLリンク(www.kt.rim.or.jp)
日本語ドキュメント検索: URLリンク(www.cpan.jp)
perldoc.jp: URLリンク(www.perldoc.jp)
Perldoc.com: URLリンク(www.perldoc.com)


3:デフォルトの名無しさん
08/01/11 00:08:12
[モジュール]
CPAN.com: URLリンク(search.cpan.org)
河馬屋二千年堂: URLリンク(homepage3.nifty.com)

[テクニック]
Perlメモ: URLリンク(www.din.or.jp)
Perlのページ: URLリンク(homepage1.nifty.com)
Perlの小技: URLリンク(homepage3.nifty.com)

[Perl5.8 Unicodeメモ]
URLリンク(www.pure.ne.jp)
URLリンク(www.namazu.org)
URLリンク(www.lr.pi.titech.ac.jp)


4:デフォルトの名無しさん
08/01/11 00:08:28
>>1

5:デフォルトの名無しさん
08/01/11 00:09:06
[過去スレ1]
1 URLリンク(pc.2ch.net)
2 URLリンク(pc3.2ch.net)
3 URLリンク(pc2.2ch.net)
4 URLリンク(pc2.2ch.net)
5 URLリンク(pc5.2ch.net)
6 URLリンク(pc5.2ch.net)
7 スレリンク(tech板)
8 スレリンク(tech板)
9 スレリンク(tech板)
10 スレリンク(tech板)
11 スレリンク(tech板)
12 スレリンク(tech板)
13 スレリンク(tech板)
14 スレリンク(tech板)
15 スレリンク(tech板)
16 スレリンク(tech板)
17 スレリンク(tech板)
18 スレリンク(tech板)
19 スレリンク(tech板)


6:デフォルトの名無しさん
08/01/11 00:09:38
[過去スレ2]
20 スレリンク(tech板)
21 スレリンク(tech板)
22 スレリンク(tech板)
23 スレリンク(tech板)
24 スレリンク(tech板)
25 スレリンク(tech板)
26 スレリンク(tech板)
27 スレリンク(tech板)
28 スレリンク(tech板)
29 スレリンク(tech板)
30 スレリンク(tech板)
31 スレリンク(tech板)
32 スレリンク(tech板)
33 スレリンク(tech板)


7:デフォルトの名無しさん
08/01/11 14:30:54
基本中の基本で申し訳ない。
リストを集合と見なして、和、積などの演算を提供するモジュールでポピュラーなのあったっけ?

8:デフォルトの名無しさん
08/01/11 16:28:17
Set::Array


9:デフォルトの名無しさん
08/01/12 00:24:18
CGI::Lite にある、url_encode 相当の関数って、
CGI.pm には入ってないので、自前でやるしかない。

で、あってる?

escapeHTML ってのはあるんだけどなぁ。
(= CGI::Lite で言うところの、browser_escape)


10:デフォルトの名無しさん
08/01/12 02:47:40
>>9

use URI::Escape
じゃあ、いかんのかね?

11: ◆TWARamEjuA
08/01/12 22:00:08 BE:3485748-2BP(6825)
日本語Cookieのエンコードに助かりました。。>> URI::Escape

12:デフォルトの名無しさん
08/01/12 22:32:26
パールのオブジェクト指向ってどうなのよ?

13:デフォルトの名無しさん
08/01/12 22:46:33
使う方はそれほどでもないが、書くのは結構めどい

14:デフォルトの名無しさん
08/01/12 23:23:55
>>13
そか? むしろOOってこんなに簡単だったんだ、とオモタが。

[Hoge.pm]
package Hoge;
sub new {
  my $class = shift;
  return bless({@_}, $class);
}
sub fuga {
  my ($self, $world) = @_;
  print "$self->{hello}, $world\n";
}
1;

[hoge.pl]
use Hoge;
my $h = new Hoge(hello => "HELLO");
$h->fuga("WORLD");


15:デフォルトの名無しさん
08/01/12 23:34:11
Perl使いからすれば、な。
他のOOPLを先にやっちゃった人だと、ちと辛くなる。
何かOOPL自体を実装してる気分になる。

16:デフォルトの名無しさん
08/01/12 23:57:02
>>12
病的

17:デフォルトの名無しさん
08/01/13 02:18:45
構造体の要素をprintで表示させたいのですがどのようにしたらよいでしょうか?

struct Person => {
 name => '$',
 son => '@',
 doughter => '@'
};

$person[$i] = Cell->new();
$person[$i]->son($j, 'taroh');
$person[$i]->doughter($k, 'hanako');
みたいにたくさんの人がいて、
人によって息子と娘の数は違います。
下の書き方だと表示できません。よろしくお願いします。

for ($i = 0; $i <= $#person; $i++){
 print $person[$i]->name;
 print ' son: ';
 for ($j = 0; $j <= $#{$person[$i]->son($j)}; $j++){ ←この行でダメと怒られる
  print $person[$i]->son($j);
 }
 print ' doughter: ';
 for ($j = 0; $j <= $#{$person[$i]->doughter($j)}; $j++){
  print $person[$i]->doughter($j);
 }
 printf "\n";
}



18:デフォルトの名無しさん
08/01/13 08:24:31
またデバッグしないエラー隠蔽者か。

19:デフォルトの名無しさん
08/01/13 11:00:49
>>17
まずは、ソースの頭にこの二行を追加してください。
あとは、ガイダンスに従ってプログラムを修正してください。

use string;
use warning;

20:17
08/01/13 17:18:11
for ($j = 0; $j <= $#{$person[$i]->son($j)}; $j++){ ←この行でダメと怒られる
 ↓
for ($j = 0; $j <= $#{$person[$i]->son; $j++){
で解決しました。

use string; を入れると、グローバル変数に文句を言われて、my を使ってみると
$person[$i] がなぜかできなくなるので使ってないです。
     ~~~

21:デフォルトの名無しさん
08/01/13 17:53:45
落書き程度のプログラムならいいけど、
ちゃんとしたのを書くときはstrictとwarningプラグマをつけて書くようにしたほうがいいよ。

何かエラーが出るなら、コードにバグなりバグの原因が潜んでるってことだから。

22:デフォルトの名無しさん
08/01/13 18:33:26
ひえええ(悲鳴)

23:デフォルトの名無しさん
08/01/13 19:26:24
forでmyを使えばいいし、
そもそもPerlではforeachにしたほうがいい
strictとwarningsは 必 須

24:デフォルトの名無しさん
08/01/13 19:35:12
foreach my $i (0 .. $#person)

25:17
08/01/13 19:47:54
>21-24
すみません。strict と warnings は使うようにします。foreach にもします。
>$person[$i] がなぜかできなくなるので使ってないです。
については、
my $person[$i] = Person->new();
 ↓
my @person = Person->new();
にしたらローカル変数使えました。どうもありがとうございました。

26:デフォルトの名無しさん
08/01/13 21:21:49
for (my $i = 0; ......

27: ◆TWARamEjuA
08/01/13 21:57:44 BE:3811875-2BP(6825)
そもそも$i,$jが必要なのかなぁと思ったり。。。

28:デフォルトの名無しさん
08/01/13 22:36:13
個人の力量に応じて色々書けるところがPerlのいいところなのに
マイルール押し付けすぎじゃね?

29:デフォルトの名無しさん
08/01/13 22:38:32
力がないからこそエラーチェック機構に頼るべきだろう

30:デフォルトの名無しさん
08/01/13 23:18:12
warningsは必ずしも使わないな。
あまり教条主義的になるのもよくない

31:デフォルトの名無しさん
08/01/13 23:40:27
ここの人はPerlでプログラムをバリバリに書くの?
そこそこに大きくなりそうな時は、やっぱCにしようって思わない?

32:デフォルトの名無しさん
08/01/13 23:41:31
>>17がアホなエラーを出してるからだろ。


33:デフォルトの名無しさん
08/01/14 02:10:03
>31
Perlで書かなければならないときはPerlで書くし、
Cで書かなければならない時はCで書く。


34:デフォルトの名無しさん
08/01/14 03:00:33
サンプルを作るのはPerlで、
速さが必要なときは、特定部分だけCにしてる

35:デフォルトの名無しさん
08/01/14 04:53:03
>>30
それは分かってて使わないってことだろ?
上のは使うことすら知らなかったわけだから

36:デフォルトの名無しさん
08/01/14 05:20:23
環境によっては使えない、なんてことも。

37:デフォルトの名無しさん
08/01/14 11:29:21
そもそもPerlかCなんて、そんなに選択範囲小さくないです

38:デフォルトの名無しさん
08/01/14 13:22:36
最近、PerlとRubyとElispで組み合わさって動くものばかり書いている。
PerlとRubyくらいまとめたい。

39:デフォルトの名無しさん
08/01/14 16:39:51
少しプログラムで詰まりました。
ローカルサーバー上では
$i = rindex($add,"\\");
という入力をすることでうまく行きますが
借りてるサーバに上げる場合は
$i = rindex($add,"/");
と改変しなければ動かないプログラムがありまして、
出来れば、ローカルと借りてるサーバ両方でうまく処理が行くようにしたいのですけど、
いい方法ないでしょうか?

40:デフォルトの名無しさん
08/01/14 16:56:40
多分パスのセパレータの違いが出てるんだろうけど・・
\か/に正規化すれば?もしくはシステムが使ってるパスのセパレータを取得してそれを使う

$add =~tr/\\/\//;
$i = rindex($add, "/");

41:デフォルトの名無しさん
08/01/14 16:58:36
>>40
なるほど
ありがとうございます

42:デフォルトの名無しさん
08/01/14 17:31:29
File::Spec

43:デフォルトの名無しさん
08/01/14 18:33:59
CPANがエラーで動きません。どうすればよいのでしょうか?

やったこと
・相手のサーバーがダウンしてるのかと数箇所、変更しましたが変わらず
・数個のモジュールを試すが全部、同じエラー
-------------------------------------------
Fetching with LWP:
fURLリンク(**)<)***************
Can't locate object method "new" via package "Net::FTP" at /usr/lib/perl5/5.8.6/CPAN.pm line 2251.


44:デフォルトの名無しさん
08/01/14 20:27:57
>>43
> CPANがエラーで動きません。どうすればよいのでしょうか?

エラーを解消する。

45:デフォルトの名無しさん
08/01/14 22:22:58
Perl/Tkってどうよ?

46:43
08/01/15 08:40:40
エラーの原因が特定できないんです。わかる方いますでしょうか?

47:デフォルトの名無しさん
08/01/15 10:17:06
Can't locate object method "new" via package "Net::FTP"

48:43
08/01/15 10:24:27
Net::FTPがないってことで
cpan>install Net::FTP
でもエラーが出ますし,,,,

49:デフォルトの名無しさん
08/01/15 10:53:25
CPAN使わないで入れろよ・・・

50:43
08/01/15 12:01:41
( ̄◇ ̄;)エッ

 yum? どこかに解説ありますでしょうか??

51:デフォルトの名無しさん
08/01/15 13:09:26
>>48
> Net::FTPがないってことで
> cpan>install Net::FTP
> でもエラーが出ますし,,,,

誰にそんなデタラメ吹き込まれたの?

52:デフォルトの名無しさん
08/01/15 13:12:14
問題はこれじゃねの
> LWP failed with code[500] message[Errno architecture (i386-linux-thread-multi-2.4.21-27.0.2.elsmp) does not match executable architecture (i386-linux-thread-multi-2.6.9-34.elsmp) at /usr/lib/perl5/site_perl/5.8.6/Errno.pm line 11.



53:43
08/01/15 13:14:31
cpan> install Net::FTP
CPAN: Storable loaded ok
Going to read /root/.cpan/Metadata
Database was generated on Thu, 10 Jan 2008 22:37:46 GMT
CPAN: LWP::UserAgent loaded ok
Fetching with LWP:
fURLリンク(ftp.kddilabs.jp)
LWP failed with code[500] message[Errno architecture (i386-linux-thread-multi-2.4.21-27.0.2.elsmp) does not match executable architecture (i386-linux-thread-multi-2.6.9-34.elsmp) at /usr/lib/perl5/site_perl/5.8.6/Errno.pm line 11.
Compilation failed in require at /usr/lib/perl5/5.8.6/i386-linux-thread-multi/IO/Socket.pm line 17.
BEGIN failed--compilation aborted at /usr/lib/perl5/5.8.6/i386-linux-thread-multi/IO/Socket.pm line 17.
Compilation failed in require at /usr/lib/perl5/5.8.6/Net/FTP.pm line 18.
BEGIN failed--compilation aborted at /usr/lib/perl5/5.8.6/Net/FTP.pm line 18.
Compilation failed in require at /usr/lib/perl5/site_perl/5.8.6/LWP/Protocol/ftp.pm line 24.
]
Fetching with Net::FTP:
fURLリンク(ftp.kddilabs.jp)
Can't locate object method "new" via package "Net::FTP" at /usr/lib/perl5/5.8.6/CPAN.pm line 2251.

54:43
08/01/15 13:15:38
>>52サン
 それっとド~すれば... (o*。_。)oペコッ

55:43
08/01/15 13:33:54
52さんのヒントから...

rm -f /usr/lib/perl5/site_perl/5.8.6/Errno.pm
で、削除して成功しました。

よくわかりませんが...下記を参考にしました

URLリンク(www.nilab.info)
URLリンク(cyberlib.enterbrainz.com)


56:デフォルトの名無しさん
08/01/15 15:56:02
ひどすぎる……「車のバックミラーが壊れかけてプラプラしているので
引きちぎって捨てました」的解決。

57:デフォルトの名無しさん
08/01/15 15:59:14
>>54
お前の環境もお前が使っているLinuxディストリビューションの
パッケージシステムの管理体制も知らんからわからん。

エラーメッセージで示されているファイル群を見れば何が起きているかわかるだろ。

58:43
08/01/15 21:38:15
そんなの関係ねぇ!
そんなの関係ねぇ!
  ○∧〃
  / >
  < \


59:デフォルトの名無しさん
08/01/16 02:13:39
Foo/Const.pmに存在する
Foo::Const;というパッケージから
Const以下をMainにExportし
Const::~ というアクセス方法を提供するにはどのようにしたら良いでしょうか?

60:本物の43
08/01/16 12:49:10
>>58 は、私じゃないです

61:デフォルトの名無しさん
08/01/16 18:38:57
require で複数のサブルーチンを取り込みたいんですが、

require 'subroutin1.pl';
require 'subroutin2.pl';

と書くとうまくいきません。
両方とも読み込む方法はないでしょうか?

62:デフォルトの名無しさん
08/01/16 18:49:16
>>61
二つのファイルの最後に1;は書いた?

63:デフォルトの名無しさん
08/01/16 18:58:35
「うまくいきません」(笑)

64:デフォルトの名無しさん
08/01/17 00:29:25
エスパーの出番だ。

65:デフォルトの名無しさん
08/01/17 01:30:06
なんか今朝から具合が悪いです。
いい薬はありませんか?

66:デフォルトの名無しさん
08/01/17 02:17:45
>>65
URLリンク(life9.2ch.net)

67:デフォルトの名無しさん
08/01/17 08:35:36
>>61
取り合えず、下記を使え。
強い味方になるぞ

KCatch.pm/CGI エラーメッセージをブラウザに表示
URLリンク(www.kawa.net)

68:デフォルトの名無しさん
08/01/17 19:00:38
>>61>>67
普通に

use CGI::Carp qw(fatalsToBrowswr);

を書いておけば良いのと違うの?

69:デフォルトの名無しさん
08/01/17 22:26:42
変数に読み込んだzipファイルを展開したいんですが、どうすればよいでしょうか。
Compress::Zlib::memGunzip()を試しましたが、zipのためかうまくいきませんでした。
(undefが返る)
すみませんが、お知恵を貸してください。

70:デフォルトの名無しさん
08/01/17 22:45:49
Archive::Zip

71:69
08/01/17 23:06:41
>70
Archive::Zipでできますか?

use IO::Uncompress::Unzip qw(unzip $UnzipError) ;
とりあえずこれで解決できそうです。

なぜか2chで聞くと自己解決につながる不思議!

Archive:;Zipもみてみますね。どうもありがとう

72:デフォルトの名無しさん
08/01/17 23:14:42
>>69
日本語でおk?

変数に入ってるのは、zipファイルのファイル名 "なんとか.zip" が入ってるの?
それとも、メモリー中で圧縮された状態のデータそのものが入ってるの?

圧縮されたファイルを解凍したいだけなら、
google で 「perl zip 解凍」 を検索すれば参考になるコードがみつかるよ。

73:69
08/01/17 23:19:54
変数に入っているのは、zipデータのバイナリそのものです。
ファイル名やファイルハンドルではありません。

74:デフォルトの名無しさん
08/01/18 10:35:27
URLリンク(yusukebe.com)
これ動かないんですがどうすればいいんですか?

75:デフォルトの名無しさん
08/01/18 13:17:22
>>74
なぜ動かないのかをつきとめて、そこを動くように修正すると良い。

76:デフォルトの名無しさん
08/01/18 14:32:22
ニコの仕様が変わったからじゃね?
使ったこと無いけどWWW::NicoVideoっつーのがCPANにあるから見てみれば
あとPlaggerにもぷらぎんあるかあr

77:デフォルトの名無しさん
08/01/18 15:33:05
いまいち頭の中でまとまってないけどuse strictを使い
cのヘッダファイルのように変数を一元管理するにはどうしたらいい?

##hoge.pl
use strict
$hoge = 'hoge';
print $hoge;
require 'piyo.pl';
print $hoge;
##piyo.pl
$hoge='piyo';
use strictコメントアウト時はhogepiyoだけど
Global symbol "$hoge" requires explicit package name at ./strict.pl line 3.
Global symbol "$hoge" requires explicit package name at ./strict.pl line 4.
Global symbol "$hoge" requires explicit package name at ./strict.pl line 6.
Execution of ./strict.pl aborted due to compilation errors.
と怒られるorz

78:デフォルトの名無しさん
08/01/18 15:43:02
@argv = ( 1 .. 5);
@argv[1] = ( 1 ..5);
なデータがあるんですけど、
@argv[1]のリストの数を調べたいときは、どうするんですかね?

$#argv[1]とすると、syntx errorになります。

79:デフォルトの名無しさん
08/01/18 16:05:46
それ以前の部分で理解が足りてないと思う

80:デフォルトの名無しさん
08/01/18 16:19:28
>>78
> @argv[1] = ( 1 ..5);

これはどういう意味だ?

($argv[1]) = (1 .. 5)

と等価か?

81:デフォルトの名無しさん
08/01/18 16:33:56
どういう意味も何も無いだろ・・・

82:デフォルトの名無しさん
08/01/18 17:26:00
配列の要素にリストを代入したい ←無理
配列を表すらしい@を付ければできるんじゃね?

つーところかと

83:デフォルトの名無しさん
08/01/18 17:46:32
ケチらずにリャマ本ぐらい読んでもよさそうなものだという気もするが。

84:デフォルトの名無しさん
08/01/18 18:36:29
配列の要素に、"a b"のようなスペースを挟んでいるものがあります。
これをスペースでsplitして2次元配列にしたいのですが、
そのようなことはできませんか?


85:デフォルトの名無しさん
08/01/18 18:41:25
できるよ
がんばれ

86:74
08/01/18 18:58:10
自己解決
Crypt::SSLeay入れたら動きました

87:デフォルトの名無しさん
08/01/18 19:24:02
if文使うときif($a eq "a" or $a eq "b")みたいに同じ変数の中身を判定する部分をまとめる(/a|b/)みたいにする方法ってあります?

88: ◆TWARamEjuA
08/01/18 20:10:12 BE:7841489-2BP(6825)
$a =~ m(^[ab]$)

89:デフォルトの名無しさん
08/01/18 20:11:10
>>87
あるけど、初心者はやるな。

90:デフォルトの名無しさん
08/01/18 20:18:43
>>87
if ($a =~ m/^(a|b)$/)
if (grep { $a eq $_ } qw(a b))
:

好きなように書け

91:デフォルトの名無しさん
08/01/18 20:21:36
確か[]より|のが速い

92:デフォルトの名無しさん
08/01/18 20:40:04
そんなはずがないだろうと思ってベンチ取ったが、やはりそんなはずはなかった。

use strict;
use Benchmark;
timethese(2000000, {
Alternation => sub{ my $x = "abcdefghijk"; my $y = $x =~ /(?:d|e|f)/ },
CharacterClass => sub{ my $x = "abcdefghijk"; my $y = $x =~ /[def]/ },
});

>> Benchmark: timing 2000000 iterations of Alternation, CharacterClass...
>> Alternation: 3 wallclock secs ( 2.45 usr + 0.00 sys = 2.45 CPU) @ 815328.17/s (n=2000000)
>> CharacterClass: 1 wallclock secs ( 1.41 usr + 0.00 sys = 1.41 CPU) @ 1422475.11/s (n=2000000)

93:デフォルトの名無しさん
08/01/18 22:58:31
>>77
相反する(しかも管理しづらそうな)ことをする理由は分からないけど、
エラーメッセージの通りパッケージ名を付けるだけで怒られないようにはできる
use strict;
$main::hoge = "hoge";
print $main::hoge;

94:デフォルトの名無しさん
08/01/19 06:20:50
>>93
相反するってのは例が悪かったって事で勘弁を。>>77の例でいうと$hogeはhoge.plでは変更しない。
#hoge.pl
use strict;
my($hoge);
$hoge='hoge';
require 'piyo.pl';
print $piyo;
#piyo.pl
$piyo='piyo'
でhoge.plを実行すると
Global symbol "$piyo" requires explicit package name と怒られる。
#piyo.pl
package piyo
を追加して
#hoge.pl
print $piyo::piyo;
とすれば怒られないけど hoge.pl内$piyoですます方法ないのかな?

95:77
08/01/19 14:49:54
77だが解決した。

#hoge.pl
use strict;
our($piyo);
require 'piyo.pl';
print $piyo;

#piyo.pl
$piyo='piyo'



96:デフォルトの名無しさん
08/01/20 00:08:53
11 12
13 14
15 16
のように、1行に2つのデータを持ったファイルがあります。

これを、
list[0][0] = 11;
list[0][1] = 12;
list[1][0] = 13;
list[1][1] = 14;
list[2][0] = 15;
list[2][1] = 16;
のように二次元配列にしたいのですが、どのようにすれば良いのでしょうか?


97:デフォルトの名無しさん
08/01/20 00:30:36
my @list;
push @list, [map int, split] while(<DATA>);

__DATA__
11 12
13 14
15 16

98:デフォルトの名無しさん
08/01/20 00:44:26
>>97
ありがとうございます。
コードを説明して頂けませんか?

99:デフォルトの名無しさん
08/01/20 01:06:20
   ↑
本を読まない。
ネットを検索しない。
誰かが教えてくれるのをじっと待っているだけ。
つねに受身の態勢。

100:デフォルトの名無しさん
08/01/20 01:09:23
本は持っていません。
ネットは検索しました。
回答を待っています。
受身の人間は質問しません。

101:デフォルトの名無しさん
08/01/20 01:15:34
多次元配列の操作についてなんですが、
@aと@bによる二次元の配列@xを作る際に、
for $i (0..$#a){
$x[0][$i] = $a[$i];
}
for $i (0..$#b){
$x[1][$i] = $b[$i];
}

多次元配列 @x の i 行目の配列を一次元の配列 @c に移し変えるのに、
for $j (0..$#{$x[$i]}){
$c[$j] = $x[$i][$j];
}

というコードを書いてるんですが、もっと奇麗な書き方はありませんか?

102:デフォルトの名無しさん
08/01/20 01:38:01
>@aと@bによる二次元の配列@xを作る
@x = (\@a, \@b);

>多次元配列 @x の i 行目の配列を一次元の配列 @c に移し変える
@c = @{@x[i]};

「続・初めてのPerl」のような参考書をお読みください。

103:デフォルトの名無しさん
08/01/20 03:24:16
「多次元配列」、「二次元配列」、その過てる認識がドツボへといざなう

104:デフォルトの名無しさん
08/01/20 05:56:49
>>102
ありがとうございました。

参考書を買って一通り読んだほうがよさそうですね。
アドバイスありがとうございました。

105:デフォルトの名無しさん
08/01/20 09:17:59
>>102
× @c = @{@x[i]};
○ @c = @{$x[i]};

106:デフォルトの名無しさん
08/01/20 22:02:02
>>100
ム板で言う「受け身」は「わからんから教えてくれ」の事だぞコラ

  hoge や fuga を試したけど moge や munya のエラーになって
  困っています。xxx.net や ○●の本を確認したけれど××の所
  の通りで間違っていないコードかと思ったんですが。タスケテ

の様に複数の試行錯誤と複数の情報確認をひっさげてポストしてみ

107:デフォルトの名無しさん
08/01/21 10:27:18
二次元配列?
Perlの配列の要素はスカラーですよ?

108:デフォルトの名無しさん
08/01/21 10:59:15
いま本読んでるところだよきっと!

109:デフォルトの名無しさん
08/01/21 12:22:47
>>91
速さを求めるなら、正規表現の | より、正規表現使わないで or のほうが速いぞ

110:デフォルトの名無しさん
08/01/21 22:29:32
>>97
やっと理解できたよ。map なんて昔からあった?

111:デフォルトの名無しさん
08/01/21 22:32:21
大昔から

112:デフォルトの名無しさん
08/01/22 06:44:24
昔っていうと範囲が曖昧だけど、とりあえず前世紀の産物だしな。

113:デフォルトの名無しさん
08/01/22 06:46:56
僕らが生まれてくるずっとずっと前にはもう

114:デフォルトの名無しさん
08/01/22 07:31:26
>>110
perl4 には無かった記憶が。perl5 からだとすると
URLリンク(search.cpan.org)
> 5.000alpha1 1993-Jul-31
> 5.000 1994-Oct-17

115:デフォルトの名無しさん
08/01/22 10:44:57
map, grep を知ると、出来るだけそれを使ってプログラムを作りたくなる。

116:デフォルトの名無しさん
08/01/22 13:29:05
>115
なんとなくだが、その気持ちは分かった気がする。

117:デフォルトの名無しさん
08/01/22 13:39:17
そして後で泣く

118:デフォルトの名無しさん
08/01/22 14:18:17
>>115
そのままLISPerになっちゃえばいいのにw

119:デフォルトの名無しさん
08/01/22 17:29:54
>>115
前にも同じこと言ったけど中二病だよね。あれって。

120:デフォルトの名無しさん
08/01/22 17:31:34
forのかわりにmap使うボケが多すぎたので、voidコンテクストなるものが導入されました。

121:デフォルトの名無しさん
08/01/22 17:59:14
昔はgrep/mapのほうがforより速かったからなぁ。

122:デフォルトの名無しさん
08/01/22 18:23:02
たしかに。多言語に書き換えるときに泣くよね。

perl はプロトタイプとして使うな。
有る程度ロジックの検証ができたらCなりjavaなりに書き換える。
だから perl 固有すぎる命令は使いたくないね。
map のつかいかたを一所懸命覚えても、何の糧にもならないし。

123:デフォルトの名無しさん
08/01/22 18:24:23
122s/多言語/他言語/p

124:デフォルトの名無しさん
08/01/22 19:22:39
また for厨 が暴れてるのか

125:デフォルトの名無しさん
08/01/22 19:58:09
perl/Tkの参考になるサイトおしえて

126:デフォルトの名無しさん
08/01/22 20:18:47
perl/Tkもいちじはやってたけど、Qt始めてから使わなくなった。

127:デフォルトの名無しさん
08/01/22 20:19:10
でっていう

128:デフォルトの名無しさん
08/01/23 20:45:35
Google検索でいっぱい出てくるじゃん

129:デフォルトの名無しさん
08/01/23 21:13:32
構造体の要素に多次元配列を使いたいです。

  struct A => {
   aaa => '@',  ←ふつうの配列
   bbb => '@'  ←これを多次元配列にしたい
  };

  $A->aaa(0, 'a0000');    ←これと
  $A->aaa(1, 'a1111');    ←これはよいとして

  $A->bbb(0, 0, 'b0000');  ←これはダメ
  $A->bbb(0, {0, 'b0000'}); ←これもダメ
  $A->bbb({0, 0}, 'b0000'); ←これもダメ

どう書けばよいですか?お願いします。

130:デフォルトの名無しさん
08/01/23 21:22:35
perlに多次元配列なんてものはないが、
配列のリファレンスの配列にすればいい。

131:デフォルトの名無しさん
08/01/23 21:26:06
>>129

$A->aaa->[0] = 'a0000';
$A->bbb->[0][0] = 'b0000';

こんなんじゃあかんの?

132:129
08/01/23 22:22:24
レスどうもありがとうございます。

>130
perlに多次元配列はないという噂は聞きますが
これまでCと同じ感覚で使ってました。プログラマじゃないので許してください。

>131
そんな記述できるのですね。
やりたかったことです。ありがとうございました。

133:デフォルトの名無しさん
08/01/23 23:15:25
言葉として、n次元配列という時はある。配列のリファレンスの配列、とか言いたくないよ!

134:デフォルトの名無しさん
08/01/23 23:36:07
一人っきりの部屋で、言う機会もないくせに。


135:デフォルトの名無しさん
08/01/24 00:08:28
意味は通じるから多次元配列でも問題ない。
リファのリファとか言うより伝わりやすい。
厳密なのは仕様書書きとかがやればいい。

136:デフォルトの名無しさん
08/01/24 00:14:57
多次元配列言う奴は多次元配列としてしか使わんからなあ

137:デフォルトの名無しさん
08/01/24 00:37:18
$hash{'a','b'}でハッシュを二次元配列のように使うとかなかった?

138:デフォルトの名無しさん
08/01/24 00:42:42
普通の配列でやればいい

139:デフォルトの名無しさん
08/01/24 00:48:09
>>137
それはPerl5で非推奨になった

140:デフォルトの名無しさん
08/01/24 01:26:30
>>137
$hash{'a-b'}みたいなもんだし多次元のつもりでやると想定外のことになりうるからあまり勧められんね。
keysとかで簡単に拾うこともできんし。

141:デフォルトの名無しさん
08/01/24 01:32:05
unix epoch より過去を unix time で扱うにはどうすればいいでしょうか。

いまテストしてる環境はWinXP SP2 (5.1.2600) + ActivePerl 5.8.8 です(一応)。

142:デフォルトの名無しさん
08/01/24 02:20:59
ビッグバンより前の宇宙

143:デフォルトの名無しさん
08/01/24 03:09:03
>>141
そもそもunixtimeの定義からして無理だろ。
負の数を正の整数で表現するにはどうしたらいいですか? みたいなもんだ。
自前の日付表現方法考えろ。

144:デフォルトの名無しさん
08/01/24 03:38:28
>>143
どうもです。
unix time定義の厳密な定義はわかりませんが、仮に整数のみであるとしても
負数から計算してタイムスタンプなり配列なりを返す実装はありそうかなと思って。
もうちょっと探してみて、なさそうなら他の手を考えます。

145:デフォルトの名無しさん
08/01/24 03:40:23
訂正:「整数のみ」→「正の整数のみ」

146:デフォルトの名無しさん
08/01/24 05:18:37
Perlでオススメのメーリングリストってあります?

検索したら、下記かな?と思いましたが、終わってるようですし。
URLリンク(bug.org)

147:デフォルトの名無しさん
08/01/24 10:42:03
>>135
分かってる人間どうしで言うのは構わんけど
ここで「多次元配列使いたい」って質問してくる人はたぶん分かってないと思うぞ

148:デフォルトの名無しさん
08/01/24 11:06:45
>>146
なんの話題をしたいかによる。
今はどこも過疎ってるけどね。


149:デフォルトの名無しさん
08/01/24 11:30:31
MLは使わなくなったなぁ。
ダイアルアップ時代の産物だと感じるねぇ

150:デフォルトの名無しさん
08/01/24 11:50:56
>>149
ダイアルアップ時代になって、メールをプロバイダに取りに行くように
なって利点が無くなったもんだよ。


151:デフォルトの名無しさん
08/01/24 12:46:53
>>150
じゃその利点があったとかいう時代に
日本で活動していたMLなんていくつあったの?

152:デフォルトの名無しさん
08/01/24 13:46:59
>>151
MLはクローズドな空間を構成するために使われていたから、日本でいくつなんて、
数えられるわけないだろ。

とりあえず私は、あるとき、メールがオフィスタイムに平均して3秒に1通来る状態に
なって、biff - メール到来通知エージェントがつねにフラグを立てている状態になっ
て、調べてみると72のMLに入っていたので、入っているMLを整理したことがある。

あとになって調べてみると、POPが出てきた時に、「これはMLを殺すぞ」と
指摘していた人がいるんだよね。まあ、その通りになったわけで。

153:デフォルトの名無しさん
08/01/24 14:26:54
読みづらい文章だな

154:デフォルトの名無しさん
08/01/24 14:47:16
何の話ししてんだろ

155:デフォルトの名無しさん
08/01/24 15:10:25
はなししとは?

156:デフォルトの名無しさん
08/01/24 15:26:35
プログラマってこういうツッコミ好きなやつほんと多いよな

157:デフォルトの名無しさん
08/01/24 15:42:03
以上、俺の自作自演

158:デフォルトの名無しさん
08/01/24 17:48:43
えー、続きましてー

159:デフォルトの名無しさん
08/01/24 19:14:46
今でもML使ってるよ。昔に比べると流量少ないけど。
ダイアルアップとは関係なく、コミュニティ・ツールが変わったのが大きい気がする。

perlな方々はblogやIRCで済ませてる人が多いみたいだし。
慣れてない人には不親切かもしんない。


160:デフォルトの名無しさん
08/01/24 19:30:09
ML衰退は他にもウイルスとか迷惑メールの増加の時期とシンクロしてた様にも。
しかし投稿を一気に落として、必要な書き込み作ってアップロードって作業は
時間が限られた電話回線時代にはマッチしてた様に思うね。

今、特に常時接続になってからはMLでもなんでもクライアントでは
データコピーを持たない、ASPスタイルこそが時代の流れと
なっていったと思う。
オンライン辞書の類は地味ながら個人的にはここ10年でも
指折りの革新的なツールだと思ってるお。

161:デフォルトの名無しさん
08/01/24 20:00:53
特殊変数だとおもうのですが、$,の使い方を教えてください。
イマイチよくわかりません。
$,=" ";
としても
すべての変数に空白がつくわけではないようですし・・・

162:デフォルトの名無しさん
08/01/24 20:13:50
perlvar嫁

163:デフォルトの名無しさん
08/01/24 22:49:43
google 「perl 特殊変数」

164:デフォルトの名無しさん
08/01/25 13:05:41
ircは日本語perlのコミュが会話に入りづらい雰囲気

165:デフォルトの名無しさん
08/01/25 13:07:32
↑お前、日本語が下手だから会話に来なくてけっこう

166:デフォルトの名無しさん
08/01/25 15:43:02
スレリンク(tech板)

167:デフォルトの名無しさん
08/01/25 18:59:19
>>161
暇だから答えよう。
$, = ' ';
@a = ('a'..'f);
print @a;
みたいな時に配列の間に半角スペースが入るってだけ。

print "@a";
の間には $" で指定。こっちはデフォで半角スペース入ってる。

168:デフォルトの名無しさん
08/01/25 20:38:17
たしかにircは内輪ネタが分からない奴はお断りの雰囲気がある

169:デフォルトの名無しさん
08/01/25 21:22:36
join関数の方が高速

170: ◆TWARamEjuA
08/01/26 11:31:21 BE:5881469-2BP(6825)
ユリウス使うと良いのかもかも。@うに刻以前

171:デフォルトの名無しさん
08/01/26 13:20:13
初歩的な質問ですがお願いします。
open関数でテキストドキュメントを読み込んで
表示するという初歩の操作を試しているのですが、
"invalid argument "というメッセージがでてきて
ファイルが開けません。
スクリプトは単純ですが以下の構造です。

open(F , ">C:\Perl\text.txt") || die " stupid : $!\n";

while(<F>) {
print;
}
close(F);

ファイルはtext.txtです。パスも間違っていません。どうすれば
よろしいでしょうか?

172:デフォルトの名無しさん
08/01/26 13:25:15
一冊入門書を(仮にわからないとこがあっても)通読した方が良いよ。
英語で言うと、I is bookみたいな状態。

173:デフォルトの名無しさん
08/01/26 13:30:38
>>171
print ">C:\Perl\text.txt", "\n";
とでもして、おまいが何をしようとしているかを確認してみろ。


174:デフォルトの名無しさん
08/01/26 18:39:26
基本的なことかもしれませんが…
Windowsでながーい(256文字以上の)ファイル名使っている場合に
ファイル名は取得できるのですが
そのファイルサイズなどを取得する方法がわかりません。

短いファイル名ならサイズの取得も可能なのですが
非常に長いファイル名だとサイズに0が帰ってきます。

もしよかったらサイズ取得の方法をヒントだけでも結構ですので
教えてもらえませんか?
絶対できるのは間違いないとは思うのですが…


175:デフォルトの名無しさん
08/01/26 19:34:11
WebProgのテンプレをこっちにも入れたいな。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

176:174
08/01/26 20:13:11
大変申し訳ありません。
あの後、考えてみたら
Win32::UTCFileTime
を使ってなんとかなりそうな雰囲気です。
少なくともいくつかの例ではうまくいきました。
お騒がせして大変申し訳ありませんでした。
もうちょっと自分で考えないとだめですね…


177:デフォルトの名無しさん
08/01/26 20:17:23
>>171
こりゃひどいね。
キミは、自分が何をしたいのかが分かってないみたいだね。
どこをどう直せばいいのか、教えるのは簡単だが
それはキミにとって良くない。
入門書を読むことをオススメするよ。

178:デフォルトの名無しさん
08/01/26 20:58:43
>>177
そういわずに教えてあげなよ

179:デフォルトの名無しさん
08/01/26 21:00:22
>>167
ありがとう。
これからはperldoc読みます。
プログラム言語は奥が深い。
三十路にはキツイザンス

180:デフォルトの名無しさん
08/01/26 21:26:32
下のファイルを読んで、XXX, YYY, ZZZのいずれかでなければ
値を取り込むプログラムを作りたいです。

 ====
 AAA
 BBB
 CCC
 ……
 ====

my @prohibit = ('XXX', 'YYY', 'ZZZ');
my @keep;
if ($_ !~ /$prohibit[0]/ && $_ !~ /$prohibit[1]/ && $_ !~ /$prohibit[2]/ ) {
 push @keep, $_;
}

とすればまあできるんですが、
my @prohibit に禁止文字の追加や削除をしたときに困ってしまいます。
if ($_ !~ /@prohibit/ ) はエラーになります。
下の $ifif を作っても if 文が中身を把握してくれません。どのようにすればよいでしょうか?

my $ifif;
foreach my $i (0 .. $#{@prohibit}) {
 $ifif = $ifif . sprintf " \$prohibit\[$i\] =\~ \/\^%s\/ \&\&", $prohibit[$i];
}
$ifif = $ifif . ' 0 == 0';


181:デフォルトの名無しさん
08/01/26 21:40:32
なんか宿題みたいなの多いなあ。
半年授業をサボってたんだから、少しは自分で勉強しろよ。

182:デフォルトの名無しさん
08/01/26 21:41:02
>>180
my $regex = join '|', map quotemeta, @prohibit;
if ($_ !~ /$regex/) { ...

183:デフォルトの名無しさん
08/01/26 22:29:02
>>170
ありがとうございます。
単純なインクリメントで日単位の処理をしたいだけだったので
Date::Calc(::Object)で対応しました、という報告をしにきたところでした。
ユリウス暦とはまったく思いつきませんでしたが、Date::CalcはA.D.以降なので
ユリウス→グレゴリオ変換のほうが対応できる範囲が広がりますね。
まぁ20世紀を処理するだけなのでどっちもオーバースペックですがw

184:180
08/01/27 00:09:34
>182
ありがとうございました!!

185:デフォルトの名無しさん
08/01/27 00:35:54
Perlインストールしたんだけど
どうやってアンインストールしたらいいの?
 
フォルダ削除だけで平気?

186: ◆TWARamEjuA
08/01/27 00:48:49 BE:2723055-2BP(6825)
>>180
こういうのもありかしら?

for my $value (<DATA>){
 %prohibit = map +($_, 1), qw|XXX YYY ZZZ|;
 push @keep, $_ unless exists prohibit{$_};
}
exit;

__END__
AAA
GGG
ZZZ
YYY
ZZZ
XXX
HHH

>>183
月の満ち欠けを画像出力するときに、ユリウスを使って計算をしたことがありましたから(゚∀゚)アヒャ

>>185
念のためrootタソになって、# rm -rf 推奨♪

187:デフォルトの名無しさん
08/01/27 00:50:04
ディレクトリではなくフォルダと言うあたりWindowsか?

188: ◆TWARamEjuA
08/01/27 00:50:58 BE:4574467-2BP(6825)
>>186
なんかおかしいよな(´・ω・`)

my %prohibit = map +($_, 1), qw|XXX YYY ZZZ|;
my @keep;

for my $value (<DATA>){
 push @keep, $value unless exists prohibit{$value};
}
exit;

__END__
AAA
GGG
ZZZ
YYY
ZZZ
XXX
HHH


189:デフォルトの名無しさん
08/01/27 01:02:24
>>187
そうなんです
まだ高校生でで思うように開発環境整えられないからさ

190:デフォルトの名無しさん
08/01/27 01:02:31
Regexp::Assembleでいいと思うよ。

191:デフォルトの名無しさん
08/01/27 03:03:57
perlの開発環境なんて本体と標準のメモ帳ありゃできるっしょ。

>>188
なんかあえて難解な書き方にしてるような。

192:デフォルトの名無しさん
08/01/27 03:48:53
読めるようになってくると戻り値を変数に入れるのが面倒になってくるよ。

Winだとインストールが面倒(できない)モジュールがあったりするよ。
まぁ中級後半くらいまでは充分だと思うけど。

193:デフォルトの名無しさん
08/01/27 11:12:16
そのへんがPerlのまずいところでもある。
モジュール頼みのPerlなのに、モジュールがインストールできなくて
ユーザーが離れていってしまうという。

194:デフォルトの名無しさん
08/01/27 12:27:43
かと言って初心者にいきなりUNIX系OSのPCをひとつ用意しろとか
Winにcygwinを導入してPerl使えとかいうのも酷な感じもする。
まあcygwin perlもCPANで入れられないモジュールもあるらしいけどなあ。

195:デフォルトの名無しさん
08/01/27 15:30:12
VMwarePlayerで

196:デフォルトの名無しさん
08/01/27 15:47:07
サードパーティのPPM含めりゃ大抵の物はあるだろ。

197:デフォルトの名無しさん
08/01/27 17:12:33
colinuxで

198:デフォルトの名無しさん
08/01/27 18:49:21
VC++入れてnmakeとclにパス通してCPAN.pmを中心に使ってるが
しばしばmake中にエラーが出るので、その場合にはPPMも使ってる。
CPAN.pmとPPMを併用することによるエラーも出てきてるのかもしれないが、
いずれにせよWinにおけるモジュール管理のノウハウをもうちょっと蓄積したいね。

199:デフォルトの名無しさん
08/01/27 20:08:59
ActivePerl 5.8.8.822を入れたんですが、ppmを使おうとすると
failed: unable to open database file(1)
と表示されて起動できません。
ppm-shellは起動できるんですがinstallの段階で同じエラーになります。
どうやらユーザー名にマルチバイト文字が入っているせいらしいんですが
エラーを避ける方法はありませんか?


200:デフォルトの名無しさん
08/01/27 22:50:58
Perl/Tkでスプレッドシートの Widgetを作成したいのですが、
ActivePerlでどのモジュールを利用するのか、分かりません。取り敢え
ず、Tk::TableMatrixをppmのコマンドでinstall Tk-TableMatrixでインストールし
ましたが、サンプルのコードが動きません。ActibePerlのバージョンは
This is perl, v5.8.7 built for MSWin32-x86-multi-threadとなって
います。

調べていたらuse Tk::TableMatrix;の1行のみのソースでもエラーが出
ます。エラーの内容は、下記です。
Had to create Tk::XlibVtab unexpectedly at C:/ActivePerl/lib/DynaLoader.pm line 253.
Use of uninitialized value in subroutine entry at C:/ActivePerl/lib/DynaLoader.pm line 253.
15.pl syntax OK

インストールに失敗しているのでしょうか?    Perl/Tkの他の
Widgetについては、ボタン、ラベル、メニューについては動きます。全
てのテストはしていませんが。ppmのqueryではTk-XlibVtabはありませ
ん。searchでは、ActivePerlのリポジトリーにはありません。

そもそもが、スプレッドシートを使う時に、ActivePerlでどのモジュー
ルが必要なのかと言う事も理解していません。

恐れ入りますが、分かる方がいらっしゃいましたら、ご教授願います。
Perl/Tkでスプレッドシートが出来なければ、わざわざPerl/TkのGUIを
覚える必要もありませんから。宜しくお願いします。



201:デフォルトの名無しさん
08/01/28 00:05:07
>>199
環境変数設定し。

新:知らないことがあってもへっちゃらさ: ActivePerl の ppm が起動しないのです
URLリンク(riku.justblog.jp)


202:デフォルトの名無しさん
08/01/28 19:37:31
なんでこうなるのかよく分からないので教えてください。

■テスト1
・CORE::GLOBAL::exitは呼ばれず、終了してしまいます。
#!/usr/bin/perl
use strict;
*CORE::GLOBAL::exit = sub {printf "exit(%s)\n",join(",",@_);CORE::exit(@_)};
exit(1);
1;

■テスト2
・事前にSample.pmを作成します。
package Sample;
use strict;
use warnings;
*CORE::GLOBAL::exit = sub {printf "exit(%s)\n",join(",",@_);CORE::exit(@_)};
1;

・CORE::GLOBAL::exitが呼ばれます。
#!/usr/bin/perl
use strict;
*CORE::GLOBAL::exit = sub {printf "exit(%s)\n",join(",",@_);CORE::exit(@_)};
exit(1);
1;

■動作確認環境
This is perl, v5.8.5 built for i386-linux-thread-multi
This is perl, v5.8.8 built for x86_64-linux-thread-multi


203:デフォルトの名無しさん
08/01/28 19:38:31
すみません。テスト2のコードが間違ってました。
#!/usr/bin/perl
use strict;
use Sample;
exit(1);


204:デフォルトの名無しさん
08/01/28 20:24:02
>>201
SET ACTIVEPERL_PPM_HOME=C:\Perl\ppm で起動できました
これで枕を高くして眠れます
ありがとうございます



205:デフォルトの名無しさん
08/01/28 21:41:52
>>202
コンパイラがexitキーワードを解決するときの *CORE::GLOBAL::exit の問題。

#!/usr/bin/perl
BEGIN {
*CORE::GLOBAL::exit = sub { printf "exit(%s)\n",join(',',@_);CORE::exit(@_)};
}
exit 1; # この行が(実行ではなく)コンパイルされる時の *CORE::GLOBAL::exit

206:デフォルトの名無しさん
08/01/29 10:53:21
my @a = (1, 2, 3, (4, 5));

のように配列の中に配列を入れたいんですが、できますか?
やっぱり、リファレンスを使うべきなんでしょうか?

207:デフォルトの名無しさん
08/01/29 11:23:20
べきっつうか、リファレンス使わないと出来ない

208:デフォルトの名無しさん
08/01/29 16:01:58
linux版CPANを入れたらcpan shellに出入りするたびに
Terminal does not support AddHistory.
Terminal does not support GetHistory.
と言われるんですが、これは何ですか。

209:デフォルトの名無しさん
08/01/29 17:15:04
readlineがないとか?


210:デフォルトの名無しさん
08/01/29 17:32:43
>>209
Bundle::CPANのことでしょうか?
入ってるし機能しているはずなんですが・・・。
cpan>
で上下矢印キー押すとコマンド履歴出てくるから入ってる証拠ですよね。

おかしいです。


211:デフォルトの名無しさん
08/01/29 18:28:34
とりあえず、ソースコードをメッセージテキストでgrepしてみるところから
探求をはじめなよ。

212:デフォルトの名無しさん
08/01/29 18:38:12
>>211
あっ!!そういう手があるんですね。
hackですね。ww



213:デフォルトの名無しさん
08/01/29 20:38:01
やはり分からないのでおたずねします。
cpanの入れ直しから始めて、cpan setup後に
cpan >install Bundle::CPAN
をして、途中で
----
Ah, I see you already have installed libnet before.
do you want to modify/update your configuration(y|n)? [no]
----
とあったのですが、これはどういう意味ですか?
(英語としての意味じゃなくて、その中身です。何を指してるんでしょう。)

ソース見てもソース自体がよく分からなかったです。

214:デフォルトの名無しさん
08/01/29 20:41:34
あと
enter arithmetic or perl expression: exit
はexitのままEnterで良いですか?

いずれもメッセージ本文でGoogle検索してみたものの英語力不足のせいか
全く目当ての情報が見つかりませんでした。

215:デフォルトの名無しさん
08/01/29 21:03:54
>>213
中身て?
単に、設定ファイル上書きしていいか 聞かれてるだけだけど…

216:デフォルトの名無しさん
08/01/29 21:18:58
>>215
中身というのは
「設定ファイルを上書き」
というのが何かという意味です。
perlに慣れた人ならすぐ分かるのでしょうが、私は慣れていないので
ピンとこない、といえば伝わるでしょうか?

217:デフォルトの名無しさん
08/01/29 21:21:03
慣れたもなにもcpanの設定を変えていいかどうかを聞いてるだけやがな

218:デフォルトの名無しさん
08/01/29 21:27:42
2時間もいろいろ調べ続けてこれなんです。
英語は分かるので英語的な意味は分かるんですが、それが「何を指しているか」
が分からないんですよ。

言葉って指すものについての経験が不足していると伝わらないでしょう。
パソコンを触ったことがない人にアルゴリズムの話をしても伝わらないように。
冷静に考えてみてください。

それに、上で引用した
----
Ah, I see you already have installed libnet before.
do you want to modify/update your configuration(y|n)? [no]
----
にしたって、その部分の意味は英語の分かる私にはわかりますが、
文脈が分からないのですよ。
言葉って断片だけでは意味をなさなくて、背景の理解があって初めて、
その言葉が理解できるものでしょう。
なので、私がこのメッセージがチンプンカンプンだというのはそういうことです。

それで、どうすればいいんですか?
cpanという言葉もよく分かっていない状態なのですが、
設定というのも何を指すか分からないですが、
cpanの設定を変えていいかはどう判断したらいいんですか?

よろしくお願いします。

219:デフォルトの名無しさん
08/01/29 21:44:59
自分の書いた設定を書き換えられるのに抵抗を感じるならno。
さもなくばyes.

220:デフォルトの名無しさん
08/01/29 22:14:58
>>218
日本語でおk。
要は、「どんな情報があって、それが何を意味していて、その情報を書き換えられたらどうなるのか、ということがわからない」と言いたいんだな?


221:デフォルトの名無しさん
08/01/29 22:22:50
いいえ、ケフィアです。

222:デフォルトの名無しさん
08/01/29 22:26:14
>>219 ありがとうございます。結局よく分かりません。
noにして大きなトラブルが生じそうになかったのでnoにしました。

では、代わりに。これも昨日から発生している問題なのですが、
cpan -fi [modname]
としたときに
Unknown option : f
と出ます。
Bundle::CPANを入れたらforceオプションが使えるようになると聞いたのですが、
このようになります。
ただし、cpanシェルのなかに入って
cpan[1]>force install [modname]
という操作なら出来ます。
出来ないのは、普通にシェルのコマンドライン上で
$ cpan -fi [modname]
とすることによるforceインストールが出来ません。
代わりに普通のインストールが行われてしまいます。

"unknown option: force" - Google 検索
URLリンク(www.google.co.jp)
17件しか引っかからず、よく分かりません。
Bundle::CPAN

223:デフォルトの名無しさん
08/01/29 22:30:38
>>220
質問の意味がよく分かりません。
私が言いたかったのは断片だけでは言葉って意味をなさないということです。
文章的な文脈と知覚経験的な文脈とがあって意味をなすということです。
つまり、
----
Ah, I see you already have installed libnet before.
do you want to modify/update your configuration(y|n)? [no]
----
が分からないという質問に対して2度も直訳的な回答をされたのに対して
それでは伝わらないと言ったまでです。


224:デフォルトの名無しさん
08/01/29 22:33:26
経験がないとかいう問題じゃなくて、単に理解力・想像力がないだけだろ。

225:デフォルトの名無しさん
08/01/29 22:39:55
>>224
いいえ、正確には、このケースで必要とされる理解力と背景知識がなかった、です。
それで、背景知識としてどういったものが必要なのかが分からないので手がかりが欲しくて
上記の質問をしたのです。
理解力なんて測定できなくて曖昧なものを頼りにしていても仕方ないので、
まず背景知識を摂取する、そこがスタートだと考えました。

226:デフォルトの名無しさん
08/01/29 22:52:57
>>214については、そのままEnterでOKだと分かりました。
>>222が分からないので調査中です。

227:デフォルトの名無しさん
08/01/29 23:01:51
>>225
理屈ばっかりこねて行動力の無いタイプだな

228:デフォルトの名無しさん
08/01/29 23:11:30
>>223
yes入力してみればどうなるか分かるだろうに。

229:デフォルトの名無しさん
08/01/29 23:59:27
>>225
手がかり? 文中にはっきり「libnet」と書いてあるじゃないか。
ググって最初に出てくるのがこのページだ。
URLリンク(perldoc.jp)
> libnetって何?
> libnetperl5モジュールの集合体で、それらは全てネットワーク
> プログラムに関連します。

ネットワーク関係のモジュール名を挙げて設定をするか否か
尋ねてきているんだから、ネットワーク周りの設定を改めて行うか
どうか問われている事ぐらい容易に想像できるだろ?

>まず背景知識を摂取する
それを自力で行う能力が致命的に欠けているだけだろ。

230:デフォルトの名無しさん
08/01/30 00:39:16
>>227
理屈をこねたかどうかが大事なのではなくて、理屈が正しいか、
そして理屈が有効かが大事なんですよ。
正しくないor無効な理屈をこねていて、なおかつ行動もしていないのなら
あなたは私を批判する権利があります。
しかし、残念ながらこのケースではそれに該当しません。

それに、私は>>224に対して>>225を言ったということを忘れないでください。
>>224で想像力がないと断定されたのに対して>>225はその反論です。
決して無駄なおしゃべりをしたのではありません。

>>228
yes入力してみましたよ。noも。3回くらいはやって何が起きたかを観察しましたが
違いが分かりませんでした。


231:デフォルトの名無しさん
08/01/30 00:39:53
>>229
>ネットワーク周りの設定を改めて行うか
>どうか問われている事ぐらい容易に想像できるだろ?
もちろんです。ですがそれ以上は想像できません。つまり、それ以上は「背景知識」を
摂取することで補完する必要がありました。
なぜ補完の必要があったか、それは以下のことが分からなかったからです。

1. たしかにlibnetと書かれているし調査の結果libnetがネットワーク関連だということも
分かったが、聞かれているのが本当にlibnetについてなのか、つまり、
do you want to modify/update your configuration(y|n)? [no]
というのは「configuration of libnet」の意味なのか
2. my configurationをmodifyとあるが私はこれまでにlibnetの設定をした記憶がない。
なのに、my configurationとはどういうことか。
3. configurationをなぜ今する必要があるのか
4. 今configurationの各項目をいい加減に決めてもconfigurationをあとで修正できるのか
5. もしそうなら知る必要があるconfigurationの保管場所はどこか

232:デフォルトの名無しさん
08/01/30 00:44:02
ここはお前の哲学を語るスレじゃない。

233:デフォルトの名無しさん
08/01/30 02:18:43
>>231
この"configuration"は「設定」というより、「構成」なんだろうよ。

234:デフォルトの名無しさん
08/01/30 02:56:38
Perlの話をしなさい。
ここは自分の思想を押し付けるスレじゃない。

235:デフォルトの名無しさん
08/01/30 05:11:37
英語が分かるなら英語圏のユーザーに
聞けばいいんじゃねえの?

236:デフォルトの名無しさん
08/01/30 05:27:59
IDが無い板なんだからコテハンつけてほしいな
あぼーんする手間が面倒だよ

237:デフォルトの名無しさん
08/01/30 05:50:31
>>231
ドラゴンボールの中でフリーザが一番好きです まで読んだ

238:デフォルトの名無しさん
08/01/30 08:52:31
>>233
そうなのですか。参考にします。

>>232>>234
とんだ誤解ですね。私は決めつけられた誤解に対して答えただけですよ。
うらむ相手が間違っています。
それに私は私の哲学をどこで語っているんでしょうか。
Perlに関する質問のやりとりのなかで、致命的な誤解が生じてしまったので、
事情説明をしてコミュニケーションの修復を図っただけですよ。
どこにも私の主観・思想が語られておらず、ただ私に関する事実が述べられているのみです。
(もう一度お読みになってみることをお勧めします。)
それなのにその部分だけとりあげて哲学を語っているからスレ違いだとするのは
あまりに早計ではないでしょうか。

>>235
それだけの英語力があるかはやや不安です。
やはり、日本人だから日本語のほうが話しやすいものです。

239:デフォルトの名無しさん
08/01/30 09:00:21
>>238
つうかもっと完結に書く能力はないの?
どうせ「誤解のない詳しく書いてどうのこうの」ってくどくど書くんだろ?
その妙な書き方 前に見たような気がするが…

240:デフォルトの名無しさん
08/01/30 09:10:20
>>238
> うらむ相手が間違っています。
>>232 >>234がお前さんを「うらんでいる」という解釈こそ、この場で最も大きい「とんだ誤解」では。
どこから「うらむ」という発想が出てきたのか、まるで見えてこない。

241:デフォルトの名無しさん
08/01/30 10:03:47
自分がなんで注意されてるかさっぱり理解できない天然さんぽいから放置で。

242:デフォルトの名無しさん
08/01/30 10:28:45
なんという入れ食い

243:デフォルトの名無しさん
08/01/30 10:34:40
>>239
確かに簡潔に書くことは大切ですが、私が簡潔に書く能力がないとするのは論理の飛躍です。
それに、私の文章が簡潔でないというのも偏見ではないでしょうか。
文字数が特別多いわけでもないでしょう。
あと、簡潔に書けるのになぜ簡潔に書かなかったかというと、その必要を感じたからです。
つまり、あらぬ誤解をかけられて、それがために質問者としての目的の遂行に障害が発生したので、
必要なだけの対策を講じたまでです。
そうした些末なことはまさにスレ本題ではないので、>>241の言うように放置をお勧めします。
それから、2chは私は数年前から定期的に利用しているので、私の文章をあなたが見た可能性は否定
できませんが、私の今回の文章を見ただけで、あなたが過去に見た特定の文章の書き手と同一視して
しまうのは早計ではないでしょうか。
そもそも、仮にあなたが過去に見たような気がするというその文章が私のものだったとしても、
だからどうしたというんですか?
発言の意図が見えてこないし、スレ違いもはなはだしいので自重お願いします。

>>240
うらむという表現は「敵対的な言い方をされる」という表現に置換することも可能です。
要するに、表現方法の問題です。
そもそも、仮に、私が>>238で「とんだ誤解」といったときに最大な過ちが私の表現方法
にあったのだとしても、>>232>>234が誤解をしていることには何ら変わりがありません。

>>241
具体的にどんな点で私が注意されるべきなのでしょうか。
もっとも、>>241が私に向けた発言でないことは明白ですが。

244:デフォルトの名無しさん
08/01/30 10:39:18
にゃーにゃー

245:デフォルトの名無しさん
08/01/30 10:42:17
日本語として成立しなくなったら釣りも終わりだな。

246:デフォルトの名無しさん
08/01/30 10:54:08
しねばいいのに・・・

247:デフォルトの名無しさん
08/01/30 12:47:15
日本語の得意な朝鮮人が来てますねwww

248:デフォルトの名無しさん
08/01/30 12:52:09

895 名前:デフォルトの名無しさん[sage] 投稿日:2008/01/07(月) 02:32:27
頭が悪いのに口だけは達者な馬鹿の典型だなw

249:デフォルトの名無しさん
08/01/30 13:13:01
会社で嫌われてんだろうなぁ・・・

250:デフォルトの名無しさん
08/01/30 13:15:37
>>243
早くインストールしろよw

251:デフォルトの名無しさん
08/01/30 13:18:17
>>243
> そうした些末なことはまさにスレ本題ではないので、>>241の言うように放置をお勧めします。

オマエガナ

252:デフォルトの名無しさん
08/01/30 13:23:42
祭りと聞いて(ry

253:デフォルトの名無しさん
08/01/30 13:32:31
ごめんなさい。釣りでした。

254:デフォルトの名無しさん
08/01/30 13:39:22
続きまだぁ?

255:デフォルトの名無しさん
08/01/30 13:50:44
Perlでは珍しいタイプの狂人だな

256:デフォルトの名無しさん
08/01/30 16:52:12
この無駄な冗長さはコボラー

257:デフォルトの名無しさん
08/01/30 21:53:12
珍しく伸びてると思ったら
…珍しくもないか

258:デフォルトの名無しさん
08/01/30 22:51:58
それに、あと、つまり、それから、そもそも、

こんな接続詞が多用されている時点で
簡潔に書けてない事がよく分かるな。

259:デフォルトの名無しさん
08/01/30 23:22:35
みんな、楽しそう。

260:デフォルトの名無しさん
08/01/31 00:11:09
あーこんな文章をどこかで見たことがあると思ってたらアレだ
精神病の人が医者に「これこれで私は精神病じゃないです」って言ってるのにそっくりなんだわ
たとえばこれとか
URLリンク(www.so-net.ne.jp)

261:デフォルトの名無しさん
08/01/31 00:16:37
3行でおk

262:デフォルトの名無しさん
08/01/31 00:43:52


違い

263:デフォルトの名無しさん
08/01/31 02:25:46
なぜこのスレに、精神異常者チェイサーズが集結しているのか?

264:デフォルトの名無しさん
08/01/31 11:37:30
後に現れるのは、もちろんキティガイ

265:デフォルトの名無しさん
08/01/31 20:03:28
エンターキーを押さなくてもキーボードから
一字だけ入力を受け付けたいときはどうすればいいでしょうか?

266:デフォルトの名無しさん
08/01/31 20:08:05
>>265
っ[Term::ReadKey]

267:デフォルトの名無しさん
08/01/31 20:19:17
できました。ありがとうございました。

268:デフォルトの名無しさん
08/01/31 22:23:46
$count = $x =~ tr/0-9/0-9/;
で数字の桁数を数えられるようですが、どういう仕組みなのか分かりません・・・
くだ質の類だと思いますが、よろしくお願いします。


269:デフォルトの名無しさん
08/01/31 22:47:50
tr演算子は置換した文字の数を返す

270:デフォルトの名無しさん
08/01/31 22:48:16
$xの数字を同じ数字に置換して,置換した回数を$countに入れてる.
$xが数字だけなら桁数と一致するわな.

271:デフォルトの名無しさん
08/01/31 23:32:10
目からウロコが落ちた。確かに数えられるねぇ。
でもなんか違う気がする。

272:デフォルトの名無しさん
08/01/31 23:46:35
面白いコードと実用的なコードには差があるからな。

273:デフォルトの名無しさん
08/02/01 00:59:15
できるこたできるけど中身が数字列の場合に限るし
それが保証されてるならlengthでもいい気はする。

274:デフォルトの名無しさん
08/02/01 03:09:51
>>273
my $num = '-123,456';
print $num =~ tr/0-9//, "\n"; # 6
print length $num; # 8

275:デフォルトの名無しさん
08/02/01 08:49:13
実戦での桁数は計算で出すよね

276:デフォルトの名無しさん
08/02/01 10:18:25
計算てw

277:デフォルトの名無しさん
08/02/01 11:53:20
n進数の桁数は計算だすよ

278:デフォルトの名無しさん
08/02/01 11:54:25
>>274
いや数字だけの列と保証されてる場合よ。

279:デフォルトの名無しさん
08/02/01 12:08:24
電話番号やカード番号みたいに、ハイフンがあったりなかったりのチェックで・・
・・・文字数だけじゃあんまり意味ないか

280:268
08/02/01 14:12:06
trは置換した文字列を返すんですね。
処理の順番も勘違いしてました。↓の順番なんですね
$count = ( $x =~ tr/0-9/0-9/ );

ありがとうございました。

281:デフォルトの名無しさん
08/02/01 14:25:00
「置換した文字列」ではない。
置換もしくは削除した文字数を返す。

282:デフォルトの名無しさん
08/02/01 14:32:45
while ($x =~ m/\d/gs) { $count++ }

283:268
08/02/01 14:41:11
>>281
書き間違えでしたスイマセン

284:デフォルトの名無しさん
08/02/01 15:47:47
重箱の隅だけど、
tr/a/a/
ってのは置換したことになるの?

285:デフォルトの名無しさん
08/02/01 16:05:17
やってみろ。

286:デフォルトの名無しさん
08/02/01 17:08:30
tr/hoge/hage/

の hoge にマッチした回数でいいんじゃね?

287:デフォルトの名無しさん
08/02/01 18:12:45
>>284
文法上は置換する(したことになる)が、実際の置換は行われない。
tr/X// や tr/X/X/ は対象に含まれるXを数える為の記述で、この場合には対象が
左辺値である必要もない。

perl -le "print q/123,456/ =~ tr/0-9a/0-9a/" # エラーにならない
perl -le "print q/124,456/ =~ tr/0-9a/0-9b/" # エラーになる
perl -le "print int(1234.56) =~ tr/0-9a//" # エラーにならない

288:デフォルトの名無しさん
08/02/01 21:17:49
ちょっと自分で試してみればすぐ答えが出るのに。
なんで試さないのかなぁ。
もしかして、ナイコン?

289:デフォルトの名無しさん
08/02/02 13:24:32
確かにわけわからん
レスを書くよりキーを叩く回数が少ないのに。


290:デフォルトの名無しさん
08/02/02 13:55:00
重箱の隅とか言いつつperlバイナリのソースコードのレベルの話を求めてるんじゃね?

291:デフォルトの名無しさん
08/02/02 15:24:02
% perl -MO=Deparse -e 'print q/aaaaa/ =~ tr/a//'
print 'aaaaa' =~ tr/a//;
-e syntax OK
% perl -MO=Deparse -e 'print q/aaaaa/ =~ tr/a/a/'
print 'aaaaa' =~ tr/a//;
-e syntax OK

292:デフォルトの名無しさん
08/02/02 17:10:44
5.00503だと 'aaaaa' =~ tr/a// は
Can't modify constant item in character translation
と怒られてdieした。5.6.1なら置換回数が返された。

293:デフォルトの名無しさん
08/02/03 23:24:30
質問です。
だいぶ前に書かれたライブラリ(*.pl)が現役で動いているとします。
色々な箇所で使われているため、(動いている限りは)できるだけこれを修正したくありません。

このライブラリの中に、以下のようなサブルーチンがあります。

  sub Func
  {
    local *data = $_[0];

    #ハッシュにいろいろ詰め込む
  }

このサブルーチンは、以下のように呼び出すようにとサンプルコードが示されています。

  local %hash;
  &Func(*hash);

これを呼び出し側だけでもlocalを排除しようと、以下のように書き換えました。
実行してみた結果、ちゃんと動いているように見えます。

  my %hash;
  Func(\%hash);

この場合、
1.呼び出し元だけを書き換えることに意味はあるのか?
2.あるとしたら正しい書き方は?(cron、CGI、mod_perlで動かすことを想定)

よろしくお願いします。

294:デフォルトの名無しさん
08/02/04 02:17:53
バージョンによる

295:デフォルトの名無しさん
08/02/04 02:25:32
>>293
一般論としては、その修正で得られるのが自己満足だけなら、さわらないことをお勧めする。


296:デフォルトの名無しさん
08/02/04 10:16:16
>294
あ、バージョン書き忘れてました。

 Perl 5.005
 Apache/1.3.28 (Unix)
 mod_perl/1.29

※下2つはCGIやmod_perl動作時のもの。


>295
自分がlocalの挙動をきちんと理解していないこともあり、予期せぬバグを生み出す原因になるので
なるべくmyで統一したいと考えています。

それに、そのサブルーチンを呼ぶときだけlocalなのも変かなーと。



297:デフォルトの名無しさん
08/02/04 10:21:10
>>296
> 自分がlocalの挙動をきちんと理解していないこともあり、予期せぬバグを生み出す原因になるので
> なるべくmyで統一したいと考えています。

そんな変質的行為に突入する前に、localの挙動をきちんと理解しろ。

298:デフォルトの名無しさん
08/02/04 10:41:31
localだと値を追いかけるのが面倒で……。

299:デフォルトの名無しさん
08/02/04 11:08:20
基本的にはそれで正しく動くはず。
ただ、1.2.の問いがあるから「書き換える必要はないんじゃないの?」って言われてるわけで。


300:デフォルトの名無しさん
08/02/04 11:38:30
ありがとうございます。

ライブラリの方を修正したいけど……中途半端に手を出したら悲惨なことになりそう……

301:デフォルトの名無しさん
08/02/04 11:52:29
古いライブラリをmod_perlで使おうとは思わないなぁ

302:デフォルトの名無しさん
08/02/04 12:18:11
古いライブラリをmod_perlで使うんじゃないんです
古いライブラリがmod_perlで動いてるんです……

303:デフォルトの名無しさん
08/02/04 12:22:08
自分なら、そんな動作よくわからない関数mod_perlで使わないが・・・
なんかラッパー関数作ってそっち使うようにしてけば
そのうち古い関数は淘汰されるんでは?


304:デフォルトの名無しさん
08/02/04 12:51:20
まあ、その少しずつやってます……。

305:デフォルトの名無しさん
08/02/04 13:53:56
他人の書いたperlの読みにくさは異常
書き換えるよりも書きなおしたほうが早いことさえある

306:デフォルトの名無しさん
08/02/04 14:38:28
読みながら書き直したりする。

以前、「どう見てもPrologです。本当にありがとうございました」な
プログラムをもらったことがある。


307:デフォルトの名無しさん
08/02/04 18:33:33
よくわからない物はよくわかるようになるまで触らない方がいいとは思うな。
localが気になるならコメント添えてここはこういう理由って記述しときゃ後で見たときにもわかるし。
せめてそのライブラリの流れ把握できるくらいになってからでないと。

308:デフォルトの名無しさん
08/02/04 19:53:07
localの98%くらいはmyにしてしまっても問題なくね?

309:デフォルトの名無しさん
08/02/05 00:06:02
いや、97%くらいだろ。

310:デフォルトの名無しさん
08/02/05 05:09:26
動いてんならいじるなよ

311:デフォルトの名無しさん
08/02/05 18:09:00
懸念してるのは想定外の2%だか3%のバグの発生だからな。
上でも言われてるがいじるメリットが自己満足だけなら俺もそのままのがいいとは思う。

312:デフォルトの名無しさん
08/02/05 20:11:35
Exporter が import を強制的にexportしなくなったのって、
仕様変更はいつから?
実装変更は、perl 5.9から?

313:デフォルトの名無しさん
08/02/06 00:30:23
人狼ってゲームのCGI設置したいんだけど(nifftyに)
できなくて質問CGIが動かないんだけど、以下エラー
Wed Feb 06 00:22:09 2008 Client Abort 2-- detected during CGI/SSI process
Wed Feb 06 00:22:10 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:11 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:12 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:14 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:15 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:16 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:18 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:19 2008 Warning: Connection closed and CGI process ID=400 ・・・・・・
以下の文法あやしい?
sub sub_lock {
# 1分以上古いロックは削除する
if (-e $lock_path) {
local($mtime) = (stat($lock_path))[9];
if ($mtime < time - 60) { &sub_unlock; }
}
local($retry) = 5;
# mkdir関数式ロック
while (!mkdir($lock_path, 0755)) {
if (--$retry <= 0) { &error('LOCK','LOCK is BUSY'); }
sleep(1);
}
$sys_lockflag=1;
}

ニフティで設置してる人いたからできるとは思うんだけども誰か助けて(;;)。。。

314:デフォルトの名無しさん
08/02/06 01:18:29
鼬害です

315:デフォルトの名無しさん
08/02/06 03:27:35
>>1 の冒頭くらい読んでね。
ここはプログラムの板でってCGIの板じゃないよ。はい移動。
スレリンク(php板)

316:デフォルトの名無しさん
08/02/06 16:20:24
Perlって数ヶ月書かないだけでかなり忘れるんだけど、
おまいらPerlは毎日のように書いてるの?
俺のような記憶力弱いやつはPythonに替えるべき?

317:デフォルトの名無しさん
08/02/06 16:22:52
$str =~ tr/a-z/A-Z/g;

として小文字を大文字に変換しようとしてますが、

Bareword found where operator expected~

とか言ってエラーになります。
何度ググってもこれであってるぽいんですが…。わけがわかりません助けて。

318:デフォルトの名無しさん
08/02/06 16:26:31
その前後が問題なんじゃないの?

319:デフォルトの名無しさん
08/02/06 16:29:44
>>317自己レス
gをなくしたら通りました。g使えないの?
ぐぐってでてきた複数の例で使われてるんだけど。
試したVerは5.8.2と5.8.8。

320:デフォルトの名無しさん
08/02/06 16:31:36
tr///はcdsだけみたいね

321:デフォルトの名無しさん
08/02/06 17:01:29
uc($str);

322:デフォルトの名無しさん
08/02/06 17:26:53
>>316
そんな毎日やるわけないけど
忘れたらリファレンスのページとか参考にすりゃいんじゃないの?

>>319
gはm s // だけのはず。
tr y は>>320
似てるけど一応動作は別もんだからね。

323:デフォルトの名無しさん
08/02/06 18:47:07
>>316
Pythonでも、クラスのメソッドとか多くて覚えられないけどね。
ただ、Pythonに乗り換えたらPerlには戻れないと思う。

324:デフォルトの名無しさん
08/02/06 20:38:28
>>316
使うときはWebサイトか昔書いたソースを見ながらやってる

325:デフォルトの名無しさん
08/02/06 22:47:26
>>316
毎日とは言わないが、けっこう頻繁に使ってるな。
1回しか使わないような使い捨てスクリプトは perl で書いてる。
何度も使うのはCやjavaやVBやVBScriptや・・・・
perl って便利ですよ。
バッチファイルみたいに手軽にかけて、バッチファイルよりも遥に高度な処理ができるからね。

perl が嫌われてる理由を俺なりに考えてみた。
・漢字(ShiftJIS)に対応していない
・サーバアプリに向かない(CGI は負荷が重い)
・ソース丸見えだから業務アプリに向かない(納品できない)

でも使いようによっては超強力だよ。

326:デフォルトの名無しさん
08/02/06 22:56:53
perlって嫌われてるのか?
ところでperlで自分で書いたものって一月も前に書いたものは修正したくてならなくなるんだがwww

327:デフォルトの名無しさん
08/02/06 22:58:19
> 漢字(ShiftJIS)に対応していない
Encode.pmがあるじゃない
> サーバアプリに向かない(CGI は負荷が重い)
Hatena, Mixi, その他探せば色々あると思うんだけど

Perlが糞な理由はOOPやリファレンス回りの小汚い記法と
省略の美学(笑)によって解読不能なコードが書けるからだろう

きちんと書けば(『Perlベストプラクティス』みたいに)大分ましだが
Perlの特長を削いでる感じがするね

328:デフォルトの名無しさん
08/02/07 00:21:34
>>325
>ソース丸見えだから業務アプリに向かない
暗号化する仕組みがあるよ。


329:デフォルトの名無しさん
08/02/07 00:33:04
個人で使うならRubyかPythonのほうが幸せになれる?

330:デフォルトの名無しさん
08/02/07 00:46:13
>>329
個人で使うだけなら、迷わずPerl。

まぁ、好き好きだけどね。

331:デフォルトの名無しさん
08/02/07 00:57:31
理由はユーザーが多いから?年期の入った言語ゆえにソースが転がってるから??
後発の言語のほうが練られてそうなんですが。
初学者なんでこのままマスターしようか乗り換えようか迷ってるのですわ。

332:デフォルトの名無しさん
08/02/07 01:02:24
perlなんて簡単なバッチ処理を書いて使い捨てにするようなのに向いてる言語だから、
マスターした!って達成感を味わいたいなら別の言語にしたほうがいいよ。

333:デフォルトの名無しさん
08/02/07 01:05:36
perlを使う理由なんて「どこにでもある」「たいていのものはCPANにある」しかないよ。

334:デフォルトの名無しさん
08/02/07 01:08:19
マスターてのがどういう状態を指してるのか分からんが、
一通り文法覚えて書けるようになるだけなら、RubyもPythonも大して変わらんね

335:デフォルトの名無しさん
08/02/07 01:24:51
Perlぐらい憶えときゃええがな。他言語へも1,2週で移行できるわな
そんな人生の選択みたいに迷うほどのことちゃいまっせ

336:331
08/02/07 01:43:10
マスターって言葉使いましたが単にテキスト処理ならなんでもってレベルです。
レスありがとうございました。とりあえずPerl覚えときます。

337:デフォルトの名無しさん
08/02/07 01:50:17
>>327
横入りだけどJcode使ってた身としてはEncodeはかゆいとこに手が届かないなぁ。
あと、今はPHPとかエディタの機能とかで知れてるけど正規表現に腰が引けてる人もいたかもね。
使いこなせば強い味方だけどいきなりだとさっぱりわからんだろうし。
記述の簡略化はあるねー即興で組んだやつはファイルのクローズせずに終わらせたりかなり乱暴なことしてる。

338:デフォルトの名無しさん
08/02/07 02:12:19
良くも悪くも無茶な書きかたができるよね

339:デフォルトの名無しさん
08/02/07 09:46:44
コード書く
→後日、意味もなく省略化を施す
→さらに後日、自分の書いたものが理解できず解読作業

ひとつのコードで3回も楽しめるPerlサイコー\(^o^)/

340:デフォルトの名無しさん
08/02/07 10:38:16
>>339
あるあるwwwありすぎて困るwww

341:デフォルトの名無しさん
08/02/07 11:22:36
日々のperlは書き捨て

342:デフォルトの名無しさん
08/02/07 12:13:33

激しくスレ違いかもしれませんが、質問です。

PCゲームを多重起動しようと試みたのですがダメでした。
大抵のゲームはWindowsのアカウントを2つ作成し、別々のアカウントで起動すれば問題ありません。

現在、Vistaを使っているのでXPではどうなるかはわかりませんが(XPは右クリックから別ユーザーで起動が可能)、
Vistaでその手法をとる場合、runasコマンドを使用することになります。
しかしこのコマンドで別々に起動しても、後から起動したほうが無効になってしまいました。

で、ここからがわけわかめなのですが、同一のデスクトップからの起動はダメでも、
Windowメニュー→ユーザー切り替えをし、別々に起動すればうまくいきました。

この違いはいったいなんなのでしょうか?
 

343:デフォルトの名無しさん
08/02/07 12:17:36
このゆとりはいったいなんなのでしょうか?

344:デフォルトの名無しさん
08/02/07 12:27:32
単なる誤爆じゃね? と思いたいが

345:デフォルトの名無しさん
08/02/07 15:02:53
use utf8;
use Encode;
use WWW::Mechanize;

my $start = "URLリンク(***.com)";
my $mech = WWW::Mechanize->new( autocheck => 1 );
$mech->get( $start );

my $phrase = 'こんにちは';
$mech->follow_link( text_regex => qr/$phrase/);
.....

見たいなコードを書いて日本語のページ(shiftjis)をとりに行ってるんだけど、
getのときの文字コードの判別がうまくいかないので、
text_regexがうまく動かないんですが、いい方法ないですか?


346:デフォルトの名無しさん
08/02/07 17:29:33
>>345
裏2chにあります

●裏2chの入り方
1・”名前欄”に「ura2ch.czfusianasana.net」と入力します。
  裏2chへ飛ぶためのコマンドです、間違えないように”「」”の内側の文字をコピーペーストして下さい。 
2・メール欄に閲覧したい板の関連キーワードを入力してください。
 例:ロリ、グロ、無修正など
3・”本文欄”にIDとパスワードを入力します。
  ID/パスワード=「guest/guest」
4・書き込みが終了すると2chのTOPに戻るのでもう一度入場
5・背景が暗転していたら成功、裏2chに侵入出来ています。

ちなみに裏2chに既存の板は勿論存在します、それにサーバーは外国のサーバーなので日本のややこしい法律に抵触する事も無いです
週末や2ちゃんねるで話題の事件があるときはアクセス数が増えサーバーに負荷がかかる為、つながりについ場合があります
スポーツ選手のコラや無臭性画像も多数UPされている板も存在します
それに完全な匿名性を誇るので違法行為を繰り返しても逮捕される事はまずありません

347:デフォルトの名無しさん
08/02/07 18:01:32
すごい久々にそのコピペ見た。

348:デフォルトの名無しさん
08/02/07 18:07:56
:content_cbで変換するとか?


349:p4143-ipbfp205otsu.shiga.ocn.ne.jp ◆TWARamEjuA
08/02/07 20:57:18 BE:3811875-2BP(6825)
wktk♪

名前が長すぎるようです♪

350:デフォルトの名無しさん
08/02/07 21:41:57
コマンドプロンプトでperl -vと打ち込むところでperlと打ち込んだら
exitと打ち込んでもコマンドプロンプトが終了できなくなってしまいます・・・

351:デフォルトの名無しさん
08/02/07 22:03:10
__END__

352:デフォルトの名無しさん
08/02/07 22:08:09
kill -KILL `pidof perl`

353:デフォルトの名無しさん
08/02/07 22:10:53
^D

354:デフォルトの名無しさん
08/02/07 23:16:05
CTRL+Z
エンター

355:デフォルトの名無しさん
08/02/08 01:33:02
ctrl+s押して右往左往したことはある

356:デフォルトの名無しさん
08/02/08 09:05:11
>>355
あるある。リンクが切れたのかと思っちまう。

#ちなみに、Ctrl+Qでぬける。


357:345
08/02/08 11:45:09
自己解決しました。
裏2ちゃんねるにはいけませんでした、残念w


358:デフォルトの名無しさん
08/02/09 00:38:06
>>332
>perlなんて簡単なバッチ処理を書いて使い捨てにするようなのに向いてる言語だから、

したり顔でそんな放言出来るなんて、おまいはまだまだだな。
perlでも信頼性と保守性を担った、アプリケーションと呼べるレベルのものまで書けるわさ。

359:デフォルトの名無しさん
08/02/09 00:57:31
でっていう

360:デフォルトの名無しさん
08/02/09 01:14:05
さくっと書いてさくっと終わるようなものに 「も」 向いている言語だというのは間違いないんじゃないかな

361:デフォルトの名無しさん
08/02/09 01:32:18
いっしょけんめいPerlのコアなプログラミングを学習したところで、
就職にはなんの役にも立たない。
それどころか、履歴書や職務経歴書に「Perl」などと書こうものなら
面接のその場で不採用決定。
C言語とか覚えとけば、java やその他の言語にも生かせるが
Perlじゃ「つぶしが利かない」からねぇ。

362:デフォルトの名無しさん
08/02/09 01:38:34
まあ、趣味のプログラマな人間には全く関係ない話題ではあるなあ。

363:デフォルトの名無しさん
08/02/09 01:52:55
ウチの会社なら…履歴書の審査は通るぞ!
(他の履歴とか面接でダメになる可能性はるけど)



364:デフォルトの名無しさん
08/02/09 01:54:14
VBとか書いてあるよりはマシ。
まあ、会社の分野というか方向性によって違うんだろうけど。

365:デフォルトの名無しさん
08/02/09 06:17:51
「特技: 自転車に乗れます」と書くようなもんだからな。

366:デフォルトの名無しさん
08/02/09 06:38:44
参照渡しについて質問。

$a = 'aa';
$b = \$a;
print $$b;

のデリファレンスを

print $b;

この形で行いたいんですが、良い代入方法は無いでしょうか?
*b = *a;は配列とかも同じになるので無しで。

PHPの
$b = &$a;
みたなのを希望。


367:デフォルトの名無しさん
08/02/09 07:02:56
>>366
URLリンク(www.kt.rim.or.jp)
$b = \$a;

368:デフォルトの名無しさん
08/02/09 07:07:50
>>367
ありがとうございます。
読んで来ます。

369:デフォルトの名無しさん
08/02/09 09:14:46
比較で一致しないのはなぜ? 整数だと一致するし、直接比較しても一致する。 $b = $b+0.1;
がみそ?

$a = 5.5;
$b = 4.5;

for($i = 0; $i< 11 ; $i++)
{
if($a == $b)
{
printf("match :");
}
else
{
printf("unmatch :");
}

printf( "%2.2f %2.2f \n",$b,$a);

$b = $b+0.1;
}

結果

unmatch :5.40 5.50
unmatch :5.50 5.50   (- 一致しない

370:デフォルトの名無しさん
08/02/09 09:24:45
>>369
異なる値が一致しないのは当然。

371:デフォルトの名無しさん
08/02/09 09:50:00
浮動小数点を==で比較してはいけない。プログラミングの常識。

372:デフォルトの名無しさん
08/02/09 09:51:09
差の絶対値がある閾値より小さいかどうかで調べるよね。

373:デフォルトの名無しさん
08/02/09 09:58:13
へーそうなんだ。整数しか使ったことがないから知らなかった。
369じゃないけど勉強になったわ。

374:デフォルトの名無しさん
08/02/09 10:12:53
cygwinのPerlだと
perl -e '$A=5.5;$B=5.500000000000001;print "match\n"if $A eq $B'
これがイコールになっちゃうみたいですね

375:デフォルトの名無しさん
08/02/09 11:18:45
浮動小数点表現では0.1が循環小数になる。
(だからお金の計算に浮動小数点使っちゃだめ)

376:デフォルトの名無しさん
08/02/09 12:02:59
>>374
eqの意味知っていて意図的に使ってるの?

377:デフォルトの名無しさん
08/02/09 14:08:21
>>374
こりゃ便利だな。

378:デフォルトの名無しさん
08/02/09 17:17:17
>>371
FAQのようですね。確かに今回初めて浮動小数点の比較を使ったんだけど、知らなかった。

379:デフォルトの名無しさん
08/02/09 17:29:41
>>378
> FAQのようですね。

ちゃう。ちゃんとした教育を受けた人なら、質問を出す前に教わるくらいの事柄。



380:デフォルトの名無しさん
08/02/09 17:32:41
>>375
じゃあ、お金の計算には何使えばいいんだ?
利息計算とかでいやでも小数使うと思うんだが。

381:デフォルトの名無しさん
08/02/09 17:40:17
10進浮動小数点数

382:デフォルトの名無しさん
08/02/09 17:45:35
>>379
スマソ。
教育は受けてない。


383:デフォルトの名無しさん
08/02/09 17:49:14
Perlの場合はBigDecimalだったっけ?

384:デフォルトの名無しさん
08/02/09 18:20:08
>>380
例えば消費税なら価格に5かけてから100で割る。
要するに細かい計算は整数で計算する。

385:デフォルトの名無しさん
08/02/09 18:50:44
それでは、コボラーさんどうぞ
↓↓↓↓↓↓↓↓↓↓↓↓↓↓

386:デフォルトの名無しさん
08/02/09 18:52:56
固定小数点という便利な言い方があると思うんだが(笑)


387:デフォルトの名無しさん
08/02/09 19:02:22
固定小数点でも底が2なら0.1は表せないだろ。

388:デフォルトの名無しさん
08/02/09 20:29:27
ある既存のシステムからもらってきたデータの中に4バイトの単精度実数が入ってるんです。
それを受け取りたいんですが、画面表示すると丸め誤差ってヤツ?が出てしまうんです。
ためしにやってみたこと

$x=pack('f', 123456 ); $y=unpack('f', $x); print $y,"\n";
$x=pack('f', 0.05 ); $y=unpack('f', $x); print $y,"\n";
$x=pack('f', 0.0000001); $y=unpack('f', $x); print $y,"\n";

結果
123456
0.0500000007450581
1.0000000116861e-007

元の数字に戻すには、どうしたらいいですか?

389:デフォルトの名無しさん
08/02/09 20:32:19
>387
「固定少数点」でググれ

390:デフォルトの名無しさん
08/02/09 20:34:52
>388
精度を指定すれば?

391:386
08/02/09 20:36:48
>387
すまん、>384への補足のつもりだったんだ


392:デフォルトの名無しさん
08/02/09 20:52:05
>>390
精度の指定の仕方を教えてください。

393:デフォルトの名無しさん
08/02/10 00:44:37
>>388
$x=pack('f', 0.0000001 ); $y=unpack('f', $x); ($z = sprintf("%.7f\n", $y)) =~ s/\.?0*$//;print $z;

394:デフォルトの名無しさん
08/02/10 16:23:05
標準入力を待つため以下の様に書いたがうまくいきません。
何がまずいのでしょうか。ActivePerl5.8です。

use IO::Select;
$sel = IO::Select->new;
$sel->add(\*STDIN);
while(1){
print "can_read\n";
@a = $sel->can_read;
foreach $fh (@a){
if($fh == STDIN){
print "STDIN\n";
}
exit;
}
}

395:デフォルトの名無しさん
08/02/10 16:51:18
>394
perlport より
>select
>Only implemented on sockets. (Win32, VMS)

396:394
08/02/10 18:23:33
>395
そう言う事かー。納得しました。ありがとうございました。

397:デフォルトの名無しさん
08/02/11 02:25:54
現在、与えられた文字列を読み込み、それを元にHTMLを出力するプログラムを作成しています。
与えられた文字列の中に特定のキーワードを見つけると、それをリンクに変換するようにしたいと考えています。

例:
  [google:hoge] → <a href="URLリンク(www.google.co.jp)">Googleでhogeを検索</a>
  [mixi:xxxxx]  → <a href="URLリンク(mixi.jp)">mixi</a>
  URLリンク(xxx.xx)<)">URLリンク(xxx.xx<)

こういった置換を行うコードを1つずつ書くのではなく、
例えば、以下のような置換パターンをセットしたハッシュを用意しておき

  %hash = (
    '\[google:\w+\]' => '<a href="URLリンク(www.google.co.jp)">Googleで$1を検索</a>',
  )

forやforeachで回しながら自動的に置換したいのですが、どのようにすればよいでしょうか。
(エンコードとかは考えない方向で)

 foreach my $key (keys %hash)
 {
   $input_str =~ s/$key/$hash{$key}/g;
 }

とやった場合、変換後の文字列の中に「$1」そのものが入ってしまいます。


398:デフォルトの名無しさん
08/02/11 02:29:35
$input_str =~ s/$key/$hash{$key}/gee;

できるかは知らん


399:デフォルトの名無しさん
08/02/11 10:43:55
>>397
クロスサイトスクリプティングって知ってるか?
素人のCGI作成は法律で禁止して欲しい。

400:デフォルトの名無しさん
08/02/11 11:28:03
>>397
答えそのものは書かないけど、以下のことが必要。
'\[google:\w+\]'の部分は'\[google:(\w+)\]'でしょうね。そうしないと
$1で受け取れないから。
置換をするなら、
$input_str =~ s/$key/conv($1, $hash{$key})/eg;
などとしておいて、
sub conv {
    my ($word, $str) = @_;
    $str =~ s/\$1/$word/g;
    $str;
}
などとでもしておくとか。
で、
URLのクエリー部分に仕込む文字列はURIエスケープが必要。
そんで、マルチバイトの場合、どの文字コードにしてからエスケープするかも
考える必要あり。
さらに、<a>と</a>の間の文字列に使用するときはサニタイズ処理が必要(XSS対策)。
>>398 の方法だと、perlコードをそのまま解釈してしまうので、別の危険あり。
「与えられた文字列」は誰が与えるのかがとても大きな問題です。
URLにリンクを張るのは、大崎氏のPerlメモが使えると思います。

401:デフォルトの名無しさん
08/02/11 11:57:26
>399
もちろん知ってます。
置換条件と置換パターンを配列などに保持しておく(または外部から読み込む)という考え方自体が
セキュアではないということでしょうか?

>400
( )で括って無かったのは書き込み時のミスです、すみません。
手元のソースでは書かれてたんですが、適当な条件に直すときに忘れてしまったようです。





402:デフォルトの名無しさん
08/02/11 12:22:23
置換パターンにperlの$1を流用しようとしてるところがセキュアでない。

'<a href="URLリンク(www.google.co.jp)(utf8)}">Googleで${1:htmlsafe}を検索</a>'

とかして、これを解釈するようにすればよい。

403:デフォルトの名無しさん
08/02/11 17:27:17
ありがとうございます。

自分用のツールをさくっと作るつもりだったけど、そこまでやろうとすると手間かなあ。
誰かモジュール作ってるかもしれないけど。

404:デフォルトの名無しさん
08/02/11 18:12:59
質問です。
'おまんこ'も'おちんこ'もマッチしないのですが、どこか間違いあるのでしょうか?

use strict;
use warnings;
use utf8;
binmode STDOUT, ':utf8';

while (my $str = <STDIN>) {
chomp($str);
last if ($str eq 'end');
if ($str =~ /お.んこ/) {
print "$& --- マッチしたお\n";
} else {
print "マッチしないお\n";
}
}


405:デフォルトの名無しさん
08/02/11 18:16:55
binmode STDIN, ':utf8';

追加したらマッチしますた。

406:デフォルトの名無しさん
08/02/12 05:34:25
質問です。

use Encode;
binmode STDOUT, ':iso-8859-1';
open READ , '<:encoding(utf8)', "$ARGV[0]" ;
while (my $data = <READ>){
print "$data";
}
close READ;

exit;

でutf8でencodeされたファイルをiso-8859-1に変換しようとしたら、
標準出力ではうまくいって、リダイレクトすると文字化けしました。

おわかりになる方、いらっしゃるでしょうか。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch