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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。

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

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

ttp://www.perl.org/get.html
● 2008/01/11現在の最新版: 5.10.0
● 2007/01/11現在の開発版: 5.9.5

前スレ
Perlについての質問箱 33箱目
http://pc11.2ch.net/test/read.cgi/tech/1192463997/

リンク集は>>2-3
過去スレは>>4 あたり
2デフォルトの名無しさん:2008/01/11(金) 00:07:47
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: ttp://www.site-cooler.com/kwl/perl/

[本]
リャマ: ttp://www.oreilly.co.jp/books/4873111269/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/

[オンラインマニュアル] (追加)
最新のドキュメント: ttp://search.cpan.org/dist/perl/
perl5.8.xのドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi
perldoc.jp: ttp://www.perldoc.jp/
Perldoc.com: ttp://www.perldoc.com/
3デフォルトの名無しさん:2008/01/11(金) 00:08:12
4デフォルトの名無しさん:2008/01/11(金) 00:08:28
>>1
5デフォルトの名無しさん:2008/01/11(金) 00:09:06
6デフォルトの名無しさん:2008/01/11(金) 00:09:38
7デフォルトの名無しさん:2008/01/11(金) 14:30:54
基本中の基本で申し訳ない。
リストを集合と見なして、和、積などの演算を提供するモジュールでポピュラーなのあったっけ?
8デフォルトの名無しさん:2008/01/11(金) 16:28:17
Set::Array
9デフォルトの名無しさん:2008/01/12(土) 00:24:18
CGI::Lite にある、url_encode 相当の関数って、
CGI.pm には入ってないので、自前でやるしかない。

で、あってる?

escapeHTML ってのはあるんだけどなぁ。
(= CGI::Lite で言うところの、browser_escape)
10デフォルトの名無しさん:2008/01/12(土) 02:47:40
>>9

use URI::Escape
じゃあ、いかんのかね?
11 ◆TWARamEjuA :2008/01/12(土) 22:00:08 BE:3485748-2BP(6825)
日本語Cookieのエンコードに助かりました。。>> URI::Escape
12デフォルトの名無しさん:2008/01/12(土) 22:32:26
パールのオブジェクト指向ってどうなのよ?
13デフォルトの名無しさん:2008/01/12(土) 22:46:33
使う方はそれほどでもないが、書くのは結構めどい
14デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/01/12(土) 23:34:11
Perl使いからすれば、な。
他のOOPLを先にやっちゃった人だと、ちと辛くなる。
何かOOPL自体を実装してる気分になる。
16デフォルトの名無しさん:2008/01/12(土) 23:57:02
>>12
病的
17デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/01/13(日) 08:24:31
またデバッグしないエラー隠蔽者か。
19デフォルトの名無しさん:2008/01/13(日) 11:00:49
>>17
まずは、ソースの頭にこの二行を追加してください。
あとは、ガイダンスに従ってプログラムを修正してください。

use string;
use warning;
2017:2008/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デフォルトの名無しさん:2008/01/13(日) 17:53:45
落書き程度のプログラムならいいけど、
ちゃんとしたのを書くときはstrictとwarningプラグマをつけて書くようにしたほうがいいよ。

何かエラーが出るなら、コードにバグなりバグの原因が潜んでるってことだから。
22デフォルトの名無しさん:2008/01/13(日) 18:33:26
ひえええ(悲鳴)
23デフォルトの名無しさん:2008/01/13(日) 19:26:24
forでmyを使えばいいし、
そもそもPerlではforeachにしたほうがいい
strictとwarningsは 必 須
24デフォルトの名無しさん:2008/01/13(日) 19:35:12
foreach my $i (0 .. $#person)
2517:2008/01/13(日) 19:47:54
>21-24
すみません。strict と warnings は使うようにします。foreach にもします。
>$person[$i] がなぜかできなくなるので使ってないです。
については、
my $person[$i] = Person->new();
 ↓
my @person = Person->new();
にしたらローカル変数使えました。どうもありがとうございました。
26デフォルトの名無しさん:2008/01/13(日) 21:21:49
for (my $i = 0; ......
27 ◆TWARamEjuA :2008/01/13(日) 21:57:44 BE:3811875-2BP(6825)
そもそも$i,$jが必要なのかなぁと思ったり。。。
28デフォルトの名無しさん:2008/01/13(日) 22:36:13
個人の力量に応じて色々書けるところがPerlのいいところなのに
マイルール押し付けすぎじゃね?
29デフォルトの名無しさん:2008/01/13(日) 22:38:32
力がないからこそエラーチェック機構に頼るべきだろう
30デフォルトの名無しさん:2008/01/13(日) 23:18:12
warningsは必ずしも使わないな。
あまり教条主義的になるのもよくない
31デフォルトの名無しさん:2008/01/13(日) 23:40:27
ここの人はPerlでプログラムをバリバリに書くの?
そこそこに大きくなりそうな時は、やっぱCにしようって思わない?
32デフォルトの名無しさん:2008/01/13(日) 23:41:31
>>17がアホなエラーを出してるからだろ。
33デフォルトの名無しさん:2008/01/14(月) 02:10:03
>31
Perlで書かなければならないときはPerlで書くし、
Cで書かなければならない時はCで書く。
34デフォルトの名無しさん:2008/01/14(月) 03:00:33
サンプルを作るのはPerlで、
速さが必要なときは、特定部分だけCにしてる
35デフォルトの名無しさん:2008/01/14(月) 04:53:03
>>30
それは分かってて使わないってことだろ?
上のは使うことすら知らなかったわけだから
36デフォルトの名無しさん:2008/01/14(月) 05:20:23
環境によっては使えない、なんてことも。
37デフォルトの名無しさん:2008/01/14(月) 11:29:21
そもそもPerlかCなんて、そんなに選択範囲小さくないです
38デフォルトの名無しさん:2008/01/14(月) 13:22:36
最近、PerlとRubyとElispで組み合わさって動くものばかり書いている。
PerlとRubyくらいまとめたい。
39デフォルトの名無しさん:2008/01/14(月) 16:39:51
少しプログラムで詰まりました。
ローカルサーバー上では
$i = rindex($add,"\\");
という入力をすることでうまく行きますが
借りてるサーバに上げる場合は
$i = rindex($add,"/");
と改変しなければ動かないプログラムがありまして、
出来れば、ローカルと借りてるサーバ両方でうまく処理が行くようにしたいのですけど、
いい方法ないでしょうか?
40デフォルトの名無しさん:2008/01/14(月) 16:56:40
多分パスのセパレータの違いが出てるんだろうけど・・
\か/に正規化すれば?もしくはシステムが使ってるパスのセパレータを取得してそれを使う

$add =~tr/\\/\//;
$i = rindex($add, "/");
41デフォルトの名無しさん:2008/01/14(月) 16:58:36
>>40
なるほど
ありがとうございます
42デフォルトの名無しさん:2008/01/14(月) 17:31:29
File::Spec
43デフォルトの名無しさん:2008/01/14(月) 18:33:59
CPANがエラーで動きません。どうすればよいのでしょうか?

やったこと
・相手のサーバーがダウンしてるのかと数箇所、変更しましたが変わらず
・数個のモジュールを試すが全部、同じエラー
-------------------------------------------
Fetching with LWP:
ftp://*****************
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:
ftp://*****************
Can't locate object method "new" via package "Net::FTP" at /usr/lib/perl5/5.8.6/CPAN.pm line 2251.
44デフォルトの名無しさん:2008/01/14(月) 20:27:57
>>43
> CPANがエラーで動きません。どうすればよいのでしょうか?

エラーを解消する。
45デフォルトの名無しさん:2008/01/14(月) 22:22:58
Perl/Tkってどうよ?
4643:2008/01/15(火) 08:40:40
エラーの原因が特定できないんです。わかる方いますでしょうか?
47デフォルトの名無しさん:2008/01/15(火) 10:17:06
Can't locate object method "new" via package "Net::FTP"
4843:2008/01/15(火) 10:24:27
Net::FTPがないってことで
cpan>install Net::FTP
でもエラーが出ますし,,,,
49デフォルトの名無しさん:2008/01/15(火) 10:53:25
CPAN使わないで入れろよ・・・
5043:2008/01/15(火) 12:01:41
( ̄◇ ̄;)エッ

 yum? どこかに解説ありますでしょうか??
51デフォルトの名無しさん:2008/01/15(火) 13:09:26
>>48
> Net::FTPがないってことで
> cpan>install Net::FTP
> でもエラーが出ますし,,,,

誰にそんなデタラメ吹き込まれたの?
52デフォルトの名無しさん:2008/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.

5343:2008/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:
ftp://ftp.kddilabs.jp/CPAN/authors/01mailrc.txt.gz
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:
ftp://ftp.kddilabs.jp/CPAN/authors/01mailrc.txt.gz
Can't locate object method "new" via package "Net::FTP" at /usr/lib/perl5/5.8.6/CPAN.pm line 2251.
5443:2008/01/15(火) 13:15:38
>>52サン
 それっとド〜すれば... (o*。_。)oペコッ
5543:2008/01/15(火) 13:33:54
52さんのヒントから...

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

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

ttp://www.nilab.info/zurazure2/000806.html
ttp://cyberlib.enterbrainz.com/1182508727.html
56デフォルトの名無しさん:2008/01/15(火) 15:56:02
ひどすぎる……「車のバックミラーが壊れかけてプラプラしているので
引きちぎって捨てました」的解決。
57デフォルトの名無しさん:2008/01/15(火) 15:59:14
>>54
お前の環境もお前が使っているLinuxディストリビューションの
パッケージシステムの管理体制も知らんからわからん。

エラーメッセージで示されているファイル群を見れば何が起きているかわかるだろ。
5843:2008/01/15(火) 21:38:15
そんなの関係ねぇ!
そんなの関係ねぇ!
  ○∧〃
  / >
  < \
59デフォルトの名無しさん:2008/01/16(水) 02:13:39
Foo/Const.pmに存在する
Foo::Const;というパッケージから
Const以下をMainにExportし
Const::〜 というアクセス方法を提供するにはどのようにしたら良いでしょうか?
60本物の43:2008/01/16(水) 12:49:10
>>58 は、私じゃないです
61デフォルトの名無しさん:2008/01/16(水) 18:38:57
require で複数のサブルーチンを取り込みたいんですが、

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

と書くとうまくいきません。
両方とも読み込む方法はないでしょうか?
62デフォルトの名無しさん:2008/01/16(水) 18:49:16
>>61
二つのファイルの最後に1;は書いた?
63デフォルトの名無しさん:2008/01/16(水) 18:58:35
「うまくいきません」(笑)
64デフォルトの名無しさん:2008/01/17(木) 00:29:25
エスパーの出番だ。
65デフォルトの名無しさん:2008/01/17(木) 01:30:06
なんか今朝から具合が悪いです。
いい薬はありませんか?
66デフォルトの名無しさん:2008/01/17(木) 02:17:45
67デフォルトの名無しさん:2008/01/17(木) 08:35:36
>>61
取り合えず、下記を使え。
強い味方になるぞ

KCatch.pm/CGI エラーメッセージをブラウザに表示
http://www.kawa.net/works/perl/catch/news.html
68デフォルトの名無しさん:2008/01/17(木) 19:00:38
>>61>>67
普通に

use CGI::Carp qw(fatalsToBrowswr);

を書いておけば良いのと違うの?
69デフォルトの名無しさん:2008/01/17(木) 22:26:42
変数に読み込んだzipファイルを展開したいんですが、どうすればよいでしょうか。
Compress::Zlib::memGunzip()を試しましたが、zipのためかうまくいきませんでした。
(undefが返る)
すみませんが、お知恵を貸してください。
70デフォルトの名無しさん:2008/01/17(木) 22:45:49
Archive::Zip
7169:2008/01/17(木) 23:06:41
>70
Archive::Zipでできますか?

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

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

Archive:;Zipもみてみますね。どうもありがとう
72デフォルトの名無しさん:2008/01/17(木) 23:14:42
>>69
日本語でおk?

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

圧縮されたファイルを解凍したいだけなら、
google で 「perl zip 解凍」 を検索すれば参考になるコードがみつかるよ。
7369:2008/01/17(木) 23:19:54
変数に入っているのは、zipデータのバイナリそのものです。
ファイル名やファイルハンドルではありません。
74デフォルトの名無しさん:2008/01/18(金) 10:35:27
http://yusukebe.com/tech/archives/20070803/124356.html
これ動かないんですがどうすればいいんですか?
75デフォルトの名無しさん:2008/01/18(金) 13:17:22
>>74
なぜ動かないのかをつきとめて、そこを動くように修正すると良い。
76デフォルトの名無しさん:2008/01/18(金) 14:32:22
ニコの仕様が変わったからじゃね?
使ったこと無いけどWWW::NicoVideoっつーのがCPANにあるから見てみれば
あとPlaggerにもぷらぎんあるかあr
77デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/01/18(金) 15:43:02
@argv = ( 1 .. 5);
@argv[1] = ( 1 ..5);
なデータがあるんですけど、
@argv[1]のリストの数を調べたいときは、どうするんですかね?

$#argv[1]とすると、syntx errorになります。
79デフォルトの名無しさん:2008/01/18(金) 16:05:46
それ以前の部分で理解が足りてないと思う
80デフォルトの名無しさん:2008/01/18(金) 16:19:28
>>78
> @argv[1] = ( 1 ..5);

これはどういう意味だ?

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

と等価か?
81デフォルトの名無しさん:2008/01/18(金) 16:33:56
どういう意味も何も無いだろ・・・
82デフォルトの名無しさん:2008/01/18(金) 17:26:00
配列の要素にリストを代入したい ←無理
配列を表すらしい@を付ければできるんじゃね?

つーところかと
83デフォルトの名無しさん:2008/01/18(金) 17:46:32
ケチらずにリャマ本ぐらい読んでもよさそうなものだという気もするが。
84デフォルトの名無しさん:2008/01/18(金) 18:36:29
配列の要素に、"a b"のようなスペースを挟んでいるものがあります。
これをスペースでsplitして2次元配列にしたいのですが、
そのようなことはできませんか?
85デフォルトの名無しさん:2008/01/18(金) 18:41:25
できるよ
がんばれ
8674:2008/01/18(金) 18:58:10
自己解決
Crypt::SSLeay入れたら動きました
87デフォルトの名無しさん:2008/01/18(金) 19:24:02
if文使うときif($a eq "a" or $a eq "b")みたいに同じ変数の中身を判定する部分をまとめる(/a|b/)みたいにする方法ってあります?
88 ◆TWARamEjuA :2008/01/18(金) 20:10:12 BE:7841489-2BP(6825)
$a =~ m(^[ab]$)
89デフォルトの名無しさん:2008/01/18(金) 20:11:10
>>87
あるけど、初心者はやるな。
90デフォルトの名無しさん:2008/01/18(金) 20:18:43
>>87
if ($a =~ m/^(a|b)$/)
if (grep { $a eq $_ } qw(a b))
:

好きなように書け
91デフォルトの名無しさん:2008/01/18(金) 20:21:36
確か[]より|のが速い
92デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/01/18(金) 22:58:31
>>77
相反する(しかも管理しづらそうな)ことをする理由は分からないけど、
エラーメッセージの通りパッケージ名を付けるだけで怒られないようにはできる
use strict;
$main::hoge = "hoge";
print $main::hoge;
94デフォルトの名無しさん:2008/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ですます方法ないのかな?
9577:2008/01/19(土) 14:49:54
77だが解決した。

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

#piyo.pl
$piyo='piyo'

96デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/01/20(日) 00:30:36
my @list;
push @list, [map int, split] while(<DATA>);

__DATA__
11 12
13 14
15 16
98デフォルトの名無しさん:2008/01/20(日) 00:44:26
>>97
ありがとうございます。
コードを説明して頂けませんか?
99デフォルトの名無しさん:2008/01/20(日) 01:06:20
   ↑
本を読まない。
ネットを検索しない。
誰かが教えてくれるのをじっと待っているだけ。
つねに受身の態勢。
100デフォルトの名無しさん:2008/01/20(日) 01:09:23
本は持っていません。
ネットは検索しました。
回答を待っています。
受身の人間は質問しません。
101デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/01/20(日) 01:38:01
>@aと@bによる二次元の配列@xを作る
@x = (\@a, \@b);

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

「続・初めてのPerl」のような参考書をお読みください。
103デフォルトの名無しさん:2008/01/20(日) 03:24:16
「多次元配列」、「二次元配列」、その過てる認識がドツボへといざなう
104デフォルトの名無しさん:2008/01/20(日) 05:56:49
>>102
ありがとうございました。

参考書を買って一通り読んだほうがよさそうですね。
アドバイスありがとうございました。
105デフォルトの名無しさん:2008/01/20(日) 09:17:59
>>102
× @c = @{@x[i]};
○ @c = @{$x[i]};
106デフォルトの名無しさん:2008/01/20(日) 22:02:02
>>100
ム板で言う「受け身」は「わからんから教えてくれ」の事だぞコラ

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

の様に複数の試行錯誤と複数の情報確認をひっさげてポストしてみ
107デフォルトの名無しさん:2008/01/21(月) 10:27:18
二次元配列?
Perlの配列の要素はスカラーですよ?
108デフォルトの名無しさん:2008/01/21(月) 10:59:15
いま本読んでるところだよきっと!
109デフォルトの名無しさん:2008/01/21(月) 12:22:47
>>91
速さを求めるなら、正規表現の | より、正規表現使わないで or のほうが速いぞ
110デフォルトの名無しさん:2008/01/21(月) 22:29:32
>>97
やっと理解できたよ。map なんて昔からあった?
111デフォルトの名無しさん:2008/01/21(月) 22:32:21
大昔から
112デフォルトの名無しさん:2008/01/22(火) 06:44:24
昔っていうと範囲が曖昧だけど、とりあえず前世紀の産物だしな。
113デフォルトの名無しさん:2008/01/22(火) 06:46:56
僕らが生まれてくるずっとずっと前にはもう
114デフォルトの名無しさん:2008/01/22(火) 07:31:26
>>110
perl4 には無かった記憶が。perl5 からだとすると
http://search.cpan.org/~rgarcia/perl-5.10.0/pod/perlhist.pod
> 5.000alpha1 1993-Jul-31
> 5.000 1994-Oct-17
115デフォルトの名無しさん:2008/01/22(火) 10:44:57
map, grep を知ると、出来るだけそれを使ってプログラムを作りたくなる。
116デフォルトの名無しさん:2008/01/22(火) 13:29:05
>115
なんとなくだが、その気持ちは分かった気がする。
117デフォルトの名無しさん:2008/01/22(火) 13:39:17
そして後で泣く
118デフォルトの名無しさん:2008/01/22(火) 14:18:17
>>115
そのままLISPerになっちゃえばいいのにw
119デフォルトの名無しさん:2008/01/22(火) 17:29:54
>>115
前にも同じこと言ったけど中二病だよね。あれって。
120デフォルトの名無しさん:2008/01/22(火) 17:31:34
forのかわりにmap使うボケが多すぎたので、voidコンテクストなるものが導入されました。
121デフォルトの名無しさん:2008/01/22(火) 17:59:14
昔はgrep/mapのほうがforより速かったからなぁ。
122デフォルトの名無しさん:2008/01/22(火) 18:23:02
たしかに。多言語に書き換えるときに泣くよね。

perl はプロトタイプとして使うな。
有る程度ロジックの検証ができたらCなりjavaなりに書き換える。
だから perl 固有すぎる命令は使いたくないね。
map のつかいかたを一所懸命覚えても、何の糧にもならないし。
123デフォルトの名無しさん:2008/01/22(火) 18:24:23
122s/多言語/他言語/p
124デフォルトの名無しさん:2008/01/22(火) 19:22:39
また for厨 が暴れてるのか
125デフォルトの名無しさん:2008/01/22(火) 19:58:09
perl/Tkの参考になるサイトおしえて
126デフォルトの名無しさん:2008/01/22(火) 20:18:47
perl/Tkもいちじはやってたけど、Qt始めてから使わなくなった。
127デフォルトの名無しさん:2008/01/22(火) 20:19:10
でっていう
128デフォルトの名無しさん:2008/01/23(水) 20:45:35
Google検索でいっぱい出てくるじゃん
129デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/01/23(水) 21:22:35
perlに多次元配列なんてものはないが、
配列のリファレンスの配列にすればいい。
131デフォルトの名無しさん:2008/01/23(水) 21:26:06
>>129

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

こんなんじゃあかんの?
132129:2008/01/23(水) 22:22:24
レスどうもありがとうございます。

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

>131
そんな記述できるのですね。
やりたかったことです。ありがとうございました。
133デフォルトの名無しさん:2008/01/23(水) 23:15:25
言葉として、n次元配列という時はある。配列のリファレンスの配列、とか言いたくないよ!
134デフォルトの名無しさん:2008/01/23(水) 23:36:07
一人っきりの部屋で、言う機会もないくせに。
135デフォルトの名無しさん:2008/01/24(木) 00:08:28
意味は通じるから多次元配列でも問題ない。
リファのリファとか言うより伝わりやすい。
厳密なのは仕様書書きとかがやればいい。
136デフォルトの名無しさん:2008/01/24(木) 00:14:57
多次元配列言う奴は多次元配列としてしか使わんからなあ
137デフォルトの名無しさん:2008/01/24(木) 00:37:18
$hash{'a','b'}でハッシュを二次元配列のように使うとかなかった?
138デフォルトの名無しさん:2008/01/24(木) 00:42:42
普通の配列でやればいい
139デフォルトの名無しさん:2008/01/24(木) 00:48:09
>>137
それはPerl5で非推奨になった
140デフォルトの名無しさん:2008/01/24(木) 01:26:30
>>137
$hash{'a-b'}みたいなもんだし多次元のつもりでやると想定外のことになりうるからあまり勧められんね。
keysとかで簡単に拾うこともできんし。
141デフォルトの名無しさん:2008/01/24(木) 01:32:05
unix epoch より過去を unix time で扱うにはどうすればいいでしょうか。

いまテストしてる環境はWinXP SP2 (5.1.2600) + ActivePerl 5.8.8 です(一応)。
142デフォルトの名無しさん:2008/01/24(木) 02:20:59
ビッグバンより前の宇宙
143デフォルトの名無しさん:2008/01/24(木) 03:09:03
>>141
そもそもunixtimeの定義からして無理だろ。
負の数を正の整数で表現するにはどうしたらいいですか? みたいなもんだ。
自前の日付表現方法考えろ。
144デフォルトの名無しさん:2008/01/24(木) 03:38:28
>>143
どうもです。
unix time定義の厳密な定義はわかりませんが、仮に整数のみであるとしても
負数から計算してタイムスタンプなり配列なりを返す実装はありそうかなと思って。
もうちょっと探してみて、なさそうなら他の手を考えます。
145デフォルトの名無しさん:2008/01/24(木) 03:40:23
訂正:「整数のみ」→「正の整数のみ」
146デフォルトの名無しさん:2008/01/24(木) 05:18:37
Perlでオススメのメーリングリストってあります?

検索したら、下記かな?と思いましたが、終わってるようですし。
ttp://bug.org/ML/perl-jp/
147デフォルトの名無しさん:2008/01/24(木) 10:42:03
>>135
分かってる人間どうしで言うのは構わんけど
ここで「多次元配列使いたい」って質問してくる人はたぶん分かってないと思うぞ
148デフォルトの名無しさん:2008/01/24(木) 11:06:45
>>146
なんの話題をしたいかによる。
今はどこも過疎ってるけどね。
149デフォルトの名無しさん:2008/01/24(木) 11:30:31
MLは使わなくなったなぁ。
ダイアルアップ時代の産物だと感じるねぇ
150デフォルトの名無しさん:2008/01/24(木) 11:50:56
>>149
ダイアルアップ時代になって、メールをプロバイダに取りに行くように
なって利点が無くなったもんだよ。
151デフォルトの名無しさん:2008/01/24(木) 12:46:53
>>150
じゃその利点があったとかいう時代に
日本で活動していたMLなんていくつあったの?
152デフォルトの名無しさん:2008/01/24(木) 13:46:59
>>151
MLはクローズドな空間を構成するために使われていたから、日本でいくつなんて、
数えられるわけないだろ。

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

あとになって調べてみると、POPが出てきた時に、「これはMLを殺すぞ」と
指摘していた人がいるんだよね。まあ、その通りになったわけで。
153デフォルトの名無しさん:2008/01/24(木) 14:26:54
読みづらい文章だな
154デフォルトの名無しさん:2008/01/24(木) 14:47:16
何の話ししてんだろ
155デフォルトの名無しさん:2008/01/24(木) 15:10:25
はなししとは?
156デフォルトの名無しさん:2008/01/24(木) 15:26:35
プログラマってこういうツッコミ好きなやつほんと多いよな
157デフォルトの名無しさん:2008/01/24(木) 15:42:03
以上、俺の自作自演
158デフォルトの名無しさん:2008/01/24(木) 17:48:43
えー、続きましてー
159デフォルトの名無しさん:2008/01/24(木) 19:14:46
今でもML使ってるよ。昔に比べると流量少ないけど。
ダイアルアップとは関係なく、コミュニティ・ツールが変わったのが大きい気がする。

perlな方々はblogやIRCで済ませてる人が多いみたいだし。
慣れてない人には不親切かもしんない。
160デフォルトの名無しさん:2008/01/24(木) 19:30:09
ML衰退は他にもウイルスとか迷惑メールの増加の時期とシンクロしてた様にも。
しかし投稿を一気に落として、必要な書き込み作ってアップロードって作業は
時間が限られた電話回線時代にはマッチしてた様に思うね。

今、特に常時接続になってからはMLでもなんでもクライアントでは
データコピーを持たない、ASPスタイルこそが時代の流れと
なっていったと思う。
オンライン辞書の類は地味ながら個人的にはここ10年でも
指折りの革新的なツールだと思ってるお。
161デフォルトの名無しさん:2008/01/24(木) 20:00:53
特殊変数だとおもうのですが、$,の使い方を教えてください。
イマイチよくわかりません。
$,=" ";
としても
すべての変数に空白がつくわけではないようですし・・・
162デフォルトの名無しさん:2008/01/24(木) 20:13:50
perlvar嫁
163デフォルトの名無しさん:2008/01/24(木) 22:49:43
google 「perl 特殊変数」
164デフォルトの名無しさん:2008/01/25(金) 13:05:41
ircは日本語perlのコミュが会話に入りづらい雰囲気
165デフォルトの名無しさん:2008/01/25(金) 13:07:32
↑お前、日本語が下手だから会話に来なくてけっこう
166デフォルトの名無しさん:2008/01/25(金) 15:43:02
167デフォルトの名無しさん:2008/01/25(金) 18:59:19
>>161
暇だから答えよう。
$, = ' ';
@a = ('a'..'f);
print @a;
みたいな時に配列の間に半角スペースが入るってだけ。

print "@a";
の間には $" で指定。こっちはデフォで半角スペース入ってる。
168デフォルトの名無しさん:2008/01/25(金) 20:38:17
たしかにircは内輪ネタが分からない奴はお断りの雰囲気がある
169デフォルトの名無しさん:2008/01/25(金) 21:22:36
join関数の方が高速
170 ◆TWARamEjuA :2008/01/26(土) 11:31:21 BE:5881469-2BP(6825)
ユリウス使うと良いのかもかも。@うに刻以前
171デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/01/26(土) 13:25:15
一冊入門書を(仮にわからないとこがあっても)通読した方が良いよ。
英語で言うと、I is bookみたいな状態。
173デフォルトの名無しさん:2008/01/26(土) 13:30:38
>>171
print ">C:\Perl\text.txt", "\n";
とでもして、おまいが何をしようとしているかを確認してみろ。
174デフォルトの名無しさん:2008/01/26(土) 18:39:26
基本的なことかもしれませんが…
Windowsでながーい(256文字以上の)ファイル名使っている場合に
ファイル名は取得できるのですが
そのファイルサイズなどを取得する方法がわかりません。

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

もしよかったらサイズ取得の方法をヒントだけでも結構ですので
教えてもらえませんか?
絶対できるのは間違いないとは思うのですが…
175デフォルトの名無しさん:2008/01/26(土) 19:34:11
WebProgのテンプレをこっちにも入れたいな。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
176174:2008/01/26(土) 20:13:11
大変申し訳ありません。
あの後、考えてみたら
Win32::UTCFileTime
を使ってなんとかなりそうな雰囲気です。
少なくともいくつかの例ではうまくいきました。
お騒がせして大変申し訳ありませんでした。
もうちょっと自分で考えないとだめですね…
177デフォルトの名無しさん:2008/01/26(土) 20:17:23
>>171
こりゃひどいね。
キミは、自分が何をしたいのかが分かってないみたいだね。
どこをどう直せばいいのか、教えるのは簡単だが
それはキミにとって良くない。
入門書を読むことをオススメするよ。
178デフォルトの名無しさん:2008/01/26(土) 20:58:43
>>177
そういわずに教えてあげなよ
179デフォルトの名無しさん:2008/01/26(土) 21:00:22
>>167
ありがとう。
これからはperldoc読みます。
プログラム言語は奥が深い。
三十路にはキツイザンス
180デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/01/26(土) 21:40:32
なんか宿題みたいなの多いなあ。
半年授業をサボってたんだから、少しは自分で勉強しろよ。
182デフォルトの名無しさん:2008/01/26(土) 21:41:02
>>180
my $regex = join '|', map quotemeta, @prohibit;
if ($_ !~ /$regex/) { ...
183デフォルトの名無しさん:2008/01/26(土) 22:29:02
>>170
ありがとうございます。
単純なインクリメントで日単位の処理をしたいだけだったので
Date::Calc(::Object)で対応しました、という報告をしにきたところでした。
ユリウス暦とはまったく思いつきませんでしたが、Date::CalcはA.D.以降なので
ユリウス→グレゴリオ変換のほうが対応できる範囲が広がりますね。
まぁ20世紀を処理するだけなのでどっちもオーバースペックですがw
184180:2008/01/27(日) 00:09:34
>182
ありがとうございました!!
185デフォルトの名無しさん:2008/01/27(日) 00:35:54
Perlインストールしたんだけど
どうやってアンインストールしたらいいの?
 
フォルダ削除だけで平気?
186 ◆TWARamEjuA :2008/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デフォルトの名無しさん:2008/01/27(日) 00:50:04
ディレクトリではなくフォルダと言うあたりWindowsか?
188 ◆TWARamEjuA :2008/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デフォルトの名無しさん:2008/01/27(日) 01:02:24
>>187
そうなんです
まだ高校生でで思うように開発環境整えられないからさ
190デフォルトの名無しさん:2008/01/27(日) 01:02:31
Regexp::Assembleでいいと思うよ。
191デフォルトの名無しさん:2008/01/27(日) 03:03:57
perlの開発環境なんて本体と標準のメモ帳ありゃできるっしょ。

>>188
なんかあえて難解な書き方にしてるような。
192デフォルトの名無しさん:2008/01/27(日) 03:48:53
読めるようになってくると戻り値を変数に入れるのが面倒になってくるよ。

Winだとインストールが面倒(できない)モジュールがあったりするよ。
まぁ中級後半くらいまでは充分だと思うけど。
193デフォルトの名無しさん:2008/01/27(日) 11:12:16
そのへんがPerlのまずいところでもある。
モジュール頼みのPerlなのに、モジュールがインストールできなくて
ユーザーが離れていってしまうという。
194デフォルトの名無しさん:2008/01/27(日) 12:27:43
かと言って初心者にいきなりUNIX系OSのPCをひとつ用意しろとか
Winにcygwinを導入してPerl使えとかいうのも酷な感じもする。
まあcygwin perlもCPANで入れられないモジュールもあるらしいけどなあ。
195デフォルトの名無しさん:2008/01/27(日) 15:30:12
VMwarePlayerで
196デフォルトの名無しさん:2008/01/27(日) 15:47:07
サードパーティのPPM含めりゃ大抵の物はあるだろ。
197デフォルトの名無しさん:2008/01/27(日) 17:12:33
colinuxで
198デフォルトの名無しさん:2008/01/27(日) 18:49:21
VC++入れてnmakeとclにパス通してCPAN.pmを中心に使ってるが
しばしばmake中にエラーが出るので、その場合にはPPMも使ってる。
CPAN.pmとPPMを併用することによるエラーも出てきてるのかもしれないが、
いずれにせよWinにおけるモジュール管理のノウハウをもうちょっと蓄積したいね。
199デフォルトの名無しさん:2008/01/27(日) 20:08:59
ActivePerl 5.8.8.822を入れたんですが、ppmを使おうとすると
failed: unable to open database file(1)
と表示されて起動できません。
ppm-shellは起動できるんですがinstallの段階で同じエラーになります。
どうやらユーザー名にマルチバイト文字が入っているせいらしいんですが
エラーを避ける方法はありませんか?
200デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/01/28(月) 00:05:07
>>199
環境変数設定し。

新:知らないことがあってもへっちゃらさ: ActivePerl の ppm が起動しないのです
http://riku.justblog.jp/weblog/2008/01/activeperl-ppm-.html
202デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/01/28(月) 19:38:31
すみません。テスト2のコードが間違ってました。
#!/usr/bin/perl
use strict;
use Sample;
exit(1);
204デフォルトの名無しさん:2008/01/28(月) 20:24:02
>>201
SET ACTIVEPERL_PPM_HOME=C:\Perl\ppm で起動できました
これで枕を高くして眠れます
ありがとうございます

205デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/01/29(火) 10:53:21
my @a = (1, 2, 3, (4, 5));

のように配列の中に配列を入れたいんですが、できますか?
やっぱり、リファレンスを使うべきなんでしょうか?
207デフォルトの名無しさん:2008/01/29(火) 11:23:20
べきっつうか、リファレンス使わないと出来ない
208デフォルトの名無しさん:2008/01/29(火) 16:01:58
linux版CPANを入れたらcpan shellに出入りするたびに
Terminal does not support AddHistory.
Terminal does not support GetHistory.
と言われるんですが、これは何ですか。
209デフォルトの名無しさん:2008/01/29(火) 17:15:04
readlineがないとか?
210デフォルトの名無しさん:2008/01/29(火) 17:32:43
>>209
Bundle::CPANのことでしょうか?
入ってるし機能しているはずなんですが・・・。
cpan>
で上下矢印キー押すとコマンド履歴出てくるから入ってる証拠ですよね。

おかしいです。
211デフォルトの名無しさん:2008/01/29(火) 18:28:34
とりあえず、ソースコードをメッセージテキストでgrepしてみるところから
探求をはじめなよ。
212デフォルトの名無しさん:2008/01/29(火) 18:38:12
>>211
あっ!!そういう手があるんですね。
hackですね。ww

213デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/01/29(火) 20:41:34
あと
enter arithmetic or perl expression: exit
はexitのままEnterで良いですか?

いずれもメッセージ本文でGoogle検索してみたものの英語力不足のせいか
全く目当ての情報が見つかりませんでした。
215デフォルトの名無しさん:2008/01/29(火) 21:03:54
>>213
中身て?
単に、設定ファイル上書きしていいか 聞かれてるだけだけど…
216デフォルトの名無しさん:2008/01/29(火) 21:18:58
>>215
中身というのは
「設定ファイルを上書き」
というのが何かという意味です。
perlに慣れた人ならすぐ分かるのでしょうが、私は慣れていないので
ピンとこない、といえば伝わるでしょうか?
217デフォルトの名無しさん:2008/01/29(火) 21:21:03
慣れたもなにもcpanの設定を変えていいかどうかを聞いてるだけやがな
218デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/01/29(火) 21:44:59
自分の書いた設定を書き換えられるのに抵抗を感じるならno。
さもなくばyes.
220デフォルトの名無しさん:2008/01/29(火) 22:14:58
>>218
日本語でおk。
要は、「どんな情報があって、それが何を意味していて、その情報を書き換えられたらどうなるのか、ということがわからない」と言いたいんだな?
221デフォルトの名無しさん:2008/01/29(火) 22:22:50
いいえ、ケフィアです。
222デフォルトの名無しさん:2008/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 検索
http://www.google.co.jp/search?num=30&hl=ja&q=%22unknown%20option%3A%20force%22&lr=
17件しか引っかからず、よく分かりません。
Bundle::CPAN
223デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/01/29(火) 22:33:26
経験がないとかいう問題じゃなくて、単に理解力・想像力がないだけだろ。
225デフォルトの名無しさん:2008/01/29(火) 22:39:55
>>224
いいえ、正確には、このケースで必要とされる理解力と背景知識がなかった、です。
それで、背景知識としてどういったものが必要なのかが分からないので手がかりが欲しくて
上記の質問をしたのです。
理解力なんて測定できなくて曖昧なものを頼りにしていても仕方ないので、
まず背景知識を摂取する、そこがスタートだと考えました。
226デフォルトの名無しさん:2008/01/29(火) 22:52:57
>>214については、そのままEnterでOKだと分かりました。
>>222が分からないので調査中です。
227デフォルトの名無しさん:2008/01/29(火) 23:01:51
>>225
理屈ばっかりこねて行動力の無いタイプだな
228デフォルトの名無しさん:2008/01/29(火) 23:11:30
>>223
yes入力してみればどうなるか分かるだろうに。
229デフォルトの名無しさん:2008/01/29(火) 23:59:27
>>225
手がかり? 文中にはっきり「libnet」と書いてあるじゃないか。
ググって最初に出てくるのがこのページだ。
http://perldoc.jp/docs/modules/libnet-1.12/Net/libnetFAQ.pod
> libnetって何?
> libnetperl5モジュールの集合体で、それらは全てネットワーク
> プログラムに関連します。

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

>まず背景知識を摂取する
それを自力で行う能力が致命的に欠けているだけだろ。
230デフォルトの名無しさん:2008/01/30(水) 00:39:16
>>227
理屈をこねたかどうかが大事なのではなくて、理屈が正しいか、
そして理屈が有効かが大事なんですよ。
正しくないor無効な理屈をこねていて、なおかつ行動もしていないのなら
あなたは私を批判する権利があります。
しかし、残念ながらこのケースではそれに該当しません。

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

>>228
yes入力してみましたよ。noも。3回くらいはやって何が起きたかを観察しましたが
違いが分かりませんでした。
231デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/01/30(水) 00:44:02
ここはお前の哲学を語るスレじゃない。
233デフォルトの名無しさん:2008/01/30(水) 02:18:43
>>231
この"configuration"は「設定」というより、「構成」なんだろうよ。
234デフォルトの名無しさん:2008/01/30(水) 02:56:38
Perlの話をしなさい。
ここは自分の思想を押し付けるスレじゃない。
235デフォルトの名無しさん:2008/01/30(水) 05:11:37
英語が分かるなら英語圏のユーザーに
聞けばいいんじゃねえの?
236デフォルトの名無しさん:2008/01/30(水) 05:27:59
IDが無い板なんだからコテハンつけてほしいな
あぼーんする手間が面倒だよ
237デフォルトの名無しさん:2008/01/30(水) 05:50:31
>>231
ドラゴンボールの中でフリーザが一番好きです まで読んだ
238デフォルトの名無しさん:2008/01/30(水) 08:52:31
>>233
そうなのですか。参考にします。

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

>>235
それだけの英語力があるかはやや不安です。
やはり、日本人だから日本語のほうが話しやすいものです。
239デフォルトの名無しさん:2008/01/30(水) 09:00:21
>>238
つうかもっと完結に書く能力はないの?
どうせ「誤解のない詳しく書いてどうのこうの」ってくどくど書くんだろ?
その妙な書き方 前に見たような気がするが…
240デフォルトの名無しさん:2008/01/30(水) 09:10:20
>>238
> うらむ相手が間違っています。
>>232 >>234がお前さんを「うらんでいる」という解釈こそ、この場で最も大きい「とんだ誤解」では。
どこから「うらむ」という発想が出てきたのか、まるで見えてこない。
241デフォルトの名無しさん:2008/01/30(水) 10:03:47
自分がなんで注意されてるかさっぱり理解できない天然さんぽいから放置で。
242デフォルトの名無しさん:2008/01/30(水) 10:28:45
なんという入れ食い
243デフォルトの名無しさん:2008/01/30(水) 10:34:40
>>239
確かに簡潔に書くことは大切ですが、私が簡潔に書く能力がないとするのは論理の飛躍です。
それに、私の文章が簡潔でないというのも偏見ではないでしょうか。
文字数が特別多いわけでもないでしょう。
あと、簡潔に書けるのになぜ簡潔に書かなかったかというと、その必要を感じたからです。
つまり、あらぬ誤解をかけられて、それがために質問者としての目的の遂行に障害が発生したので、
必要なだけの対策を講じたまでです。
そうした些末なことはまさにスレ本題ではないので、>>241の言うように放置をお勧めします。
それから、2chは私は数年前から定期的に利用しているので、私の文章をあなたが見た可能性は否定
できませんが、私の今回の文章を見ただけで、あなたが過去に見た特定の文章の書き手と同一視して
しまうのは早計ではないでしょうか。
そもそも、仮にあなたが過去に見たような気がするというその文章が私のものだったとしても、
だからどうしたというんですか?
発言の意図が見えてこないし、スレ違いもはなはだしいので自重お願いします。

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

>>241
具体的にどんな点で私が注意されるべきなのでしょうか。
もっとも、>>241が私に向けた発言でないことは明白ですが。
244デフォルトの名無しさん:2008/01/30(水) 10:39:18
にゃーにゃー
245デフォルトの名無しさん:2008/01/30(水) 10:42:17
日本語として成立しなくなったら釣りも終わりだな。
246デフォルトの名無しさん:2008/01/30(水) 10:54:08
しねばいいのに・・・
247デフォルトの名無しさん:2008/01/30(水) 12:47:15
日本語の得意な朝鮮人が来てますねwww
248デフォルトの名無しさん:2008/01/30(水) 12:52:09

895 名前:デフォルトの名無しさん[sage] 投稿日:2008/01/07(月) 02:32:27
頭が悪いのに口だけは達者な馬鹿の典型だなw
249デフォルトの名無しさん:2008/01/30(水) 13:13:01
会社で嫌われてんだろうなぁ・・・
250デフォルトの名無しさん:2008/01/30(水) 13:15:37
>>243
早くインストールしろよw
251デフォルトの名無しさん:2008/01/30(水) 13:18:17
>>243
> そうした些末なことはまさにスレ本題ではないので、>>241の言うように放置をお勧めします。

オマエガナ
252デフォルトの名無しさん:2008/01/30(水) 13:23:42
祭りと聞いて(ry
253デフォルトの名無しさん:2008/01/30(水) 13:32:31
ごめんなさい。釣りでした。
254デフォルトの名無しさん:2008/01/30(水) 13:39:22
続きまだぁ?
255デフォルトの名無しさん:2008/01/30(水) 13:50:44
Perlでは珍しいタイプの狂人だな
256デフォルトの名無しさん:2008/01/30(水) 16:52:12
この無駄な冗長さはコボラー
257デフォルトの名無しさん:2008/01/30(水) 21:53:12
珍しく伸びてると思ったら
…珍しくもないか
258デフォルトの名無しさん:2008/01/30(水) 22:51:58
それに、あと、つまり、それから、そもそも、

こんな接続詞が多用されている時点で
簡潔に書けてない事がよく分かるな。
259デフォルトの名無しさん:2008/01/30(水) 23:22:35
みんな、楽しそう。
260デフォルトの名無しさん:2008/01/31(木) 00:11:09
あーこんな文章をどこかで見たことがあると思ってたらアレだ
精神病の人が医者に「これこれで私は精神病じゃないです」って言ってるのにそっくりなんだわ
たとえばこれとか
ttp://www.so-net.ne.jp/vivre/kokoro/psyqa1331.html
261デフォルトの名無しさん:2008/01/31(木) 00:16:37
3行でおk
262デフォルトの名無しさん:2008/01/31(木) 00:43:52


違い
263デフォルトの名無しさん:2008/01/31(木) 02:25:46
なぜこのスレに、精神異常者チェイサーズが集結しているのか?
264デフォルトの名無しさん:2008/01/31(木) 11:37:30
後に現れるのは、もちろんキティガイ
265デフォルトの名無しさん:2008/01/31(木) 20:03:28
エンターキーを押さなくてもキーボードから
一字だけ入力を受け付けたいときはどうすればいいでしょうか?
266デフォルトの名無しさん:2008/01/31(木) 20:08:05
>>265
っ[Term::ReadKey]
267デフォルトの名無しさん:2008/01/31(木) 20:19:17
できました。ありがとうございました。
268デフォルトの名無しさん:2008/01/31(木) 22:23:46
$count = $x =~ tr/0-9/0-9/;
で数字の桁数を数えられるようですが、どういう仕組みなのか分かりません・・・
くだ質の類だと思いますが、よろしくお願いします。
269デフォルトの名無しさん:2008/01/31(木) 22:47:50
tr演算子は置換した文字の数を返す
270デフォルトの名無しさん:2008/01/31(木) 22:48:16
$xの数字を同じ数字に置換して,置換した回数を$countに入れてる.
$xが数字だけなら桁数と一致するわな.
271デフォルトの名無しさん:2008/01/31(木) 23:32:10
目からウロコが落ちた。確かに数えられるねぇ。
でもなんか違う気がする。
272デフォルトの名無しさん:2008/01/31(木) 23:46:35
面白いコードと実用的なコードには差があるからな。
273デフォルトの名無しさん:2008/02/01(金) 00:59:15
できるこたできるけど中身が数字列の場合に限るし
それが保証されてるならlengthでもいい気はする。
274デフォルトの名無しさん:2008/02/01(金) 03:09:51
>>273
my $num = '-123,456';
print $num =~ tr/0-9//, "\n"; # 6
print length $num; # 8
275デフォルトの名無しさん:2008/02/01(金) 08:49:13
実戦での桁数は計算で出すよね
276デフォルトの名無しさん:2008/02/01(金) 10:18:25
計算てw
277デフォルトの名無しさん:2008/02/01(金) 11:53:20
n進数の桁数は計算だすよ
278デフォルトの名無しさん:2008/02/01(金) 11:54:25
>>274
いや数字だけの列と保証されてる場合よ。
279デフォルトの名無しさん:2008/02/01(金) 12:08:24
電話番号やカード番号みたいに、ハイフンがあったりなかったりのチェックで・・
・・・文字数だけじゃあんまり意味ないか
280268:2008/02/01(金) 14:12:06
trは置換した文字列を返すんですね。
処理の順番も勘違いしてました。↓の順番なんですね
$count = ( $x =~ tr/0-9/0-9/ );

ありがとうございました。
281デフォルトの名無しさん:2008/02/01(金) 14:25:00
「置換した文字列」ではない。
置換もしくは削除した文字数を返す。
282デフォルトの名無しさん:2008/02/01(金) 14:32:45
while ($x =~ m/\d/gs) { $count++ }
283268:2008/02/01(金) 14:41:11
>>281
書き間違えでしたスイマセン
284デフォルトの名無しさん:2008/02/01(金) 15:47:47
重箱の隅だけど、
tr/a/a/
ってのは置換したことになるの?
285デフォルトの名無しさん:2008/02/01(金) 16:05:17
やってみろ。
286デフォルトの名無しさん:2008/02/01(金) 17:08:30
tr/hoge/hage/

の hoge にマッチした回数でいいんじゃね?
287デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/02/01(金) 21:17:49
ちょっと自分で試してみればすぐ答えが出るのに。
なんで試さないのかなぁ。
もしかして、ナイコン?
289デフォルトの名無しさん:2008/02/02(土) 13:24:32
確かにわけわからん
レスを書くよりキーを叩く回数が少ないのに。
290デフォルトの名無しさん:2008/02/02(土) 13:55:00
重箱の隅とか言いつつperlバイナリのソースコードのレベルの話を求めてるんじゃね?
291デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/02/02(土) 17:10:44
5.00503だと 'aaaaa' =~ tr/a// は
Can't modify constant item in character translation
と怒られてdieした。5.6.1なら置換回数が返された。
293デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/02/04(月) 02:17:53
バージョンによる
295デフォルトの名無しさん:2008/02/04(月) 02:25:32
>>293
一般論としては、その修正で得られるのが自己満足だけなら、さわらないことをお勧めする。
296デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/02/04(月) 10:21:10
>>296
> 自分がlocalの挙動をきちんと理解していないこともあり、予期せぬバグを生み出す原因になるので
> なるべくmyで統一したいと考えています。

そんな変質的行為に突入する前に、localの挙動をきちんと理解しろ。
298デフォルトの名無しさん:2008/02/04(月) 10:41:31
localだと値を追いかけるのが面倒で……。
299デフォルトの名無しさん:2008/02/04(月) 11:08:20
基本的にはそれで正しく動くはず。
ただ、1.2.の問いがあるから「書き換える必要はないんじゃないの?」って言われてるわけで。
300デフォルトの名無しさん:2008/02/04(月) 11:38:30
ありがとうございます。

ライブラリの方を修正したいけど……中途半端に手を出したら悲惨なことになりそう……
301デフォルトの名無しさん:2008/02/04(月) 11:52:29
古いライブラリをmod_perlで使おうとは思わないなぁ
302デフォルトの名無しさん:2008/02/04(月) 12:18:11
古いライブラリをmod_perlで使うんじゃないんです
古いライブラリがmod_perlで動いてるんです……
303デフォルトの名無しさん:2008/02/04(月) 12:22:08
自分なら、そんな動作よくわからない関数mod_perlで使わないが・・・
なんかラッパー関数作ってそっち使うようにしてけば
そのうち古い関数は淘汰されるんでは?
304デフォルトの名無しさん:2008/02/04(月) 12:51:20
まあ、その少しずつやってます……。
305デフォルトの名無しさん:2008/02/04(月) 13:53:56
他人の書いたperlの読みにくさは異常
書き換えるよりも書きなおしたほうが早いことさえある
306デフォルトの名無しさん:2008/02/04(月) 14:38:28
読みながら書き直したりする。

以前、「どう見てもPrologです。本当にありがとうございました」な
プログラムをもらったことがある。
307デフォルトの名無しさん:2008/02/04(月) 18:33:33
よくわからない物はよくわかるようになるまで触らない方がいいとは思うな。
localが気になるならコメント添えてここはこういう理由って記述しときゃ後で見たときにもわかるし。
せめてそのライブラリの流れ把握できるくらいになってからでないと。
308デフォルトの名無しさん:2008/02/04(月) 19:53:07
localの98%くらいはmyにしてしまっても問題なくね?
309デフォルトの名無しさん:2008/02/05(火) 00:06:02
いや、97%くらいだろ。
310デフォルトの名無しさん:2008/02/05(火) 05:09:26
動いてんならいじるなよ
311デフォルトの名無しさん:2008/02/05(火) 18:09:00
懸念してるのは想定外の2%だか3%のバグの発生だからな。
上でも言われてるがいじるメリットが自己満足だけなら俺もそのままのがいいとは思う。
312デフォルトの名無しさん:2008/02/05(火) 20:11:35
Exporter が import を強制的にexportしなくなったのって、
仕様変更はいつから?
実装変更は、perl 5.9から?
313デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/02/06(水) 01:18:29
鼬害です
315デフォルトの名無しさん:2008/02/06(水) 03:27:35
>>1 の冒頭くらい読んでね。
ここはプログラムの板でってCGIの板じゃないよ。はい移動。
http://pc11.2ch.net/test/read.cgi/php/1176143582/
316デフォルトの名無しさん:2008/02/06(水) 16:20:24
Perlって数ヶ月書かないだけでかなり忘れるんだけど、
おまいらPerlは毎日のように書いてるの?
俺のような記憶力弱いやつはPythonに替えるべき?
317デフォルトの名無しさん:2008/02/06(水) 16:22:52
$str =~ tr/a-z/A-Z/g;

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

Bareword found where operator expected〜

とか言ってエラーになります。
何度ググってもこれであってるぽいんですが…。わけがわかりません助けて。
318デフォルトの名無しさん:2008/02/06(水) 16:26:31
その前後が問題なんじゃないの?
319デフォルトの名無しさん:2008/02/06(水) 16:29:44
>>317自己レス
gをなくしたら通りました。g使えないの?
ぐぐってでてきた複数の例で使われてるんだけど。
試したVerは5.8.2と5.8.8。
320デフォルトの名無しさん:2008/02/06(水) 16:31:36
tr///はcdsだけみたいね
321デフォルトの名無しさん:2008/02/06(水) 17:01:29
uc($str);
322デフォルトの名無しさん:2008/02/06(水) 17:26:53
>>316
そんな毎日やるわけないけど
忘れたらリファレンスのページとか参考にすりゃいんじゃないの?

>>319
gはm s // だけのはず。
tr y は>>320
似てるけど一応動作は別もんだからね。
323デフォルトの名無しさん:2008/02/06(水) 18:47:07
>>316
Pythonでも、クラスのメソッドとか多くて覚えられないけどね。
ただ、Pythonに乗り換えたらPerlには戻れないと思う。
324デフォルトの名無しさん:2008/02/06(水) 20:38:28
>>316
使うときはWebサイトか昔書いたソースを見ながらやってる
325デフォルトの名無しさん:2008/02/06(水) 22:47:26
>>316
毎日とは言わないが、けっこう頻繁に使ってるな。
1回しか使わないような使い捨てスクリプトは perl で書いてる。
何度も使うのはCやjavaやVBやVBScriptや・・・・
perl って便利ですよ。
バッチファイルみたいに手軽にかけて、バッチファイルよりも遥に高度な処理ができるからね。

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

でも使いようによっては超強力だよ。
326デフォルトの名無しさん:2008/02/06(水) 22:56:53
perlって嫌われてるのか?
ところでperlで自分で書いたものって一月も前に書いたものは修正したくてならなくなるんだがwww
327デフォルトの名無しさん:2008/02/06(水) 22:58:19
> 漢字(ShiftJIS)に対応していない
Encode.pmがあるじゃない
> サーバアプリに向かない(CGI は負荷が重い)
Hatena, Mixi, その他探せば色々あると思うんだけど

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

きちんと書けば(『Perlベストプラクティス』みたいに)大分ましだが
Perlの特長を削いでる感じがするね
328デフォルトの名無しさん:2008/02/07(木) 00:21:34
>>325
>ソース丸見えだから業務アプリに向かない
暗号化する仕組みがあるよ。
329デフォルトの名無しさん:2008/02/07(木) 00:33:04
個人で使うならRubyかPythonのほうが幸せになれる?
330デフォルトの名無しさん:2008/02/07(木) 00:46:13
>>329
個人で使うだけなら、迷わずPerl。

まぁ、好き好きだけどね。
331デフォルトの名無しさん:2008/02/07(木) 00:57:31
理由はユーザーが多いから?年期の入った言語ゆえにソースが転がってるから??
後発の言語のほうが練られてそうなんですが。
初学者なんでこのままマスターしようか乗り換えようか迷ってるのですわ。
332デフォルトの名無しさん:2008/02/07(木) 01:02:24
perlなんて簡単なバッチ処理を書いて使い捨てにするようなのに向いてる言語だから、
マスターした!って達成感を味わいたいなら別の言語にしたほうがいいよ。
333デフォルトの名無しさん:2008/02/07(木) 01:05:36
perlを使う理由なんて「どこにでもある」「たいていのものはCPANにある」しかないよ。
334デフォルトの名無しさん:2008/02/07(木) 01:08:19
マスターてのがどういう状態を指してるのか分からんが、
一通り文法覚えて書けるようになるだけなら、RubyもPythonも大して変わらんね
335デフォルトの名無しさん:2008/02/07(木) 01:24:51
Perlぐらい憶えときゃええがな。他言語へも1,2週で移行できるわな
そんな人生の選択みたいに迷うほどのことちゃいまっせ
336331:2008/02/07(木) 01:43:10
マスターって言葉使いましたが単にテキスト処理ならなんでもってレベルです。
レスありがとうございました。とりあえずPerl覚えときます。
337デフォルトの名無しさん:2008/02/07(木) 01:50:17
>>327
横入りだけどJcode使ってた身としてはEncodeはかゆいとこに手が届かないなぁ。
あと、今はPHPとかエディタの機能とかで知れてるけど正規表現に腰が引けてる人もいたかもね。
使いこなせば強い味方だけどいきなりだとさっぱりわからんだろうし。
記述の簡略化はあるねー即興で組んだやつはファイルのクローズせずに終わらせたりかなり乱暴なことしてる。
338デフォルトの名無しさん:2008/02/07(木) 02:12:19
良くも悪くも無茶な書きかたができるよね
339デフォルトの名無しさん:2008/02/07(木) 09:46:44
コード書く
→後日、意味もなく省略化を施す
→さらに後日、自分の書いたものが理解できず解読作業

ひとつのコードで3回も楽しめるPerlサイコー\(^o^)/
340デフォルトの名無しさん:2008/02/07(木) 10:38:16
>>339
あるあるwwwありすぎて困るwww
341デフォルトの名無しさん:2008/02/07(木) 11:22:36
日々のperlは書き捨て
342デフォルトの名無しさん:2008/02/07(木) 12:13:33

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

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

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

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

この違いはいったいなんなのでしょうか?
 
343デフォルトの名無しさん:2008/02/07(木) 12:17:36
このゆとりはいったいなんなのでしょうか?
344デフォルトの名無しさん:2008/02/07(木) 12:27:32
単なる誤爆じゃね? と思いたいが
345デフォルトの名無しさん:2008/02/07(木) 15:02:53
use utf8;
use Encode;
use WWW::Mechanize;

my $start = "http://***.com/***html";
my $mech = WWW::Mechanize->new( autocheck => 1 );
$mech->get( $start );

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

見たいなコードを書いて日本語のページ(shiftjis)をとりに行ってるんだけど、
getのときの文字コードの判別がうまくいかないので、
text_regexがうまく動かないんですが、いい方法ないですか?
346デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/02/07(木) 18:01:32
すごい久々にそのコピペ見た。
348デフォルトの名無しさん:2008/02/07(木) 18:07:56
:content_cbで変換するとか?
349p4143-ipbfp205otsu.shiga.ocn.ne.jp ◆TWARamEjuA :2008/02/07(木) 20:57:18 BE:3811875-2BP(6825)
wktk♪

名前が長すぎるようです♪
350デフォルトの名無しさん:2008/02/07(木) 21:41:57
コマンドプロンプトでperl -vと打ち込むところでperlと打ち込んだら
exitと打ち込んでもコマンドプロンプトが終了できなくなってしまいます・・・
351デフォルトの名無しさん:2008/02/07(木) 22:03:10
__END__
352デフォルトの名無しさん:2008/02/07(木) 22:08:09
kill -KILL `pidof perl`
353デフォルトの名無しさん:2008/02/07(木) 22:10:53
^D
354デフォルトの名無しさん:2008/02/07(木) 23:16:05
CTRL+Z
エンター
355デフォルトの名無しさん:2008/02/08(金) 01:33:02
ctrl+s押して右往左往したことはある
356デフォルトの名無しさん:2008/02/08(金) 09:05:11
>>355
あるある。リンクが切れたのかと思っちまう。

#ちなみに、Ctrl+Qでぬける。
357345:2008/02/08(金) 11:45:09
自己解決しました。
裏2ちゃんねるにはいけませんでした、残念w
358デフォルトの名無しさん:2008/02/09(土) 00:38:06
>>332
>perlなんて簡単なバッチ処理を書いて使い捨てにするようなのに向いてる言語だから、

したり顔でそんな放言出来るなんて、おまいはまだまだだな。
perlでも信頼性と保守性を担った、アプリケーションと呼べるレベルのものまで書けるわさ。
359デフォルトの名無しさん:2008/02/09(土) 00:57:31
でっていう
360デフォルトの名無しさん:2008/02/09(土) 01:14:05
さくっと書いてさくっと終わるようなものに 「も」 向いている言語だというのは間違いないんじゃないかな
361デフォルトの名無しさん:2008/02/09(土) 01:32:18
いっしょけんめいPerlのコアなプログラミングを学習したところで、
就職にはなんの役にも立たない。
それどころか、履歴書や職務経歴書に「Perl」などと書こうものなら
面接のその場で不採用決定。
C言語とか覚えとけば、java やその他の言語にも生かせるが
Perlじゃ「つぶしが利かない」からねぇ。
362デフォルトの名無しさん:2008/02/09(土) 01:38:34
まあ、趣味のプログラマな人間には全く関係ない話題ではあるなあ。
363デフォルトの名無しさん:2008/02/09(土) 01:52:55
ウチの会社なら…履歴書の審査は通るぞ!
(他の履歴とか面接でダメになる可能性はるけど)

364デフォルトの名無しさん:2008/02/09(土) 01:54:14
VBとか書いてあるよりはマシ。
まあ、会社の分野というか方向性によって違うんだろうけど。
365デフォルトの名無しさん:2008/02/09(土) 06:17:51
「特技: 自転車に乗れます」と書くようなもんだからな。
366デフォルトの名無しさん:2008/02/09(土) 06:38:44
参照渡しについて質問。

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

のデリファレンスを

print $b;

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

PHPの
$b = &$a;
みたなのを希望。
367デフォルトの名無しさん:2008/02/09(土) 07:02:56
368デフォルトの名無しさん:2008/02/09(土) 07:07:50
>>367
ありがとうございます。
読んで来ます。
369デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/02/09(土) 09:24:45
>>369
異なる値が一致しないのは当然。
371デフォルトの名無しさん:2008/02/09(土) 09:50:00
浮動小数点を==で比較してはいけない。プログラミングの常識。
372デフォルトの名無しさん:2008/02/09(土) 09:51:09
差の絶対値がある閾値より小さいかどうかで調べるよね。
373デフォルトの名無しさん:2008/02/09(土) 09:58:13
へーそうなんだ。整数しか使ったことがないから知らなかった。
369じゃないけど勉強になったわ。
374デフォルトの名無しさん:2008/02/09(土) 10:12:53
cygwinのPerlだと
perl -e '$A=5.5;$B=5.500000000000001;print "match\n"if $A eq $B'
これがイコールになっちゃうみたいですね
375デフォルトの名無しさん:2008/02/09(土) 11:18:45
浮動小数点表現では0.1が循環小数になる。
(だからお金の計算に浮動小数点使っちゃだめ)
376デフォルトの名無しさん:2008/02/09(土) 12:02:59
>>374
eqの意味知っていて意図的に使ってるの?
377デフォルトの名無しさん:2008/02/09(土) 14:08:21
>>374
こりゃ便利だな。
378デフォルトの名無しさん:2008/02/09(土) 17:17:17
>>371
FAQのようですね。確かに今回初めて浮動小数点の比較を使ったんだけど、知らなかった。
379デフォルトの名無しさん:2008/02/09(土) 17:29:41
>>378
> FAQのようですね。

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

380デフォルトの名無しさん:2008/02/09(土) 17:32:41
>>375
じゃあ、お金の計算には何使えばいいんだ?
利息計算とかでいやでも小数使うと思うんだが。
381デフォルトの名無しさん:2008/02/09(土) 17:40:17
10進浮動小数点数
382デフォルトの名無しさん:2008/02/09(土) 17:45:35
>>379
スマソ。
教育は受けてない。
383デフォルトの名無しさん:2008/02/09(土) 17:49:14
Perlの場合はBigDecimalだったっけ?
384デフォルトの名無しさん:2008/02/09(土) 18:20:08
>>380
例えば消費税なら価格に5かけてから100で割る。
要するに細かい計算は整数で計算する。
385デフォルトの名無しさん:2008/02/09(土) 18:50:44
それでは、コボラーさんどうぞ
↓↓↓↓↓↓↓↓↓↓↓↓↓↓
386デフォルトの名無しさん:2008/02/09(土) 18:52:56
固定小数点という便利な言い方があると思うんだが(笑)
387デフォルトの名無しさん:2008/02/09(土) 19:02:22
固定小数点でも底が2なら0.1は表せないだろ。
388デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/02/09(土) 20:32:19
>387
「固定少数点」でググれ
390デフォルトの名無しさん:2008/02/09(土) 20:34:52
>388
精度を指定すれば?
391386:2008/02/09(土) 20:36:48
>387
すまん、>384への補足のつもりだったんだ
392デフォルトの名無しさん:2008/02/09(土) 20:52:05
>>390
精度の指定の仕方を教えてください。
393デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/02/10(日) 16:51:18
>394
perlport より
>select
>Only implemented on sockets. (Win32, VMS)
396394:2008/02/10(日) 18:23:33
>395
そう言う事かー。納得しました。ありがとうございました。
397デフォルトの名無しさん:2008/02/11(月) 02:25:54
現在、与えられた文字列を読み込み、それを元にHTMLを出力するプログラムを作成しています。
与えられた文字列の中に特定のキーワードを見つけると、それをリンクに変換するようにしたいと考えています。

例:
  [google:hoge] → <a href="http://www.google.co.jp/search?q=hoge">Googleでhogeを検索</a>
  [mixi:xxxxx]  → <a href="http://mixi.jp/show_friend.pl?id=xxxxx">mixi</a>
  http://xxx.xx → <a href="http://xxx.xx">http://xxx.xx</a>

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

  %hash = (
    '\[google:\w+\]' => '<a href="http://www.google.co.jp/search?q=$1">Googleで$1を検索</a>',
  )

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

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

とやった場合、変換後の文字列の中に「$1」そのものが入ってしまいます。
398デフォルトの名無しさん:2008/02/11(月) 02:29:35
$input_str =~ s/$key/$hash{$key}/gee;

できるかは知らん
399デフォルトの名無しさん:2008/02/11(月) 10:43:55
>>397
クロスサイトスクリプティングって知ってるか?
素人のCGI作成は法律で禁止して欲しい。
400デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/02/11(月) 11:57:26
>399
もちろん知ってます。
置換条件と置換パターンを配列などに保持しておく(または外部から読み込む)という考え方自体が
セキュアではないということでしょうか?

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



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

'<a href="http://www.google.co.jp/search?q=${1:urlencode(utf8)}">Googleで${1:htmlsafe}を検索</a>'

とかして、これを解釈するようにすればよい。
403デフォルトの名無しさん:2008/02/11(月) 17:27:17
ありがとうございます。

自分用のツールをさくっと作るつもりだったけど、そこまでやろうとすると手間かなあ。
誰かモジュール作ってるかもしれないけど。
404デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/02/11(月) 18:16:55
binmode STDIN, ':utf8';

追加したらマッチしますた。
406デフォルトの名無しさん:2008/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に変換しようとしたら、
標準出力ではうまくいって、リダイレクトすると文字化けしました。

おわかりになる方、いらっしゃるでしょうか。
407デフォルトの名無しさん:2008/02/12(火) 05:45:10
lv でみれないだけで、less したらみれました…すいません。
408デフォルトの名無しさん:2008/02/12(火) 09:07:43
>>407
lvのほうがlessより優秀ってイメージなんだけど、lvが文字コードを誤判定しちゃったのかな。
409デフォルトの名無しさん:2008/02/12(火) 12:12:12
use CGI;
my $delimiter = "\t";
my $q = new CGI;
my $save = $q->param('name') . $delimiter . $q->param('mail');
my ($name, $mail) = split /$delimiter/, $save;

入力はHTMLフォームからを想定しています。
こういった場合に適切なデリミタは何でしょうか。
たまに<>を見かけますが<>を><に変換してる場合じゃないと有効で無いですし
\tは入力が可能、\0は良い方法だと思いますがCGI.pmと衝突します。
\a等が良いのでしょうか。
410デフォルトの名無しさん:2008/02/12(火) 12:14:45
× たまに<>を見かけますが<>を><に変換してる場合じゃないと有効で無いですし
○ たまに<>を見かけますが<>を&lt;&gt;に変換してる場合じゃないと有効で無いですし
ミスりました汗
411デフォルトの名無しさん:2008/02/12(火) 12:52:41
板違いっぽいがスペースじゃだめ?
412デフォルトの名無しさん:2008/02/12(火) 13:13:53
$save の前に入力チェックしてタブ文字を消せばいいだろ
413デフォルトの名無しさん:2008/02/12(火) 14:12:21

my $save = join("&&", map { my $i = $q->param($_); $i =~ s/&/&/g; $i } ("name","mail"));
my($name,$mail) =~ map { s/&/&/g; $_ }(split("&&",$save));
414デフォルトの名無しさん:2008/02/12(火) 18:08:01
>>409
<SOME_UNPREDICTABLE_STRING_XXX> でおk
415デフォルトの名無しさん:2008/02/13(水) 11:16:04
投資家板で名高いプログラマの書いたコードですが
初心者が多く、下記コードについて評価できません
プロの目から見た下記コードの評価を教えて下さいませ

http://live27.2ch.net/test/read.cgi/market/1202806626/454

$vict++;
$vict100++;
print $_ ."$riekiプラス!持ち越し成功!\n";
}
if($end < $start2){
$loss=$start2-$end;
$loss=~s/\-//;
$totall =$loss + $totall;
$totall100 =$loss + $totall100;
$lost++;
$lost100++;
print $_ ."$loss マイナス!持ち越し失敗!\n";
}
}

416デフォルトの名無しさん:2008/02/13(水) 11:16:34
つづきです

if(($cost < 1000)&&($cost > 300 )){
if($end > $start2){
$rieki=$end -$start2;
$rieki=~s/\-//;
$totalr =$rieki+$totalr;
$totalr1000 =$rieki+$totalr1000;
$vict++;
$vict1000++;
print $_ . "$riekiプラス!持ち越し成功!\n";
}
if($end < $start2){
$loss=$end-$start2;
$loss=~s/\-//;
$totall =$loss + $totall;
$totall1000 =$loss + $totall1000;
$lost++;
$lost1000++;
print $_ . "$lossマイナス!持ち越し失敗!\n";
}
417デフォルトの名無しさん:2008/02/13(水) 11:22:13
>>415
前の部分が欠けてて途中からになってるけど…?
418デフォルトの名無しさん:2008/02/13(水) 11:35:29
書きかたはまるっきり初心者

処理内容としては
1.コストで場合分け(ここで見えてるのは300から1000まで)
2.スタートとエンドの差をとって,スタートがエンドより低ければ利益,逆なら損害として出力
3.利益または損害をトータルに加算
4.利益の出た回数と損害の出た回数をカウント.コストの範囲ごとにもカウント

なんつうか小学生でも計算できる内容だ
419デフォルトの名無しさん:2008/02/13(水) 11:43:46
計算さえ出来ればいいんでしょ?
合ってりゃいいと思うよ
420デフォルトの名無しさん:2008/02/13(水) 11:54:35
>>415
軽くスレ読んだが名高いプログラマじゃなくて単に周りに避けられてる面倒くさい人じゃん。
コードは上で言われてるように初心者でも書ける程度のもん。
プログラム書かない人にけん制になると思ったのかもしれんが
こんなの書いて自慢する人より電卓持ってる事務員のがずっとマシ。
421デフォルトの名無しさん:2008/02/13(水) 12:08:22
ちゃんと動いて計算が合ってるならいいんじゃないの?
それ以外に評価しようが無い。
422デフォルトの名無しさん:2008/02/13(水) 12:11:02
「名高いプログラマ」ってとこは確かにどうかと思うコードではあるw
423デフォルトの名無しさん:2008/02/13(水) 12:17:13
あっちのことはよく知らないけど,変な演算する能力よりもデータを見極める目のほうが大事なんじゃないの?
424デフォルトの名無しさん:2008/02/13(水) 12:25:14
主婦が、余った材料で栄養バランスの取れた料理を作るようなイメージ。
プロの料理人と比較しちゃいけない。
425デフォルトの名無しさん:2008/02/13(水) 12:27:12
典型的なうんコードだな
426デフォルトの名無しさん:2008/02/13(水) 12:31:07
>>421
あ、ごめん。機能満たすだけなら充分。
でも向こうのでの使い方が目的あって出してるコードじゃなく
素人にコード見せて牽制してるだけだからこんなの自慢にならんなぁって。
427デフォルトの名無しさん:2008/02/13(水) 12:36:31
データを集積して処理するならともかく、この程度のことなら電卓+ノートのほうがいいと思うがな
428デフォルトの名無しさん:2008/02/13(水) 12:40:32
サイタマン は やっぱり うんこだった!
429415のスレ住人:2008/02/13(水) 12:41:56
名高いプログラマーというより彼は社長だそうです。
年収3000万だったそうです。
ですからプログラムの内容というよりは
アイデアで儲けている方なのかもしれませんね。
真実が定かでは無いのですが彼がIT企業の社長という点はどう思われますか?
430デフォルトの名無しさん:2008/02/13(水) 12:42:37
>>424
だが余った食材をそのまま食べたほうが味も見た目も栄養も手間も優れていたというパターン
ただの自己満足にしかなってないという…
431デフォルトの名無しさん:2008/02/13(水) 12:43:04
こっちに来られると困るからノーコメント。
432デフォルトの名無しさん:2008/02/13(水) 12:44:33
内容云々じゃなくて、これくらいすばらしいコードを書けるスキルがあれば年収2000万くらいは最低限ある、
という内容のことを言っていたのですが、株板では判断できる人が少なかったので参考になりました。
433デフォルトの名無しさん:2008/02/13(水) 12:45:27
           __        ♪
   ヨホホ♪    \   \        ♪
            \/  `' ==‐‐-- 、  ♪
      ξミミミミミ   ./\        .ヽ,
.      |´_`|  /  .\        ,l
       /.__) ̄ ̄ ̄| ̄ ̄ ̄ ̄ ̄ ̄|
      〜l└‐L、 _,==.,―――=,==r′
      l~~`ゝつ.l l |||/ | l´      l |
 .     ´|| ̄||´ |.|≠  ||       ||
434デフォルトの名無しさん:2008/02/13(水) 12:46:12
>>429
とりあえず
2chに入りびたってコテハンつけてる
そんなIT社長はイヤだ
435デフォルトの名無しさん:2008/02/13(水) 12:46:21
サイタマン社長の名言集です。
どうぞ全部読んであげてください

http://live27.2ch.net/test/read.cgi/market/1188339064/l50
436デフォルトの名無しさん:2008/02/13(水) 12:46:32
            __,,γ⌒ヽ                _
           ,,-''", ―‐―イ―ュ---、,,,,,,,,,,_        三\
         / ∠  ム_ゝ三i二二(山山アヲ      -= 二)
        γ √  イ,, -"                  .三/
        .ん、_(γ7''"                     ̄
       r_,ノ''こ!、,,┴.
       .|  ‘''く′ ,/ │
       .r'ヘ,、  `'イ゙>'"
       .厂|,`'-,,  .|'ヽ、
       .〜へ-―‐^''ー"
437デフォルトの名無しさん:2008/02/13(水) 12:47:22
「○○なら年収○○万くらいは最低限ある」 なんて言い方する時点で中二病
ここは2chだぞ
438デフォルトの名無しさん:2008/02/13(水) 12:48:36
個人のスレがたってるような奴を信じるなよw
439デフォルトの名無しさん:2008/02/13(水) 12:50:03
>>437
投資板はcisっていうイレギュラーの塊のような人が住んでるから
うそつきが住みやすいんですよ
440デフォルトの名無しさん:2008/02/13(水) 12:51:27
コテで自慢する人は注目されたいだけ。

>>435
いりません。お引き取りください。
441デフォルトの名無しさん:2008/02/13(水) 12:51:27
2レス目まで読んだ

Results 1 - 10 of about 1,040 Japanese pages for 金拝主義. (0.21 seconds)
Results 1 - 10 of about 5,450 Japanese pages for ボラリティ. (0.14 seconds)
Results 1 - 10 of about 3,130,000 Japanese pages for シュミレーション. (0.10 seconds)
Results 1 - 7 of 7 Japanese pages for イートレイドワラッパー. (0.35 seconds)
プロフィールをていぞう
愚かの骨頂

個性的な語彙を持ってることはわかった
442デフォルトの名無しさん:2008/02/13(水) 12:51:45
サイタマン社長はゴールドカードもupしてるし
信じたいんですがやっぱり嘘なのでしょうか。
客観的に見てあのくらいのプログラムが書ければ年収二千万はいけるのでしょうか
443デフォルトの名無しさん:2008/02/13(水) 12:53:43
>>442
すでに必要な情報は提示されてる。あとは自分で考えれ。
ここは2chだぞ。
444デフォルトの名無しさん:2008/02/13(水) 12:55:09
おー。変数名に数字つかうってスゴいセンスだな。
でどこの幼稚園の子供よ?
445デフォルトの名無しさん:2008/02/13(水) 12:55:13
これだけ持ち上げられるってことはなにか持った奴なんじゃない?
446デフォルトの名無しさん:2008/02/13(水) 12:57:50
どうやら面白ワード生成機として有名みたいだな。
447デフォルトの名無しさん:2008/02/13(水) 12:59:57
サイタマン先生の今までupした物は
200万円くらいのお金と60万円の証券会社の口座と
ゴールドカード4枚ですね。
プログラムのスキルでよく株のツールなどを作ろうかなどと言ったりします
448デフォルトの名無しさん:2008/02/13(水) 13:12:34
>>447
なんだかんだで君も彼にぞっこんっぽいなw
449デフォルトの名無しさん:2008/02/13(水) 13:14:02
>>446
2ch語を適当に組み合わせるしか脳のない「普通の厨」なら、
似たようなクオリティの人工無能も書けるかもしれないけど、
天然素材は模しようがないなw
450デフォルトの名無しさん:2008/02/13(水) 13:19:08
>>449
実は本人はスーパーハカーで,2chに書き込んでるのはサイタマンに作られた人工知能なんじゃないか…
そしてあのコードも学習して自動生成されたんじゃないかと妄想してみたwww
451デフォルトの名無しさん:2008/02/13(水) 13:29:30
>>447
ゴールドポイントカードならぼくも持ってるよ。
452デフォルトの名無しさん:2008/02/13(水) 13:33:07
ま、スレ違いだから去れ
453デフォルトの名無しさん:2008/02/13(水) 15:54:58
aaa1 aaa2 aaa3 aaa4 というファイルがあったときに
通番どおりに結合して1つの出力にする上手い方法ありませんでしょうか?
454デフォルトの名無しさん:2008/02/13(水) 15:59:00
cat 呼び出す
455453:2008/02/13(水) 18:25:02
>>454
ありがとうございます。
catは盲点でした。無事解決しました。

456デフォルトの名無しさん:2008/02/13(水) 18:31:44
配列のなかに配列を複数持っている場合
それらをうまく結合する手段ってないでしょうか?

具体的には以下のような感じです
@array[1] = {aaa, bbb}
@array[2] = {ccc, ddd}
@array[3] = {eee, fff}

このとき、一つの変数にまとめて
{aaa, bbb, ccc, ddd, eee, fff}
となるようにしたいです。

申し訳ないのですが、知恵を貸してください。
457デフォルトの名無しさん:2008/02/13(水) 18:46:13
544 :デフォルトの名無しさん:2007/05/12(土) 02:54:05
深さのある配列を左から順番に呼んでフラットな配列を作りたいんですが、
よい方法ご存知の方いませんか
@a = ([1,2,3], [4,5,6], [[7,8],[9,0]]);
@b = flatten(@a); # 1,2,3,4,5,6,7,8,9,0

546 :デフォルトの名無しさん:2007/05/12(土) 03:16:52
>>544
sub flatten(@) { map { ref $_ eq "ARRAY" ? flatten(@$_) : $_ } @_ }

こんなんどうよ。
458デフォルトの名無しさん:2008/02/13(水) 19:26:12
>>457
456です、回答ありがとうございます。
しかしながら、私が挙げた例の場合にはどのように用いればよいか分からず困っています。

ヒントだけでもいただけないでしょうか?
459デフォルトの名無しさん:2008/02/13(水) 19:29:20
{}はハッシュだろ
460デフォルトの名無しさん:2008/02/13(水) 19:31:12
>>459
理解できました、ありがとうございます!
461デフォルトの名無しさん:2008/02/14(木) 00:42:53
Pgを使って(DBIじゃなく)複数スレッドから同時にDBアクセスを使用と思います。
DBへの接続は各スレッドで行います。
Perl自体はスレッドに対応していても、関連モジュールとかの対応状況がわかりません。
バージョンは以下の通りです。
Perl 5.8.8
libpg 2.1.1
PostgreSQL 8.1
ディストリビューションは、Debian etchです。
スレッドの方が子供の面倒が見やすそうなので、できればスレッドにしたいのです。
462デフォルトの名無しさん:2008/02/14(木) 01:19:43
で、自分では試したくないので、だれかヒマなヤツ、オレのかわりに試してくれんか。
オレは家でゴロゴロしてアニメ観るのに忙しいから。

・・・とか?
463デフォルトの名無しさん:2008/02/14(木) 01:27:23
いえ、アニメじゃないです。 アニメの実写劇場版です。
464デフォルトの名無しさん:2008/02/14(木) 21:24:49
>>462
せっかくぼけてくれたところをマジレスすると、試して問題なかったからと言って、スレッドに対応しているとは限らないから困ってるんです。
たまたま動いているだけってことがあるし。
465デフォルトの名無しさん:2008/02/15(金) 09:03:33
perl5.10が普及するのっていつごろ?
466デフォルトの名無しさん:2008/02/15(金) 22:25:02
>>464
その当たりの情報は、ソースやリリースノートを追うしかないと思う。
やたら古くてあまり参考にならないけど
tp://homepage3.nifty.com/hippo2000/perltips/DBI/FAQ.htm#5_1_Can_I_do_multi_threading_wit
467デフォルトの名無しさん:2008/02/16(土) 02:06:19
ActivePerlの5.10の最新版(ほかいくつかのバージョン)で、
ppm search (モジュール名)
でモジュールをネットから探してくれないのですが、
何か指定が必要でしょうか。
468デフォルトの名無しさん:2008/02/16(土) 02:59:34
>>467
5.8 と5.10ではバイナリ互換性がないので、単に5.10向けにビルドしたのがないと思われる。
469デフォルトの名無しさん:2008/02/17(日) 01:17:31
winで、perlからmysqlを使っているのですが、
insert into a(a) value("あ");
コマンドラインで打つとうまくいくのですが、perlのDBIではうまくいきません。助けてください。
470デフォルトの名無しさん:2008/02/17(日) 03:10:36
>>469
向こうの(mysql)スレでも言われているように、mysqldのdefault-charsetは確認したか?
471デフォルトの名無しさん:2008/02/17(日) 09:58:05
はい、sjisになっていて、win なのでPerlで書いているソースもそうじゃないかと。
472デフォルトの名無しさん:2008/02/17(日) 11:02:29
>>471
ほんじゃ、unpack()つかって、バイナリの並びを表示して確認してみるとか?
473デフォルトの名無しさん:2008/02/17(日) 11:04:16
>471
最近の Perl は内部 UTF-8 だべ。
474デフォルトの名無しさん:2008/02/17(日) 12:00:13
>>471
>>470で聞いたのは、mysqldの’connect’と’client’のcharsetのこと。

mysqldのversionを明記してないけど、多分4.1か5.0だと仮定して、
perl-DBD-mysqlで接続したときの、default-charsetがちゃんと’sjis’なり’cp932’になってない。
(mysqldとDBD-mysqlを自前でコンパイルしてない限り)

つうことでそこを確認、変更しましょう。
ちなみに>>469で書いてるみたいに、コマンドラインのmysql.exeからLoginして確認した
’charset’関係は、あくまでもコマンドラインのmysqlからの接続時のみに効いてる状態なんでそれとは別。
475デフォルトの名無しさん:2008/02/17(日) 13:47:20
>>469
insert 以前にさ、select はうまくいくの?
初心者なら、簡単な事からはじめてみよう。

use utf8;
use DBI;
my $db = DBI->connect("DBI:mysql:以下省略・・・
  $db->do('SET NAMES UTF8');

$id = 1;
my $sql = "SELECT name,address FROM members WHERE id=$id;";
my $sth = $db->prepare($sql);
 $sth->execute or die DBI::errstr;
 $sth->bind_columns(undef, \(my($M_name,$M_address))) or die DBI::errstr;

my $rc = $sth->fetch();
 utf8::decode($M_name);
 utf8::decode($M_address);

insert はこの逆をすればいいだけ。
476デフォルトの名無しさん:2008/02/17(日) 16:29:46
設問1

f-e-d-c-b-a-0-a-b-c-d-e-f
477デフォルトの名無しさん:2008/02/17(日) 16:31:00
設問2

9-8-7-6-5-4-3-2-1-X-1-2-3-4-5-6-7-8-9
478デフォルトの名無しさん:2008/02/17(日) 17:13:02
以下の問題を定義しなさい。

1{"f" = "-f == f" && "+f == f"}
2{"9" = "-9 == 9" && "+9 == 9"}
3{構成文省略}
"9" は "f" に等しく、また "-9" は "-f" に等しい
"0" は "X" に等しいので "0" == "X" = "n" とする
先ず此の構成を "x,y,z && n" を成型にしなさい
また "n" は "y" で在り "9…0…9" まで存在する
しかし "n = y" の配列は"次の"配列 "9…0…9" を使用する事!
残された "9…0…9" は "1/3" の後の "1/4" で使うが?
"n" == "0 = X" && "x,y,z" = "x,y,z" == "n/4" に為りますが構成は入り組んで居りますね?
479デフォルトの名無しさん:2008/02/17(日) 17:17:15
日本語が苦手なら英語でおk
480デフォルトの名無しさん:2008/02/17(日) 17:19:52
どちらのお国のガイジンさんですか
481デフォルトの名無しさん:2008/02/17(日) 17:26:21
宿題は自分でやるか先生に聞きなさい。ためにならん。
482デフォルトの名無しさん:2008/02/17(日) 17:26:35
いくらなんでも丸投げすぎワロタw
483デフォルトの名無しさん:2008/02/17(日) 17:28:26
解読できません><
誰か和訳たのむ
484デフォルトの名無しさん:2008/02/17(日) 18:52:46
>>476-478
くだらねぇ問題はここへ書け ver.3.14(57桁略)4592
http://science6.2ch.net/test/read.cgi/math/1197828000/
485デフォルトの名無しさん:2008/02/17(日) 20:29:46
>>476
ん?

>>477
え?

>>478
パルプンテ
486デフォルトの名無しさん:2008/02/17(日) 21:40:18
>>478
居りますよ
487デフォルトの名無しさん:2008/02/17(日) 22:24:11
おちんちんの傘のまわりに小さいギザギザがあるんですが
医者に見せたほうがいいですか?
488デフォルトの名無しさん:2008/02/17(日) 22:28:07
>>487
このスレ的には大きなツブツブのほうが好まれますね

死ね
489デフォルトの名無しさん:2008/02/18(月) 21:53:13
active perl をダウンロードしようと思い
http://www.activestate.com/
にいったのですが
久々に訪れてみたら、
ずいぶん様子が違いダウンロードする場所がわかりません
どこにあるのでしょうか
490デフォルトの名無しさん:2008/02/18(月) 21:55:36
491デフォルトの名無しさん:2008/02/18(月) 21:58:52
>>490
即答ありがとうございます 助かりました
492デフォルトの名無しさん:2008/02/18(月) 23:48:34
XML処理用のマッピングファイルを以下を参考にして作成しました。

http://homepage3.nifty.com/hippo2000/perltips/xml/xmlenc.htm

作成したマッピングファイルは、規定のディレクトリに置けば良いのですが、
ローカルディレクトリに置いたまま使用したいと考えています。
任意のディレクトリをマッピングファイル検索パスに追加する方法はあるのでしょうか?
493デフォルトの名無しさん:2008/02/19(火) 10:39:35
中身見た?
494デフォルトの名無しさん:2008/02/20(水) 18:14:27
$moji = 'a<>b<>c<>';
495デフォルトの名無しさん:2008/02/20(水) 18:15:38
ミスです。

$moji = 'a<>b<>c<>';があって
2番目だけを切り取るいい方法ってありますか?
配列ならspliceみたいな
496デフォルトの名無しさん:2008/02/20(水) 18:20:22
配列にしてspliceすればいい。
497デフォルトの名無しさん:2008/02/20(水) 18:52:37
$moji =~ s/^([^<>]+<>)([^<>]+<>)/$1/;
498デフォルトの名無しさん:2008/02/20(水) 18:54:53
s/^((?:.*?<>){1})(?:.*?)(?:<>|$)/$1/;
499デフォルトの名無しさん:2008/02/20(水) 18:59:54
s/qあwせdrftgyふじこlp. くぁwせdrftgyふじこlp;/;
500デフォルトの名無しさん:2008/02/20(水) 22:39:18
>>495
「切り取る」とは
除去なのか
$moji =~ s/(?<=<>).*?(?=<>)//; # a<><>c<>
$moji =~ s/(?<=<>).*?<>//; # a<>c<>
取得なのか
$value = (split /<>/, $moji, 3)[1]; # $value = 'b';
501デフォルトの名無しさん:2008/02/21(木) 19:15:50
Windows Excel から Perl スクリプトを実行し、その結果を受け取ることはできますか?
目的は Perlスクリプトに GUIラッパーをかぶせることです。
処理結果を Excel に渡してグラフ表示することなども考えてますので、
その意味でも Excel から一貫して操作できれば、と考えています。
具体的には Web サーバからダウンロードした Apache の access log を
見やすく解析したいと思っています。
業者さんの設置してくれた アクセスログ解析CGI では得たい情報が得られないので、自分でなんとかしようと思いました。
実行するのは会社のパソコン上です。Perl の実行環境は用意しようと思っていますが、
それ以外のローカルサーバでの CGI とか PHP とかは今のところ考えていません。
環境は WindowsXP、Excel 2003 です。
どうぞよろしくお願いします。
502デフォルトの名無しさん:2008/02/21(木) 20:21:42
Excelスレ池
503デフォルトの名無しさん:2008/02/21(木) 20:45:24
Perlで解析結果をファイルに書き出して
Excelのマクロでグラフにすればいいんじゃないかな
504デフォルトの名無しさん:2008/02/21(木) 20:46:10
え、Perlいらなくね?
505>>501:2008/02/21(木) 22:11:59
レスありがとうございます。
>>502
やはりスレ違いでしたか…Excel VBAスレのテンプレ読んでこちらに来てしまったのですが、
書き込んでからやっぱりこっちのスレは違うかもと思いました。申し訳ありませんでした。
>>503
Perlを実行するのを、DOS窓からコマンドを打ち込むのではなく、例えば
Excel の マクロの中から実行できないかと思いまして…。
>>504
Excel の VBAでスクリプトを作りかけたんですけど、簡単な置換をさせただけでも
結果が帰ってくるまでに5分ぐらいかかってしまいました。それでPerlに変えたんです。
もっとも実行させたのがPPCのMac上だったので、Windowsだったらもっと早いとは思うのですが…。

ではExcelのスレに移動することにします。
レスいただきどうもありがとうございました。
506デフォルトの名無しさん:2008/02/22(金) 09:29:51
携帯のアクセス制限はどうすれば良いの?
IPアドレスだと毎回変わるんだが
507デフォルトの名無しさん:2008/02/22(金) 14:50:54
perlで、「iostat -x」の出力結果の
----------------------------------------------------
extended device statistics
device r/s w/s kr/s kw/s wait svc_t %b
twed0 6.3 35.9 81.1 565.8 0 9.8 7
----------------------------------------------------
の中の、「81.1」と「565.8」だけ標準出力したいのですが、
試行錯誤したのですが、うまくいきません。
最後に試したのが、以下のスクリプトですが、
何も表示されずにちょっとお手上げです。
どなたかご指摘頂けないでしょうか?
どうぞお願いします。


----------------------------------------------
#!/usr/bin/perl

open(FILE, "iostat -x");

while (<FILE>) {
if (/^twed0?\s+?[0-9\.]+?\s+?[0-9\.]+?\s+?([0-9\.]+)?\s+?([0-9\.]+)?\s+?[0-9]+?\s+?[0-9\.]+?\s+?[0-
9]+$/) {
print "$1\n";
print "$2\n\n\n";
}
}
close(FILE);
----------------------------------------------
508デフォルトの名無しさん:2008/02/22(金) 14:55:33
open(FILE, "iostat -x |")
509デフォルトの名無しさん:2008/02/22(金) 15:01:39
>>508
アドバイスありがとうございます。
>>508さんの方法でもやってみたのですが、やはり何も表示されませんでした。
何がまずいんだろう・・・
510デフォルトの名無しさん:2008/02/22(金) 15:11:34
……
511デフォルトの名無しさん:2008/02/22(金) 15:15:43
>>507
最後の改行コードは大丈夫?
512デフォルトの名無しさん:2008/02/22(金) 15:25:30
chomp汁!
513デフォルトの名無しさん:2008/02/22(金) 15:35:15
kwsk見てみたが正規表現が間違ってるっぽいな
もうちょっと見てみるわ
514507:2008/02/22(金) 18:56:36
>>511>>512>>513
お手数お掛けしてすみません。
私は、いつもphpを使っているので、phpのperl互換の正規表現で色々と試行して、
phpでは正規表現の部分で正常にできました。
どこが動かないのかデバックコードを書いてみました。

----------------------------
#!/usr/bin/perl

open(FILE, "iostat -x |");
print"-";
while (<FILE>) {
if ("/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/i") {
print "$2\n";
print "$4\n\n\n";
}
print "*";
}
close(FILE);
-------------------------------------

上のスクリプトで実行すると、出力結果が
「-
*
*」(改行つめました)が出力されます。
シェルから、「iostat -x」とたたくと、前述ようにきちんと出力します。

たぶん、if文の使い方が悪いと思うのですが、
どのようにやるのが正しいのでしょうか?多分、初歩的なことかも?

引き続き、宜しくお願いします。お手数お掛けします。
515507:2008/02/22(金) 18:58:41
あ!、改行が複数飛び飛びに入っている実行結果から$2と$4は空文字になっているのだと思います。
でも、そこからどう解決できるのかが分かりません。う〜ん。
516デフォルトの名無しさん:2008/02/22(金) 19:16:33
>>514
if(〜)は何でdouble quoteしてるの?
517507:2008/02/22(金) 19:21:21
>>516
これは初めてつけていなかったのですが、試行錯誤していて試しにつけてみたら、
if文の中を実行ができるようになりました。(複数改行が出力されます)

本来はつけないのが正しい記法なのでしょうか?
そうだとしますと、ますます混乱してきました。
518デフォルトの名無しさん:2008/02/22(金) 19:27:11
>>517
"で括った文字列は空文字列でなければ必ず真と判断される。だから意図した条件を満たさない行も出力されてるでしょ
付けちゃだめだよ

今iostatが使えない環境なので>>507のデータをファイルに入れているんだが、これはきっと期待通りの動作だろう

#!/usr/bin/perl

open(FILE, "iostatdata.dat");
print"-\n";
while (<FILE>) {
chomp;
if (/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/i) {
print "\$2 = $2\n";
print "\$4 = $4\n";
}
print "*\n";
}
close(FILE);
519507:2008/02/22(金) 19:44:14
>>518
わざわざコードまで書いて下さって、本当に親切にどうもありがとうございました。
早速試してみたのですが、う〜ん...結果はうまくいきませんでした。

●iostatの実行結果
------------------------------------------------------------------------------
www# iostat -x
extended device statistics
device r/s w/s kr/s kw/s wait svc_t %b
twed0 5.1 37.6 78.3 598.9 0 10.5 7
------------------------------------------------------------------------------
520507:2008/02/22(金) 19:44:38
●perlでの実行結果
----------------------------------------------------------------------------
#!/usr/bin/perl

open(FILE, "iostat -x |");
print"-";
while (<FILE>) {
# if (/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/i) {
# print $1 . "\n";
# print $4 . "\n\n\n";
# }

chomp;
if (/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/i) {
print "\$2 = $2\n";
print "\$4 = $4\n";
print "*";
}


print "*\n";
}
close(FILE);
------------------------------------------------------------------------------
# /home/test/test.pl
-*
*
*
------------------------------------------------------------------------------
521507:2008/02/22(金) 19:45:41

●【参考】phpの参考結果
----------------------------------------------------------------------------
$word = "twed0 5.1 37.6 78.3 598.9 0 10.5 7";
$word = preg_replace("/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/", "$2--$4", $word);
echo "->". $word . "<-";
----------------------------------------------------------------------------
->37.6--598.9<-
522デフォルトの名無しさん:2008/02/22(金) 20:29:58
>>506
各社の携帯電話が使うIPアドレスの範囲は公式ページに載っているので、それで制限することはできる。
特定の携帯電話をはじくのは無理かな。同じ機種使ってれば、区別のしようがないし。端末IDを送信してれば区別できるけど。
523デフォルトの名無しさん:2008/02/22(金) 20:35:23
じゃオレも。

>>521 のphpをそのままperlの文法に書き換えただけでの結果
------------------------------------------
$word = "twed0 5.1 37.6 78.3 598.9 0 10.5 7";
$word =~ s/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/$2--$4/;
print "->". $word . "<-";
------------------------------------------
->37.6--598.9<-

ほらちゃんと>>521と同じ結果が出たぞ。
何が違うのか、よ〜く見てみろ。
「問題の切り分け」 って習わなかったのか?
phpだろうがperlだろうがjavaだろうが、
どんな言語でもデバッグの手法は同じだよ。
もういちど基本に帰れ。
524 ◆TWARamEjuA :2008/02/22(金) 21:41:04 BE:1524672-2BP(7072)
つ s
525デフォルトの名無しさん:2008/02/22(金) 22:58:53
>506
やっぱ端末情報を拾うのが一番じゃないか?
526デフォルトの名無しさん:2008/02/23(土) 03:38:59
>>507,523
x フラグつけてくれ。読みにくくてかなわんw
527デフォルトの名無しさん:2008/02/23(土) 11:25:03
そもそも正規表現で拾う必然性すらない。

#!/usr/bin/perl -w
use strict;

# open IOSTAT, 'iostat -x |' or die $!;
*IOSTAT = *DATA;
scalar <IOSTAT>; # extended device statistics
my @col = split /\s+/, <IOSTAT>;
my %v;
$v{'device'} eq 'twed0'
    and print "$v{'kr/s'}\n$v{'kw/s'}\n\n\n"
  while @v{@col} = split /\s+/, <IOSTAT>;
close IOSTAT or die $!;

__DATA__
extended device statistics
device r/s w/s kr/s kw/s wait svc_t %b
twed0 6.3 35.9 81.1 565.8 0 9.8 7
twed1 5.1 37.6 78.3 598.9 0 10.5 7
528デフォルトの名無しさん:2008/02/23(土) 15:19:23
それを言っちゃオシマイよ
529デフォルトの名無しさん:2008/02/23(土) 21:35:32
// データを1行読み出す。
function GetNextData(){
if( $line = fgets($this->m_file_hd, 1024) ){
$line2 = split($this->m_pause_chr, $line);
$ans = new Line();
$ans->SetData($line2[0], $line2[1]);
}else{
$ans = "";
}
return $ans;
}

変数名の最後に数字使うのは初心者だろ?
もしコード拡張で数値計算が入ったら紛らわしい
530デフォルトの名無しさん:2008/02/23(土) 22:04:21
だって、変数名の最初に数字がつかえないんだもん。
531デフォルトの名無しさん:2008/02/24(日) 00:22:52
誤爆か?
考え込んでしまった
532デフォルトの名無しさん:2008/02/24(日) 01:25:43
evalって、エラーがなければ$@が空文字列であることが保証されるとのことですが、
evalのリターンはエラーがあった場合、undefであることが保証されますか?
definedな戻り値と$@が両立するケースはありますか?
533デフォルトの名無しさん:2008/02/24(日) 10:18:31
>>532
<q cite="http://perldoc.jp/docs/perl/5.10.0/perlfunc.pod#item_eval_BLOCK">
構文エラーや実行エラーが発生するか、die 文が実行されると、
eval の値として未定義値が返され、$@ にエラーメッセージが設定されます。
エラーがなければ、$@ は、空文字列であることが保証されます。
</q>
534530:2008/02/24(日) 11:01:47
>>531
ごめん。ぼけてみたんだけど、はずした。
535デフォルトの名無しさん:2008/02/24(日) 11:42:40
>>533
どうもです!構文エラーと実行エラー以外に$@が設定されるエラーはないと
考えていいんですよね??素人丸出しな質問ですが。
536デフォルトの名無しさん:2008/02/24(日) 13:15:54
>>535
http://search.cpan.org/dist/perl-5.10.0/pod/perlvar.pod#EVAL_ERROR
<q cite="http://perldoc.jp/docs/perl/5.6.1/perlvar.pod">
最後の eval() 操作子による Perl の構文エラーメッセージです。
</q>
537デフォルトの名無しさん:2008/02/24(日) 20:02:29
>>534
いやまあ、あなたのことじゃないんで気にしないで
538デフォルトの名無しさん:2008/02/26(火) 02:30:35
コンパイル時にパッケージ名とサブルーチン名を区別できない可能性があるから、
サブルーチンの名前には大文字を使わないと聞いたことがあるのですが本当でしょうか?

また実際に区別できないことがあるのは、どういった使い方をした場合でしょうか?
539デフォルトの名無しさん:2008/02/26(火) 11:05:25
>>538
コンパイラが大文字小文字でパッケージ名と関数名の
区別を付ける事はないので嘘。
http://perldoc.jp/docs/perl/5.8.0/perlstyle.pod

> 実際に区別できないことがある
人間が区別を付けにくいという意味では
func_or_method FuncOrClassOrFh @arg;
540デフォルトの名無しさん:2008/02/26(火) 15:03:13
541デフォルトの名無しさん:2008/02/26(火) 16:07:27
>>539
回答ありがとうございます。

一般的にパッケージ名に大文字を使うため、サブルーチンの名前にも大文字を使うと、
パッケージ名とサブルーチン名が重複する可能性があり、
重複するとコンパイラが区別ができないことがあるのかと、
疑問に思ってるのですが、これについてはどうでしょうか?
542デフォルトの名無しさん:2008/02/26(火) 16:50:13
「名前空間」の勉強してこいよ
543デフォルトの名無しさん:2008/02/26(火) 17:11:44
544デフォルトの名無しさん:2008/02/26(火) 18:01:02
重複して困るのはサブルーチン名でなくラベルやファイルハンドル。

#!/usr/bin/perl -w
use strict;
package Foo; sub Foo { join '', @_ }
package Bar; sub Bar { print 'Bar!' }
package main;

# これはOK
# print Foo Foo Foo => "\n", Foo->Foo("Foo!\n"); # FooFoo\nFooFoo!\n
# Bar Bar; __END__ Bar!

# パッケージ名と同名のファイルハンドル
# open Foo, '>./Foo.txt' or die $!;
# Foo->Foo('Foo!'); # ここで混乱して実行時エラー
# close Foo; __END__

# goto EXPR を goto LABEL で解釈してコンパイルエラー
# for (1..5) { $_ > 2 ? goto Foo Foo 'Foo' : print "$_, " }
# FooFoo: print 'foo!'; __END__

# 優先順位の明確化で解決
# for (1..5) { $_ > 3 ? goto(Foo Foo 'Foo') : print "$_, " }
# FooFoo: print 'foo!'; __END__ 1, 2, 3, foo!
545デフォルトの名無しさん:2008/02/26(火) 18:45:04
>>544
非常に分かりやすく解説してくださってありがとうございます。

http://perl.g.hatena.ne.jp/bosh/20060409
こちらで書いてあるのは間違いということで、理解しました。
546デフォルトの名無しさん:2008/02/26(火) 21:59:27
素人が趣味で書いたホームページを鵜呑みにされても・・・
547デフォルトの名無しさん:2008/02/26(火) 23:18:46
何かあるのかと思って確認のために聞いただけじゃないか
548デフォルトの名無しさん:2008/02/27(水) 10:27:01
素人かどうかなんてわからないだろ
549デフォルトの名無しさん:2008/02/27(水) 10:28:24
わからないなら素人として扱うのが安全だろ
550デフォルトの名無しさん:2008/02/27(水) 11:18:38
じゃあここでレスしてるのも素人ばっかりだなw
551デフォルトの名無しさん:2008/02/27(水) 16:12:38
お前はその前提で喋ってればいいんじゃね?
馬鹿だなーって思われるだけだけど。
552デフォルトの名無しさん:2008/02/27(水) 16:23:09
わかった。>>551は超素人ってことで。
553デフォルトの名無しさん:2008/02/27(水) 16:42:13
笑うところだろw

まぁ鵜呑みにするな、っていうのは真理だな
554デフォルトの名無しさん:2008/02/27(水) 22:22:22
素人です。教えてください。
何もわかりません。動きません。
絶対プログラムは正しいので、Perlのバグだと思うのです。
・・・・。
555デフォルトの名無しさん:2008/02/27(水) 22:32:58
どっかのコピペか?
556デフォルトの名無しさん:2008/02/28(木) 09:41:09
質問です。

func_hoge() というサブルーチンがあります。
このサブルーチンは、内部でエラーが起こった場合のみ、エラー番号やエラーメッセージを返してきます。
何も問題なければ 0 やら空文字列が返ってくるとします。

func_hoge()を呼び出すときは、

  my $err = func_hoge();
  if ($err) { die "Error func_hoge [$err]"; }

というように返り値を保持しておき、
エラーがあれば、その時のエラー番号(可能であればサブルーチン名などの目印も)を表示したい。

これはこれで全く問題ないのですが、func_hoge()の呼び出し箇所が増えると
エラー格納用の一時的な変数が増えてしまいますし、何より面倒です。
何か楽できる方法ありませんか?
557デフォルトの名無しさん:2008/02/28(木) 11:00:53
func_hoge de die
558デフォルトの名無しさん:2008/02/28(木) 11:13:37
func_hoge()の中でuse Carpしてcroakすればいいんじゃね?
die させないときはeval{}で囲えばいいし。
559デフォルトの名無しさん:2008/02/28(木) 11:46:45
サブルーチンの中を弄らないと無理かー。
呼び出し側だけで何とか小手先の変更で出来ないかなとか考えてた。ありがとう。
560デフォルトの名無しさん:2008/02/28(木) 12:41:38
ん?
push @err, func_hoge();
みたいなもんでいいのかな。
561デフォルトの名無しさん:2008/02/28(木) 12:53:34
新しいサブルーチン作ればいいじゃん。
562デフォルトの名無しさん:2008/02/28(木) 14:44:00
if (my $err=func_hoge()) { die "Error func_hoge [$err]"; }
563デフォルトの名無しさん:2008/02/28(木) 22:13:15
>560
状況にもよるけど、サブルーチンを呼ぶたびにエラー判定しなきゃならないような類だと
結局手間は変わんないかも。

>561
最終的には多分そうなると思う。

>562
やっぱそれが一番スマートなのかなあ。
564デフォルトの名無しさん:2008/02/29(金) 00:37:04
Perlってパースした後の構文木をプログラムで書き換えることはできないの?
565デフォルトの名無しさん:2008/02/29(金) 03:20:56
dieで死ぬだけなら再利用しちゃえばいいんじゃないの?w
566デフォルトの名無しさん:2008/02/29(金) 09:02:53
>>564
目的は?
567デフォルトの名無しさん:2008/02/29(金) 10:51:40
Perl の localtime 関数はエポックからの秒数をローカル時刻の年月日に
分解してくれますね。これとは逆に、ローカル時刻の年月日を
エポックからの秒数に変換するにはどうしたらよろしいでしょうか?
568デフォルトの名無しさん:2008/02/29(金) 11:05:27
timelocal
569デフォルトの名無しさん:2008/02/29(金) 13:23:58
一度くらい自分で作ってみるのも悪くないけど(簡単だから)、
出来上がったらそれ以降は>>568を使っておけばいいな。
570デフォルトの名無しさん:2008/02/29(金) 14:22:22
Perl で split 関数が返す配列を、一度配列に入れずに、すぐに配列参照として
受け取ることはできますか?

$ar = split(/,/, $str);
$ar_ref = \@ar;

じゃなくて

$ar_ref = split(/,/, $str);

のようにしたい。

↓こんなのじゃうまくいかなかった。
$ar_ref = \split(/,/, $str);
571デフォルトの名無しさん:2008/02/29(金) 14:38:52
anonymous array reference constructor
572デフォルトの名無しさん:2008/02/29(金) 14:43:44
>>571
つまり、こういうことですか?

$ar_ref = [ split(/,/, $str) ];

でも、これだと、配列の要素をコピーすることになりそうで (なりますよね?)
無駄ではありませんか?
573デフォルトの名無しさん:2008/02/29(金) 14:45:55
>>572
実際の動作がどうなるのかはソースを読む。
読みたくないなら、明らかにコピーしそうなperlコードとBenchmarkで比較。
574デフォルトの名無しさん:2008/02/29(金) 15:05:51
>>572
最適化されるよ。
575デフォルトの名無しさん:2008/02/29(金) 16:29:22
>>574
証拠はある?
576デフォルトの名無しさん:2008/02/29(金) 16:39:17
証拠がソースだったら読むのか?
577デフォルトの名無しさん:2008/02/29(金) 16:47:30
他人に頼りすぎだ。
パフォーマンスが気になるなら、ちょっと確かめてみればいい。
こんなコード断片が書けないのなら、パフォーマンスなど気にするだけ無駄。

use Benchmark qw(timethese);
my $source = join(',', ('abcdefg')x80000);
my $result_ref;
timethese(100, {
temp => sub { my @temp_array = split(/,/, $source); $result_ref = \@temp_array; },
bracket => sub { $result_ref = [ split(/,/, $source) ]; },
none => sub { split(/,/, $source); },
});

Benchmark: timing 100 iterations of bracket, copy, none, temp...
bracket: 9 wallclock secs ( 8.94 usr + 0.00 sys = 8.94 CPU) @ 11.19/s (n=100)
none: 6 wallclock secs ( 6.76 usr + 0.00 sys = 6.76 CPU) @ 14.80/s (n=100)
temp: 15 wallclock secs (14.27 usr + 0.00 sys = 14.27 CPU) @ 7.01/s (n=100)
578デフォルトの名無しさん:2008/02/29(金) 17:00:25
>>575
証拠は俺の脳内。
信じられないなら自分でソース読もう。
579デフォルトの名無しさん:2008/02/29(金) 17:54:31
>>577
void コンテキストで split 使うと @_ に入るので注意な。
580デフォルトの名無しさん:2008/02/29(金) 19:05:26
lala-zコンテキストなら?
581ジミー:2008/02/29(金) 21:41:12
$str = "a,b,";
@ar = split(/,\n/, $str);
print join(',', @ar);

これを実行すると a,b と表示されます。
つまり、split は末尾の空文字列を取り出してくれないようです。
末尾の空文字列を取り出して、このコードが a,b, と表示させるように
するための簡単な方法ってありませんかね。
(もちろん愚直に工夫すれば何とでもなるが、スマートな解がほしい)
582ジミー:2008/02/29(金) 21:41:59
>581
コード間違えた。(実験してたコードにしてもた。)
× @ar = split(/,\n/, $str);
○ @ar = split(/,/, $str);

583ジミー:2008/02/29(金) 21:46:48
解決した。
@ar = split(/,/, $str, -1);
ですね。
584デフォルトの名無しさん:2008/02/29(金) 21:48:12
print join ',', split /,/, q/a,b,/, -1;
585デフォルトの名無しさん:2008/03/01(土) 00:44:11
>>566
特にないけど、Perlならそういう面白いインターフェイスが用意されてそうだなと思ったまでで
586デフォルトの名無しさん:2008/03/01(土) 01:06:48
麻雀なのに、娘とか嫁とか家族とかw


乞食は想像を絶するなw
587デフォルトの名無しさん:2008/03/01(土) 01:07:14
スマン、誤爆
588デフォルトの名無しさん:2008/03/01(土) 09:16:39
色々と妄想させてくれる。

世の中には「義妹が最強だろ」という誤爆レスが元になって作られたゲームとかあるからな。
人間の妄想力ってのは凄いもんだぜ。
589デフォルトの名無しさん:2008/03/02(日) 10:27:48
おにぃちゃん、ヤメテ!
590デフォルトの名無しさん:2008/03/02(日) 10:48:55
ヘッヘッヘ、いいじゃねぇか ポン ヘッヘッヘ
591デフォルトの名無しさん:2008/03/02(日) 11:09:57
Active Perl 5.10.0 用の DBD-mysql ってどこにあるの?
592デフォルトの名無しさん:2008/03/02(日) 11:48:26
>589-590
エロゲじゃねーよw
593デフォルトの名無しさん:2008/03/02(日) 14:23:27
594591:2008/03/02(日) 21:46:50
>>593
ありがとう。無事インストできたよん。
595デフォルトの名無しさん:2008/03/03(月) 09:11:40
インスト
596デフォルトの名無しさん:2008/03/03(月) 09:43:34
泣いても笑っても、お前のまんじゅうは無いよ。
597デフォルトの名無しさん:2008/03/03(月) 16:28:09
Wiki文法でのテキスト整形で悩んでいます。

改行含めた長い文章が $i に入ってます。
文章中のリンクアンカーに相当する部分はWikipediaなどでお馴染みの
[[テキスト]]
という感じで書かれています。

これを
$i =~ s/\[\[(.+?)\]\]/<a href="$1">$1<\/a>/g;
で変換しているのですが、できれば <a href="$1"> の中のほうの$1をURLエンコードして収めたいのです。

URLエンコードのサブスクリプトはこんな感じです。

sub url_enc {
local($_) = @_;
s/(\W)/'%' . unpack('H2', $1)/eg;
s/\s/+/g;
$_;
}

よろしくお願いします。
598デフォルトの名無しさん:2008/03/03(月) 16:49:12
すみません、補足です。
CGIにはインフォパスか引数で渡します。

<a href="hoge.cgi?$1">

こんな感じで。
599デフォルトの名無しさん:2008/03/03(月) 17:31:00
サブルーチンに置換部分をまとめて、
$i =~ s/\[\[(.+?)\]\]/&url_enc($1)/eg;
600デフォルトの名無しさん:2008/03/03(月) 17:58:47
そっか!e修飾子を利用した時は置換部分は関数以外は入れたらダメなんですね。

$i =~ s/\[\[(.+?)\]\]/<a href="&url_enc($1)">$1<\/a>/eg;

だとエラーが出るんで何でだろうとずっと思ってたんです。
ありがとうございます。勉強になりました。
601デフォルトの名無しさん:2008/03/03(月) 18:25:15
>>600
自分で '%' . unpack('H2', $1) なんてのを入れてるじゃん。

sub html_escape {
  my $str = $_[0];
  $str =~ s/&(?!(?:\w+|#(?:[Xx][0-9A-Fa-f]+|[0-9]+));)/&/g;
  $str =~ s/([\x00-\x09\x0B\x0C\x0E-\x1F"'<>\x7F])/&#${ \ ord $1 };/g;
  $str;
}
sub uri_escape {
  my $str = $_[0];
  $str =~ s/%(?![0-9A-Fa-f][0-9A-Fa-f])/%25/g;
  $str =~ s/([\x00-\x20"'<>\\^`{|}\x7F-\xFF])/ sprintf '%%%02X', ord $1 /eg;
  $str;
}
$i =~ s{ \[\[ (.+?) \]\] } {
  my($url, $face) = ($1, $1);
  $url = uri_escape($url);
  $face = html_escape($face);
  qq|<a href="$url">$face</a>|;
}egx;
602デフォルトの名無しさん:2008/03/03(月) 18:40:50
>>601

すみません、
実はurl_encは誰かから教えてもらったもので丸写しなんです ^_^
でも今回のことでやっともろもろ判りました。

コード、参考になります(というかありがたくいただきます)。
ありがとうございます。
603デフォルトの名無しさん:2008/03/05(水) 05:49:41
JavaのプログラムからCGIを実行しようとしたのですが、302エラーが返されます。
何故なんでしょうか?
604デフォルトの名無しさん:2008/03/05(水) 10:21:39
>>603
302 はエラーじゃないし Perl の話でもない。
http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616#Sec10.3

CGI: Common Gateway Interface part 13
http://pc11.2ch.net/test/read.cgi/php/1126436361/
605デフォルトの名無しさん:2008/03/05(水) 10:22:39
Moved Temporarily
606デフォルトの名無しさん:2008/03/05(水) 13:38:15
>>604-605
パーミッションの設定をしたら動きました;;
お騒がせしました
607デフォルトの名無しさん:2008/03/05(水) 15:23:38
perlのuntil文っていらないと思うんですけど、皆さんどんなときに使ってますか?
608デフォルトの名無しさん:2008/03/05(水) 16:30:42
使わなきゃいいじゃん
609デフォルトの名無しさん:2008/03/05(水) 17:00:16
while (! hoge)よりも直感的に書ける場合もある気がする
とくに後置したときに英文っぽくておさまりがいいような
610デフォルトの名無しさん:2008/03/05(水) 17:23:51
while ( !( ... || ... && ... || ...) )
とかになったらさすがに使うw
611デフォルトの名無しさん:2008/03/05(水) 17:26:43
あー、あと成功したら0エラーならエラーの種類が1以上って関数が
成功したらとにかく実行って時とかに == 0 とかやらなくて済むとか。
612デフォルトの名無しさん:2008/03/05(水) 18:07:48
>>609->>611
なるほど。参考になりました。
untilも使い道はいろいろあるんですね。
613デフォルトの名無しさん:2008/03/05(水) 18:32:27
意味的に「〜になるまで続ける」って感じの時も until のがわかりやすいかも
614デフォルトの名無しさん:2008/03/05(水) 18:37:39
>>613
確かに。これは考えたことなかったな。
615デフォルトの名無しさん:2008/03/06(木) 02:27:57
XSでCライブラリを使ったモジュールを作ったが、
それが$HOME/local/libのライブラリを使っていて
CGIにLD_LIBRARY_PATHが設定できないのでモジュールで使っている.soが読めない。
$ENVとuse Envでやったが、無視されるみたいだし
共有サーバでhttpdがsuExecで動いているので.htaccessでSetEnvすることもできない。
DynaLoaderがロードする.soがリンクしているsoのパスを指定できる方法ある?
616デフォルトの名無しさん:2008/03/06(木) 12:16:11
>>615
ldの-Rオプションでバイナリに埋め込むのはどう?
617デフォルトの名無しさん:2008/03/06(木) 19:32:32
>>615
前スレの570〜580あたりで書き込みした者ですが、

DynaLoader.pmがLoadするだけならば、
use DynaLoader;
@DynaLoader::dl_library_path に、対象のPATHを放り込んでやればLoad出来ます。

その{perl_module}.soがよその(/use/lib,/lib以外の)ライブラリをロードするようにコンパイルされていたら、
多分 use した時点でエラーになります。
618デフォルトの名無しさん:2008/03/07(金) 00:29:37
>>616 >>617

>>615だけど、
Makefile.PLのLDDLFLAGSに-rpath ${HOME}/local/libを追加してコンパイルしたらできた
619デフォルトの名無しさん:2008/03/07(金) 23:14:49
SVGファイルに含まれているパスの情報を取り出したいのですが、
CPANにあるSVGモジュールってSVGを書き出すことはできるのですが、
読み込んで解析するにはイマイチなようです。

SVGファイルを解析するには、どのモジュールを使えば良いでしょうか?
XML関係は充実しているようですが、数が多くてよくわかりません。
620デフォルトの名無しさん:2008/03/07(金) 23:47:51
Windows環境でPARを使おうとしているのですがうまくいきません、
%pp -V

Perl Packager, version 0.12 (PAR version 0.90)
と出るので、PARのインストールはできていると思うのですが、
%pp test.pl
などとしても、
数秒固まった後、「parl.exe」が
問題が発生したため終了しました、というXPのよくあるエラーが出て、
Can't spawn "C:\Perl\PAR\script\parl.exe": Bad file descriptor at C:\Perl\PAR\li
b/PAR/Packer.pm line 1234.
となってうまくいきません
parl.exeが落ちる原因について調べても情報を見つけることができなかったので、
どなたか助けていただけませんでしょうか・・・
621デフォルトの名無しさん:2008/03/08(土) 01:12:00
解決しました
PAR-Packerを入れてませんでした
622デフォルトの名無しさん:2008/03/09(日) 19:55:44
Cでいうunsigned int (符号なし整数)は使えますか?
宣言とか必要ないですか?
ぐぐってもsprintfに関する項目しか出てこないので
623デフォルトの名無しさん:2008/03/09(日) 20:55:28
質問です。
Perl でバイナリファイルについて 1byte ずつファイルから読み込んだり書き込んだりするにはどうすれば良いのでしょうか?
getc で一文字読み込むのはわかります。
一文字分のデータを記録した変数を print すれば良いのだろうとも思います。
しかし確実にバイト単位の入出力であることを明示する方法などないものかと疑問に思っています。
よろしくお願いします。
624デフォルトの名無しさん:2008/03/09(日) 21:41:02
> 確実にバイト単位の入出力であることを明示する
この箇所は、つまりどういう行為を指しているんだろう。
625デフォルトの名無しさん:2008/03/09(日) 21:58:09
>>623
志村ー、逆!逆!
626623:2008/03/09(日) 22:54:21
>>624
> どういう行為を
C 言語の fputc() は int 型のデータを与えても unsigned char として書き込んでくれます。
$c = getc FH; で最初は 1byte だった $c がいつの間にか int や long の大きさになっても char として書き込むことを保障してほしいのです。
「いつの間にか」とは << や * や + などで 256 以上の値になることを想定しています。
Perl の print は何バイトでもまとめて書き込んでくれるので心配なのです。

>>625
すみません、何が逆なのかわかりませんので、お教えください。
627デフォルトの名無しさん:2008/03/09(日) 23:12:29
>>622
Perl には符号無しは特にないはず。
628623:2008/03/09(日) 23:39:28
これで 1byte のファイルが作成できました。

$c = 255;
$c <<= 1;

open OUT, ">./test.txt";
print OUT pack("C", $c);
close OUT;

__END__

>>622
pack 関数で unsigned char も指定できるようです。
たったいま知ったのですが。

お騒がせしました。レスくださった方々どうもありがとうございました。
629デフォルトの名無しさん:2008/03/10(月) 13:08:00
perlでポインタ演算する方法はありませんか?
配列の要素のリファレンスを使って別の要素にアクセスしたいのですが。
630デフォルトの名無しさん:2008/03/10(月) 13:17:27
標準ではない。

演算子オーバーロードしたラッパを提供するライブラリがあった気がするけど忘れた
631デフォルトの名無しさん:2008/03/10(月) 13:25:59
標準では無理なんですか。ライブラリ探してみます。ありがとうございます。
632マイク ◆yrBrqfF1Ew :2008/03/10(月) 16:01:39
ゴリラみたいなゴツイ身体した外国人Perlerは色々すげえわ
ありゃ勝てない
ある意味超絶ハッカー
633デフォルトの名無しさん:2008/03/10(月) 20:16:37
perlムズいです。

eval 'case $# in 0) exec /usr/bin/perl -S "$0";; *) exec /usr/bin/perl -S "$0" "$@";; esac'
  if 0;

autoscanというのを読もうと思ったら、これがわかりません。evalは中の文字列を
shellとして実行して、その結果をperlとして実行する。でいいのでしょうか?
これは何がしたいのでしょうか?

それとif 0;というのはなんなんでしょうか?

おねがいします。
634デフォルトの名無しさん:2008/03/10(月) 21:40:53
>>633
とりあえず if 0; がついているので、その文は実行されない。
おそらくデバッグ中か何かでつけっぱなしになってる。

雰囲気からすると、その実行ファイルと同名のものを環境変数PATHから再検索して、
perl で実行しているようだが、実際に書いてあるコードが間違っているので、詳細は不明。
そもそも eval の引数にあたる文字列はおそらくshellスクリプトだが、それをperlでevalしても
文法エラーにしかならんわな。
635デフォルトの名無しさん:2008/03/10(月) 22:29:40
ありがとう。
if 0;で実行されないんですね。とりあえずここはスルーしようと思います。
636デフォルトの名無しさん:2008/03/11(火) 00:19:35
637デフォルトの名無しさん:2008/03/11(火) 03:37:45
パッケージHogeに新しい関数piyoを作り@EXPORTに追加して
使おうとすると

Undefined subroutine &main:piyo called at ./unko.pl line 37
といって怒られる。Hoge::piyoとすれば動くので支障はないけど
Hoge内のほかの関数fuga,funiはfuga() funi()で動くのに
なぜなんだ〜。というわけでエロイ人教えて!
638デフォルトの名無しさん:2008/03/11(火) 06:38:24
@EXPORT_OK に入ってないとか、use subs ( or use vars ) で宣言されてないとか…
639デフォルトの名無しさん:2008/03/11(火) 07:21:23
>>636
なるほど。shellスクリプトとして実行されたとき、perlで実行しなおしてるんですえん。
640デフォルトの名無しさん:2008/03/12(水) 00:06:09
local *_ = \my $a;
これはどういう意味でしょうか?つかググれないよ
641デフォルトの名無しさん:2008/03/12(水) 00:49:19
$a = "unko";
print ${$_};
642デフォルトの名無しさん:2008/03/12(水) 02:35:18
>>640
シンボルテーブル上で$_をmy $aのエイリアスにしている。

型グロブでぐぐれ
643デフォルトの名無しさん:2008/03/12(水) 11:17:37
二次元配列を縦横変換するときの熟語みたいな書き方ってあるんかな?
644デフォルトの名無しさん:2008/03/12(水) 12:09:00
>>642
トン。いまから具ぐるよ
645デフォルトの名無しさん:2008/03/13(木) 21:34:03
ActivePerlをインストールしたんですが、
組み込み関数のソースコードをどうしたら見られますか?
646デフォルトの名無しさん:2008/03/14(金) 03:17:49
>>645
このへんからソース落として嫁
http://aspn.activestate.com/ASPN/Downloads/ActivePerl/Source
647デフォルトの名無しさん:2008/03/14(金) 13:22:28
>>646
ありがとうございます!
648デフォルトの名無しさん:2008/03/14(金) 22:49:36
巨大な整数乱数を作りたいんだけど、どうしたらいい?

use bigint;
my $n = 7581835939574005820377;
print rand $n;

とかやっても浮動小数点数になるし。
649デフォルトの名無しさん:2008/03/14(金) 23:07:13
>>648
http://search.cpan.org/search?q=Math+random&n=100

my $rand = '';
$rand .= (0..9)[rand 10] for 1..32;
print $rand, "\n";

($rand = rand(1) . rand(1)) =~ tr/.//d;
print $rand, "\n";
650デフォルトの名無しさん:2008/03/15(土) 22:11:55
>>649
せっかく複数つなげるのなら、それぞれの先頭と末尾を数桁
切り落とすと凄く乱れちゃうわ
651デフォルトの名無しさん:2008/03/18(火) 01:50:43
module-starterで作った配布単位に実行可能なスクリプトを追加するにはどのディレクトリに
入れればいいでしょうか。
652デフォルトの名無しさん:2008/03/18(火) 12:00:55
ぼくは東側に行くよ
653デフォルトの名無しさん:2008/03/18(火) 15:07:28
変な質問をしてすみません。
Perlで日本語を扱う際の注意点や対策方法は理解し、特にトラブルなく作成、動作させることはできました。が、突っ込んだ説明を求められ、確信できないところだらけで困ってしまいました。どうか助けてください。

※input.datには、Shift-JISで ソ 1文字だけ入っています。
---------------
$literal = 'ソ\';

open(FILE, "< input");
$from_file = <FILE>;
close(FILE);

print "ファイル:$from_fileンナ〜\n";
print "リテラル:$literalンナ〜\n";

if($literal eq $from_file)
{
print "match\n";
}
--------------
上記ソースで、下記の3行が正しく表示されます。シフトJISでの文字コードに0x5Cが含まれる場合、¥を後ろに付加してエスケープ対策をすればよい、ということは理解できました。が、ファイルから読み込んだ場合は、なぜそのままでよいのでしょうか?
自分なりに考えたのは、Perlの構文解析かなにかがエスケープと間違えて、実行以前にソースが正しく読まれていないのでは?と考えたのですが、出力する際の”$from_fileンナ〜”では、なぜ文字化けしないのか、等が説明できません。

リテラルでは書かない、日本語を正規表現で切り抜かない、この2点さえ守っていれば、カタカナ同士の比較は大丈夫!と言えれば、なんとか納得してもらえそうなのですが・・・。
それから、シフトJISの文字列を「,」でsplitするのは危険でしょうか?
どなたかご教授していただければ幸いです。
何卒よろしくお願いいたします。
654デフォルトの名無しさん:2008/03/18(火) 15:12:01
本題とは違うけどUnicodeでやろうよ
655デフォルトの名無しさん:2008/03/18(火) 15:20:50
Perlのせいかよwww
656デフォルトの名無しさん:2008/03/18(火) 15:28:58
>>653
おまえは一体いつの時代のperlを使ってるんだ。
encodingプラグマつかえよ。
657デフォルトの名無しさん:2008/03/18(火) 23:13:29
いやいや、今だに企業向けのレンサバなんかで5.0.3なんかのとこもあるしなw
しかし、少なくともeucで書こうぜ
658デフォルトの名無しさん:2008/03/19(水) 00:21:22
それはさすがに商売する気ないだろ
659デフォルトの名無しさん:2008/03/19(水) 00:32:01
>>658
何年も前から運用されているシステムで、変えたくても変えれないという気が。
商売する気ないのかもしれんけど。
660デフォルトの名無しさん:2008/03/19(水) 00:46:23
5.6.0出てから既に8年弱だしなあ
5.00なんぼとか言ってたのはWindows3.1とかの時代じゃなかったか。
661デフォルトの名無しさん:2008/03/19(水) 02:42:56
>>658
encoding プラグマは別の問題があるだろ。
662デフォルトの名無しさん:2008/03/19(水) 06:01:31
また、馬鹿用のテンプレがなくなってるじゃないか。
663デフォルトの名無しさん:2008/03/19(水) 08:03:21
そういや5.10にもなって未だに日本語名
フォルダの扱いが変なのは治ってないの?
664デフォルトの名無しさん:2008/03/19(水) 13:14:05
>>653
「シフトJISでの文字コードに0x5Cが含まれる場合、¥を後ろに付加してエスケープ対策をすればよい」
というのは正確ではありません。中身を展開するクォート(""など)の中にある場合に限ります。シングルクォート
など展開しない場合は、\x5cが含まれていても評価されません。ただし、その文字が末尾に来ていると、
閉じる方のクォートがエスケープされてしまうので、\を足す必要があります。
なお、

chomp($literal = <<'STR');

STR

とかすれば、\を付ける必要ありません。

ファイルハンドルから取り出したデータは、評価されずにそのまま変数に代入されます。

"リテラル:$literalンナ〜\n"; でなぜ文字化けしないかについてですが、
my $var3 = "おわり";
my $var2 = "$var3";
my $var1 = '$var2';
としたとき、
print "$var1$var2$var3";
はどう出力されるかを考えればわかります。
665デフォルトの名無しさん:2008/03/20(木) 21:03:59
イロハから勉強中です。
print文で画面に表示などは出来ましたが
ファイルの操作が全くうまくいきません。。
下記でtest.logの中身を"test"に書き換えたいのですが、うまくいかず
どこが悪いのかわかりません。
お助け願えないでしょうか?
(くだ質がないのでコチラに書き込んでいます)

$datam = "/log/test.log";
open (TE,">$datam");
print TE "test";
close TE;
666デフォルトの名無しさん:2008/03/20(木) 21:06:19
data の単数形は datum だ・・・というのは置いといて、
/log に書き込み権限はあるのかい?
667デフォルトの名無しさん:2008/03/20(木) 21:12:35
>>665
> どこが悪いのかわかりません。

どう「うまくいかず」なのかとか、エラーメッセージとかを書かないところ。
あと、open() の後ろに or die $! と書いてしまう癖をつけてもいいかも。
668665:2008/03/20(木) 21:44:28
>666
まだこんなレベルなので、winにANHTTPdいれてやってます。
ので、書き込み権限は関係ないかと思っています。。
>667
ファイルが書き変わらないのです。
あと、この4行をコメントアウトすると、他のprint文の出力結果が返ってくるのですが、
コメントアウトしないとhttp 500が返ってきます。。
669デフォルトの名無しさん:2008/03/20(木) 21:59:22
>>668
ファイルが書き換わらんですか。つーか、そこでエラー吐いて死んでそうですね。
ファイルの2〜3行め辺りに

use CGI::Carp qw(fatalsToBrowser);

と書いてみると「500 Internal Server Error」よりまともなエラーメッセージが返って来るよ。

板違いなこともわかったことだし続きはあちらでどうぞ。
くだすれPerl(超初心者用)2
http://pc11.2ch.net/test/read.cgi/php/1204488452/
670665:2008/03/21(金) 00:08:14
>669
あぁ。。初心スレあったんですね。

誘導ありがとうございます。

ご迷惑おかけしました。
671デフォルトの名無しさん:2008/03/21(金) 11:50:09
>>663
直ってないはず。dankogaiにでも聞いてみれば?
672デフォルトの名無しさん:2008/03/21(金) 18:18:55
>>665
それはともかく初心者なら、自分のディレクトリで読み書き実験
して成功してからパスを目的の場所に変更して完成させる手順を
オススメするぞ
673デフォルトの名無しさん:2008/03/22(土) 04:07:27
このスレの住人なら知っていますね、あの糞開発ツールのことを

・自分のプログラムのバグなのかコンパイラのバグなのかわからない
・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している
・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている
・糞開発ツールを批判すると「性格が悪いから糞ツールを批判するんだ」と言われる

糞だけど、政治的な理由で無理やり使わされているんですよね。
もう、あんな厨の作った糞ツールを我慢して使うのはやめましょう。

・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。
 上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。
・糞開発ツールを使わせる上司の下では働けません、と上司の上司に直訴しましょう。
・あの糞開発ツール提供会社には「おたくの糞開発ツールは話にならない」と突き放しましょう。
 バグレポートなどしてはいけません。改善要求などもってのほかです。
 あの会社はあなたたちのことをテスター/モルモットとしか思っていません。
・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」
 なんて話が出たら力強く机を叩き、会議室を出ましょう。
 あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。

糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。
674デフォルトの名無しさん:2008/03/22(土) 06:28:26
>>673
どこのコピペか知らんが、これ会社で浮いてる奴だろ。
ツールなんて所詮道具。どうでもええわ。
675デフォルトの名無しさん:2008/03/22(土) 10:01:14
糞開発ツールを批判すると
「あいつは浮いてる奴だから」
と言われる

チベット人が中国を批判した時ににてるな
676デフォルトの名無しさん:2008/03/22(土) 10:47:10
>>674
> ツールなんて所詮道具。どうでもええわ。

こういうことを言う奴は、本当のクソツールを見たことがないやつ。
677デフォルトの名無しさん:2008/03/22(土) 11:10:59
>>675
糞開発ツールの批判っていうより、
こんなにまで必至に批判してることにだよ。
これ該当ツールの枠越えて、会社や人の批判に走ってんじゃん。
678デフォルトの名無しさん:2008/03/22(土) 11:13:09
つうか、文頭が毎回”糞”で始まる人間とはあまり関わり合い持ちたくない
679デフォルトの名無しさん:2008/03/22(土) 11:18:11
みんなスルーしているのに>>678だけ全身で絡み付いて下半身を押し付けている件。
680デフォルトの名無しさん:2008/03/22(土) 12:35:43
>>677
>これ該当ツールの枠越えて、会社や人の批判に走ってんじゃん。

それが正しいと思うぞ
糞開発ツールも問題だが、それを無理矢理マンセーする会社や人は
厳しく批判されるべきだろ
681デフォルトの名無しさん:2008/03/22(土) 13:41:30
批判つっても、2chでクダまいてるだけで、職場じゃ
「ボクは空気読める子なので、胸の内にためこんで良い子ちゃんでいまーす」
ってなもんだろ?
682デフォルトの名無しさん:2008/03/22(土) 13:47:53
ばっちい空気を読んで糞なものを糞と言えない組織が一番腐ってるよな

>>675流に言えばそういう組織はチベッド弾圧も批判できないんだろうね
683デフォルトの名無しさん:2008/03/22(土) 15:50:28
>>682
何故そうなってるかも知らずに、1つのツールだけ見て
批判ばかりしてるってのも現場特有の無知さだねー。
ドラマごっこはいいが、あんなの格好だけで嘘ばっかりだよ。
684デフォルトの名無しさん:2008/03/22(土) 16:33:11
日本語読めないの?叩かれてるのは1つのツールじゃなく
そんなもんを無理矢理使い続ける人間だろ
685デフォルトの名無しさん:2008/03/22(土) 16:53:31
>>684
君は鉛筆消しゴム始め、全てベストツールで身をかためてるのか?w
686デフォルトの名無しさん:2008/03/22(土) 17:28:26
でた見当違いの比喩w
687デフォルトの名無しさん:2008/03/22(土) 18:37:14
>>686
おまえん家の近所のシューズマニアの良夫くんが、
おまえの履いてるシューズは衝撃吸収も中途半端だし
運動効率も悪いから履き替えた方がいいって言ってたぞ。
688デフォルトの名無しさん:2008/03/22(土) 19:36:47
で、Perl が糞なのか?
689デフォルトの名無しさん:2008/03/22(土) 19:54:37
盲目的に誉める奴も、盲目的に叩く奴も議論や雑談する奴もいらん。
ここは質問スレだ。
690デフォルトの名無しさん:2008/03/22(土) 19:59:46
グダグダ言いながら結局は下段の4項目を実行出来ない>>673が糞
691デフォルトの名無しさん:2008/03/22(土) 20:29:13
>>688
それは今さら聞くまでもない。糞です。
692デフォルトの名無しさん:2008/03/23(日) 11:16:37
>>691
おまえ尻からなんか出てるぞ
693デフォルトの名無しさん:2008/03/23(日) 11:31:36
Perlは糞じゃないが、Perlで再加工しないと使えないような、
結果を吐き出す糞開発ツールはいっぱいあるよねw

Perlは「尻拭きツール」だからねw
694デフォルトの名無しさん:2008/03/23(日) 11:38:49
Perlは全体として糞だけど、Perlが他より得意としているものも「かつては」あって、
それがなけなしの存在価値だった。今はそれらも追いつかれて、本当の糞になったけどね。
695デフォルトの名無しさん:2008/03/23(日) 11:51:50
>>693
尻拭きツール
ワラタ
696デフォルトの名無しさん:2008/03/23(日) 15:32:45
書きやすいから何も考えずに後で読む
のがしんどいコードを書くことも良くある。
触れ込みどおりかと。

尻拭きwwwww
697デフォルトの名無しさん:2008/03/23(日) 19:51:26
無駄にライブラリが充実してるからまだ捨てられない
クソだと思うならこのスレ来ない方がいいお(;^ω^)
698デフォルトの名無しさん:2008/03/24(月) 00:43:01
perlでオブジェクト指向プログラミングに挑戦中ですが、
引数でオブジェクトを渡す方法がわかりません。。どなたかよろしくお願いします。

 my $unko = new Unko();
 $unko->set(1,20080331,"黄色","悪臭","ゆるゆる");

 print "排泄日:" . $unko->{dropDate};

 # データベースへの登録
 my $db = new Dao();
 $db->insertUnkoTable($unko);
 (以下省略)
 
{
 package Dao;
 
  sub insertUnkoTable {

   # データ挿入用のSQL文
   my $sql = "INSERT INTO unko VALUES(?,?,?,?,?)";

   # 以下でオブジェクト参照を受け取りたいがNULLになっている模様。
   my $info = $_;

   my $hst = $hDB->prepare($sql);
   if ($hst) {
    my $ret = $hst->execute(
       $info->{dropDate},
       $info->{color},
    (以下省略)
}
699デフォルトの名無しさん:2008/03/24(月) 00:44:58
そんなのオブジェクト指向関係ない初歩の初歩だろ。perlsub嫁
700デフォルトの名無しさん:2008/03/24(月) 00:51:00
>>698
>my $info = $_;
これが変
701698:2008/03/24(月) 00:54:28
>>699-700

レスありがとうございますだ。
my $info = $_[0];
にしてもダメでした。。

リファレンスを渡す必要があるのか?とおもい、
$db->insertUnkoTable(\$unko);
$$info->{dropDate},

とかやってみたけどダメでした。
間違っているのはここではないですか?
702デフォルトの名無しさん:2008/03/24(月) 01:01:56
「ダメ」ってのをどう検証したんだ?
少なくともPerlにNULLはないが。
703デフォルトの名無しさん:2008/03/24(月) 01:08:19
>>701
それでよくね?
何か基本が全然分かってないみたいだけど…
704デフォルトの名無しさん:2008/03/24(月) 01:08:37
>>702

   my $info = $_[0];
   print "確認用:" . $info->{dropDate};
   
上記のようにして、Sub側で値を表示させてみたのですが、
Use of uninitialized value in concatenation (.) or string at C:/Projects/eclipse/unko/unko.pl line 69.
というエラーが出て、コンソールには「確認用:」しか表示されません。。。
これをもって、$infoがNULLであると判断してしまいました。

コンソールの出力↓
確認用:
705デフォルトの名無しさん:2008/03/24(月) 01:10:45
perlobj嫁
706デフォルトの名無しさん:2008/03/24(月) 01:19:56
以下のように修正したら、うまくいきました。
あれですね、この場合も最初に自己リファが渡されるのですね。わかりづら。

   my $info = $_[1];
   print "確認用:" . $info->{dropDate};

ご迷惑をおかけしますた。
707デフォルトの名無しさん:2008/03/24(月) 10:50:19
自分でそういう呼び出ししてるだろ
708デフォルトの名無しさん:2008/03/24(月) 11:16:03
/bin/mkdir -p surface/deep/deeper みたいに、一気に深いディレクトリを掘るfunction はないでしょうか。
CPAN で directory とか IO とかサーチしても、見当たらないんですが。
709デフォルトの名無しさん:2008/03/24(月) 11:46:24
>>708
File::Path
710708:2008/03/24(月) 11:53:12
早! thx
711デフォルトの名無しさん:2008/03/24(月) 22:34:44
tomcatのserver.xmlで設定が有効な記述のみを抜き出したいのですが、
なにかperlで簡潔にスクリプトを記述できないでしょうか?

コメントの始まり
$start = "<!--"
コメントの終わり
$end = "-->"

として
next ifとかで
start - end間をスキップ

という流れを考えています。

他に何か違うアプローチの仕方ってないでしょうか?
712デフォルトの名無しさん:2008/03/24(月) 22:38:32
XMLパーサで読んでコメント以外書き出すのじゃダメなの
713デフォルトの名無しさん:2008/03/24(月) 22:47:36
>>711
712の意見に一票。だが、
while(<>){
 next if /<!-/ .. /->/ ;
 print ;
}
十分に簡潔じゃね?

714デフォルトの名無しさん:2008/03/24(月) 22:52:20
>>712-713

迅速なレスthxです。
そうですね、パーサ使うのが一番手っとり早いですね。
ありがとうございました。

715デフォルトの名無しさん:2008/03/24(月) 23:01:32
>>713

追記です。
実際にやってみたところ、できました。
ホント簡潔ですね。
ありがとです。
716デフォルトの名無しさん:2008/03/24(月) 23:15:00
>>713だと<!--の前とか、-->の後ろとか消えるから注意ね。
717デフォルトの名無しさん:2008/03/25(火) 21:13:41
hoge00、hoge01、hoge02というファイルを配列に入れるとき、
@files=<hoge[0-9]{2}>;とやっても駄目なのですが、どうしてですか?
m回繰り返しの{m}は<>内では使えないのですかl?
718デフォルトの名無しさん:2008/03/25(火) 21:41:36
>>717
<...>の中は正規表現じゃなくてワイルドカードだ。
詳細は perldoc File::Glob を見ろ。
719 ◆TWARamEjuA :2008/03/25(火) 21:57:41 BE:1743528-2BP(7082)
@files=('hoge00' .. 'hoge99');
・・・かしら?
720717:2008/03/25(火) 22:14:36
>>718
でも[]はメタキャラですよね?混乱してきました

>>719
それはちょっと・・・
ifで存在確認するのは面倒です
721デフォルトの名無しさん:2008/03/25(火) 22:36:01
>>720
ワイルドカードと正規表現は別物
ワイルドカードでは{}は繰り返しではない
[0-9][0-9]にするかreaddirとかで読んで正規表現を使う
722717:2008/03/25(火) 23:55:01
>>721
そうなんですか。おとなしく[0-9][0-9]にします。
ありがとうございました。
723デフォルトの名無しさん:2008/03/26(水) 00:07:37
>>720
だから File::Glob を見ろってば。

> META CHARACTERS
>
> \ Quote the next metacharacter
> [] Character class
> {} Multiple pattern
> * Match any string of characters
> ? Match any single character
> ~ User name home directory
724デフォルトの名無しさん:2008/03/26(水) 00:33:46
>>723
あんた、優しいな。
725デフォルトの名無しさん:2008/03/26(水) 00:56:21
猫おばさんだよっ!!
726デフォルトの名無しさん:2008/03/26(水) 10:26:13
perlで2chに書き込むスクリプトを作りたくて、トーク2chを参考にやってみたんですが
POST送信する際にURLエスケープをしなければならない、と書いてあるんですがURLエスケープとは何なんですか?URLエンコードとは違うんですかね?
またクッキー情報をPOSTしなければいけないそうですがどのようにクッキー情報を取得するのでしょうか
おねがいします
727デフォルトの名無しさん:2008/03/26(水) 13:24:51
728デフォルトの名無しさん:2008/03/26(水) 13:52:07
ググって分からないから聞いてるのに(´・ω・`)
729デフォルトの名無しさん:2008/03/26(水) 14:04:26
LWPが勝手にやってくれるから気にしなくていい
730デフォルトの名無しさん:2008/03/26(水) 14:06:30
あとクッキーはcookie_jarに任せると簡単
731デフォルトの名無しさん:2008/03/26(水) 14:16:02
SOCKET でやってるんだ(´・ω・`)
732デフォルトの名無しさん:2008/03/26(水) 14:19:38
早く言えよクズめ
(1) URLエンコードと同じ
(2) http://www.studyinghttp.net/cookies.shtml
733デフォルトの名無しさん:2008/03/26(水) 14:33:54
>>732
あんた、優しいな。
734デフォルトの名無しさん:2008/03/26(水) 14:36:49
735デフォルトの名無しさん:2008/03/26(水) 14:46:21
>>732
ツンデレキター
736デフォルトの名無しさん:2008/03/26(水) 14:47:54
search.cpan.jpが復活すれば楽なのにな>検索
737デフォルトの名無しさん:2008/03/26(水) 15:19:03
my $kakiko = "書き込む";

my $ponn = "dhcp-1945.nava21.ne.jp";

my $honbun = "テスト";

$kakiko =~ s/(\W)/'%' . unpack('H2', $1)/eg;

$ponn =~ s/(\W)/'%' . unpack('H2', $1)/eg;

$honbun =~ s/(\W)/'%' . unpack('H2', $1)/eg;

select(SOCKET); $|=1; select(STDOUT);

print SOCKET "POST /test/bbs.cgi HTTP/1.0\r\n";
print SOCKET "Referer: http://pc11.2ch.net/tech/\r\n";
print SOCKET "Cookie: NAME=; MAIL=; SPID(PON)=$ponn; expires=; path=/\r\n";
print SOCKET "Host: ${host}\r\n";
print SOCKET "Content-length: 101\r\n";
print SOCKET "\r\n";
print SOCKET "bbs=tech&key=1199977642&time=&submit=$kakiko&FROM=&mail=&MESSAGE=$honbun\r\n";

これでやったら書き込み確認になる(´・ω・`)
何がだめなんだろう
738デフォルトの名無しさん:2008/03/26(水) 15:29:49
> key=1199977642

ここかよ。
739デフォルトの名無しさん:2008/03/26(水) 15:34:13
>>738
うん
740デフォルトの名無しさん:2008/03/26(水) 15:36:09
なんでLWP使わないの?
741デフォルトの名無しさん:2008/03/26(水) 15:40:37
このまえ始めたばかりで質問してたら2ちゃんに書き込むなら
SOCKETが良いって言われたんだ(´・ω・`)
742デフォルトの名無しさん:2008/03/26(水) 16:03:45
>>737
HAPは?
743デフォルトの名無しさん:2008/03/26(水) 16:07:44
LWPも通信はSOCKETだろ?
関係ないけどジャンプのSKET DANCEは面白い
744デフォルトの名無しさん:2008/03/26(水) 16:41:56
WWW::Mechanize 使いな
基本はLWPと一緒だけど、form絡みがはるかに楽になる
745デフォルトの名無しさん:2008/03/26(水) 19:23:58
Cookieの指定が滅茶苦茶過ぎる
PON、HAP、hana=mogera 入れろ
746デフォルトの名無しさん:2008/03/26(水) 19:25:56
WWW::MechanizeってCookieいけるっけ?
747デフォルトの名無しさん:2008/03/26(水) 19:51:53
いけるよ
748デフォルトの名無しさん:2008/03/26(水) 22:19:43
クッキーに、hana=mogeraがないと投稿確認が出る。
PONとHAPは当然あるものとして。
749デフォルトの名無しさん:2008/03/27(木) 09:34:23
test
750デフォルトの名無しさん:2008/03/27(木) 09:34:57
test
751デフォルトの名無しさん:2008/03/27(木) 09:35:53
test
752デフォルトの名無しさん:2008/03/27(木) 09:55:28
test
753デフォルトの名無しさん:2008/03/27(木) 10:30:40
うぜえwww
754デフォルトの名無しさん:2008/03/27(木) 10:56:48
#!/usr/bin/perl
use strict;
my $host="pc11.2ch.net";
my $pon='IPアドレス';
my $HAP='1978965';

my $addr = (gethostbyname($host))[4];
my $name = pack("S n a4 x8", 2, 80, $addr);
socket(S, 2, 1, 0);
connect(S, $name);
binmode(S);
select(S); $| = 1; select(stdout);

print S "POST /test/bbs.cgi HTTP/1.0\r\n";
print S "Referer: http://pc11.2ch.net\r\n";
print S "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) \r\n";
print S "Cookie: PON=$pon; HAP=$HAP; hana=mogera;\r\n";
print S "Content-length: 65\r\n";
print S "\r\n";
print S "bbs=tech&key=1199977642&time=1&mail=sage&MESSAGE=test&hana=mogera\r\n";

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

これを実行すると、
HTTP/1.1 302 Found
Date: Thu, 27 Mar 2008 01:40:28 GMT
Server: Apache/2.0.59 (Unix) PHP/4.4.2 mod_ssl/2.0.59 OpenSSL/0.9.7e-p1
Location: http://server.maido3.com/
......
Locationで他逝けって言われるんだけど、この後どうすればいいの?
755デフォルトの名無しさん:2008/03/27(木) 11:31:20
アホですまんです。ちょいと質問です。

○○しています..........
△△しています..........
□□しています....

ってな感じに、「...」でちょっとしたプログレスバー的なものを標準出力で表示したくて、
print "." でぽちぽち表示してってるんだけど、改行するまで画面に現れなくて困った。
とりあえずは、
1/10 done.
2/10 done.
って改行しながら表示してみたらちゃんと動いてるからロジックは大丈夫なんだけどなぁ。
ひょっとして改行入れるまで画面は更新されない?
もしくは、TeraTermで接続して動かしてるんだけど、TeraTerm側の仕様??
タスケテー
756デフォルトの名無しさん:2008/03/27(木) 11:33:53
>>755
$| = 1
とか?
757デフォルトの名無しさん:2008/03/27(木) 13:30:51
>>756
まさにそれだ!!ありがと〜(*´Д`)b
758デフォルトの名無しさん:2008/03/27(木) 22:24:36
The GUI Loft探してるんですが公式サイト潰れたため見つからなくて困ってます
759デフォルトの名無しさん:2008/03/27(木) 23:55:07
クリックで<input type="text">の入力値の内容をメールで
送信するフォームを作成しているんだけど、クリック時に一度確認画面を
はさみたいのです。そこでinput type="text"の入力値から一度通常のHTML
テキストを生成し直して確認画面を生成したのですが、その画面から次にメール送信
するときそのテキストの値をCGIが読み取るにはどうしたらいいのでしょうか?
確認画面生成時のように<form method="POST">の中の<input name>の値を
引っ張ってこれたらいいのですが。。
760デフォルトの名無しさん:2008/03/28(金) 00:16:32
hidden
761デフォルトの名無しさん:2008/03/28(金) 00:19:58
いちおう言っておくと、フォームでhiddenにしててもいくらでも変なデータ送れるからな。
762デフォルトの名無しさん:2008/03/28(金) 00:23:28
無理矢理<input type="hidden">をくっつけてやればいいのか!
ありがとうございます!
で、変なデータを送られる可能性があるという事ですかね。
まぁがんばってみます、。
763デフォルトの名無しさん:2008/03/28(金) 00:41:48
>>762
確認画面を表示するときと同じバリデーションかければ無問題。
確認済みだからと思い込んでノーチェックで通すからセキュリティホールになる。
あと、ユーザが送ってくるデータ以外の情報をhiddenに格納するのも禁止。

764デフォルトの名無しさん:2008/03/28(金) 01:18:04
>>758
Loftを知ってる漢に「ぐぐれカス!」と言える快感かな
http://www.darserman.com/Perl/Loft/
765デフォルトの名無しさん:2008/03/28(金) 21:41:17
>>764
ファイル名でもintitleでもぐぐったのに
つうか一度そのサイト行ったのに繋がらなかった 今回は落とせたけど
超d愛してる
766デフォルトの名無しさん:2008/03/28(金) 22:44:45
質問
perlというかCGIなんですが教えてください。
下記ソースでtxtファイル(csvでちゃんと読み込めてるとする)を表示しようとしてます。

#!usr/bin/perl
my $no=$ENV{"QUERY_STRING"};
print "Content-Type: text/html¥n¥n";
print "<html>¥n<head>¥n</head>¥n<body>¥n";
open (NF,"Test.txt");
while(<NF>){
$data=$_;
chomp $data;
my ($datano) = split(/,/,$data);
$hantei = "NF" .$no;
if ( $no == $hantei){print "$no<br>";}else{print "error number<br>";}
print "</body>¥n</html>";
}
close(NF);

これで$no,$hanteiと関係なしに全部のデータを表示してしまいます。
原因がわからないです。
ご教授いただければ幸いです。
767モンロー:2008/03/28(金) 22:58:44
>>766
文字列は == で比較してはいけない。eq で比較しゅる。
768デフォルトの名無しさん:2008/03/28(金) 23:02:42
>>766
条件式で、==は数値同士の判定ってのはしってるかい?
数字かどうか判断したいのなら、正規表現がいいんじゃない?
769766:2008/03/28(金) 23:14:25
>>767,768
ありがとうございます。eqで比較したら希望の$noがヒットしました。
が、ヒット以外、whileですべてのデータをelse表示します。
whileの条件がまずいのでしょうか?

あと今気づいたのですが
$hantei="NF".$no; ×
$hantei="no".$datano; ○
でした。
770766:2008/03/28(金) 23:16:53
重ね重ねすみません。
else表示は当然ですね。もう一回見直します。
ありがとうございました。
いい勉強になりました。
771デフォルトの名無しさん:2008/03/29(土) 01:48:05
そもそも何がしたいプログラムなのか説明も無いのに、
「whileの条件がまずいのでしょうか?」
と聞かれても・・・

while ・・・ 条件が真のあいだ繰り返す。これは分かってるよね?
<NF> ・・・ NF から1行読み込む。
じゃぁ、
while (<NF>) ・・・ NF から1行読み込んだ結果が真のあいだ繰り返す。
            (つまり偽になったら終了)
あと、知っておくと幸せになるかもしれないもの
break ・・・ while などのループから強制的に抜け出す
772デフォルトの名無しさん:2008/03/29(土) 06:20:59
% perldoc -f break
No documentation for perl function 'break' found
773デフォルトの名無しさん:2008/03/29(土) 10:14:40
771にぴったりのソリューション

つ sub break {last}
774デフォルトの名無しさん:2008/03/29(土) 12:57:39
>>773
あと、これもおすすめしたい。

sub continue {next}
775デフォルトの名無しさん:2008/03/29(土) 23:31:17
すまん。いろんな言語をやりすぎた。
perl だけやってれば済んじゃうキミたちがうらやましいよ。
776デフォルトの名無しさん:2008/03/29(土) 23:34:15
777デフォルトの名無しさん:2008/03/30(日) 11:16:13
>>774
continueってCoreにあるでしょ
使ったことないけど
778デフォルトの名無しさん:2008/03/30(日) 12:31:02
要するに文法も使い分けれない馬鹿と
779デフォルトの名無しさん:2008/03/30(日) 14:04:49
>>777
その continue はおすすめソリューションが必要な人には向いてないから。
use Switch も要るのかな。
780デフォルトの名無しさん:2008/03/30(日) 15:12:11
使い分けとか向いてるとかじゃなくてCore関数を上書きしてる
そのおすすめメソリューションとやらは動くのかよ
781デフォルトの名無しさん:2008/03/30(日) 15:25:35
普通に last next 書いときゃええがな
782デフォルトの名無しさん:2008/03/30(日) 16:20:41
continue使ってんの見たことねーな
783デフォルトの名無しさん:2008/03/30(日) 16:21:55
>>774
Coreにcontinueあるの知らなかったの?動かないもの教えちゃ駄目よ

use strict;
use warnings;
BEGIN {
 *CORE::GLOBAL::continue = sub { no warnings 'exiting'; next }
}
LOOP:
for my $n (0..9) {
 no strict 'subs';
 continue LOOP if $n % 2;
 print "$n\n"
}
784デフォルトの名無しさん:2008/03/30(日) 22:09:16
すまん。適当ぶっこいた。
785デフォルトの名無しさん:2008/03/31(月) 04:32:31
よろしくお願いしてもいいでしょうか?

CentOS5.0 perl-5.8.8です。
CPANでBerkeleyDBをインストールしようとすると
エラーを吐きます。

ここ読んで対処しましたが、それでもダメでした。
ttp://k2top.jpn.org/diary/?date=20031206

install Net::Server、install Net::Serverは問題なく
できました。
何がいけないんでしょうか?

スレチだったらごめんなさい。
厚かましくも、どこか誘導していただけると幸いです。
786デフォルトの名無しさん:2008/03/31(月) 05:05:18
> エラーを吐きます。

787デフォルトの名無しさん:2008/03/31(月) 06:03:01
すごいよなぁw
788デフォルトの名無しさん:2008/03/31(月) 07:49:45
どなたか、エスパーの方、いらっしゃいますか〜?
789デフォルトの名無しさん:2008/03/31(月) 08:44:36
       --、  _____ -丶
       |;;;/::::::::::::::::::::::::::::::/ |
       // ̄,'' ̄ ̄\:::::::'''',,,丿    
      /-=・=- -=・=- _|:::::::::::::\     え?      
     /ゝ  ▼   <:::::::::::::::<:::: ̄--_
   ---┼/   、   -─-\--<::::::::::::::::::::-_
   --─\   ⌒   ̄ ̄ ̄ゝ::::::::::::::::::::::::::::::::::::::::-_
       \__   ゝ/::::::::::::::::::::::::::::::;;;;;;;;;;;::::::::::::\
        ,,ノ    丿:::::::::::::::::::::::::/:::::::::::::::::::::::::::::::::::|
         >    /:::::::::::::::::|::/::::::::::::::::::::::::::::::::::::::::::::|
          >.,. /::::::::::::::::::ノ;;/:::::::::::::::::::::::::::::::::::::::::::::::::|   ____________
           /:::::::::::::::::::ノ;;;;|::::::::::::::::::::::::::::::::::::::::::::::::::::|__-||||||::::||||||::::||||\
           /::::::::::::::::::/;;;;;;;|:::::::::::::::::::::::::::::::::::::::::::::::::::::|::::|||||||:::||||||:::||||||::::::
       (!!!!!!(:::::::::::::::/ ;;;;;;;;;;;;|::::::::::::::::::::::::::::::::::::::::::::::::::::/::::|||||||:::||||||:::|||||||::ノ
       (!!!!!!!!!!!!!ノ  (lllllllllllゝ:::::::::::::::::::::::::::::::::::::::/-- ̄        ̄
                    ,,,,ヽ::::::::-ゝ:::::::::::/
                   (!!!!!!!!!!!!!!!!!!!!ノ
790デフォルトの名無しさん:2008/03/31(月) 10:46:42
>>785
>よろしくお願いしてもいいでしょうか?
はぁ?なんでてめぇごときにお願いされないといけないんだよカスが!
さっさとケツの穴とエラーメッセージの内容を出せよクズ
791デフォルトの名無しさん:2008/03/31(月) 10:55:48
>>785
あんた、掲示板で質問する能力が欠如している。
このスレだけでも最初から読んで、質問の仕方をマスター
してから出直しなさい。
792デフォルトの名無しさん:2008/03/31(月) 11:13:30
超初心者なんですが、たとえばaiueoと入力してもらったテキストをあいうえおと変換するにはどうすればいいのでしょう?
trを使うのかと思いましたがよくわかりません。
レベルが低くてすいません。
793デフォルトの名無しさん:2008/03/31(月) 11:21:25
>>792
超初心者とはなんですか?レベルが低いとはどういうことですか?
要求をもっと抽象的に書いてください.
置換対象が"aiueo"だけなのか50音全部なのかもわかりません.
794デフォルトの名無しさん:2008/03/31(月) 11:26:28
「超初心者」「レベルが低い」のどっちも謝ることじゃないんだけどな。
言い訳にもできないけど。

「エラー吐きます」と言ってエラーメッセージ書かないのがよくない。

>>793
> 要求をもっと抽象的に書いてください.
逆ですよ、逆。
795デフォルトの名無しさん:2008/03/31(月) 12:08:04
逆ワロタw
796792:2008/03/31(月) 12:31:45
>>793
表示させたいです
797デフォルトの名無しさん:2008/03/31(月) 12:34:07
>>792
もう少し分かりやすいようにガンダムで例えてください
798デフォルトの名無しさん:2008/03/31(月) 12:48:06
で?
けっきょくさ、肝心の質問には、誰一人答えられないの?
解答する知識が無いから、グダグダ言ってるだけだろ?
分からないなら分かりませんと素直に言えよ。
知らないんなら出しゃばるな。

>>792 安心しろ、オレが解答してやるから。

>aiueoと入力してもらったテキストをあいうえお

簡単簡単。こうすればいいよ。

$s = "aiueo";
$s =~ s/aiueo/あいうえお/;
print $s;

初心者を煽るバカがいるが気にすんな。
オレみたいに親切でやさしいヤツもいるからさ。
また聞きたいことがあれば遠慮せずに聞いてくれ。
799デフォルトの名無しさん:2008/03/31(月) 13:05:02
この場合、
if ($s eq 'aiueo'){$s = 'あいうえお';}
が正しいと思う
800デフォルトの名無しさん:2008/03/31(月) 14:44:43
なあ、
「もう言っている人がおれは言わなくていいか」
という考え方を身に着けようじゃないか、諸君。
801デフォルトの名無しさん:2008/03/31(月) 15:08:13
>>800
日本語でおk
802デフォルトの名無しさん:2008/03/31(月) 21:29:06
きっと正解はこれだよ
$s =~ s/a/あ/;
$s =~ s/i/い/;
$s =~ s/u/う/;
$s =~ s/e/え/;
$s =~ s/o/お/;
803デフォルトの名無しさん:2008/03/31(月) 21:43:30
せっかくだから最後にgぐらいつけてあげなよ
804デフォルトの名無しさん:2008/03/31(月) 21:43:39
$s =~ tr/aiueo/あいうえお/;

とかできればいいんだけどなあ。
マルチバイト文字め。
805デフォルトの名無しさん:2008/03/31(月) 22:47:39
できるだろ。
806デフォルトの名無しさん:2008/03/31(月) 23:46:37
過去からの声
807デフォルトの名無しさん:2008/04/01(火) 00:49:01
utf8で普通にやってる俺は勝ち組
正規表現でも文字が文字として使えて快適だぜ
808785:2008/04/01(火) 02:40:39
http://192.168.0.100/cpan.txt
こんな感じのエラーです。

809785:2008/04/01(火) 02:41:45
間違えました。
http://pigmon.ddo.jp/cpan.txt
こんな感じのエラーです。
810デフォルトの名無しさん:2008/04/01(火) 04:36:19
DBがインストールされとらん
811デフォルトの名無しさん:2008/04/01(火) 15:16:24
http://www.harukitchen.com/cgi/

こちらの2ショットチャットが、tok2やinfoseekに設置をしても
Internal500エラーで動きません。

パーミッションをreadme通りや、tok2標準にしてもだめでした。
家の環境のhttpd + activeperlの環境ではすんなり動きますので、
sendmailのパスが記述してあることが原因ではなさそうです。

何が考えられますでしょうか?
812デフォルトの名無しさん:2008/04/01(火) 15:30:11
>>811
>>1嫁あほ
813デフォルトの名無しさん:2008/04/01(火) 20:23:26
Windows 2003、IISでPerlを使用しDBに接続を行わなければ
ならないのですが、SQL ServerとOracleどちらの方がやり
やすいのでしょうか。

ご意見いただけますと幸いです。
814デフォルトの名無しさん:2008/04/01(火) 21:12:06
やりやすいって?
815デフォルトの名無しさん:2008/04/01(火) 21:15:57
幅広さと申しますか、入りやすさと申しますか、主観で
構いませんのでお聞きしたかった次第です。
816デフォルトの名無しさん:2008/04/01(火) 22:32:11
接続性の観点ならどっちもそんな変わらないんじゃない。
817デフォルトの名無しさん:2008/04/01(火) 23:20:14
ご意見有難うございました。
818デフォルトの名無しさん:2008/04/01(火) 23:33:32
OSもWebサーバーもMSなら、データベースもMS製にすればいいんじゃね?
根拠はないけどなんとなく。
819デフォルトの名無しさん:2008/04/01(火) 23:42:07
perlもms製にすべきだな
820デフォルトの名無しさん:2008/04/02(水) 00:15:29
ご意見有難うございました。
821デフォルトの名無しさん:2008/04/02(水) 04:41:46
皆さんにお聞きしたいのですが、

sub abc{ 適当な処理 }

ghq( \&abc );

などととしたときに、関数 ghq の中で引数の関数名 abc を取り出すことはできるのでしょうか?
呪文のような何かをつけるとできそうな感じがしますが、、、どうなんでしょう?
822デフォルトの名無しさん:2008/04/02(水) 09:02:31
>>821
ghq()をその方法で呼ぶ限りは無理じゃないかな。
どういう目的があってそうしたいかを書けば、適切な答えが返ってくるかもね。
823デフォルトの名無しさん:2008/04/02(水) 13:41:04
quick hackだが…
あとはdumpvar.pl参考に自分でやってくれ。

sub abc { }

ghq(\&abc);

sub ghq {
  local *stub = *{"main::"};
  while (my ($key,$value) = each(%stub)) {
    if (\&$key == \&{$_[0]}) {
      print $value,"\n";
    }
  }
}
824デフォルトの名無しさん:2008/04/02(水) 18:51:53
>>823
ほう。関数を片っ端から調べて見つける方法があるのか。
825デフォルトの名無しさん:2008/04/02(水) 22:23:42
globじゃだめ?

use strict;
use warnings;
sub test {print "test1\n"}
sub test2 {
my $glob = shift;
my $name = *{$glob}{NAME};
my $code = *{$glob}{CODE};
print "$name:$name\n";
$code->();
}

test2( *test );
826デフォルトの名無しさん:2008/04/03(木) 01:11:00
リンク先のアドレスをフルパスにする方法をおしえてください。
$url = 'http://unko.com/contents/index.html'; # カレント
$href = '../img/sumbnail.gif'; # リンク先
みたいな変数から
'http://unko.com/img/sumbnail.gif'
のような正規化されたアドレスを得る方法です。
perlモジュールとかあれば、それでも結構です。

いちおう念のために書いておきますが、じぶんで調べる努力はしました。
でも見つけきれませんでした。
827デフォルトの名無しさん:2008/04/03(木) 01:31:22
>>826

$ perl -MURI -le 'print URI->new_abs( "../img/thumbnail.gif", "http://unko.com/contents/index.html" )'
http://unko.com/img/thumbnail.gif

URI っていうモジュールの new_abs っていうメソッド。

ttp://search.cpan.org/~gaas/URI-1.35/URI.pm
828821:2008/04/03(木) 04:12:42
>>822-825 ありがとうございます。
やりたかったことは、ghqの中で関数名とその実行時出力を得ること、です。

関数名を文字列で渡すか、\&参照で渡すか、ぐらいだったので参考になりました。
glob 渡しも試してみます。
829デフォルトの名無しさん:2008/04/03(木) 19:10:26
>>827
ありがとです
830デフォルトの名無しさん:2008/04/03(木) 19:47:06
今定義されている全シンボルを表示するにはどうすればいいでしょうか?
あるソフトが、@INCの関係でうまく動かないようなので、どのファイルが
インクルードされてどのシンボルが定義されたか調べたいのです。
831デフォルトの名無しさん:2008/04/04(金) 04:18:09
標準モジュールのDumpvalueで見れないかな
832デフォルトの名無しさん:2008/04/04(金) 18:02:30
エンコードについての質問です。

utf-8 のテキストの中に、混ざっている shift-jis の文字を置換するために、

s/\xe2\x80\x94/−/g;

とします。このとき、

use utf8;

use encoding ("utf-8");

を使用していると、上記の置換ができませんので、コメントアウトしています。

このように、utf8フラグは立てないで処理してもよいのでしょうか?
他にもっといい方法があるのでしょうか?

よろしくお願いします。



833デフォルトの名無しさん:2008/04/04(金) 20:06:50
>>832
まず、なんでutf8とsjisが混ざってるの?
混ざっている状態から、確実にsjisの部分だけが取り出せるの?

あと、コード変換ならモジュール使えばいいんじゃない?

どうしても自前でやりたいというなら、Perlにバイナリだと認識させてから置換すればよいと思う。
834デフォルトの名無しさん:2008/04/04(金) 21:10:04
>>830
Devel::Symdumpってのがそれじゃないの
835832:2008/04/04(金) 21:58:01
なぜ混ざってしまうのか、よくわからないのです。

元々、sjisのhtmlファイルを、w3mというテキストブラウザで dump したテキストなんです。
それを nkf でチェックすると utf8 で通るのですが、
emacs でいじると sjis にコード変更されてしまう状態です。

今のところ、混ざっているキャラクターは一つなので、
>>832で書いたように、 use utf8; をコメントアウトして s/\xe2\x80\x94/−/g; で、
置換できています。
この方法は、Perlにバイナリと認識させていることになるでしょうか?
836デフォルトの名無しさん:2008/04/04(金) 23:18:46
>>835
> 元々、sjisのhtmlファイルを、w3mというテキストブラウザで dump したテキストなんです。

w3mでdumpする段階でコード系を制御できるし。

> それを nkf でチェックすると utf8 で通るのですが、
> emacs でいじると sjis にコード変更されてしまう状態です。

emacsでいじる段階でもコード系を制御できるし。
837832:2008/04/05(土) 01:17:40
>>836
どうもありがとうございます。

w3m[mee]でコードを指定するオプションは、euc と jis と sjis で、utf8がないのですが、
具体的にはどうやったらいいのでしょうか。
よかったら教えてください。

現状では、 ja_JP.utf8 の環境で、文字コードにはなにも指定せずに dump させると、
sjis 混じりの utf8 のテキストになります。

それとも、一旦、euc で出力させてから、utf8 に変換すればいいのかな。

emacsでいじる手間をかけないように、
w3m で dumpしたものをそのまま perlスクリプトに渡した結果のテキストが
きちんと utf8 になるのが理想なのですが。

use utf8; を設定する必要が特にないのなら、このままでいいのでしょうか。
838デフォルトの名無しさん:2008/04/05(土) 01:50:52
いいよ。好きにやっていいよ。
839デフォルトの名無しさん:2008/04/05(土) 10:44:43
>>835
文字コードを意識する処理がない(日本語を一切扱わない)なら、use utf8やuse Encodeを付けなければ、昔のようにバイナリのままになるね。
今後も同じようなことをするなら、手順を見直した方がよいと思う。
840デフォルトの名無しさん:2008/04/05(土) 10:53:31
>>837
テキストファイルの状態でほしいコードは何?
use utf8をつけてるってことは、何か日本語の処理をするためじゃないの?
あと、-dumpだと桁数の制御など余計な処理が入るみたいだけどそれは問題なし?
さらに、perlでhtmlをとるところからやった方がいいんじゃない?
use LWP::UserAgentとかで調べるべし。
use Encodeで文字コードも簡単に変換できるし、Jcodeになれてるなら、pm版もあるし。

何をしたいかを書いた方が、簡単な答えが返ってきそう。
841デフォルトの名無しさん:2008/04/05(土) 11:09:20
今度Perlを仕事で使う必要が発生したんだけど、
デバッグ等行う際に内部変数の状態を参照したいんで
Eclipse+EPIC+PadWalkerの環境を作りたい思っています。
(Windowsです。ActivePerl 5.10、5.8で試しています。)

Eclipseの最新バージョンを落として、EPICのサイトのURLを
設定して最新版をインストールまでは問題なくできました。

PadWalkerをインストールしようと思い
ppm install PadWalkerとしても、パッケージが見つからず
インストールされないので、
http://e-p-i-c.sourceforge.net/downloads/padwalker_010_Perl5_8_1.zip
のファイルをperlディレクトリのsiteに上書きして、とりあえずインストールしました。

この状態で簡単な加算プログラムを作って実行でコンソール上に
計算結果が正常に表示されることは確認。
ブレークポイント付けてデバッグモードで起動してステップ実行できることも確認。
でも、変数を表示する領域になにも表示されません。

$var1 = 1;
$var2 = 2;

$var3 = $var1 + $var2 ;

みたいなもので、$var1〜3の値をデバッグで確認したいんですが、
どうすれば表示されるようになるでしょうか。

それともEclipse+EPICで実施するのが古いやり方なのでしょうか。

※もし板違いの場合、誘導していただけると助かります。
842デフォルトの名無しさん:2008/04/05(土) 12:38:36
ActiveStateに登録し、ActivePerlをダウンロードしようとしているのですが、
ActivePerl 5.10.0.1002とActivePerl 5.8.8.822のどちらを落とせばいいのかが分かりません。
2つ並んでいるところを見るとそんなに大差は無いのでしょうか?
843デフォルトの名無しさん:2008/04/05(土) 14:51:06
なんなの最近このスレ
844デフォルトの名無しさん:2008/04/05(土) 14:54:50
>>842
バージョンが違うんだよ。
自分にあったほうを選べ
845デフォルトの名無しさん:2008/04/05(土) 15:08:44
>>842さん
自分も最近始めたばかりで先日ダウンロードしました
私もそれで悩んだんです
初心者が挫折しないで継続させれるのはどっちなんだろうか?ってね
私は5.8を選びました
今のところ快適ですよ・・・サンプルを動かすのにはねw
早く自分でバリバリ書いてみたいです
お互いガンガレ^^
846デフォルトの名無しさん:2008/04/05(土) 15:12:32
>>842
http://fleur.hio.jp/perldoc/perl/5.10.0/pod/perl5100delta.mix.html
のIncompatible Changes読んで、困るなら5.8、困らないなら5.10、わからないなら5.10
847842:2008/04/05(土) 15:24:34
いろいろと機能が増えてそうですし、よくわからないので5.10にしておきます。
ありがとうございました。
848デフォルトの名無しさん:2008/04/05(土) 18:44:51
  ↑
死亡フラグ
849デフォルトの名無しさん:2008/04/05(土) 22:19:46
int *hoge(void)
{
  int i = 5;
  return &i;
}

int main(void)
{
  int *a = hoge();
  printf("%d\n", *a);
  return 0;
}

Cでこういうのって、関数hogeのローカル変数のアドレスを返して
いるわけで、あきらかに問題ありですよね?(これだと普通に動いちゃう場合が多いけど)

perlの場合の下記のようなコードって、これも一見普通に問題なく動いてるように
見えるのですが、やはり問題ありなのでしょうか? それともperl的にはこのような
コードはOKなのでしょうか?

my $a = hoge();
print "$$a\n";

sub hoge
{
  my $i = 5; # 数値でも文字列でも何でもいいのですが
  return \$i;
}
850デフォルトの名無しさん:2008/04/05(土) 22:20:31
Perlの5.8 -> 5.10には、普通だったら6.0に上がるくらいの差異が。
851デフォルトの名無しさん:2008/04/05(土) 22:22:27
>>849
おk
852デフォルトの名無しさん:2008/04/05(土) 23:44:05
>>849
perlのアドバンテージの一つ。
853デフォルトの名無しさん:2008/04/05(土) 23:56:17
>>849
どのこC使ってるか知らんけど。M$的にはOKなんでないの?知らんけど。
M$はANSI規格を待たずに勝手に、Cに //コメント を追加しやがった無法者だから知ったこっちゃない。

Perlのそれは「レファレンス・カウンタ」でググりなさい。
854デフォルトの名無しさん:2008/04/06(日) 00:00:23
>>853=沖林正紀
855デフォルトの名無しさん:2008/04/06(日) 00:26:16
>>852
……
856デフォルトの名無しさん:2008/04/06(日) 00:30:25
今DDE関連のコールバック関数の挙動でちょっと困ってることがあって
my $buf = "\x00" x 256; # malloc
my $pointer = pack ('P', $buf);
こんな感じでポインタ取得して
DdeQuerystringにそのポインタ渡して
DDEサーバーから送られてきたXTYP_ADVDATAデータのDDEcreateStringで作ったhsz1とhsz2のタイトルを取ってるんだけど、
他のマルチスレッドで走ってるプログラムと何故か競合して
たまに落ちる事があるんだけど何が原因なんだろう??
857832:2008/04/06(日) 02:29:08
>>838-840
どうもありがとうございます。

>>839
日本語を置換する必要もありますので、
s/テスト//g;
のような処理もしています。
すると、自分には理屈がわからないのですが、
usr utf8; を付けていないのに、ちゃんと処理されているのです。
処理するテキスト、perl スクリプトとも utf8 なので、バイナリとして扱っていても大丈夫なのでしょうか

>>840
欲しいのは、utf8 コードのテキストです。
日本語の処理は上記の通り、use utf8; なしで出来ています。

「utf8コードのテキストに混ざる、sjisキャラクターをutf8コードに変換する処理」をしたいです。

教えていただいた、perl で html をとる方法も勉強してみます。

余談ですが、w3m の -dump 処理についてアレコレ試したところ、
Locale utf8 では、w3m の出力に、euc-jp や jis を指定しても、出力は utf8、 sjis の文字がのこる
Locale euc-jp では、 euc-jp を指定しても、出力は jis 、 sjis の文字はなし
でした。



858デフォルトの名無しさん:2008/04/06(日) 10:56:04
>>857
use utf8を付けなくても日本語が置換できるのは、ただのバイナリ列としての比較をしているから。
スクリプトのコードと、変数のコードが同じだからでできているだけ。
全部utf8なら、半角と同じコードが日本語で使われることもないし、日本語1文字を構成している数バイトの途中から別の文字に見えることもないから、特に問題は起きないと思う。
sjisやeuc-jpではこの条件を満たさないから、変な置換が行われることがある。

>utf8コードのテキストに混ざる、sjisキャラクターをutf8コードに変換する処理」
これをしたいのであれば、utf8を付けて、文字コードを意識する必要はある。
読みたいhtmlのソースはsjisみたいだから、Perlでソースから読んだ場合はコード変換がいる。
処理回数が少なければ、nkfやiconvを呼んで済ませるのもありかも。
ただし、「〜」などの一部文字は、コード変換の処理によってはうまく変換されないことがあるからその辺はチェックしておいた方がよい。

w3mの出力で問題ないのであれば、system()で内部から呼び出すやり方でもいいと思う。呼び出すコストが無視できるレベルであれば。環境変数を指定して呼び出せばいいんだし。
ただし、w3mが勝手に整形する部分で問題がなければ。
859デフォルトの名無しさん:2008/04/06(日) 11:45:54
>>857
動いてるは運が良いだけ。そのうち困る。
困る前に、よく勉強しておくことだな。
ユニコードとutf8の違いとか、最初はワケわからん頭がパニくるけど
分かると use utf8 すべきか、しないか、判断できるようになるよ。

シフトJIS だって、マイクロソフトのシフトJIS、IBMのシフトJIS、NECのシフトJIS など
何種類もある。
「〜」 が正しく変換できないのは、Shift_JIS と CP932 の違いが分かってないからだね。
":encoding(shift_jis)" で化けるときは ":encoding(cp932)" にするといい。
860デフォルトの名無しさん:2008/04/06(日) 19:24:40
$iが数字じゃないときにエラーを出す
っていう処理をしたいんだが

if ($i =~ /\D/){
print "error\n";
}


とすると$iが3.5などの時もエラーになってしまいます
どうすれば$iがAやあ、1aなどの時だけエラーが出るようになりますか
教えてください
861デフォルトの名無しさん:2008/04/06(日) 19:56:55
>>860
use Scalar::Util qw(looks_like_number);
if (looks_like_number($i)) {
862856:2008/04/06(日) 19:57:54
教えて教えて
863デフォルトの名無しさん:2008/04/06(日) 19:57:55
ごめん、否定か
unless (looks_like_number($i)) {
864856:2008/04/06(日) 20:00:26
ちなみにMSのサイトでDDEのAPIの仕様は熟知しました。
何が原因なのか分かりません。。。
865856:2008/04/06(日) 20:06:30
APIにmallocとポインタ渡してる事に原因があると思うんですが、
他のThreadと競合する理由が分かりません。
ポインタやmalloc渡して、同じような服愛があった人はどうやって解決しましたか??
866856:2008/04/06(日) 20:16:25
服愛ではなく不具合です。。。
867821:2008/04/06(日) 22:57:42
#!perl で testホニャララ っぽい class 作ってみたんですけど、皆さんの意見を伺いたく、、、

package TestX;
my %TR = ();
my @TC = ();
sub before_class { } sub after_class { }
sub before_test { } sub after_test { }
sub before_method { } sub after_method { }
sub set_testsuite;
my $_initialize = sub { my $self = shift; $self->set_testsuite(); $self->before_class(); };
my $_run = sub { my $self = shift;
$self->before_test();
while( $Glob = shift(@TC) ) {
$self->before_method(); $TR{ *{$Glob}{NAME} } = (*{$Glob}->()); $self->after_method(); }
$self->after_test(); };
my $_show_results = sub { my $self = shift;
my $ok = 0; my $ng = 0; print "== Test Results ==\n";
foreach my $k ( keys(%TR) ) { print "$k ---> $TR{$k}\n"; ($TR{$k}) ? ($ok++) : ($ng++); }
print "pass : $ok / fail : $ng \n"; };
sub new { my $class = shift;
my $self = {}; $self = bless $self, $class;
$self->$_initialize; return $self; }
sub add_testcase { my $self = shift;
push( @TC, shift ); }
sub run { my $self = shift;
$self->$_run; $self->$_show_results(); }
sub DESTROY { my $self = shift;
$self->after_class(); }
1;
868821:2008/04/06(日) 22:58:56
初心者なので、ココがヘンとか、普通はこうする、みたいなのをお願いします。

# test の書き方。
package TestZZZ;
use base qw(TestX);
sub abc { print "a-c\n"; return 1; }
sub bcd { print "b-d\n"; return 1; }
sub cde { print "c-e\n"; return 0; }
sub set_testsuite {
my $self = shift;
$self->add_testcase(*abc);
$self->add_testcase(*bcd);
$self->add_testcase(*cde);
}
1;

# 呼び方。
package main;
#use TestZZZ;
TestZZZ->new->run;

>>856
perl でそこまでやらせること自体が間違ってるような気が、、、
だいたい、perl で OOP とか実は間違ってる気がするしなぁ。
869デフォルトの名無しさん:2008/04/06(日) 23:51:37
すいません、今日他の人間が作ったスクリプトを眺めていて不安になったのですが、

#!/usr/bin/perl

sub testSub {
my @aa = ( 1 , 2 , 3 );
my %bb = ( aa => "aa" , bb => "bb" ) ;

return (\@aa , \%bb);
}

#Main
my @a1;
my %b1;

my ($a2 , $b2) = testSub() ;

@a1=@$a2 ;
%b1=%$b2 ;

かんたんにかくとこんな感じのスクリプトだったのですが、そもそも関数内でmyしている変数のリファレンスを呼び出し側に渡すことってありなんでしょうか?
かなり気持ちが悪い気がして直そうか悩んでいます。ご意見をお願いします。
870デフォルトの名無しさん:2008/04/07(月) 00:01:26
20レスほど前に似たようなものを眺めていたような気持ちです。
871856:2008/04/07(月) 00:05:53
誰もわからないのかよ!!!
872デフォルトの名無しさん:2008/04/07(月) 00:16:46
>>869
何の気持ちが悪いのか分からんが、どうしてもきになるなら、
return ([@aa] , {%bb});

とでもしとけ。
873デフォルトの名無しさん:2008/04/07(月) 00:35:58
>>869
> そもそも関数内でmyしている変数のリファレンスを呼び出し側に渡すことってありなんでしょうか?
全然問題ない。↓こういう(man perlobj参照)のもなおしまくる?

sub new {
my $self = {};
bless $self;
return $self;
}
874デフォルトの名無しさん:2008/04/07(月) 00:50:05
>>872
Cの自動ローカル変数は、関数を抜けたらいつ破壊されるかわからないので、ローカル変数へのポインタを返しちゃいかん

っていう事実との対比で気持ち悪いんじゃね?
875デフォルトの名無しさん:2008/04/07(月) 02:03:49
>>874
int *hoge(int v) {
  int *p;
  p = malloc(sizeof(int));
  *p = v;
  return p;
}
みたいなもんだと思えばおk。
実際、perlの中ではそんな感じで動いてるわけだし。
876デフォルトの名無しさん:2008/04/07(月) 03:32:43
>>869
> かなり気持ちが悪い気がして直そうか悩んでいます。ご意見をお願いします。

なあ、その気持ち悪さは、はじめてバイクに乗った時にしばしば感じる人がいるという、
「何これ! ペダル押してないのに加速してる!!」という気持ち悪さと同じだぞ。
877デフォルトの名無しさん:2008/04/07(月) 06:38:13
>>876
オレは車乗るより前に単車乗ったから、その気持ちわからん。
でも、はじめてオートマ車乗った時は「なにこれ、クラッチ切らんでギアチェンジしてる!」っとは思った。
878デフォルトの名無しさん:2008/04/07(月) 07:43:32
>874
俺、未だに気持ち悪い(笑)
879デフォルトの名無しさん:2008/04/07(月) 07:52:50
>>860
こんなのは?

if ($i !~ /^\d+$/){
880デフォルトの名無しさん:2008/04/07(月) 09:02:03
>>879

>>860
> とすると$iが3.5などの時もエラーになってしまいます

の意味がわかってないのか?
881デフォルトの名無しさん:2008/04/07(月) 13:20:54
substr("BCD",0,0)="A";
ってやると"ABCD"が返るみたいですけどエラーでる…。
なにか分かる人いますか?

Software error:
Can't modify constant item in scalar assignment at C:\index.cgi line 36, near ""A";"
Execution of C:\index.cgi aborted due to compilation errors.

AN HTTP Daemon v1.42pを使ってActivePerl 5.10.0 Build 1002を入れた環境でやってます。
882デフォルトの名無しさん:2008/04/07(月) 13:27:34
Can't modify constant item in scalar assignment ってちゃんと教えてくれてるじゃないか
883デフォルトの名無しさん:2008/04/07(月) 13:29:58
エキサイト翻訳したら
「スカラの課題で一定の項目を変更することができません。」
って出たけど、何が原因なのかさっぱり…。
もうすこし調べてきます!
884デフォルトの名無しさん:2008/04/07(月) 13:35:09
「substr("BCD",0,0)」が返す定数に「A」を代入しようとしている。
'X' = 'A'
とかしているのと同じ。
885デフォルトの名無しさん:2008/04/07(月) 13:50:28
>>884
いあ、オレも変なことしてるなとは思ってたんだけど
http://cocohome.hp.infoseek.co.jp/perl_ref/substr.html
このサイトとか他サイトでできるできるって書いてあるから
やってんだけど、やっぱエラー起こるんよ。
886デフォルトの名無しさん:2008/04/07(月) 13:51:47
あれ?突然できるようになった…??
打ち間違えてたのかな??
887デフォルトの名無しさん:2008/04/07(月) 13:52:19
$s = "BCD";
substr($s, 0, 0) = "A";
これならちゃんと動くよ
888デフォルトの名無しさん:2008/04/07(月) 13:53:04
あ、アホやった。
変数渡さないとダメなのか!戻り値がそうなるのかと勘違いしました。
失礼しました。
889デフォルトの名無しさん:2008/04/07(月) 13:57:13
いや、この場合、perl側の紛らわしさがアホだろう。
890デフォルトの名無しさん:2008/04/07(月) 14:07:45
例え動こうが変なコードかくな
891デフォルトの名無しさん:2008/04/07(月) 15:03:03
>>889
> いや、この場合、perl側の紛らわしさがアホだろう。

今回のケースは、>>881の心の方が2000万倍は異常。
892デフォルトの名無しさん:2008/04/07(月) 18:55:07
>>880
ごめんよ。わかってなかった。
893832:2008/04/07(月) 21:44:59
>>858-859
どうもありがとうございました。

use utf8; なしで日本語が置換できる仕組みを理解することができました。

w3m出力を nkf で utf8 に変換しても残った sjis 文字なので、
sjis のままの html を直接、処理する方が、汎用性のある方法なのですね。

system() や、コードについてももっと勉強したいと思います。
ありがとうございました。
894デフォルトの名無しさん:2008/04/07(月) 23:35:43
perlでコード補完付きでApacheと連携可能なIDEって無いですか?
EPIC入れたのだけど、コード補完できない上に挙動不安定。
かつ、UTF-8で使用しようとするとEclipseの文字コードを変えてやる必要があり、
変更したら既存のjavaプロジェクトがメチャクチャになったので、勘弁。
895デフォルトの名無しさん:2008/04/08(火) 02:28:37
IDEじゃないけどEmacsかVIM使っておけば間違いない
というか他に思いつかない
足りない機能は自分で書く
896デフォルトの名無しさん:2008/04/08(火) 11:06:22
Apacheと連携可能、っていうところがよくわからない。
897デフォルトの名無しさん:2008/04/08(火) 16:19:09
>>861
遅れてすいませんがありがとうございました
898デフォルトの名無しさん:2008/04/08(火) 23:46:15
[index.cgi]-----------

#! /usr/bin/perl
print "Content-type: text/html\n\n";

print require hoge.pm;
print require hoge.pm;

[hoge.pm]-------------

return "hoge";

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

ってやったときに、index.cgiの2回目のrequireが
重複読み込みとみなされて"hoge"が返ってこなくて困ってます。

なにかいい方法ありますか?
899デフォルトの名無しさん:2008/04/09(水) 01:18:02
何がしたいんだ
900デフォルトの名無しさん:2008/04/09(水) 01:35:29
ムチャクチャしよんな
901デフォルトの名無しさん:2008/04/09(水) 02:15:18
やっぱムチャすか…。
外部のplファイルに関数とか書いて
その関数の戻り値をprintしたいんだけども…
902デフォルトの名無しさん:2008/04/09(水) 02:18:14
あ、使いたい関数を寸前でreqireすればいいだけか
903デフォルトの名無しさん:2008/04/09(水) 02:25:40
でけたー!
みんなありがとん(チュッ
904デフォルトの名無しさん:2008/04/09(水) 02:29:55
……
905デフォルトの名無しさん:2008/04/09(水) 02:34:32
・w・
906デフォルトの名無しさん:2008/04/09(水) 02:36:12
イイヨー、イイヨー、
907デフォルトの名無しさん:2008/04/09(水) 19:14:29
ん?いま、何か通った?
気のせいだよね。
908デフォルトの名無しさん:2008/04/09(水) 19:25:16
     |┃三        / ̄\
     |┃         |     |
     |┃          \_/
 ガラッ. |┃            |
     |┃  ノ//   ./ ̄ ̄ ̄ \
     |┃三    /  ::\:::/:::: \
     |┃     /  <●>::::::<●>  \   
     |┃     |    (__人__)     |  
     |┃三   \    ` ⌒´    /
     |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
909デフォルトの名無しさん:2008/04/09(水) 19:48:45
910デフォルトの名無しさん:2008/04/09(水) 22:44:39
>908
お前は呼んでねぇ!
911デフォルトの名無しさん:2008/04/10(木) 00:06:44
処理の途中でメモ帳を開きたいのですが
for($i=0;$i<100;$i++){
if($i==50){system('C:\WINDOWS\system32\notepad.exe');}
print "$i\n";
}
これだとメモ帳を開いた時点で止まってしまいメモ帳を閉じるまで処理を続けてくれません
これをメモ帳を開いたまま処理を継続するにはどうすればいいんですか?
912デフォルトの名無しさん:2008/04/10(木) 00:15:45
>>911
use Win32::FileOp qw(ShellExecute);

for(my $i=0; $i<100; $i++){
if ($ i== 50){ ShellExecute('open', 'notepad.exe'); }
print "$i\n";
}
913デフォルトの名無しさん:2008/04/10(木) 00:16:24 BE:212256746-DIA(100004)
普通にstartコマンド使えと
914デフォルトの名無しさん:2008/04/13(日) 13:43:54
my $counter = 123;
foreach (split(//, $counter)) {
print qq|<img src="$_.gif">|;
}


このコードの中の
qq|<img src="$_.gif">|;
はどういう意味でしょうか?

qq|...| がわかりません。ググッたところqqは"のことらしいのですが。
915デフォルトの名無しさん:2008/04/13(日) 14:06:06
クォート風演算子
916デフォルトの名無しさん:2008/04/13(日) 14:07:34
q は quote の q、 qq は 2つだから dobule-quote

q, qq のミソは、// として任意の記号を使えること。(括弧の類は開閉対応が必要)
中身で使われていない記号を指定すればエスケープの手間が省けます。
917デフォルトの名無しさん:2008/04/13(日) 14:09:35
ああ、分かりづらいな。例を1つ。
q{ほげ} ---> 'ほげ'
qq/げほほ/ ---> "げほほ"
918デフォルトの名無しさん:2008/04/13(日) 14:20:47
>>915
>>916
>>917
レスありがとうございます。

>>(括弧の類は開閉対応が必要)
ここでの括弧は < と > のことでしょうか?

また、
>>qq/げほほ/ ---> "げほほ"
をあてはめて考えると
qq|<img src="$_.gif">| には //が出てこないのですが、
どう考えたらよいでしょうか?

結果は"<img src=\"$_.gif\">"となるようですが、
ピンときません。
919デフォルトの名無しさん:2008/04/13(日) 14:22:49
横からスマソ
{}の中にqqがあってその後ろに||が付いているコード貰ったんだけど
{プリント ファイルハンドル qq|プリントしたい文字列|}
qqの外側または内側にを{}や//や||を使い分け方がよくわかんない
{}最強
qq2番手
||3番手
//4番手
って順に内側で使うものデソカ?
920918:2008/04/13(日) 14:31:08
ググりました。
/はデリミタですね。そして、デリミタには | や ( や { や # などが使えるということ。
要は、デリミタと一致しない文字だけで中身を構成すればエスケープの必要なし
ということと理解しました。
921 ◆TWARamEjuA :2008/04/13(日) 14:33:52
ただし、
・カッコの類は閉じること。qq(で始まれば)で終わらせる。
・#で囲う場合には、直後にスペースを入れないこと。(コメントと解釈される)

ってところかな?
要は、都合の良いのをうまく使い分ければよいかと♪
922デフォルトの名無しさん:2008/04/13(日) 14:35:13
919です
>>920さん
私も参考になったよ
ありがとです^^
923918:2008/04/13(日) 14:54:53
>>921
なるほど。
#はイマイチですね。
なるべく、/ ( { | あたりで開閉することにします。
ありがとうございました。

>>922
どういたしまして。
perl始めたばかりの素人なんで。
924デフォルトの名無しさん:2008/04/13(日) 20:19:47
CGIとかだと、htmlで " ' をよく使うから
qq(
HTMLのソース
);
とかにしてる。
925デフォルトの名無しさん:2008/04/13(日) 20:21:45
改行ありならヒアドキュメントじゃあかんのか?
926デフォルトの名無しさん:2008/04/13(日) 22:20:09
!! をよく使うな。
927デフォルトの名無しさん:2008/04/14(月) 13:47:19
え!!
928デフォルトの名無しさん:2008/04/14(月) 16:50:51
質問ってわけじゃないんだけど、ちょっと気になったんで聞いてみる。

とある住所録データベースを以下のように変換したいと思い、コードを書いてみた。
○○市3条  -> ○○市三条  ○○市10条 -> ○○市十条  ○○市24条 -> ○○市二十四条

#!/usr/bin/perl
use strict;
use utf8;        #コードはutf8で記述
use Encode;

my $ptan  = qw/(\d+)条/;
my $ten   = '十'; my $jou   = '条';
binmode(STDIN,":utf8"); binmode(STDOUT,":utf8");
while(my $line=<STDIN>){
    $line =~ s/$ptan/&ch_kan_jo($1).$jou/ei; print $line ;
}
sub ch_kan_jo{
 my $num = shift();
 my $src = $num;
 if($src==0){ return() ; # Not Doing }
 elsif($src<10){ $num =~ tr/123456789/一二三四五六七八九/; }
 elsif($src<20){ $num =~ s/([1])([0-9])/$ten.&ch_kan_jo($2)/ei; }
 elsif($src>=20){ $num =~ s/([2-9])([0-9])/&ch_kan_jo($1).$ten.&ch_kan_jo($2)/ei; }
 $num =~ tr/0//d;
 return( $num );
}
(改行多すぎエラー出たんで、ちょっと見にくいかも・・)

これを実行すると、ActivePerl-5.8.8-build822だと、メモリアクセス違反(0x000000を参照)でperl.exeが落ちてしまう。
Linux(Fedora)上のperl-5.8.8-10.fc6.rpmだと期待した通りに動く。実行時間も一瞬で、メモリも少量しか使用していない。
このコードなんかマズイとこある?(再起使ってるけど、他に思いつかなかった。)
それともActivePerlのバグってことでええんかいな?
929デフォルトの名無しさん:2008/04/14(月) 19:56:36
バグなら報告したらいい
930918:2008/04/14(月) 20:22:45
質問です。

my %hash;
$hash{"hoge"}++;

のように未初期化のハッシュに対して、インクリメントすると
ハッシュには、(キー、 値) = ("hoge", 1) となっています。
未初期化のハッシュに$hash{"hoge"}++;を実行すると値が1に
なるということは元の値は0だったことになりますが、上記のとおり
明示的に0で初期化はしていません。何故0と判断されるのですか?

また、

$hash{"hoge"} = $hash{"hoge"} + 1;

とすると未初期化の値を使用していると言われます。
これと、先の$hash{"hoge"}++;の違いはなんでしょうか?
931デフォルトの名無しさん:2008/04/14(月) 20:31:24
>>930
つperldoc perlop

undef は常に数値として扱われ、特にインクリメントされる前には 0 に変換されます
(従って、undef のポストインクリメント値は undef ではなく 0 になります)。
932デフォルトの名無しさん:2008/04/14(月) 21:10:12
>>931
そこだけ引用すると誤解されそうだ。

>>930
未定義値 (undef) を数値コンテキストで評価すると 0 となる。

++ 演算子には 'aa' → 'ab' のように A-Z の範囲でインクリメントする
機能もあるが、undef に対して使った場合は常に数値として評価する為、
ポストインクリメントの場合はまず undef を数値として評価 = 0 を返し、
その後オペランドを +1 する。

故に、
my %hash;
print $hash{'foo'}++, "\n"; # 0
print $hash{'foo'}, "\n"; # 1
print $hash{'bar'} + 1, "\n"; # 1;
933918:2008/04/14(月) 21:37:10
>>931
ありがとうございます。
教えていただいたdocにのってました。
934918:2008/04/14(月) 21:45:21
>>932
print $hash{'bar'} + 1, "\n"; # 1;
については未初期化の値を使用していると言われますが
確かに1が返っていました。ありがとうございました。

@ハッシュのキーが存在しない場合はundefが返る
Aundefは数値コンテキストで評価されると0になる

※++、--は文字列コンテキストでも使用できる。(必要になったら調べます。)
935デフォルトの名無しさん:2008/04/14(月) 21:55:30
perlをWindowsで使っているんですが、PPMで
WWW::Myspaceというモジュールが見つかりません。
これってやっぱり、ActivePerlだからですかね?
936デフォルトの名無しさん:2008/04/14(月) 22:08:43 BE:88440252-DIA(100004)
937デフォルトの名無しさん:2008/04/14(月) 23:01:29
PerlでXMLを扱ったお勧め本ってありますか?
まずはこれを読んでおけみたいな。
938デフォルトの名無しさん:2008/04/14(月) 23:03:47
Google
「activeperl ppm "WWW::Myspace"」
上から2番目ぐらい。
939デフォルトの名無しさん:2008/04/14(月) 23:04:20
>936
サンクス、今ようやくインストールできました。
デフォルト以外のレポジトリーを登録できることを知りませんでした。
940デフォルトの名無しさん:2008/04/14(月) 23:22:49
ftp://ftp.perl.org/
って落ちてる?
それとも場所変わった?

CPANで繋がらないんだが・・・
941デフォルトの名無しさん:2008/04/15(火) 11:13:49
>>785 もう解決しと思うが・・・
yum install db4-devel
でやって美奈代
942デフォルトの名無しさん:2008/04/15(火) 11:46:03
Perlってなんですか?
943デフォルトの名無しさん:2008/04/15(火) 11:59:00
ぐぐれ
944デフォルトの名無しさん:2008/04/15(火) 12:00:19
ぐぐれってなんですか?
945デフォルトの名無しさん:2008/04/15(火) 12:24:21
946デフォルトの名無しさん:2008/04/15(火) 12:55:22
百度れ
947デフォルトの名無しさん:2008/04/15(火) 14:28:05
マニュアルをピックアップしてやるなどの手取り足取りが増えるのに対応して、
マニュアルをも読まない質問者が増大する。
948デフォルトの名無しさん:2008/04/15(火) 18:11:24
百度れって初めて聞いたがググってみたら結構あるんだな
949デフォルトの名無しさん:2008/04/15(火) 18:23:25
「百度れ」を百度ってみたらそれほどでもなかった
950デフォルトの名無しさん:2008/04/15(火) 19:03:12
UTF-8の文字「〜」を
Jcode::convert(\$line, 'euc', 'utf8');
とEUCに変換すると「?」になってしまいます。
(Jcode.pm 0.88と2.06)

文字化けせずに簡単に変換する方法はありますでしょうか?
951デフォルトの名無しさん:2008/04/15(火) 20:43:57
>>950 ある
952デフォルトの名無しさん:2008/04/15(火) 21:06:10
>>928
再帰+utf8文字列でのtr///(=S_do_trans_simple_utf8が呼ばれる)で落ちるみたい。
再帰前にtr///が実行されるかどうかは無関係だし、再帰前のtr///も普通に成功した。
手持ちの奴だと
○ ActivePerl 5.8.7.813
○ ActivePerl 5.8.8.816
○ ActivePerl 5.8.8.820 2007/01/23
× ActivePerl 5.8.8.822 2007/07/31
× ActivePerl 5.10.0.1001
という感じ。

use utf8;

sub foo {
&foo(0) if $_[0] == 2;
print STDERR "1\n";
tr/あ/A/; # 要utf8
print STDERR "2\n";
&foo(0) if $_[0] == 1;
}

$_='bar'; # $_ = '' にして実行時にdo_transから直にリターンさせると落ちない。
&foo(1); #
953デフォルトの名無しさん:2008/04/15(火) 22:05:40
>>950
use Unicode::Japanese;
954950:2008/04/15(火) 22:24:26
>>953
文字化けせずに変換できました。
ありがとうございますm(_ _)m
955デフォルトの名無しさん:2008/04/16(水) 10:48:52
>>950
eucじゃなくてeucjpmsで変換すれば大丈夫。
(sjisじゃなくてcp932使うのと一緒)

dankogaiはJcodeの修正してくれないみたいだしなぁ。
956928:2008/04/16(水) 20:07:49
>>952
わざわざご検証いただき、ありがとうございます。
ひょんなことからWebprog板のほうでいくつかレス頂いたのですが、
さすがにperのl内部関数のことまではわかりませんでした。

> $_='bar'; # $_ = '' にして実行時にdo_transから直にリターンさせると落ちない。
この部分ですが、変換対象($_)が未定義ないし空文字の場合には、
tr///自体が呼ばれない(呼ばれてもなにもしない)ので落ちないとゆう理解でよろしいでしょうか?
あと、再帰しない時と再帰した時で呼ばれる内部関数が異なってるとゆうことですね。

向こうにも書き込みましたが、新buildや、5.10などでfixされているとゆうことは、落ちるのが正常で
落ちないほうがなんらかの不具合が生ずる(から修正された)と考えて、
上記のようなコードを書かないようにしないといけませんね。
957デフォルトの名無しさん:2008/04/16(水) 21:22:45
初歩的な質問ですみませんが
以下のようなHTMLをはき出すcgiで
"a"の部分をxという変数にしたいんですが
cgi内ではどういう風に記述すればよいのでしょうか?

<input value="a">
958デフォルトの名無しさん:2008/04/16(水) 21:45:46
print qq(<input value="$x">);
959809:2008/04/17(木) 08:17:31
>810
db4-develのrpmが入ってないって事だったんだですね。
やっと今日理解しました。
もう少し詳しく説明してくれるとうれしかった…。
親切なんだか、不親切なんだか。
でもありがとうございました!

ところで、rpmでperlモジュールを入れた場合と、
cpanでモジュールを入れた場合と、何か違いが
出てくるんでしょうか?
960デフォルトの名無しさん:2008/04/17(木) 13:23:31
底の底が陥没しているのを見た
961デフォルトの名無しさん:2008/04/17(木) 14:23:25
>>959
rpmなら依存関係チェックしてくれるから必要なものがわかる。
rpmならyum等を使ってれば一緒にinstallしてくれる。
*-develパッケージはコンパイルするときに必要なだけなのでrpmならいらない。
rpmならコンパイルエラーを見なくて済む。

ってことで、>>959見たいにエラーがでても理解しようとしない人は
コンパイルはせずrpmでの解決したほうがいい。

そもそもCentOSやRHEL使うなら、手動でinstallは最終手段。
(開発グループいれないとgccが入らない事からも判るとおり)
962デフォルトの名無しさん:2008/04/17(木) 14:42:21
手動インストールはまた別でしょ
963809,959:2008/04/17(木) 15:04:56
>961
ありがとう。
perlは門外漢だからみなさんを頼ったわけで…。
なんか引っかかるコメントけど。。。

これからはyumでやりますわ。
要はいっしょってことね。
964デフォルトの名無しさん:2008/04/17(木) 15:13:12
おまえのレスのほうが引っかかるわwww
965デフォルトの名無しさん:2008/04/17(木) 18:23:10
>>959
お前の不親切極まりない質問の結果だ。
966デフォルトの名無しさん:2008/04/17(木) 18:56:48
こういう新人いるわw
社会の理不尽さと厳しさに順応出来ない奴。
駄目新人より使える場合が多いんだけど扱いにくい
967デフォルトの名無しさん
>>963
君のエラーメッセージの中にウィルス特有のメッセが
出てたんで教えようかとおもったけどもう教えてやらね