Perlについての質問箱 18箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/09/18(日) 02:23:25"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc8.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
http://www.perl.org/get.html
● 2005/03/17現在の最新版: 5.8.7
● 2005/03/17現在の開発版: 5.9.2
リンク集は>>2-3
過去スレは>>4-5
0002デフォルトの名無しさん
2005/09/18(日) 02:25:15Perlプログラミング講座: http://www.site-cooler.com/kwl/perl/
[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873110378/
[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.7/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: http://search.cpan.jp/
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
0003デフォルトの名無しさん
2005/09/18(日) 02:26:44CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://homepage3.nifty.com/hippo2000/
[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm
[Perl5.8Unicodeメモ]
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
http://www.namazu.org/~tsuchiya/perl/perl-5.8.html
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0004デフォルトの名無しさん
2005/09/18(日) 02:29:011 http://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 http://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/
9 http://pc5.2ch.net/test/read.cgi/tech/1079114157/
0005デフォルトの名無しさん
2005/09/18(日) 02:29:5911 http://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 http://pc5.2ch.net/test/read.cgi/tech/1094579428/
13 http://pc5.2ch.net/test/read.cgi/tech/1097851764/
14 http://pc5.2ch.net/test/read.cgi/tech/1101649274/
15 http://pc5.2ch.net/test/read.cgi/tech/1105953092/
16 http://pc8.2ch.net/test/read.cgi/tech/1111034732/
17 http://pc8.2ch.net/test/read.cgi/tech/1117870308/
18 http://pc8.2ch.net/test/read.cgi/tech/1121804136/
0006デフォルトの名無しさん
2005/09/18(日) 02:38:09$a=10;
$b=3;
$c=$a/$b;
これで答えを出すと少数が大量につくのだが、小数点以下の数字の数を指定するにはどうしたらいいんだ?
$c=3.33;
とか。intと何かを使う?
0007デフォルトの名無しさん
2005/09/18(日) 02:42:17スレタイ間違ってるけどな
>6
printf '%.2f', 10/3;
変数に入れるならsprintfで。
0008デフォルトの名無しさん
2005/09/18(日) 02:44:47乙。
次スレ20にすれば無問題。
0009デフォルトの名無しさん
2005/09/18(日) 03:09:00サンクス
00101
2005/09/18(日) 03:11:33数字消して18入れ直したらしい。
前スレのテンプレをメモ帳にコピーして編集してたから・・・
0011デフォルトの名無しさん
2005/09/18(日) 04:52:23使用すると「plugin error - [plugin名]: plugin not found」
が発生してしまいます。Commaプラグインを例にすると
初回プロセス作成時に[% USE Comma %]しているテンプレートを読み込んだ場合は
そのプロセスはその後もCommaプラグインをロードした状態を保持し続けるのですが
初回プロセス作成時に[% USE Comma %]を書いていないテンプレートを読み込んだ場合に
上記エラーが発生するようです。
エラー発生後、再度そのプロセスにアクセスするとCommaプラグインがロードされている状態になり
エラーは発生しなくなるのですが他のプラグインを読むと何故か前に読んだプラグインがアンロードされます。
どなたか同様の症状に遭遇された方はいませんでしょうか。
-環境-
fedora1
template-toolkit-2.14
httpd-2.0.51
mod_perl-1.99
perl-5.8.3
Apache::Reload使用
0012デフォルトの名無しさん
2005/09/18(日) 11:00:59何か良いページや本をご存知の方いますか?
どうやって使うんですか?と聞いて簡単に答えれるものでもないですよね?
0013デフォルトの名無しさん
2005/09/18(日) 11:07:47http://search.cpan.org/~sherzodr/CGI-Session-4.02/lib/CGI/Session.pm
001412
2005/09/18(日) 11:31:05たとえば、あるプログラムを作りそれをいろいろ使いまわす時に、サーバによってCGI::sessionが
無かったら困るのですが、どうなのでしょうか?
また、入っていなかった場合はcgiと一緒にCGI/sessionフォルダもアップをし、自分の領域からCGI::sessionを
読み込むとかは許されるのでしょうか?
>>13
ありがとうございます。がんばって読んでみます。英語苦手ですが…
0015デフォルトの名無しさん
2005/09/18(日) 13:23:24ttp://perldoc.jp/docs/modules/CGI-Session-3.11/
0016デフォルトの名無しさん
2005/09/18(日) 13:26:37キャッシュとか使ってたりする?
0017デフォルトの名無しさん
2005/09/18(日) 13:54:350018デフォルトの名無しさん
2005/09/18(日) 14:49:52古いけどな
00191
2005/09/18(日) 15:22:50/libディレクトリを作り、そこにCGI::sessionをインストール
利用するスクリプトで
use lib '/lib';
use CGI::session;
TOPに入れるのか。。。
djb並みだよなぁ♪
0021デフォルトの名無しさん
2005/09/18(日) 16:02:41CGI::Session - CGIアプリケーションにおける持続的なデータのセッション
http://perldoc.jp/docs/modules/CGI-Session-3.11/Session.pod
Tutorial - CGI::Sessionのさらに広範囲に渡って記述されたマニュアル
http://perldoc.jp/docs/modules/CGI-Session-3.11/Tutorial.pod
ご参考まで。
> また、入っていなかった場合はcgiと一緒にCGI/sessionフォルダもアップをし、
> 自分の領域からCGI::sessionを読み込むとかは許されるのでしょうか?
許すか許さないかは、そりゃ、プロバイダの考え方次第。でも、自作CGIの
使用を許しているプロバイダなら、禁止する理由はないと思うな。
やったことないから安請け合いはできないけど、たぶん自分のディレクトリに
置いても動くと思う。
002221
2005/09/18(日) 16:08:48002311
2005/09/19(月) 00:11:54TTのキャッシュでしょうか?もしそうでしたら使用しています。
デバッグの過程でキャッシュを使用しないで検証もしてみたのですが
同様の症状が発生しました。
ちなみにCommaとTruncateJpプラグインを使用して実験すると
CommaがロードされてるとTruncateJpがエラー
TruncateJpがロードされてるとCommaがエラー
という感じです。
発生状況がやや一定ではないので四苦八苦してます
0024デフォルトの名無しさん
2005/09/19(月) 01:28:48ううむ。再現できないとなんとも。
確実に解決する方法としてはstartup.plでTTのプラグインをロードするってのがあるんだけど。
そのほうが効率もいいし。それじゃ駄目?
002511
2005/09/19(月) 02:01:12それで問題ないのですが
mod_perl、perl/CGIどちらでも動くように組んでいるので
動的にロードしてくれる方が美しいかなと思いまして。
今日もハマってみて何か分かったら報告致します。
0026デフォルトの名無しさん
2005/09/19(月) 02:06:13あ、いや、
テンプレート内でUSEしておいて、
かつstartup.plに書いておけばいいっしょ。
002711
2005/09/19(月) 13:16:58今までスクリプト中でuse Template::Plugin::Comma;
ってして逃げてたので勝手に読み違えていましたorz
0028デフォルトの名無しさん
2005/09/20(火) 00:24:08SQLで取得したデータをHTMLでテーブルにして表示しているのですが、
よくフリーメールであるような各行にチェックボックスがあって、
それにチェックを入れたデータだけCSVに書き出すといったものを作りたいのですが、
ロジック的にはどういったものになるのでしょうか??チェックボックスでCGIに渡せるパラメータは
○○=on とかってなりますよね。どうやって、データを識別したらよいでしょうか???
0029デフォルトの名無しさん
2005/09/20(火) 00:50:13CGIの作り方なら、WebProg板かWeb制作板で聞いたほうがいいんじゃない?
Perlと無関係とは言わないけど、ブラウザからCGIのプログラムに送りつけられたものを
どう受け取るかというのは、CGI全般の基礎知識だしPerl以外に知っておくべきことが
先にありそうな気がする。
0030デフォルトの名無しさん
2005/09/20(火) 11:56:37マルチ
0031デフォルトの名無しさん
2005/09/20(火) 12:01:19書き込み時刻から想像するけど、>>28は、ここで言われて、WebProg板に
移動したんじゃないの? いちおう初心者スレなんで、あんまりカリカリ
しないでのんびりやりましょうや。
0032デフォルトの名無しさん
2005/09/20(火) 15:59:18perlでHTMLをテキストにパースする場合
HTML::FormatTextあたりって使わないのでしょうか?
手製でタグ削除より
1.lynxでダンプさせる
2.またはperlのテキストフォーマッタとして
HTML::FormatTextあたりが出ていました
自分も似た感じになってるのですが
ttp://homepage3.nifty.com/h_sasaki/contents/ap6xx.html
それともテキストフォーマッタ相当の機能として統合されたのかな?
PPMのアーカイブ自体
ビルド800〜にはHTML::Format〜がみあたらない
...ので600〜から落として試したら
PPMでインストールできません。
ローカルのパッケージからインストールするには
なにか特別な設定がいるのでしょうか?
ActivePerl v5.8.6 built 811ですがreadmeどうり
cdでppm install html-format.ppd
するとsearchでネットワークを探しにいき
ないといいます。800〜のパッケージにはないのですが
ローカルから入れられないのでしょうか?
lynxでダンプさせていますがperlのテキストフォーマッタ
を使えないかなと思ったのですが
パッケージがはいらないので代わりに試せないorz...
0033デフォルトの名無しさん
2005/09/20(火) 16:47:360034ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/20(火) 17:13:26HTML::FormatText に
> Formatting of HTML tables and forms is not implemented.
とあるが、それでもいいならイイんじゃね。
> 手製でタグ削除より
単純にタグを削除したいだけなら、HTML::Strip とかはどうよ。
0035デフォルトの名無しさん
2005/09/20(火) 17:38:23・Sample
my $res="";
select( $res ); #できないけど、こんなイメージ
print "↑\n";
print "攻撃力2000\n";
select(STDOUT);
print "(^_^) " x 3 ,"\n";
print $res;
−出力結果−
(^_^) (^_^) (^_^)
↑
攻撃力2000
0036デフォルトの名無しさん
2005/09/20(火) 17:47:47少なくとも、その構文では変数に入れる意味が全くない。
0037デフォルトの名無しさん
2005/09/20(火) 18:37:16少し高度になるけど、
パイプを使えばできるよ。
でも、特に理由がないなら sprintf か、
push あたりでいいのでは。
push の例:
my @res;
push @res, "↑\n";
push @res, "攻撃力2000\n";
print "(^_^) " x 3 ,"\n";
print @res;
−出力結果−
(^_^) (^_^) (^_^)
↑
攻撃力2000
0038デフォルトの名無しさん
2005/09/20(火) 19:10:39回答有り難う御座います。
Sampleが良くなかったですね。 目的は、同じ構文で出力先を
アクティブに変更したいと考えています。 sampleをもうちょいマジメに(汗)書き直すと、
-Sample-
my $res="";
if( $mode=0 ){ #標準出力
select(STDOUT);
}elsif( $mode=1 ){ # File出力
open(FILE,">> access.log");
select(FILE);
}elsif( $mode=2 ){ # 変数出力
select( $res ); #できないけど、こんなイメージ
}
&logline;
select(STDOUT); # 出力先を元に戻す
if( $mode=1 ){ close(FILE); # File出力
}elsif( $mode=2 ){ $res をゴニョゴニョ文字列処理して転用 }
exit;
sub logline{
print "xx年xx月xx日 xx時xx分アクセス";
}
0040デフォルトの名無しさん
2005/09/20(火) 19:26:300041デフォルトの名無しさん
2005/09/20(火) 19:27:39C言語なら素直にその方法取りますが、Perlは結構いろいろ
できるみたいなので、こんなのもできるかなー と思いまして。
原始的な命令を繰り返すCに馴れてると、selectでprintの振る舞いが
変わるってのも結構な驚きで、perlって高級言語だなぁ と実感。
0042デフォルトの名無しさん
2005/09/20(火) 19:35:31> >>37 さんの様に、全部配列に入れて好きに出力でもいいと思ってて、
> C言語なら素直にその方法取りますが、Perlは結構いろいろ
> できるみたいなので、こんなのもできるかなー と思いまして。
技に溺れると、あとで後悔するよ。
0043デフォルトの名無しさん
2005/09/20(火) 20:22:19class hito{
public:
void atama(){ ・・・}
}
void hanasu(hito taro){
・・・
}
main(){
hito sakaki;
hanasu(sakaki);
}
このように関数間でインスタンスを渡すことができますが、perlではどのように
すればよいのでしょうか?
$test=hito->new();
hanasu($test);
これでは失敗しました…。
004412
2005/09/20(火) 20:35:46CGI/Session.pmファイルも一緒にアップをして、
use CGI::session
で読み込んでくれました。
なんか、サーバ側で普通はインストール(?)をしなくてはい気がするのですが、できてしまいました。何でですかねf(^^;
とにかく、いろいろとありがとうございました。
0045デフォルトの名無しさん
2005/09/20(火) 22:12:27ストリームと同じ振る舞いをする文字列オブジェクトって
大抵の言語にあるじゃん。
>>35の難点といえば暗黙のグローバルな状態に依存してて
コードの局所性が低いことくらい。
0046デフォルトの名無しさん
2005/09/20(火) 22:15:02普通にできます。
失敗するコードを出さないとそのくらいしか言えない。
0048デフォルトの名無しさん
2005/09/21(水) 18:22:44例えば(1,2,3,4,5,6)というリストがあったら、
1+2-3+4-5+6という感じに凍結したいのですが。
0049デフォルトの名無しさん
2005/09/21(水) 18:38:040050デフォルトの名無しさん
2005/09/21(水) 18:47:56print join("-", map { shift(@foo)."+".shift(@foo) } (0..$#foo/2));
巨大配列だと遅い。奇数の時場合分けする必要がある。
もっと簡単にできそうだけど思いつかん。
$Out_Strings = join '', map { sprintf qq|%s%s|, $_ == 0 ? '' : $foo[$_] % 2 ? '+' : '-' , $foo[$_] } (0 .. $#foo);
print $Out_Strings;
長ったらしい、、、
0052デフォルトの名無しさん
2005/09/21(水) 19:13:23use strict;
sub njoin($\@) {
my($delims, $list) = @_;
my $r;
my $i = 0;
foreach (@$list) {
$r .= $_ . $delims->[$i];
$i = ($i + 1) % @$delims;
}
chop $r;
return $r;
}
my @l = (1, 2, 3, 4, 5, 6);
print njoin(['+', '-'], @l), "\n";
0053デフォルトの名無しさん
2005/09/21(水) 19:49:07@foo = (1..60);
$bar = join '~', @foo;
$bar =~ s/~([^~]*)~/+$1-/g;
$bar =~ s/~/+/;
print $bar;
0054ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/21(水) 20:07:58sub ejoin(&@)
{
my ($sep, $s, @n) = @_;
$s .= $sep->() . $_ foreach (@n);
return $s || '';
}
my $i = 0;
print ejoin(sub { print $i, "\n"; (++$i % 2) ? '+' : '-' }, 1 .. 6);
0055デフォルトの名無しさん
2005/09/21(水) 20:17:48my $str;
my @sign = qw( + - );
$str .= $_ . $sign[ $_ % @sign ] foreach @foo;
print $str;
は?可読性と拡張性で勝負。
0057デフォルトの名無しさん
2005/09/21(水) 20:25:02と書こうとしたらかぶってる上にchop入らねー
005855
2005/09/21(水) 20:37:00とりあえず無駄多すぎ
my @foo = (1..60);
print shift @foo;
print map { sprintf "%s%d", $_ % 2 ? '+' : '-' , $_ } @foo;
005955
2005/09/21(水) 20:40:16ラス行もこれでいいと思われ。
2個の引数にsprintfは贅沢。
0060デフォルトの名無しさん
2005/09/21(水) 20:41:43my @foo = (1..60);
($_ = join "+",@foo) =~ s/(\d)\+(\d+)\+/$1+$2-/g;
print $_;
0061デフォルトの名無しさん
2005/09/21(水) 20:44:19($_ = join "+",@foo) =~ s/\+(\d+)\+/+$1-/g;
print $_;
006255
2005/09/21(水) 21:07:04>>53を読んでその程度に縮めることは出来るとは思ったが、
join後にg置換って、場合によっては重くならないか?
#俺達TIMTOWDIの真っ最中:-)
0063デフォルトの名無しさん
2005/09/21(水) 21:19:06いいのかね?
0064デフォルトの名無しさん
2005/09/21(水) 21:20:200065デフォルトの名無しさん
2005/09/21(水) 21:27:37配列がデカくなると巨大文字列がメモリをバカ喰いして遅くなるかもね。
0066デフォルトの名無しさん
2005/09/21(水) 21:30:47置換使った奴とか、その要素自体が偶数か奇数かで+-を
切り替えてる奴は使えなくなるよな。
たとえば @foo = qw(1 a -5 +5 xyz) みたいな。
0067デフォルトの名無しさん
2005/09/21(水) 21:31:31そういうときはベンチですよ
0068デフォルトの名無しさん
2005/09/21(水) 21:45:01TMTOWTDI ですよ。
@hoge = (1 .. 60);
$flag = !$flag and $_ .= '+' or $_ .= '-' for @hoge;
print substr(join('', @hoge), 0, -1);
006968
2005/09/21(水) 21:47:00$_ .= $flag = !$flag ? '+' : '-' for @hoge;
007068
2005/09/21(水) 21:47:550071デフォルトの名無しさん
2005/09/21(水) 22:09:29@foo = (1..60);
@sep = qw[+ -];
$bar = join '$sep[$count++%@sep]', @foo;
eval qq[print "$bar"];
0072デフォルトの名無しさん
2005/09/21(水) 22:33:36chop $str;
これでよくないか
0073デフォルトの名無しさん
2005/09/21(水) 22:53:060074デフォルトの名無しさん
2005/09/21(水) 23:34:000075デフォルトの名無しさん
2005/09/22(木) 00:06:16配列でかくて、セパレータ長ければ分かるけど。
1..60で、reallocは10回も無いのでは。
0076デフォルトの名無しさん
2005/09/22(木) 00:44:19以下の感じでソケットでwebページ情報とってきてるんですけど、
もし、取得に失敗してタイムアウトした際に
もう一度とってくるのってどうやって書けばいいのでしょうか?
どうぞお願いしまする
$client_socket = new IO::Socket::INET (
PeerAddr => $host,
PeerPort => 'http',
Proto => 'tcp',
TimeOut => '1'
);
unless ($client_socket){
print "Socket Error:$!\n";
}
0077デフォルトの名無しさん
2005/09/22(木) 01:19:230078デフォルトの名無しさん
2005/09/22(木) 01:21:05do {
...
} while ($@ =~ m/Timeout/i);
0079デフォルトの名無しさん
2005/09/22(木) 04:47:32Perlってプログラム中にそのまんま漢字とか平仮名とか入れて平気でつか?
多分無理だと思うんでつけど、そういう場合ってどうすればいいでつか?
0080デフォルトの名無しさん
2005/09/22(木) 04:52:01平気でつ
0081デフォルトの名無しさん
2005/09/22(木) 05:06:31ありがとうございまつ
0082デフォルトの名無しさん
2005/09/22(木) 05:43:290083デフォルトの名無しさん
2005/09/22(木) 13:57:48としてデータ構造を作成した場合に
$listが指している要素数を知るにはどうしたらいいんでしょうか
0084デフォルトの名無しさん
2005/09/22(木) 14:06:39じゃだめ?
0086デフォルトの名無しさん
2005/09/22(木) 23:05:59$#$list + 1
0087デフォルトの名無しさん
2005/09/22(木) 23:15:580088デフォルトの名無しさん
2005/09/22(木) 23:25:40これ使って何か面白いことできないかなぁ。前々から思ってるんだけど。
package Foo;
sub new { bless, {}, Foo; }
sub foo { print "foo\n"; }
pacakge Bar;
sub bar { print "bar\n"; }
package main;
my $obj = new Foo(); # Fooインスタンス作成
$obj->foo(); # --> "foo" と表示
bless $obj, Bar; # Barにクラスチェンジ
$obj->bar(); # --> "bar" と表示
$obj->foo(); # --> エラー : Can't locate object method "foo"...
0089デフォルトの名無しさん
2005/09/22(木) 23:49:27Smalltalkをインストールして
become: の senders を検索しる。
0090デフォルトの名無しさん
2005/09/23(金) 00:55:55おもしろいこと=newとdeleteの整合性がとれなくなってアボン
0091デフォルトの名無しさん
2005/09/23(金) 14:54:55Net::FTPでできるの?
教えてください。
0092デフォルトの名無しさん
2005/09/23(金) 20:29:23お願いします
やりたいこと
・アップロードされた画像ファイルを縮小保存したい
条件とか
・画像は汚くてもかまいません
・jpg限定でかまいません
・鯖管じゃないのでimagemagicとかGDとかはナシで
0093デフォルトの名無しさん
2005/09/23(金) 20:50:110094デフォルトの名無しさん
2005/09/23(金) 21:40:040096デフォルトの名無しさん
2005/09/24(土) 01:56:04>>1
0097デフォルトの名無しさん
2005/09/24(土) 03:14:320098デフォルトの名無しさん
2005/09/24(土) 07:50:42スレ違い。
0099デフォルトの名無しさん
2005/09/24(土) 10:47:01$in_file = "./smple_data.txt";
open( IN_FILE, "$in_file" );
$record = <IN_FILE>;
print $record;
close( IN_FILE );
exit;
このプログラムの3行目がファイルから1行目を読み込んで
$$recordに格納し、オープンしたファイルから1レコードを読み込む。
とされているのですが、何故1レコード目だけが読み込まれるのか理解できません。
データが3レコードあり、2レコード目を出力する事は出来ないのでしょうか?
全くの初心者なのでやさしく教えてください。
0100デフォルトの名無しさん
2005/09/24(土) 11:14:57http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldata.html#Context
0101デフォルトの名無しさん
2005/09/24(土) 11:30:47現在80ページ付近を勉強してるのですが、先に進めない訳じゃないんです。
学習が進めばこの項目は出てくると思うのですが、現状でその考え方を知っておきたいんです。
0102デフォルトの名無しさん
2005/09/24(土) 12:52:16Perl の勉強を始めようかと思って、たまたまこのスレを覗いた Perl 経験ゼロの
俺が想像で教えてみる。役に立たなかったら、すみません。
たぶん、<IN_FILE> という部分で、ファイルの中身を"一行毎に"読み込むんでしょう。
なんで <IN_FILE> で一行読めるのか?は知りませんが....
まあ、とにかくそういう構文なハズ。
二行目以降が出力されないのは、繰り返し処理を使ってないからでしょうね。
単純に $record = <IN_FILE>; で一行読み込んできて、その結果を表示している
だけだから、一行目しか出ないと。
ちょっと検索してみた結果、以下の記述で全ての行を出力できそうな気がします。
% >>99のプログラムの3〜4行目を以下の記述で置き換える。
while (<IN_FILE>) {
print $_;
}
上記は「一行ごとにファイルを読み込んで、行が続く限り、繰り返し出力せよ」
というプログラムです。(たぶん合っていると思う)
ちなみに、「$_」 はデフォルト変数とかいうものらしい。
自動的に <IN_FILE> の結果が代入されるんでしょう。おそらく、ですが。
0103デフォルトの名無しさん
2005/09/24(土) 13:05:53> なんで <IN_FILE> で一行読めるのか?は知りませんが....
行入力演算子。
> 二行目以降が出力されないのは、繰り返し処理を使ってないからでしょうね
>>100
0104デフォルトの名無しさん
2005/09/24(土) 13:17:11全て出力するなら@recordでできるのですが、>>102さんが言っている、
>なんで <IN_FILE> で一行読めるのか?の所が納得できないのです。
何かしらオプションをつける事により、2行目だけを読み込んで出力も可能なのか?
それとも1行目だけしか不可能で、2行目を出力するには別のプログラムが必要なのか?
で引っ掛かってるんですよねぇ。
0105デフォルトの名無しさん
2005/09/24(土) 13:22:460106デフォルトの名無しさん
2005/09/24(土) 13:37:25$ は変数に付けるお約束の記号、ぐらいに思ってた...恥ずかしいな。
ま、千里の道も一歩から。たまたまこのスレ覗いて良かった。
0107デフォルトの名無しさん
2005/09/24(土) 14:21:25解決されたようですが、細かいことだけ書いときます。Perlには、変な本も多いので。
> open( IN_FILE, "$in_file" );
この例の場合、$in_file をダブルクォートで囲う事には、まったく意味がありません。
囲わなくてOKです(「変数展開」で調べてください)。
できれば、ファイルが開けなかった際のエラー処理を入れましょう。
open(IN_FILE, $in_file) or die "Can't open $file. : $!\n";
open(IN_FILE, $in_file) or die qq(Can't open "$file". : $!\n);
とか、お好きなように。
> exit;
明示的に終了するケースでなければ、exit() は書かない人が多いかも。
0108デフォルトの名無しさん
2005/09/24(土) 15:18:05エラーはif文で処理していました。
open(IN_FILE, $in_file) or die "Can't open $file. : $!\n";
と
open(IN_FILE, $in_file) or die qq(Can't open "$file". : $!\n);
を試した所旨く動作しないのですが・・
0109デフォルトの名無しさん
2005/09/24(土) 15:20:58あ、ごめん。$file じゃなくて $in_file でした。
エラーが起きないと追加した部分は動作しません。
試しに、$in_file を存在しないファイル名に変えてみてください。
0110デフォルトの名無しさん
2005/09/24(土) 15:37:05この方が分かり易いですね。
ありがとう、勉強になりました。
0111デフォルトの名無しさん
2005/09/24(土) 17:41:45すみませんでした。
0112デフォルトの名無しさん
2005/09/25(日) 01:35:28とかしてファイルを全て読み込んでから処理するのではなく、
指定行だけ配列に読み込むことって出来ませんでしょうか?
メモリをあまり使いたくないのですが・・・。
0113デフォルトの名無しさん
2005/09/25(日) 01:53:081行ずつ読んで希望の行が出てくるまで読み飛ばせば
メモリは食わないよ。
行が固定長であるとか、各行の先頭位置が別に保存してある
とかならいきなり希望の行の頭にseekして読めるけど。
0114デフォルトの名無しさん
2005/09/25(日) 01:56:17$i=0;
while(<IN_FILE>){
if ( $i >= 20000 && $i < 30000 ){
$line[$i - 20000] = $_;
}
elsif ( $i >= 30000 ){
last;
}
else {
$i++:
}
}
とか考えてみたんですが、これだと何万行もあるファイルの場合
結構かかりますよねぇ・・・
0115デフォルトの名無しさん
2005/09/25(日) 02:47:04「行」、つまり可変長レコードは、どこからどこまでが一つのレコード
なのか実際に読み込まないと分からない。だから何万行あろうが、
頭から一行ずつ数えていくしかない。
my $target = 5; # 希望の行
my $line;
do { $line = <IN_FILE> } until $. == $target;
0116ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/25(日) 02:55:46$. (ドット)を使え。man perlvar。
どっちにしろファイルでは頭から読んで逐一調べないと無理。改行の数を
数えないといけないから。
どうしても速く処理したいんなら、DB に突っ込むとかキャッシュを持つとか、
工夫するしかないんでないかな。
0117デフォルトの名無しさん
2005/09/25(日) 03:02:22>>115
>>116
初心者の質問に答えて下さりありがとうございます。
「メモリ消費を抑えつつ高速化」ってのは難しいですね。
行ごとののバイト数は決まってないのでseekはできませんが、
$.かぁ・・・利用してみます。
0118デフォルトの名無しさん
2005/09/25(日) 03:21:10行ごとに処理とかいっても、改行文字ごとに区切ってるだけだし。
0119デフォルトの名無しさん
2005/09/25(日) 04:15:340120デフォルトの名無しさん
2005/09/25(日) 06:05:54DB_FileのRECNO
0121デフォルトの名無しさん
2005/09/25(日) 06:55:29配一行一行の長さが不確定なら、プログラムにとっては、どう転んでも順に読んでいく
しかないから、特に実行時間の節約になるわけでもないし・・・
あ、これは普通のプレーンなテキストファイルの場合ね。
もし、今後も、同じファイルについて何度も「特定の行だけ狙ってを読む」予定があるなら、
>>120さんのレスにあるように、手元のファイルをまずDF_Fileモジュールを使って、
移し変えたら?
http://perldoc.jp/docs/modules/DB_File-1.805/DB_File.pod
> DB_RECNO
> DB_RECNOは固定長と可変長の両方のフラットなテキスト・ファイルを、 DB_HASHや
> DB_BTREEと同じキー/値の組のインターフェースを使って扱える ようにします。
> この場合、キーはレコード(行)番号になります。
0122デフォルトの名無しさん
2005/09/25(日) 07:16:34いいような。
0123デフォルトの名無しさん
2005/09/25(日) 15:41:01>「メモリ消費を抑えつつ高速化」ってのは難しいですね。
キミのレベルでは杞憂だよ。
本当にメモリ量や速度が問題になるプログラムを
書けるようになってから心配すればいい。
0124デフォルトの名無しさん
2005/09/25(日) 18:01:13又は、 >>120 のを使うかだな。
0125デフォルトの名無しさん
2005/09/25(日) 18:31:17ブサイクかも。。。@定長行
0127デフォルトの名無しさん
2005/09/26(月) 00:01:19フィールド長を固定にする訳ね。
それはそれでありだけど、フィールド長が制限される罠。
容量も余計に必要だし。
0128デフォルト名無しさん
2005/09/26(月) 17:36:12HTMLの確認画面に反映させるプログラムを作っているのだが
行き詰った・・・。
例えば、course1,course2,course3とあってcourse1とcourse3がチェックされたら
course2のところが空白で反映される。
ex.)HTML出力画面
course1
course3
こんな感じになるんだよな。
この空白を詰めて
course1
course3
みたいな風に出力する方法ないもんかね?
0129128
2005/09/26(月) 17:37:46if($FORM{'course1'} ne "on"){
print "<TR><TH ALIGN=\"right\" VALIGN=\"top\">希望コース:</TH><TD>\n";
print "$HTML{'course1'}\n";
print "<INPUT TYPE=\"hidden\" NAME=\"course1\" VALUE=\"$FORM{'course1'}\">\n";
print "</TD></TR>\n";
}
if($FORM{'course2'} ne "on"){
print "<TR><TH ALIGN=\"right\" VALIGN=\"top\"></TH><TD>\n";
print "$HTML{'course2'}\n";
print "<br>";
print "<INPUT TYPE=\"hidden\" NAME=\"course2\" VALUE=\"$FORM{'course2'}\">\n";
print "</TD></TR>\n";
}
0130デフォルトの名無しさん
2005/09/26(月) 17:47:24CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc8.2ch.net/php/ )
0132デフォルトの名無しさん
2005/09/26(月) 17:54:21Perl/TkモジュールでGUI組めるって知ったんだけども、
それって配布したらexeだけで動くの?
それとも、exeの方でもPerl+Perl/Tkが必要なのかな。
0133デフォルトの名無しさん
2005/09/26(月) 17:56:45そのexeをどうやって作るかによる。
Perlと関連モジュールをパックしてしまえばexeのみで動くし、
または単なるローダならソース及びモジュール群も必要になるだろう
GUI == exeと考えているなら大間違い
0134デフォルトの名無しさん
2005/09/26(月) 18:02:45ありがと。
例えば簡単なメモ帳みたいなもの作ったとして、
それを作る時(ビルド?)にPerlとモジュールを一緒くたにすれば
そのまま配布しても向こうで動くってことかな。
でも、そうすると結構なファイルサイズになりそうw
0135デフォルトの名無しさん
2005/09/26(月) 20:47:20下記の様にすると、InternalServerError
になるんです。
print "Content-type: text/html\n\n ";
$month = 08;
print $month;
変数($month)が 08 と 09 の場合だけです。
07.06,05...は、ちゃんと 7,6,5と
表示されるのですが。
知っている方ぜひお教えください。m(_ _)m
0136デフォルトの名無しさん
2005/09/26(月) 21:02:128進数に8も9もない板違い。
0137デフォルトの名無しさん
2005/09/26(月) 23:45:52m(_ _)m
0138デフォルトの名無しさん
2005/09/27(火) 02:03:56Win32::GUI::Loft + PARで、十数キロバイトのちょっとしたツールが
3Mくらいになってるね。
参考: ttp://namazu.org/~satoru/diary/20040717.html
0139デフォルトの名無しさん
2005/09/27(火) 03:05:15ただし動かない。
0140デフォルトの名無しさん
2005/09/27(火) 03:21:38UPXって使ってなさそうなデータを取り除く機能無かったっけ
それが一緒にパックしたモジュールなんかを取り払っちゃってるとか
0141デフォルトの名無しさん
2005/09/27(火) 06:09:31意味ねー
0142デフォルトの名無しさん
2005/09/27(火) 06:20:44取り除く?そんなことしたら、upx -d で元に戻らんじゃないか?
0143デフォルトの名無しさん
2005/09/27(火) 06:44:31PARでexe化したものをupx -> upx -dしたら元に戻りませんでした
0144デフォルトの名無しさん
2005/09/27(火) 15:06:50いつだったかFileHandle使わないものに書き換えたらexeサイズが100kb以上減った気がする
あとPARで作ったexeの拡張子zipにしたら普通に解凍できる
それでいろいろ調べられそうだけど、面倒だからやってない
0145デフォルトの名無しさん
2005/09/27(火) 18:56:41という簡単なことすらできないのはなぜ。。。
$aaa = "DSAFSA";
if ( $aaa =~ /^[A-Z]/ ) { print }
これで表示されない。。。
$aaa = "DSAFSA";
if ( $aaa =~ /^\S/ ) { print }
これでもだめ。。。
どうなってるの・゜・(ノд`)・゜・
0146デフォルトの名無しさん
2005/09/27(火) 18:58:02もう人間の性質だけど質問すると事故解決してします。。。
0147デフォルトの名無しさん
2005/09/27(火) 18:59:57printの段階でデフォルト変数に何も入って無いから
$_ = "DSAFSA";
if ( /^[A-Z]/ ) { print }
若しくは
$aaa = "DSAFSA";
if ( $aaa =~ /^[A-Z]/ ) { print $aaa }
0148デフォルトの名無しさん
2005/09/27(火) 19:42:390149デフォルトの名無しさん
2005/09/27(火) 20:02:19> 『先頭が空白以外なら表示』
> という簡単なことすらできないのはなぜ。。。
お前の知能が足りないから。
0150デフォルトの名無しさん
2005/09/27(火) 20:36:160plファイルの置いてあるディレクトリ以下の全てのテキストファイルを検索して、
divタグの属性"class"の属性値を全て列挙するプログラムを作っていただけませんか?
できれば重複無しの方がいいのですが、重複してもいいです。
無理なようなら、スクリプトの教材を紹介していただきたいです。
0151デフォルトの名無しさん
2005/09/27(火) 20:38:260Net::Telnet::Ciscoを使ってA(PC)→B(ルータ)へ
ログインした際にTerminal Typeをvt100に設定したいの
ですが何か特別な設定が必要なのでしょうか?
ご存じの方いらっしゃいましたら
よろしくお願い致します。
0152デフォルトの名無しさん
2005/09/27(火) 20:53:500型グロブを使って引数を扱おうとおもい
単純なものを書いたのですが
下のエラーがでてしまいどうしてよいかこまっています。
引数には単純なハッシュを入れる予定です。
どなたかご指導して頂けませんでしょうか。
Variable "%ABC" is not imported at Test.pm line 8.
Global symbol "%ABC" requires explicit package name at Test.pm line 8.
#!/usr/bin/perl
use strict;
sub test {
local(*ABC) = @_;
print keys(%ABC);
}
1;
0153デフォルトの名無しさん
2005/09/27(火) 21:00:150find . -type f | xargs perl -ne 'if(/<div.*?class=(.*?)[ >]/){print $1,"\n"}' | sort | uniq
厳密に"perlで"とは指定されてないからシェルスクリプトで作ってやったぜ。
perlは使ってやってるから、
お前にやる気があるなら純Perlスクリプトの参考にはなるだろ。
0154GiantLeaves ◆6fN.Sojv5w
2005/09/27(火) 21:21:040同じディレクトリにあるファイルを読み込むのならできる。
ディレクトリの再帰検索もできるのかな?
0155デフォルトの名無しさん
2005/09/27(火) 22:12:51ID:0らくだ本によれば、strict 'vars' は、「myで宣言されている」
「完全修飾されている」「輸入されている」のいずれにも該当しない
ような変数にアクセスすると、コンパイル時エラーを発生させる、
とある。%ABCは、その何れにも該当しない。
型グロブを使うのを止めて、リファレンスを使うのが最適であると
思われる。
0156デフォルトの名無しさん
2005/09/27(火) 22:59:13>>154
File::Find使えよ
0157GiantLeaves ◆6fN.Sojv5w
2005/09/27(火) 23:04:040158デフォルトの名無しさん
2005/09/27(火) 23:09:31sub test {
local(*ABC) = @_;
our %ABC; # 追加
print keys(%ABC);
}
とかじゃ駄目だった?
0159153
2005/09/27(火) 23:33:02エスケープがひどいことになるのでめどくなって投げた。
実用上はそんなに問題ねえだろ、という手抜き精神が重要ってことだ。
0160デフォルトの名無しさん
2005/09/28(水) 00:40:040161デフォルトの名無しさん
2005/09/28(水) 01:40:33sub test {
>>152
my %ABC = @_;
print keys(%ABC);
}
で、良いと思うのだが。
localで型グロブなんて何年前のソース読んで勉強してるんだ?
0162デフォルトの名無しさん
2005/09/28(水) 02:42:08active perlに標準で付いてるperlccなのですが、
ライブラリが足りないと怒られます
Note (probably harmless): No library found for oldnames.lib
Note (probably harmless): No library found for kernel32.lib
Note (probably harmless): No library found for user32.lib
Note (probably harmless): No library found for gdi32.lib
Note (probably harmless): No library found for winspool.lib
Note (probably harmless): No library found for comdlg32.lib
Note (probably harmless): No library found for advapi32.lib
Note (probably harmless): No library found for shell32.lib
Note (probably harmless): No library found for ole32.lib
Note (probably harmless): No library found for oleaut32.lib
Note (probably harmless): No library found for netapi32.lib
Note (probably harmless): No library found for uuid.lib
Note (probably harmless): No library found for ws2_32.lib
Note (probably harmless): No library found for mpr.lib
Note (probably harmless): No library found for winmm.lib
Note (probably harmless): No library found for version.lib
Note (probably harmless): No library found for odbc32.lib
Note (probably harmless): No library found for odbccp32.lib
Note (probably harmless): No library found for msvcrt.lib
これらのライブラリを入手したいのですがどうすればいいでしょうか?
0163デフォルトの名無しさん
2005/09/28(水) 04:02:23perlcc はどうせ使い物にならないから
諦めなされ。
0164デフォルトの名無しさん
2005/09/28(水) 06:32:46またお前か
0165デフォルトの名無しさん
2005/09/28(水) 08:17:28それだとhashをリストにばらしてからまた再度作るようになって
要素数が多いとオーバーヘッドが馬鹿にならんよ。お前もどういう
ソース読んで勉強してるんだ(w
0166デフォルトの名無しさん
2005/09/28(水) 08:28:18お前は自民党のタイゾーか
0167ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/28(水) 10:07:56$telnet->cmd('terminal-type vt100');
とかいう話ではなくて?
0168デフォルトの名無しさん
2005/09/28(水) 10:59:47$telnet = new Net::Telnet::Cisco(Host => "xxx.xxx.xxx.xxx")
もしくは
$telnet->login(loginName => "user")
の時点で設定したいのです。
一般的なtelnetコマンドはセッション開始時にヘッダ部に
Terminal Typeが入ってるみたいなのですが…
0169デフォルトの名無しさん
2005/09/28(水) 11:35:02付けたいのですが
2005/09/28 → 20050928 → 2005092801(後付けで番号を入れる)
何かうまい書き方ないですかね。
ご教授お願い致します。
0170ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/28(水) 11:41:26Net::Telnet の TELOPT_TTYPE で出来ない?
今手元に好き勝手できる Cisco ルータがないから試せないけど。
>>169
やりたいことが上手く伝わってこない。
my $date = '2005/09/28';
$date =~ s,/,,g;
my $result = $date . sprintf('%02d', $num);
こういう話じゃなさそうだが…。
0171デフォルトの名無しさん
2005/09/28(水) 12:05:59素直にtimeの戻り値を連結すれ。
0172デフォルトの名無しさん
2005/09/28(水) 12:08:31レスありがとうございます。
Net::Telnetのドキュメントなど色々みたのですが
いまいちTELOPT_TTYPE(@EXPORT_OK)の設定方法が
よくわからなくて…
こいつにvt100設定すればいいのかなぁ?
0173デフォルトの名無しさん
2005/09/28(水) 12:10:53ありがとうございます。
素直に連結しようかと思います。
0174デフォルトの名無しさん
2005/09/28(水) 12:11:32素直に
$seq = 1; ←連番
@t = localtime(time);
$result = sprintf("%04d%02d%02d%02d", $t[5] + 1900, $t[4] + 1, $t[3], $seq);
じゃダメなの?
0175デフォルトの名無しさん
2005/09/28(水) 12:23:19http://search.cpan.org/src/AJWOOD/Term-VT102-0.82/VT102/examples/telnet-usage.pl
こんな感じじゃね
0176デフォルトの名無しさん
2005/09/28(水) 13:32:49無事Terminal Typeの設定ができました。
レス下さったみなさん、ありがとうございましたm(_ _)m
0177デフォルトの名無しさん
2005/09/28(水) 13:57:56どうしたらいいでしょうか?
うまい置換式が思い浮かばなくて・・・
0178デフォルトの名無しさん
2005/09/28(水) 14:04:230179デフォルトの名無しさん
2005/09/28(水) 14:35:15どうもありがとうございます
0180デフォルトの名無しさん
2005/09/28(水) 15:04:57こういう嘘つきにはレスすんなよ
0181デフォルトの名無しさん
2005/09/28(水) 15:39:53半島に帰れ!!!
0182デフォルトの名無しさん
2005/09/28(水) 15:41:28>>181カエレ
0183デフォルトの名無しさん
2005/09/28(水) 16:36:28漏れもこの質問者と同じ相談なんだけど、その回答者の中で、
「クリックした時の挙動はブラウザによるので、
たとえば全てのOS、ブラウザでダウンロードをさせたいとなると
CGIで処理するしかないと思います。
CGIと言ってもPerlなら4,5行程度でできます。」
と書いてあったんだけど、このPerl4,5行を詳しい人、書いてくり。
0184デフォルトの名無しさん
2005/09/28(水) 16:58:260186ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/28(水) 17:44:19#!/usr/bin/env perl
print "Content-Type: application/octet-stream\r\n\r\n" . `cat hogehoge.pdf`;
で駄目なん?
0187GiantLeaves ◆6fN.Sojv5w
2005/09/28(水) 19:02:31div要素のclass属性の属性値を書き出すのだったら、
DOM (Document Object Model) の方がやりやすい。
JavaScriptで
document.getElementsByTagName("div");
をやって、全アイテムについて、該当する属性の属性値を書き出せばいいのだから。
ディレクトリの再帰検索を誰か解説してください。
0188ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/28(水) 20:10:50use warnings;
use HTML::Parser;
use File::Find;
my @class = ();
my $parser = HTML::Parser->new(
'api_version' => 3,
'report_tags' => [qw/div/],
'start_h' => [ sub { push(@class, $_[0]->{'class'}) if $_[0]->{'class'} }, 'attr' ],
);
my @file = ();
find({ 'wanted' => sub { -f && m/\.html$/ && push(@file, $_) }, 'no_chdir' => 1 }, @ARGV);
foreach my $file_name (@file) {
$parser->parse_file($file_name);
}
{
my %class_history = ();
foreach my $class (grep { ! $class_history{$_}++ } @class) {
print $class, "\n";
}
}
0189ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/28(水) 20:13:05$ ./find_class.pl foo/ bar/baz/
とかで。
0190デフォルトの名無しさん
2005/09/29(木) 01:11:41USBメモリに入れて持ち運ぶ方法はないですか?
0191デフォルトの名無しさん
2005/09/29(木) 01:33:100192デフォルトの名無しさん
2005/09/29(木) 01:51:23ttp://www.google.co.jp/search?hl=ja&c2coff=1&q=PAR+Perl&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
0193GiantLeaves ◆6fN.Sojv5w
2005/09/29(木) 11:43:480194GiantLeaves ◆6fN.Sojv5w
2005/09/29(木) 11:45:240195GiantLeaves ◆6fN.Sojv5w
2005/09/29(木) 11:46:080196デフォルトの名無しさん
2005/09/29(木) 13:38:530197デフォルトの名無しさん
2005/09/29(木) 14:21:16talk talk 五月蝿いし見にくいYO。
0198デフォルトの名無しさん
2005/09/29(木) 15:19:32Re:より糞
0199デフォルトの名無しさん
2005/09/29(木) 15:36:56特定のタグに囲まれたものだけを対象にかけたいと考えています。
ただ、
・対象となる文字列の点数
・置換前、置換後の文字は任意
という条件があるため、下のような状況の場合、
どうやって正規表現を組むか、悩んでいます。
<tuv> A A A </tuv>
↓AをAAに一括処理
<tuv> AA AA AA </tuv>
tuvタグで挟まれた文字列を変数に抜き出し
↓
変数に対して、A→AAの一括置換
↓
元の文字列と差し替え
という方法がベストなのでしょうか?
0200デフォルトの名無しさん
2005/09/29(木) 15:52:27s/>([^><]+)</&hoge($1)/eg;
sub hoge { my $set = shift; $set =~ s/A/AA/g; return $set; }
こんな感じ?
0201デフォルトの名無しさん
2005/09/29(木) 15:52:30みなさんお金払って使ってるんでしょうか、それともメモ帳を?
0202デフォルトの名無しさん
2005/09/29(木) 16:03:08世の中には秀丸とメモ帳しか無いとでも思っているのか?
0203デフォルトの名無しさん
2005/09/29(木) 16:09:41スレ違いなので学校で先生に同じ質問しろ。
0205デフォルトの名無しさん
2005/09/29(木) 16:18:39スレ違い。どこの学校だ? 情報リテラシに読み書きも怪しそうだが…
0207デフォルトの名無しさん
2005/09/29(木) 23:20:21スレ違いよりタチ悪いよ。
0208デフォルトの名無しさん
2005/09/29(木) 23:29:100209デフォルトの名無しさん
2005/09/29(木) 23:54:21ソースは? ひょっとして "フリー制度へのお申し込み" の事を
単に無料と呼ぶのなら、誤解の元で迷惑にしかならないが。
0210デフォルトの名無しさん
2005/09/30(金) 03:40:54どう違うんだ?
0211デフォルトの名無しさん
2005/09/30(金) 06:43:550212デフォルトの名無しさん
2005/09/30(金) 07:00:480213デフォルトの名無しさん
2005/09/30(金) 07:29:280214デフォルトの名無しさん
2005/09/30(金) 08:30:54WindowsMeでもつかえるフリーのパールってありますか??
0215デフォルトの名無しさん
2005/09/30(金) 08:50:18http://www.activestate.com/Products/ActivePerl/
#ちなみに、フリーでないPerlってあるのかな?
0216デフォルトの名無しさん
2005/09/30(金) 09:05:41あんたが貼ったリンク先
0217デフォルトの名無しさん
2005/09/30(金) 09:53:03そりゃ、サポートサービスやオマケツールに対してのライセンスだろ?
Perl本体そのものはフリーで、個人であろうと企業であろうと無償で使うのは
問題ないから、心配すんな >>214
0218デフォルトの名無しさん
2005/09/30(金) 10:04:04こういう話のときは入手するブツを単位に考えるのが自然じゃね?
0219デフォルトの名無しさん
2005/09/30(金) 12:10:48何のモジュールもuseしてなければ、perl.exeとperl5.8.x.dll?さえ
添付してれば動く。
それにバッチファイル付けて知り合いにスクリプトあげたことある。
0220デフォルトの名無しさん
2005/09/30(金) 18:45:370221デフォルトの名無しさん
2005/09/30(金) 18:49:250222デフォルトの名無しさん
2005/09/30(金) 18:51:200223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
2005/09/30(金) 21:22:57スレ違い
0225デフォルトの名無しさん
2005/10/01(土) 02:14:40助言ありがとうございます。
our
のおかげでハッシュの値は表示できました。
しかし、$ABC{'xxxx'} を表示できません....
0226デフォルトの名無しさん
2005/10/01(土) 11:50:29>定期的に、ID/PWを求められるページにログインする事はperlで出来ますかっ?!
「定期的に」という意味が不明だが、多分、
LWP::UserAgentを使えばできるんじゃないかな。
http://www.hio.jp/translation/perldoc/lib/LWP/UserAgent.html
これ見て解らないときは、Webプログラム板のスレ↓で質問したほうがいいね。
Perlコーディング初心者質問スレ Part 43
http://pc8.2ch.net/test/read.cgi/php/1123777607/l50
0227デフォルトの名無しさん
2005/10/01(土) 14:08:02>abc.3
gakjgajgeiajeiagaga
>sasa
sagageijgeigjeijaiejeiajwjojowjowewgeweeeee
>ushi.1
safakljgeijgleijelaijealijeliajelammmziej
....
のようなファイルを、abc.3という名前のファイルに
>abc.3
gakjgajgeiajeiagaga
sasaという名前のファイルに
>sasa
sagageijgeigjeijaiejeiajwjojowjowewgewe
のように、分けてそれぞれ名前をつけるにはどう書けばよいのでしょうか?
0228デフォルトの名無しさん
2005/10/01(土) 14:15:34while(<F>){
open(FH,">$1") if(m/^>(.+)/);
print FH $_;
}
0229デフォルトの名無しさん
2005/10/01(土) 15:15:11何がしたくてどういう法則で名前付けたいの?
0230デフォルトの名無しさん
2005/10/01(土) 21:02:50マルチファスタファイルの分解でしょうな、きっと。
0231227
2005/10/01(土) 23:37:18プログラムにするとこんな短くていいのですね。
本当に助かりました。
0232デフォルトの名無しさん
2005/10/02(日) 02:24:55今タイピングゲームを作ってます。
普通に提示した文字を入力してOKかNGかを判断できるとこまではできたのですが、
一定時間以内に入力されなかった時にNGとなるようにしたい。
forkを使ってるんですが、どうもうまく行きませんorz
forkは間違ってますか?
他にいい予約語調べたのですがわかません。
入力待ち状態(時間制限)と入力した文字の判断(OK/NG)の同時進行がうまく行かないorz
すいませんが教えて頂けませんかm(_ _)m
0233デフォルトの名無しさん
2005/10/02(日) 03:17:230234デフォルトの名無しさん
2005/10/02(日) 03:38:41どうやって引数渡してる?
test( \%foo );
とかしてるんだよね?
こっちじゃ問題なく動くよ。
0235デフォルトの名無しさん
2005/10/02(日) 05:53:35よくわからんけど。
0236デフォルトの名無しさん
2005/10/02(日) 19:03:53「指定されたサービスは既に存在します。」
とか言われて起動すらできないんですが・・・
OSはWindows98SEです。
解決方法を教えてください。
0237デフォルトの名無しさん
2005/10/02(日) 19:32:29Perlのバージョン依存らしい。
5.8以降だとalarmも実装されているそうな。
0238デフォルトの名無しさん
2005/10/03(月) 12:00:07perlで一つのプログラムを複数(大量)のファイルに対してかけるときは
どういったやり方があるのでしょうか?
どなたか教えてください。
0239デフォルトの名無しさん
2005/10/03(月) 12:04:010240デフォルトの名無しさん
2005/10/03(月) 13:31:22シェルスクリプトかバッチファイル
0241デフォルトの名無しさん
2005/10/03(月) 13:45:06複数のファイルを処理するように書くといいです。
0242238
2005/10/03(月) 14:05:16例えば、すべて頭にSTEPという文字列がつくファイルを一度に大量に
処理するときには,シェルでperl プログラム STEP*という使い方は
できないようですが、どうすればよいのでしょうか?
プログラムは$ARGV[0]でファイルを読み込んでいます。
0243デフォルトの名無しさん
2005/10/03(月) 14:09:03for i in STEP*; do
perl プログラム $i
done
でできると思う
0244デフォルトの名無しさん
2005/10/03(月) 14:40:47> シェルスクリプトがよくわかっていないのかもしれませんが
うん、その通りだ。
STEP* というのは、Perlに渡された段階で複数のファイル名に展開されてるんだよ。
だから、Perl側で($ARGVをshiftせずに)$ARGV[0] しか見てないのなら、
最初の1つしか処理できないのは当然。
0245デフォルトの名無しさん
2005/10/03(月) 15:24:06perlを起動すると、配列 @ARGV に、引数の一覧が入っている。
で、$ARGV[0]は配列@ARGVの先頭の要素な。
だから、
今のプログラムの処理のメインループを以下の構造で囲めば、
望み通りのことができると思うぞ。
while(@ARGV){
...
shift(@ARGV);
}
0246デフォルトの名無しさん
2005/10/03(月) 15:35:29仕事場までラクダ本持っていくのめんどくさい。
0247デフォルトの名無しさん
2005/10/03(月) 15:42:59まずラクダ本を持っていくのをやめるところからはじめよ。
0248デフォルトの名無しさん
2005/10/03(月) 15:48:28百科事典みたいに分厚くなったので、買い替えをためらってる…。
0249デフォルトの名無しさん
2005/10/03(月) 15:53:590250デフォルトの名無しさん
2005/10/03(月) 17:22:45本が壊れる(背の部分が割れてページが抜けてくる)まで読んだ。
青ラクダがなかなか日本で出なかったので、perldocとCPANモジュール読みまくり。
黒豹は英語で読んだ。
で、青ラクダ出たときには、読むべきところが少なくて(赤ラクダとそう大して変わらん)、
そのままになってる。perldocで十分だな。個人的には。
0251236
2005/10/03(月) 20:58:08前は普通にインストールできたんだけどね。
0252デフォルトの名無しさん
2005/10/03(月) 21:02:40パターンにマッチしていたら表示するというのはどうやるのでしょうか?
位置が決まっていれば、/\w+\s(\w+)/などのように、正規表現を使ってできるのですが、
この場合は何を使えばよいのでしょうか?
0254デフォルトの名無しさん
2005/10/03(月) 21:06:270255デフォルトの名無しさん
2005/10/03(月) 21:15:38条件分岐であっちこっちにgotoするような処理が必要なpgを書いてるんですが、gotoはあまり無暗に
使うべきではないというような記述をちらほら見かけます
で、なるべく機能をサブルーチン化して呼び出す事で実現しているんですが、
エラー処理などでサブルーチン内の何でもないような所に飛ぶ必要が出てきました
(例えば単に関数を呼び出すだけの所や、if文の頭など)
こういった場合はgotoを使うのも止む無しといったところなんでしょうか?
それとも飛ぶ必要があるところは全て関数化するとか、無理やりwhile(1){} とか
if文をwhileで置き換えてループ化してnext、last等で書くほうがスマートなんでしょうか、、、?
0256デフォルトの名無しさん
2005/10/03(月) 21:16:430257デフォルトの名無しさん
2005/10/03(月) 21:17:540258デフォルトの名無しさん
2005/10/03(月) 21:20:43うむ、gotoは存在しない。
いいな? gotoは存在しないぞ。
0259デフォルトの名無しさん
2005/10/03(月) 21:27:050260255
2005/10/03(月) 21:28:51なんか触れちゃいけない話題だったみたいですね
それでは無しの方向でいってみます
0261デフォルトの名無しさん
2005/10/03(月) 21:29:57つかperlの話題じゃない気がす
0262デフォルトの名無しさん
2005/10/03(月) 21:40:17> パターンにマッチしていたら表示するというのはどうやるのでしょうか?
なにを表示するの?
0263デフォルトの名無しさん
2005/10/03(月) 22:13:56> この場合は何を使えばよいのでしょうか?
正規表現
0264デフォルトの名無しさん
2005/10/04(火) 03:23:55バグ有りだが。
sub num32en {
local($before,$after,$num,@num32) = @_;
@num32 = ( 0..9, A..V );
while($before > 9){
$num = $before;
$before = int($num / 32);
$after = $num32[$num%32] . $after;
}
$after = $before . $after if $before != 0;
return $after;
}
0265GiantLeaves ◆6fN.Sojv5w
2005/10/04(火) 06:43:390266デフォルトの名無しさん
2005/10/04(火) 07:49:01その talk: っての、ウザいよ。
大昔からコンピュータやってますよ〜、って自慢したいの?
0267GiantLeaves ◆6fN.Sojv5w
2005/10/04(火) 08:03:450268デフォルトの名無しさん
2005/10/04(火) 08:45:25> 大昔からコンピュータやってますよ〜、って自慢したいの?
失礼な。大昔からやってるやつは、こんな変なものはつけない。
0269デフォルトの名無しさん
2005/10/04(火) 09:41:080270デフォルトの名無しさん
2005/10/04(火) 10:10:56それ皮肉のつもりなんだろうけど、ガキんちょのやっかみにしか見えない。
0271デフォルトの名無しさん
2005/10/04(火) 10:33:500272デフォルトの名無しさん
2005/10/04(火) 10:45:520273ジジイ
2005/10/04(火) 11:02:08感動した。8080に比べれば、無尽蔵とも言えるメモリ空間だ。
その一方、640kバイトものアセンブラのプログラムを誰が
書けるんだろうと心配もした。
それを、640Mバイトでは足りないから1Gバイトにしようなどと、
全く、今の若いもんは.....ぶつぶつぶつ
0274デフォルトの名無しさん
2005/10/04(火) 11:02:56× 若者の掲示板
○ バカ者の掲示板
0275ジジイ2
2005/10/04(火) 12:52:48いやいやまだまだ。
俺なんて8080から入ったんだけど、当時のマシンはROMが4KB、RAMが256Bだったよ。
それで、ミニコンのような立派な操作パネルがついてた。
メモリは当時ものすごく高くて、フル実装なんてとてもできたもんじゃない。
CPUチップも10万したし、ROMの書込みは専門業者に依頼して、1チップ2万。
あ〜年取ったな〜、フガフガ
0276デフォルトの名無しさん
2005/10/04(火) 13:04:110277デフォルトの名無しさん
2005/10/04(火) 13:21:460278デフォルトの名無しさん
2005/10/04(火) 13:56:16バッファがあふれてシステムが落ちてしもうてのう。
0279デフォルトの名無しさん
2005/10/04(火) 14:07:500280デフォルトの名無しさん
2005/10/04(火) 14:10:320281じじい No5
2005/10/04(火) 14:32:10ここではそうなのか?
話違うけど、マイコン時代のSE と言えばネ申だった。
今は経験2年でSE 名乗らせる会社もあるようだな。
SE のレベルも落ちたもんだ・・・
そういうおれはシニアエンジニア・・・
0282デフォルトの名無しさん
2005/10/04(火) 15:01:21俺はFDDに憧れたなあ…
0283デフォルトの名無しさん
2005/10/04(火) 15:23:110284デフォルトの名無しさん
2005/10/04(火) 15:34:010285デフォルトの名無しさん
2005/10/04(火) 15:42:180286デフォルトの名無しさん
2005/10/04(火) 16:39:19こんな速いパソコンがあるのかと思ったもんなー
0287デフォルトの名無しさん
2005/10/04(火) 16:58:0320MBで20万円
俺はまだ当分フロッピーでいいや
0289デフォルトの名無しさん
2005/10/04(火) 20:37:15マシンスペックは20286 12MHz メモリ640kB 3.5インチFDDx2
~~~~~ ~~~~~~
これが16年前は40万だった。
0290デフォルトの名無しさん
2005/10/04(火) 20:43:200291デフォルトの名無しさん
2005/10/04(火) 21:11:160292デフォルトの名無しさん
2005/10/04(火) 22:33:11DOSの頃はどのPerl使ってた?
俺iperl.exe
0293デフォルトの名無しさん
2005/10/04(火) 22:53:09続けて↓
0294デフォルトの名無しさん
2005/10/04(火) 23:15:100295デフォルトの名無しさん
2005/10/04(火) 23:17:170296デフォルトの名無しさん
2005/10/05(水) 00:08:250297デフォルトの名無しさん
2005/10/05(水) 00:17:05そりゃあ、なかなか掴めなくて戸惑うことはあるけどさ。
0298デフォルトの名無しさん
2005/10/05(水) 01:15:41そっとしておいてやれよ。
下には下がいるんだよ。
0299デフォルトの名無しさん
2005/10/05(水) 01:56:54C++ のコードの中から呼ぶにはどうしたら良いでしょうか?
0300デフォルトの名無しさん
2005/10/05(水) 02:15:120301300
2005/10/05(水) 10:12:380302299
2005/10/05(水) 10:13:11ありがとうございました。逝ってきます。
0303デフォルトの名無しさん
2005/10/05(水) 12:48:52このような会話は時々見受けられるのだが。
Win32の環境で実際にやって見せてくれる人はいないのだ
ろうか、といつも思う。
0304デフォルトの名無しさん
2005/10/05(水) 12:56:38UNIX系なら別に問題ないからなぁ。
0305デフォルトの名無しさん
2005/10/05(水) 16:53:30何が問題かが良くわかりません。
> t/bugs............FAILED test 3
> Failed 1/3 tests, 66.67% okay
こんな感じになってるのですが、こういう場合どこを見れば原因がわかるのでしょうか
0306デフォルトの名無しさん
2005/10/05(水) 17:02:14t/bugs
0307デフォルトの名無しさん
2005/10/05(水) 17:11:20.plファイルを右クリ->perl command line interpreter
でDOS窓がすぐに閉じます。
閉じないようにするにはどうすればいいでしょうか。
0308デフォルトの名無しさん
2005/10/05(水) 17:26:550309デフォルトの名無しさん
2005/10/05(水) 19:04:17一番最後にダミーで標準入力から一行読込むようにすれば
0310デフォルトの名無しさん
2005/10/05(水) 21:07:26@echo off
perl %1
echo.
pause
こんな感じのバッチ作って、フォルダオプションのファイルの種類で
.plのアクションに「実行」「さっきのバッチ "%1"」を登録。
そんで「右クリ→実行」ってやってる。
0311デフォルトの名無しさん
2005/10/05(水) 21:10:290312デフォルトの名無しさん
2005/10/06(木) 03:57:41HTMLの中のリンクを変えるPerlを組みたいのですが…
<A href="./test.html">ほげほげ</A>
↓
<A href="./hoge.cgi?n=1&p=test.html">ほげほげ</A>
という感じにしたいのです。
<A href="〜">〜</A>を検索する事はできるのですが、
その先がわかりません。
どなたか、ご教示おねがいします。
0313デフォルトの名無しさん
2005/10/06(木) 04:56:19s/<A\shref="([^"]+)">(.+)<\/A>/<A\shref="$1\?n=1\&test\.html">$2</A>/;
0314デフォルトの名無しさん
2005/10/06(木) 08:39:57for ($daypr=1;$daypr <= 30;$daypr++) {
〜(中略)
print <<_html_;
<input type="text" name="in$daypr">(30個のスカラー)
_html_ }
これを<input type="text" name="in[$daypr"]>
にして配列変数に入れることは出来ないんですかね・・・。
30個の4桁の数字入力したデータを処理して出力したいんですけど、
for ($daypr=1;$daypr <= 30;$daypr++) {
〜(中略)
$AA = substr($in[$daypr],-4,-2);
$AB = substr($in[$daypr],-2);
print <<_html_;
<td><font size="2">$AA:$AB</font></td>
_html_ }
としても処理した数字がでないです。
本当は
$in1 、$in2 〜 $in30
と書き続ければ出来ないこともないですが、FOR文内で
$AA = substr($in$daypr,-4,-2);
ソース上で$dayprだけを展開できれば・・・↓
$AA = substr($in1,-4,-2);
処理上で↓
$AA = substr(1234,-4,-2); #$AAは12
$dayprの部分だけ一時的に数字にできれば
解決すると思うんですけど、いろいろやってもうんともすんとも動きません・・・。
分かる方居ましたらご教示おねがいします。
0315デフォルトの名無しさん
2005/10/06(木) 10:15:07君の文章もスパゲッティコード並みに読みにくいな。
0316デフォルトの名無しさん
2005/10/06(木) 10:22:03問題が再現する最短のソースを載せるべし。
0317デフォルトの名無しさん
2005/10/06(木) 13:50:44妹が出てくるところまで読んだ
たぶんeval
0318デフォルトの名無しさん
2005/10/06(木) 14:07:49${'in'.$daypr}
0319デフォルトの名無しさん
2005/10/06(木) 15:35:31説明読みにくくてすみませんでした。
${'in'.$daypr}でいけました。
本当にありがとうございます。
0320312
2005/10/06(木) 19:10:02構文エラーが出てしまいます。
$temp =~ s/<A\shref="([^"]+)">(.+)<\/A>/<A\shref="$1\?n=1\&test\.html">$2</A>/;
0321デフォルトの名無しさん
2005/10/06(木) 19:25:35</A>/; → <\/A>/;
0322デフォルトの名無しさん
2005/10/06(木) 19:32:150323デフォルトの名無しさん
2005/10/06(木) 19:36:53それは気付いて直しましたが、やはりエラーが出てしまいます。
Bareword found where operator expected at test.cgi line 5, near "s/(.+)<\/a>/$2(.+)<\/a>/$2
0324デフォルトの名無しさん
2005/10/06(木) 19:40:530325デフォルトの名無しさん
2005/10/06(木) 19:46:05>>321で実行できました。
$test = qq(<a href="./test.html">ほげほげ</a>);
$test =~ s/<a\shref="([^"]+)">(.+)<\/a>/<a\shref="$1\?n=1\&test\.html">$2<\/a>/;
print $test;
で、結果は
<ashref="./test.html?n=1&test.html">ほげほげ</a>
となってしまいましたが、
$test =~ s/<a\shref="([^"]+)">(.+)<\/a>/<a href="\.\/hoge\.cgi\?n=1\&p=$1">$2<\/a>/;
とする事で、目的の
<a href="./hoge.cgi?n=1&p=./test.html">ほげほげ</a>
に変換する事ができました。ありがとうございます。
0326デフォルトの名無しさん
2005/10/06(木) 19:46:200327デフォルトの名無しさん
2005/10/06(木) 22:44:21一言多いと言われたことがあるだろw
0328デフォルトの名無しさん
2005/10/07(金) 00:11:44おまえもなーw
0329デフォルトの名無しさん
2005/10/07(金) 12:10:43配列の参照を一発で取り出すにはどうしたらよいのでしょーか?
@tmp = (1, 2, 3);
%buf = ('tmp' => \@tmp);
# 2段階で取り出す
$tmp = $buf{tmp};
@foo = @$tmp;
# ホントは一発で取り出したい
@baa = @$buf{tmp}; # こんな感じに
0330デフォルトの名無しさん
2005/10/07(金) 12:16:530331デフォルトの名無しさん
2005/10/07(金) 12:19:10ありがとお。
0332デフォルトの名無しさん
2005/10/07(金) 15:13:541) 以下のソースで3行目のサブルーチンの先行宣言を止めると mainsub の引数が参照渡しではなくなってしないます。
2) 先行宣言を止めたままで mainsub(\%Hash) の様に呼び出すと参照渡しをしてくれます。
3) 先行宣言をした状態で mainsub(\%Hash) と呼び出すとエラー (... main::mainsub must be hash...) となります。
先行宣言と、引数での'\'の使い方、参照渡しの三つ巴のからみがどうなっているのか解かりません。
なにとぞご教授願います。
---------------------------------------------------
#!/bin/perl
sub mainsub (\%);
my %Hash = ();
mainsub(%Hash);
while (($key, $value) = each(%Hash)) {
print "$key = $value\n";
}
sub mainsub (\%) {
my ($ref) = @_;
$ref->{mainsub} = "I am mainsub";
}
0333332
2005/10/07(金) 15:27:36「perlのサブルーチンの引数は参照渡し」であることから先行宣言を止めるとなぜmainsubの中で
値の設定ができなくなってしまうのか?
先行宣言を止めた場合とした場合でなにがちがうのか?
引数で'\'をつけて明示的に参照を指定した場合、subには参照の参照が渡っているんかいな?!
0334デフォルトの名無しさん
2005/10/07(金) 15:30:200335デフォルトの名無しさん
2005/10/07(金) 16:03:26ラクダ本の6.4プロトタイプをよく読め。なければ
perlsub(1)でもいい。
mainsubの例でいうと、プロトタイプがなければ
呼び出し側で mainsub(\%hoge) のように自分で
リファレンスとって渡さなければいけないのを
sub mainsub(\%)とあらかじめ宣言しておくことで
mainsub(%hoge)と書けるようにする(というかこう
書かないとだめ)ためのもの。
Cのプロトタイプの型チェックなんかとは役割が
違うので混同しないように。
0336デフォルトの名無しさん
2005/10/07(金) 21:28:13例えば1日前や2日前、1ヶ月前の日時を表示させるにはどうすればよいでしょうか?
Perl初心者の為、お願いします。
0337332
2005/10/07(金) 21:51:02なるほど。
同じようなことを、モジュールにして試してみたりしてみましたが、モジュールにした場合は暗黙で先行宣言と
同様になるようすね。
ありがとうございました。
0338デフォルトの名無しさん
2005/10/07(金) 22:05:19localtime(time() - 24 * 60 * 60)
0339デフォルトの名無しさん
2005/10/07(金) 22:09:26localtime関数は、引数が与えられた場合、
渡された時間情報をlocal time zoneとして(つまり時差などの変換を行って)、
年月日、時分秒などの九つの情報に変換する。ということまでは解ってるかな。
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime(time);
そこまで解っていれば、時刻情報がどのように扱われているか、
ということを知ればすぐにわかると思う。
Perlでは(というよりPOSIX規格では)時間情報は
「紀元 (1970年1月1日00:00:00 UTC) からの経過秒数」として
表されることになっている。
ここまでくれば自分で式を作れると思うから考えてみてくれ。
ちなみに現在時刻の取得はtime関数な
・・・と書いてたら一足遅かったorz
0340デフォルトの名無しさん
2005/10/07(金) 22:16:09localtime() の後に操作するなら
($sec, $mon, $hour, $mday, $mon,...) = localtime(time)
$mday = $mday - 1; # 1日前
--$mon; # 1ヶ月前
って感じか。
でも、2・4・6・9・11月は31日がないし閏年も考慮しないと
いけないので面倒か。
あるいは、
localtime(time - $N * 60 * 60 * 24) # 掛け算の部分は計算しておいてもいいね
として呼んで $N 日前の値を取り出すこともできるけど、
月単位の操作はやっぱり1ヶ月が何日かを考慮して
$N を設定しないとだね。
$t = time;
localtime($t)
で値を1度取ってからそのヒト月が何日か調べてもう一度
localtime($t - $N * 60 * 60 * 24)
するのがよいかな。
何か勘違いしていたかも(照)
0343デフォルトの名無しさん
2005/10/07(金) 22:23:15皆様、ありがとうございました。
いろいろ試してみます。
0344デフォルトの名無しさん
2005/10/07(金) 22:57:01month_last_day や is_leap_year なんて
メソッドが用意されている。
0345デフォルトの名無しさん
2005/10/08(土) 01:45:55http://perldoc.jp/docs/modules/Date-Calc-5.3/Calc.pod
0346デフォルトの名無しさん
2005/10/08(土) 07:02:47print FILTER $text;
close( FILTER );
のようなスクリプトで、$command の exit status はどうやって調べるのでしょうか?
0347デフォルトの名無しさん
2005/10/08(土) 08:52:07$? >> 8
0348デフォルトの名無しさん
2005/10/08(土) 08:56:530350デフォルトの名無しさん
2005/10/09(日) 01:04:58? >>8
0351デフォルトの名無しさん
2005/10/09(日) 01:33:080352デフォルトの名無しさん
2005/10/09(日) 02:47:030353デフォルトの名無しさん
2005/10/09(日) 03:08:55$hoge=~s#(?<!<[^>]+)http://hoge.cgi#http://age.jpg#;
は無理でした。
((?<!<[^>]+)が固定長じゃないから)
0354デフォルトの名無しさん
2005/10/09(日) 03:42:56$hoge=~s#(?<!["'])http://hoge.cgi/#http://age.jpg#g;
このあたりで妥協するってのはどう?
もしくは、
$hoge=~s#((?:<.*?>)?[^<]*?)http://hoge.cgi/#$1http://age.jpg#g;
かな。もうちょっと綺麗にならないものか・・・
0355デフォルトの名無しさん
2005/10/09(日) 04:07:21マッチした範囲にタグが含まれない場合、
それよりも前に<があっても対処できてない・・・
きっちりやるには正規表現一個じゃやっぱり難しそうな気がする。
# 他の人任せた
なんてどうだろう・・・
0357デフォルトの名無しさん
2005/10/09(日) 08:34:41sort関数を使うのではなく、自分で挿入ソートのアルゴリズムを作る。
次のようにしましたが駄目です。どこが悪くてこうなってるのか教えてください。
#!C:\Perl\bin\perl
print "5つの数を挿入ソート。\n";
print "Aを入力してください。\n";
$num1=<STDIN>;
chop ($num1);
#省略してますが、同じやり方でB、C、D、Eも$num2から$num5に入れてます。
@list=("dummy",$num1,$num2,$num3,$num4,$num5);
$n=6;
for($i=1;$i<=$n;$i++)
{
$j=$i;
while($j>=1 and $list[$j-1] > $list[$j])
{
$tmp=$list[$j];
$list[$n]=$list[$n-1];
$list[$n-1]=$tmp;
$j--;
}
}
print "$list[1] $list[2] $list[3] $list[4] $list[5]";
0358デフォルトの名無しさん
2005/10/09(日) 12:28:44・配列の先頭に代入する場合はunshift関数(速い?)
・要素数は$#hogeやscalar @hoge、スカラー変数に代入する場合などは@hogeだけでも可
・forで配列を0から順番に回すならforeachを使う
今扱っている要素番号は$_に入っている
0359357
2005/10/09(日) 12:53:26ありがとうございます。
ソートの件は自己解決しましたが、perlプログラミングなりの作法があるんだなと
自分の勉強不足を痛感しますた。
0360デフォルトの名無しさん
2005/10/09(日) 14:14:200361デフォルトの名無しさん
2005/10/09(日) 15:17:100362デフォルトの名無しさん
2005/10/09(日) 19:45:11引数は@ARGVに格納される。
$ARGV[0]→hoge1
$ARGV[1]→hoge2
$ARGV[2]→hoge3
0363デフォルトの名無しさん
2005/10/09(日) 22:42:540364デフォルトの名無しさん
2005/10/09(日) 22:52:530365デフォルトの名無しさん
2005/10/10(月) 02:52:450366デフォルトの名無しさん
2005/10/10(月) 07:29:17挿入ソープってなに?
0367デフォルトの名無しさん
2005/10/10(月) 07:56:430368デフォルトの名無しさん
2005/10/10(月) 10:23:51メモリ2GBも無いです。
0369デフォルトの名無しさん
2005/10/10(月) 10:51:19swapが十分あればできないことはないかもしれんが、組み込みのsort関数
一発でやるのはつらいだろう。こういうときの常套手段は、適当な部分に
わけてソートしたものをいくつかの中間ファイルに書き出して、最後に
それを読みながらひとつにマージするわけだが、既にSort::Externalと
いうモジュールがあるのでプログラミングの勉強でなければそれを使う
のが楽だろう。
あるいは比較条件が難しくなければperlにこだわらずsortコマンド使う
方がてっとりばやいかもな。
0371デフォルトの名無しさん
2005/10/10(月) 18:01:21いい方法が分かりません。
えろい人教えてください。
0372デフォルトの名無しさん
2005/10/10(月) 18:11:420373デフォルトの名無しさん
2005/10/10(月) 18:14:2110個ごとときまっているのなら2次元配列にしたほうが楽だと思うけど。
0374デフォルトの名無しさん
2005/10/10(月) 18:28:51my @hoge = ('00'..'27');
# @hoge が破壊されない
for (my $i = 0; $i <= $#hoge; $i += 10) {
print join(', ', @hoge[ $i .. $i + 9 ]), "\n";
}
# @hoge が破壊される
print join(', ', splice @hoge, 0, 10), "\n" while @hoge;
>>372
それは10個「おき」にでは無かろうか。
371 がどちらを望んでるのかははっきりしないけど。
print join(', ', @hoge[ grep !($_ % 10), 0..$#hoge ]), "\n";
for (my $i = 0; $i <= $#hoge; $i += 10) { print "$hoge[$i], " }
0375デフォルトの名無しさん
2005/10/10(月) 18:56:26>374
100件くらいの不定長のリストを渡して、
10件毎に集計、表示ってのがやりたか
ったのです。
374さんのが素敵な感じです。
ありがとございます。
0376デフォルトの名無しさん
2005/10/11(火) 02:46:07print map {$a[$_*10]} 1..int(@a/10);
0377デフォルトの名無しさん
2005/10/11(火) 05:10:14$data[0]{'date'} = "20050204"
$data[0]{'title'} = "hoge"
$data[1]{'date'} = "20051001"
$data[1]{'title'} = "test"
$data[2]{'date'} = "20040403"
$data[2]{'title'} = "abcd"
こういうデータがあったとして'date'をキーにして
ソートする場合は、どうしたら良いのでしょうか?
1次的なハッシュや配列はsort関数でできたのですが
上記のような場合はわかりません。
それと、このようなデータ形式を扱うのは
Perlでは良く使われるのでしょうか?
それともあまり使われないのでしょうか?
0378377
2005/10/11(火) 05:13:18ソートする事はできます。疑問なのはsort関数等みたいな
Perlの標準的な機能を使ってできないか?って事です。
よろしくおねがいします。
0379デフォルトの名無しさん
2005/10/11(火) 05:54:34sort { $$a{'date'} <=> $$b{'date'} } @data
配列の中にはハッシュへの無名リファレンスが入ってるってところがミソ
0380デフォルトの名無しさん
2005/10/11(火) 05:56:13Perlでは非常に良く使われるデータ構造だと思うよ
0381デフォルトの名無しさん
2005/10/11(火) 06:12:02こういうときは->を使ったほうが解りやすくなるかな?
sort { $a->{'date'} <=> $b->{'date'} } @data
三連投スマソ
0382デフォルトの名無しさん
2005/10/11(火) 12:24:55普段は->を使うけど、@$array_refくらいならまた別。
0383デフォルトの名無しさん
2005/10/11(火) 17:01:42perldoc -f sort
いろいろ例があるよ。
0384デフォルトの名無しさん
2005/10/11(火) 22:35:00{ 'aaa' => 1 },
{ 'bbb' => 2 },
{ 'ccc' => 3 }
);
上記の様な無名ハッシュの配列から値を取り出すには、$array[0]{aaa} などで取り出せますが、
each関数を使用してキーと値を取り出す場合、引数にはどのように指定すれば良いのでしょうか?
($key, $val) = each(%$array[0]) という風に指定してもエラーが出てしまいます。
0385デフォルトの名無しさん
2005/10/11(火) 22:47:22ブレースで囲めばよいと思うけどな…
($key, $val) = each(%{ $array[0] })
0386デフォルトの名無しさん
2005/10/12(水) 09:44:38PerLDAPやperl-ldapがあるようですが、よく使われてるのは
どれですか?
0387ヽ(´ー`)ノ ◆.ogCuANUcE
2005/10/12(水) 13:32:24PerLDAP は保守が止まってる。
perldap-1.4 - 03 Sep 1999 - Leif Hedstrom
perl-ldap-0.33 - 25 Apr 2005 - Graham Barr
LDAP を必要とするモジュール (例えば DBD::LDAP とか) は軒並 perl-ldap に
依存しているので、こっちにしておいた方が無難。
0388デフォルトの名無しさん
2005/10/12(水) 20:55:50グローバルIPを取得するにはどうしたらいいですか?
0389デフォルトの名無しさん
2005/10/12(水) 21:05:57もうちょっと状況を詳しく書いた方がいいんじゃない?
0390デフォルトの名無しさん
2005/10/12(水) 21:24:07jcode.plを使用して正規表現で「ひらがなのみ」にマッチさせる場合、書式はどんな風になるんでしょうか?
/[ぁ-ん]+/ みたいな感じだとひらがなに漢字が混じっていてもマッチしてしまいます。
0391デフォルトの名無しさん
2005/10/12(水) 21:34:08jcode.plはマッチに関しては何も面倒は見てくれないよ。
ユニコードにするか、
http://www.din.or.jp/~ohzaki/perl.htm
あたりを参考にがんばるかどっちかだろう。
0392デフォルトの名無しさん
2005/10/12(水) 21:51:44とりあえずsjisと仮定すれば、それじゃ
[\x82\x9F-\x82\xF1]
となって\x82、\x9F-\x82、\xF1にマッチしてるぞっと。
詳しく説明しようかと思ったけど
bホ (\x82\x82\xCE)なんてパターンを考えてたら疲れたorz
0393デフォルトの名無しさん
2005/10/12(水) 22:05:360394デフォルトの名無しさん
2005/10/12(水) 22:15:14特に正規表現。
ちょっとうまく動かないからデバッガで動かしたら、
デバッグ時だけマッチしなかったり、Perl自体死んだり。
長めのスクリプト書いてると、デバッグできなくて結構悲惨な目に遭う。
「漢字だけにマッチ」とかやりたいときはencoding関係なしで
utf8でやってるな。
(\xe4[\xb8-\xbf][\x80-\xff]|[\xe5-\xe9][\x80-\xbf][\x80-\xbf])
って感じで。
0395デフォルトの名無しさん
2005/10/12(水) 22:21:44これはまだ使い物になりませんか。
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html#standard
0396デフォルトの名無しさん
2005/10/12(水) 22:22:32use encoding 'shiftjis'; と書いただけで、
デバッガを動かすと即死するもんな〜
Bug DBにも登録されてるけど、全く直す気なしなのか?
0397デフォルトの名無しさん
2005/10/12(水) 22:25:560398394
2005/10/12(水) 22:31:09それのこと。それが使い物にならない。
95%は動くけど、実用レベルじゃない。
5.8.7になるまでこの状態ってことは、誰もロクに使ってないんだろうな…。
そもそもマルチバイト圏じゃないと必要ないというのもあるけど、
考え方が難解&使い方が煩雑すぎるのもあるんだろうな。
一応、自分はencoding使ってだいたいのことはできるようになったけど、
デバッガが使えない&人に通じない、という二つの理由で
動いたらもうけもの、ぐらいの気持ちで作る自分用の短いスクリプトにしか
使わないな。
0399デフォルトの名無しさん
2005/10/12(水) 22:56:49あ、言葉足らずですみません。Jcode.plで「eucに変換して」ってことです。
eucなら[ぁ-ん]でマッチしますよね?
ただ、「ひらがなだけ」というのがどうも上手くいかないのです。
0400デフォルトの名無しさん
2005/10/12(水) 23:07:03>>392
EUCでも同じこと。1バイト目と2バイト目が分かれて認識されてる
加えてEUCはShiftJISよりも1バイト目と2バイト目の範囲が被ってるから、
余計に1バイトずれたい値にマッチしてしまう
EUCやSJISの構造に関してはこのあたりを参考に
ttp://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/kanjicod.html
0401デフォルトの名無しさん
2005/10/13(木) 00:51:14使わんな。
>>398
> 95%は動くけど、実用レベルじゃない。
再現性のある具体例を出さないと、FUD と言われても文句は言えないな。
0402デフォルトの名無しさん
2005/10/13(木) 01:46:00ありがとうございます。
perl-ldapを使うことにします。
0404デフォルトの名無しさん
2005/10/13(木) 02:35:05そんな言い方すんなってば。
0405デフォルトの名無しさん
2005/10/13(木) 04:12:080406デフォルトの名無しさん
2005/10/13(木) 08:30:09あ
い
う
----------
のような改行2つに正規表現をマッチさせるにはどうしたらいいでしょう?
s/\n\n/ /g;
s/\n$^\n/ /g;
とかでは置換してくれませんでした
ActivePerl 5.8.7です
0407デフォルトの名無しさん
2005/10/13(木) 08:46:280408デフォルトの名無しさん
2005/10/13(木) 09:03:37http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
0409デフォルトの名無しさん
2005/10/13(木) 10:14:07perl -e '$_="A\n\nB\n\nC\n\n"; s/\n\n/X/g; print'
行末が \r\n だったりすれば正規化や別のパターンが必要なだけ。
まあ /m は ^, $ に関しては確認するとして…
0410デフォルトの名無しさん
2005/10/13(木) 16:22:58サブルーチンの中じゃないところでマッチングさせて
サブルーチンの中で$1とか$2とかいう記号をつかうことはできますか?
0411デフォルトの名無しさん
2005/10/13(木) 16:37:170412デフォルトの名無しさん
2005/10/13(木) 16:49:36ブロック抜けるまで有効。
$<digits>
Contains the subpattern from the corresponding set of capturing
parentheses from the last pattern match, not counting patterns
matched in nested blocks that have been exited already.
(Mnemonic: like \digits.) These variables are all read-only
and dynamically scoped to the current BLOCK.
例:
"foo1" =~ /(.*)/;
f(1);
{
"foo2" =~ /(.*)/;
f(2);
}
f(3);
sub f {
my($n) = @_;
print "$n: $1\n";
}
0413デフォルトの名無しさん
2005/10/13(木) 17:28:261: foo1
2: foo2
3: foo1
0414406
2005/10/13(木) 20:22:24hoge.pl
----------
while(<>)
{
s/\n\n/ /g;
print;
}
----------
test1.txt
----------
あ
い
う
----------
これで
perl hoge.pl <test1.txt >test2.txt
をやってもtest1と同じものがtest2にでてしまうだけなのです
hoge.plの置換の部分は
s/\n\n/ /m;
s/\x0D\x0A/\n/g;
tr/\x0D\x0A/\n\n/;
s/\n\n/ /g;
と試しても同じでした
0415ヽ(´ー`)ノ ◆.ogCuANUcE
2005/10/13(木) 20:53:48もうなんつか、それ以前の問題。
my $n = join('', <>);
$n =~ s/\n\n/ /mg;
print $n;
0416デフォルトの名無しさん
2005/10/13(木) 21:19:090417409
2005/10/13(木) 21:23:29入れてないのに、$_ に \n\n が入ってるわけ無いだろ…
行単位以外の入力もいろいろやりかたあるけど、
perl以前にアルゴリズム勉強し直し?
0418デフォルトの名無しさん
2005/10/13(木) 22:16:56/m 不要。
>>416
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldata.html#Typeglobs_and_Filehandles
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlmod.html#Symbol_Tables
0419デフォルトの名無しさん
2005/10/14(金) 00:07:35> perl以前にアルゴリズム勉強し直し?
それ以前に、不具合がどこで起きているのか調査した
形跡が皆無なのが問題。
0420デフォルトの名無しさん
2005/10/14(金) 00:11:05Perlならではのアルゴリズムだし…とマジレスしてみる。
0421デフォルトの名無しさん
2005/10/14(金) 01:28:08これでいい?
{
local $/ = "";
chomp, print $_, " " while <>;
}
0422デフォルトの名無しさん
2005/10/14(金) 03:54:38論理能力の問題かも。
目的の一部として単に空白行を削除するだけなら、421などより初心者定石的に、
perl -e 'while(<>){next if/^$/; print;}' a.txt
perl -ne 'next if /^$/;print' a.txt
とするだろうし。
0423422
2005/10/14(金) 04:01:28/^$/の検査の後に s/\n$/ / なりを入れるとか好きなように。
0424406
2005/10/14(金) 09:29:40ありがとん
0425デフォルトの名無しさん
2005/10/14(金) 19:05:16$_ = <>;
s/\n\n/ /sg;
print;
0426デフォルトの名無しさん
2005/10/14(金) 20:11:36入力量や処理を見積もれない場合(人)には有害だし。
0427デフォルトの名無しさん
2005/10/14(金) 20:52:55ドキュメントに載っていない TIPS や飽きられていない FAQ って何だ。
perl -l40pe 'BEGIN { $/ = "\n\n" }' test1.txt > test2.txt
0428デフォルトの名無しさん
2005/10/14(金) 21:05:49http://www.sysarch.com/Perl/slurp_article.html
0429デフォルトの名無しさん
2005/10/14(金) 21:47:40例)
$Num = 1.23e45 ;
※もちろん指数も数値として判定する。
0430デフォルトの名無しさん
2005/10/14(金) 22:31:34sub is_numeral {
$_[-1] =~ /^\s*([+\-]?\d*\.?\d*(?:[Ee][+\-]?\d+)?)/;
$1 =~ /^[+\-]?\.?\d/ ? 1 : 0;
}
0431ヽ(´ー`)ノ ◆.ogCuANUcE
2005/10/14(金) 22:45:06use Regexp::Common qw/number/;
$num =~ m/^$RE{num}{real}$/;
0432デフォルトの名無しさん
2005/10/14(金) 22:55:58>>431
ありがとん。
0433デフォルトの名無しさん
2005/10/15(土) 01:00:49CPANで探せばいいのに……
ttp://search.cpan.org/~evdb/Test-Numeric-0.3/lib/Test/Numeric.pm
0434デフォルトの名無しさん
2005/10/15(土) 04:02:160435デフォルトの名無しさん
2005/10/15(土) 05:48:03$a = 1.23e45; は当然としても、$b = '1.20e2'; などの文字列を
「数値」と判定するつもりなのかどうか、(数値として演算可能ではあるけれど)
いまひとつ、安易には設問の意をとれないのだが…
0436デフォルトの名無しさん
2005/10/15(土) 05:54:58何もキャプチャーしないマッチを成功させれば全部undefになるよ。
"a" =~ /a/ とか。
0437デフォルトの名無しさん
2005/10/15(土) 06:26:10ようするにそういう1-linerも必死な厨もお約束どうりつまらんだけなわけ。
0438デフォルトの名無しさん
2005/10/15(土) 07:33:52全然「ようされて」いませんね。回答せずに逃げるのは痛いです :-P
で、ドキュメントに載っていない TIPS や飽きられていない FAQ って何なんですか?
0439デフォルトの名無しさん
2005/10/15(土) 18:00:07驚いた。回答も何も、必死厨、頭悪いなあ。
「ドキュメントに載っていない TIPS や飽きられていない FAQ」なんて
アホ捏造して食い下がってるのは自分自身だけだろ
($/="" じゃなくて $/="\n\n" なのもイヤ)
0440デフォルトの名無しさん
2005/10/15(土) 18:08:080442デフォルトの名無しさん
2005/10/15(土) 18:36:17# ユーザーエージェントでロボット除外
$flag = 0;
$ua = $ENV{'HTTP_USER_AGENT'};
@block=(
"googlebot",# Googleロボットの除外
"msnbot"# MSNロボットの除外
);
foreach $block(@block){
if ($ua =~m/^$block/){ # ロボットならフラグをセット
$flag = 1;
}
}
# ロボット判定
if($flag eq 1){
exit();
}
と書いたのですが、IEからのアクセスでも500が出てしまいます。
何故でしょう?
ちなみにこの部分をコメントアウトすれば正常に動作します。
文字コードはSHIFT_JIS改行コードはWindows形式(CR+LFだっけ?)です。
よろしくお願い致します。
0443デフォルトの名無しさん
2005/10/15(土) 18:53:32何故でしょう、って、その部分の code片の動作だけでは異常は無いんでしょ?
単に環境にあわせてdebug作業を工夫する能力が足りない、というのと、
>>1すら理解できない、という基礎能力の不足が、最大の原因だと思う。
>>CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
>>CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
>>CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするので
0444デフォルトの名無しさん
2005/10/15(土) 19:17:57どっから見てもPerlスクリプトと思うが。
>>442
文字コードをEUCでもダメ?
0445デフォルトの名無しさん
2005/10/15(土) 19:21:120446デフォルトの名無しさん
2005/10/15(土) 19:28:33文字コードをEUCでもダメ?
文字コードをEUCでもダメ?
文字コードをEUCでもダメ?
文字コードをEUCでもダメ?
0447デフォルトの名無しさん
2005/10/15(土) 20:35:02Perlスクリプトか否かは、まったく問題になってないのだが、
何が言いたいの?
そうか、いわゆる CGIじゃない可能性も皆無ではないからなあ、って、
>文字コードをEUCでもダメ?
ここで笑うとこなの?
0448デフォルトの名無しさん
2005/10/15(土) 20:53:47active perl 5.8.7(windows版) をインストールして、
インストールディレクトリで、
.\perl.exe -e 'printf("AAA\r\n")'
とやっても、何も表示されない(空白行が出力されておしまい)んですが、
よくわかりません。何をチェックしたらよいでしょうか。
0449デフォルトの名無しさん
2005/10/15(土) 20:58:310450デフォルトの名無しさん
2005/10/15(土) 21:00:140451448
2005/10/15(土) 21:03:20\r ありでも無しでもファイルに書き出して perl file.pl とやるとうまくいきますね。
>>450
う〜ん、そうなんですか。確かにファイルに書き出すと問題無いです。orz
0452448
2005/10/15(土) 21:05:38perl -e printf(\"AAA\")
AAA
0453デフォルトの名無しさん
2005/10/15(土) 21:20:56>>450 の補足。cwd.exe の事は知らんが、command.com では
コマンドの引数を括るのに ' は使えず " しか使えない。
perl 以前にシェルの問題。 perl -e "printf('A A A')" なら通るし、
bash や csh のようなまともなシェルなら ' でも括れる。
>>452 の例が通るのは、-e オプションのパラメータに空白文字
やパースエラーになるクォート文字が含まれず、一つの引数と
正常に認識されるから。
あと print で済む事に printf は使わないのが Perl 流。
0455デフォルトの名無しさん
2005/10/15(土) 22:16:10throw Error::IO(-text => "Oops!");
とするとエラーになるのですが何故ですか?
以下エラー内容です。
Can't locate object method "throw" via package "Error::IO" (perhaps you forgo
t to load "Error::IO"?) at xxx.pl line xx.
0456デフォルトの名無しさん
2005/10/16(日) 06:23:03確かにドキュメントにはError::IOの文字があるけど、
PRE-DEFINED ERROR CLASSESにも、ソースにもError::IOなんて無いな・・・
@Error::IO::ISA = qw(Error::Simple);
とかやって作ってやら無いといけないみたいね
0457デフォルトの名無しさん
2005/10/16(日) 16:14:38リファレンスをハッシュのキーに使うと
HASH(0x80f6460) や SomeObject=HASH(0x80f6460)
などの文字列に成り下がってしまいます。
それはそれで別段構わないのですが、
この文字列(メモリ上のアドレス??)の一意性って保証されるのでしょうか?
0458デフォルトの名無しさん
2005/10/16(日) 18:10:03リファレンスをハッシュのキーに使わなくてはならないようなシチュエーションが知りたい。
0459デフォルトの名無しさん
2005/10/16(日) 18:48:28例えば
s/(〜)(〜)/\10\2/
とかだと\10と認識されてしまって\1と\2の間に0をいれるってことが出来ないのですが
こういうときはどうやって\10ではなく\1と0と認識させるんですか?
0460457
2005/10/16(日) 18:50:29あるオブジェクトを他のオブジェクトと関連づけるために
ハッシュが使えないかな?と思った次第です。
たとえば業務系のアプリだと
ある受注オブジェクト(Order)に対して出荷オブジェクト(Delivery)が
複数関連づけられている場合 = 分納出荷されているというような場合
my $o1 = Order->new(id => 1);
my $d1 = Delivery->new(id => 1);
my $d2 = Delivery->new(id => 2);
my $orders = { $o1 => [$d1, $d2] };
みたいな書き方ができると便利かな?と思ったわけです。
まあ、たとえばの話です。まだプログラム始めた訳じゃないです。
この場合、$o1 は "Order=HASH(0x80f6460)"みたいな文字列でハッシュキーに
なるわけですが、もし$o1のプロパティにいろいろ重いデータを突っ込んで行ったあげく
$o1のアドレスが別の場所に再アロケートされてしまうことがあると
後で $orders->{$o1} と参照しても undefが返ってきてしまいますし
間違った値が返されることもあるかもな、と思いまして質問させて頂きました。
0461デフォルトの名無しさん
2005/10/16(日) 19:04:52普通は s/()()/${1}0$2/ だろうなあ。
0462ヽ(´ー`)ノ ◆.ogCuANUcE
2005/10/16(日) 19:08:42"Order=HASH(0x...)" のままだと、bless しなおされたらアウトじゃないか。
使うんなら = よりも後の部分だな。
オブジェクトの文字列表現をキーに使うのは、Attribute::Handlers でも
やってるから問題ないように思うけど、保証されてるかどうかは知らん。
0464デフォルトの名無しさん
2005/10/16(日) 19:52:32いけました
ありがとうございました
0465デフォルトの名無しさん
2005/10/16(日) 20:06:31なにかよいページご存じないですか? (できれば日本語がよいです)
ググってみたのですがphysonやrubyのものばかりで
perlではあまり使われていないのかなあ‥
0466デフォルトの名無しさん
2005/10/16(日) 20:22:030467デフォルトの名無しさん
2005/10/16(日) 20:33:060468デフォルトの名無しさん
2005/10/16(日) 20:38:25そう考える根拠は何でしょうか?
0469デフォルトの名無しさん
2005/10/16(日) 20:52:230471デフォルトの名無しさん
2005/10/17(月) 00:23:1210/18
予定
10/19
のようになっているテキストファイルの10/18の予定の下に予定を追加するスクリプトの書き方が分からないのですが教えていただけませんか?
引数で予定を突っ込む感じにしたいのですが・・
open Yotei, "yotei.txt";
while (<Yotei>) {
if (/$ARGV[0]\/05/) {
$line = <Yotei>;
while ($line !~ /\d\d?\/\d\d?\/05/){
print $line;
last if !($line = <Yotei>);
}
last;
}
}
close Yotei;
で表示は出来るとこまで行き着いたのですが、そっから、予定のしたの行に新規の予定をぶっこむやりかたが分からなくなっています
0472デフォルトの名無しさん
2005/10/17(月) 00:24:370473デフォルトの名無しさん
2005/10/17(月) 01:13:58全部ハッシュか配列に読み込んで、目的の行を追加して、ファイルに書き出す。
0474デフォルトの名無しさん
2005/10/17(月) 02:17:52どうもです
まだperl勉強したてでいまいちハッシュを理解出来ていないので勉強しなおしてきます
$○×△なんかとどう違うのかが理解できなくて苦笑
0475デフォルトの名無しさん
2005/10/17(月) 11:56:11Perlでファイルにデータを書き込むプログラムはCSV以外に見たことないので
0476デフォルトの名無しさん
2005/10/17(月) 14:34:12ただの経験不足かと(煽りではなく)
0477デフォルトの名無しさん
2005/10/17(月) 15:03:36正確にはファイルハンドルへ出力。
ファイルハンドルはファイルであったり、STDOUTだったり、ソケットだったり。
もしかしてCGIだけでPerlを語ってる?
0478デフォルトの名無しさん
2005/10/17(月) 15:30:23CGIだってバイナリファイル(画像とか)吐き出したりすることもあるでそ。(重箱すまん)
0479ryu
2005/10/17(月) 15:31:05今、簡単な掲示板をPerlで作っているのですが、
手順として
1.記事を書いて送信ボタンをクリック
↓
2.確認ページ(書き直す場合は戻るリンクをクリック、OKな場合は、書き込むボタンクリック
↓
3.書き込み完了画面(掲示板へ戻るリンクで掲示板へ)
↓
4.掲示板
という流れをしたいのですが、ここでお聞きしたいことが2つありまして
まず1つ目は
・手順1で送信ボタンをクリックした際に、例えば、内容に何も入力せずに送信したのに
if($act_result == 0){}のなかの入力チェックをとおってくれないので
その解決法。
(何も入力していなくても、確認ページへ飛んでしまう。)
return 0;を返す前に、&write_confirm()ルーチンを実行しいるのが問題なのかな・・?
2つ目は、
手順2で記事を書いたあと送信ボタンをクリックで確認ページへ飛んで記事を
修正したい為、戻るリンクをクリックして、トップを表示したときに入力した内容が
消えてしまっているのですが、それを解決する方法がわかりません。
解りにくいかもしれませんが、お願いします。
以下ソースです。
ttp://imbbs1.net4u.org/1/sr3_bbss/4874isimin/63_1.txt
0480デフォルトの名無しさん
2005/10/17(月) 15:55:18画像を送信する場合のタグは<FORM METHOD="POST" action="aaa.cgi" enctype="multipart/form-data">で
テキストだけを送信する場合は<FORM METHOD="POST" action="aaa.cgi">タグを使ってます
それでPerlの場合はmultipart/form-dataで送信されたのかまたは普通のテキスト送信なのかどうかをaaa.cgiで判断する方法ってあるんでしょうか?
0481デフォルトの名無しさん
2005/10/17(月) 15:59:05&write_confirm() で、ものすごい勢いで exit されているわけだが。
0482ryu
2005/10/17(月) 16:03:08ご指摘ありがとうございます。
やっぱりこのexit;ダメですよねorz
と、思い、このexit関数をコメントアウトしたら、確認画面の直ぐ下に
エラー表示まで出てしまうという・・。どうしたらいいのか。。
0483デフォルトの名無しさん
2005/10/17(月) 16:13:36ちょっと落ち着け。
なんで入力確認が終わってないのに書きこみ画面を出力しちゃってるんだ?
perl 以前の問題だよ。
0484ryu
2005/10/17(月) 16:18:330485ryu
2005/10/17(月) 16:26:59落ち着きます;
書き込み確認画面を出す前に入力チェックをしたいのですが、
それがうまくできないのですfrtgyふじこlp;;lp;@
今のままだとreturn 0;とする前にwrite_confirm();
が出てきてるから、こうなるのはあたりまえといえばあたりまえなんですが・・。
0486デフォルトの名無しさん
2005/10/17(月) 16:32:55> 今のままだとreturn 0;とする前にwrite_confirm();
> が出てきてるから、こうなるのはあたりまえといえばあたりまえなんですが・・。
答え出てるじゃん。
0487ryu
2005/10/17(月) 16:38:54んで、
if($FORM_DATA{'action'} eq 'confirm'){ #確認画面
return 0;
&write_confirm($name,$mail,$url,$title,$message,$color);
}el(ry
と単純に順番を入れ替えたら、入力チェックはするのですが、
チェックを全部とおるような書き込みをすると
書き込み画面を表示せず、即座に書き込んでしまいます_| ̄|○
ちなみにネタじゃないです。
0488デフォルトの名無しさん
2005/10/17(月) 16:53:08> &write_confirm($name,$mail,$url,$title,$message,$color);
だから 落 ち 着 け って。
これだと &write_confirm は絶対呼び出されないってば。
全体的なフローを一から見直すことをお勧めする。
0489デフォルトの名無しさん
2005/10/17(月) 17:02:480490デフォルトの名無しさん
2005/10/17(月) 18:07:57>>477はアスキーかバイナリかなんて言ってないように見えるけど。
でもって、バイナリ吐き出すのもCGIとは限らん罠。
0491デフォルトの名無しさん
2005/10/17(月) 21:05:31みなさんどーしてまふ?
0493デフォルトの名無しさん
2005/10/17(月) 21:47:59あ、そ
0494デフォルトの名無しさん
2005/10/17(月) 21:49:580495デフォルトの名無しさん
2005/10/17(月) 21:51:01色々
0496デフォルトの名無しさん
2005/10/17(月) 22:30:26矛盾だ。
0497デフォルトの名無しさん
2005/10/17(月) 22:42:57言葉遊びでもしたいの?
0498酩酊 ◆TWARamEjuA
NGNG0499デフォルトの名無しさん
2005/10/17(月) 22:47:500500デフォルトの名無しさん
2005/10/17(月) 23:06:48http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlmod.html#Perl_Modules
<q cite="http://perldoc.jp/docs/perl/5.6.1/perlvar.pod">
配列 @INC には、do EXPR、require、use によってライブラリファイルを
探すときに評価する場所のリストが納められています。
</q>
BEGIN { unshift @INC, '/your/lib/path' }
use YourLib;
0501デフォルトの名無しさん
2005/10/17(月) 23:13:13ありがと
0502デフォルトの名無しさん
2005/10/17(月) 23:30:50質問で嘘ついてたってわけですね。
0503デフォルトの名無しさん
2005/10/17(月) 23:33:25しつこいね粘着
0504デフォルトの名無しさん
2005/10/17(月) 23:41:200505デフォルトの名無しさん
2005/10/17(月) 23:43:47オレは教えてもらったとーり今から勉強する。
他の相手見つけろ。
0506デフォルトの名無しさん
2005/10/17(月) 23:50:280507デフォルトの名無しさん
2005/10/18(火) 00:54:570508デフォルトの名無しさん
2005/10/18(火) 01:06:040509デフォルトの名無しさん
2005/10/18(火) 02:06:30@b の各要素を @a の各要素と正規表現で比較し、マッチしなかった
@b の要素を表示させたいのですが、どんな方法がありますでしょうか。
イメージとしては、
@a = (1, 3, 1);
@b = (a0, b1, c2, a0, b1, c2);
結果として、
a0
c2
を出力したいです。よろしくお願いします。
0510デフォルトの名無しさん
2005/10/18(火) 02:17:03イメージ意味不明
0511デフォルトの名無しさん
2005/10/18(火) 02:20:560512デフォルトの名無しさん
2005/10/18(火) 02:27:36my @a = qw(1 3 1 .);
my @b = qw(a0 b1 c2 a0 b1 c2 1 2 3.4 2);
my %dup;
my $regex = join '|', map quotemeta, grep !$dup{$_}++, @a;
undef %dup;
print join "\n", grep !$dup{$_}++ && !/$regex/, @b;
0514デフォルトの名無しさん
2005/10/18(火) 04:06:31これがPerlじゃなかったら悪いプログラムの見本みたいだw
0515デフォルトの名無しさん
2005/10/18(火) 04:46:13理解しやすいよう、いくぶんか分かりやすく。
my @a = qw(1 3 1);
my @b = qw(a0 b1 c2 a0 b1 c2);
my $a = join('|', map { quotemeta($_) } @a);
my @result = grep { !/$a/ } @b;
print "@result";
---
重複した要素を除いて最適化したもの。
local %_;
my @a = grep { !$dup{$_}++ } qw(1 3 1);
%_ = ();
my @b = grep { !$dup{$_}++ } qw(a0 b1 c2 a0 b1 c2);
my $a = join('|', map { quotemeta($_) } @a);
my @result = grep { !/$a/ } @b;
print "@result";
0516デフォルトの名無しさん
2005/10/18(火) 04:48:13local %_;
my @a = grep { !$_{$_}++ } qw(1 3 1);
%_ = ();
my @b = grep { !$_{$_}++ } qw(a0 b1 c2 a0 b1 c2);
my $a = join('|', map { quotemeta($_) } @a);
my @result = grep { !/$a/ } @b;
print "@result";
0517デフォルトの名無しさん
2005/10/18(火) 05:12:340518デフォルトの名無しさん
2005/10/18(火) 06:51:03リンクタグの前の文字列にリンクをつけたいんです。
たとえば、うううう<a href="〜">ああああ</a>とあったら、
<a href="〜">うううう</a>と書き替えたいんです。
だけど、 や{にリンクがつくのは避けたいのです。
それで、上の文で、 のほうはつかないようにできたのですが、
{のほうには、どうやってもついてしまいます。
どなたか助けてください。
0519デフォルトの名無しさん
2005/10/18(火) 06:57:250520デフォルトの名無しさん
2005/10/18(火) 07:52:33$hoge =~ s!([^<>{ \n]+)(<a .*?>).*?(</a>)!$2$1$3</a>!g;
0521520
2005/10/18(火) 07:58:01もしかしてマルチバイト文字の中に{が入ってると上手くいかないのかな?
そーゆーときはEUC-JPとかに変換して処理しませう。
0522519
2005/10/18(火) 08:43:23解説ありがとうございます。
はずかしながら、map と quotemeta を始めて知りました。
すごい便利ですね。今後活用します!
map
map は,リスト中の各要素を「式」または「ブロック」で
評価した結果からなるリストを返す関数である。
grep 同様,各要素は $_ で参照できる。
quotemeta
引数からすべての正規表現のメタ文字をバックスラッシュで
エスケープしたものを返す。
0523509
2005/10/18(火) 08:44:06名前間違えました。orz
0524デフォルトの名無しさん
2005/10/18(火) 09:05:55どうみても>512のほうがよくできてるよな…
my @a = qw(1 3 1);
my @b = qw(a0 b1 c2 a0 b1 c2);
my @a_reg = ();
push @a_reg, qr/$_/ foreach @a;
my @temp = ();
CHECK: foreach my $test (@b) {
foreach my $reg (@a_reg) {
next CHECK if $test =~ /$reg/;
}
push @temp, $test;
}
my %seen = ();
my @nomatch = ();
foreach (@temp) {
push @nomatch, $_ unless $seet{$_}++;
}
print "@nomatch";
0525デフォルトの名無しさん
2005/10/18(火) 10:57:100526デフォルトの名無しさん
2005/10/18(火) 12:33:220527デフォルトの名無しさん
2005/10/18(火) 13:13:210528デフォルトの名無しさん
2005/10/18(火) 21:28:390529デフォルトの名無しさん
2005/10/18(火) 21:52:10ごく普通に使ってるよ。
CPAN にあるデザパタ系のユーティリティクラスは正直使い勝手が悪いので、
自分でイチから書いたけど。
0530デフォルトの名無しさん
2005/10/18(火) 22:25:590531デフォルトの名無しさん
2005/10/18(火) 22:41:44デケデケ | |
ドコドコ < Perl6まだぁ〜!? >
☆ ドムドム |_ _ _ _ _ _ _ _ _ _|
☆ ダダダダ! ∨ ∨ ∨ ∨ ∨ ∨ ∨ ∨ ∨
ドシャーン! ヽ オラオラッ!! ♪
=≡= ∧_∧ ☆
♪ / 〃(・∀・ #) / シャンシャン
♪ 〆 ┌\と\と.ヾ∈≡∋ゞ
|| γ ⌒ヽヽコ ノ ||
|| ΣΣ .|:::|∪〓 || ♪
./|\人 _.ノノ _||_. /|\
ドチドチ!
0532デフォルトの名無しさん
2005/10/18(火) 23:13:00レンタル鯖がaaacafeでmySQLは使えるのですが、鯖にDBIモジュールがないようなのです。
レンタル鯖のCGIで接続したい場合、どういった方法を取ればいいのでしょうか。
CGI自体はローカル起動、ローカルのMySQL、ローカル起動、レンタル鯖のMySQLで正しく動くので、スクリプト上のエラーではないと思います。
DBI.pmを追ってみたのですが全然整理できませんでした。
ヒントでもあればお願いします。
0533デフォルトの名無しさん
2005/10/18(火) 23:20:410534デフォルトの名無しさん
2005/10/18(火) 23:24:53DBIモジュールがないとわかってるのならインスコすればいいような...
0535デフォルトの名無しさん
2005/10/19(水) 00:19:43DBI確認できないだけでなんてこっちに移動するんだか…
自分でプロパイダかサーバ(or perl)自身に問い合わせて確認すれ。
か、自分で API組むか組み込めよ。
0536デフォルトの名無しさん
2005/10/19(水) 11:21:530537デフォルトの名無しさん
2005/10/19(水) 12:43:110538デフォルトの名無しさん
2005/10/19(水) 15:32:52具体的にはHalf-Life:Counter-Strike1.6の鯖でポートは27015番です。
0539デフォルトの名無しさん
2005/10/19(水) 15:58:50サーバー状態が何かにもよるがtcpでconnectできりゃいいだけなら
Net::Pingで調べられる。デフォルトのechoポート以外を使う方法は
SYNOPSYSのプログラム例にある。しかしこのくらいマニュアル読め
ばわかると思うのだが....
0540デフォルトの名無しさん
2005/10/19(水) 17:57:590541デフォルトの名無しさん
2005/10/19(水) 18:01:410542デフォルトの名無しさん
2005/10/19(水) 18:07:35>>541(´・ω・) カワイソス
0543デフォルトの名無しさん
2005/10/19(水) 18:14:470544デフォルトの名無しさん
2005/10/19(水) 18:35:440545デフォルトの名無しさん
2005/10/19(水) 18:45:08perldocより
If "RECURSE" is *true* then "rmdir" will attempt to delete everything inside the directory.
rmdir($dir, 1);
で良いんじゃなかろか。試してないけれど
0546デフォルトの名無しさん
2005/10/19(水) 18:47:41ftp的にできないので(鯖によるかもしれんが普通できない)、
Net::FTP使って再帰的にディレクトリ掘って中のファイルやディレクトリを順に消してくしかない。
0548デフォルトの名無しさん
2005/10/19(水) 22:37:44> >>546
> やっぱそれしか無いのかなぁ。
Net::FTPのrmdirというメソッドにそのコードが入っているから
コピるといいよ。
0549デフォルトの名無しさん
2005/10/20(木) 09:44:50close で返り値をチェックしないのはなぜ?」 と質問されました。
「チェックしてもいいけど、もしcloseでエラーが起きたとき、
どういう処理をすればいいと思う?」
と説明しましたが、ちょっと不安になりました。。
close も返り値をチェックした方が良いのでしょうか?
もちろん、スクリプトの目的に依存するのはわかりますが、
こんな時には close もチェックしたほうが良いといった具体例はあるでしょうか?
一般的に返り値のチェックに関しては、私は経験的に
・ファイル、ネットワーク周りのIOが発生する関数、
・system,
のような関数には必ず返り値をチェックするようにしています。
でも、use もpmファイルを読み込んでいますが、これをチェック
したことはありません。
どんなときに返り値をチェックするか、初心者に説明しやすい一般的な基準は
無いでしょうか?
0550デフォルトの名無しさん
2005/10/20(木) 10:01:310551デフォルトの名無しさん
2005/10/20(木) 10:11:26そのファイルへの書き込みが完了したことを確実に確認
する必要があって、且つNFSなどネットワーク越しの操作と
なっている可能性がある場合。
0552デフォルトの名無しさん
2005/10/20(木) 16:18:020553デフォルトの名無しさん
2005/10/20(木) 16:33:18NEET
0554デフォルトの名無しさん
2005/10/20(木) 19:03:270555デフォルトの名無しさん
2005/10/20(木) 19:52:00日本語勉強しる
0556デフォルトの名無しさん
2005/10/20(木) 19:54:22眼鏡っ娘女子中学生
0557デフォルトの名無しさん
2005/10/20(木) 20:03:09様々に決まってるダロ。
また、SEやPGが必ずしも知識を持っているわけではナイ。
0558デフォルトの名無しさん
2005/10/20(木) 20:09:18匿名掲示板でんなことわかるかい!
0559デフォルトの名無しさん
2005/10/20(木) 20:17:230560デフォルトの名無しさん
2005/10/20(木) 20:19:09まず、お前の身分から言ってみろ
0561デフォルトの名無しさん
2005/10/20(木) 22:21:50部長だが何かね?
0562デフォルトの名無しさん
2005/10/20(木) 22:28:49どうせ宴会部長だろ?w
0563デフォルトの名無しさん
2005/10/20(木) 22:37:550564デフォルトの名無しさん
2005/10/20(木) 22:54:210565デフォルトの名無しさん
2005/10/20(木) 23:12:500566デフォルトの名無しさん
2005/10/20(木) 23:24:44事故が起きても謝りに行くのは課長だし…
社員からは「部長、仕事してねーよ」とか言われてます。
私だって好きで部長になった訳じゃないのです。本当はバリバリ
仕事したいのに…
0567デフォルトの名無しさん
2005/10/20(木) 23:49:23ttp://www.geocities.jp/c_hallenge/
0568デフォルトの名無しさん
2005/10/21(金) 00:13:53($sec,$min,$hour)=localtime(time)[0..2];
のような構文がけられます。
)[ のとこがダメっていわれます。どうなってるの?
ちなみにcygwin/ Perl 5.8.7だとうまくいくけど、Soralis9/SunOS 5.9 / Perl 5.8.7だとダメです。
0569デフォルトの名無しさん
2005/10/21(金) 00:27:31(localtime(time))[0..2]
ってやると上手くいきますね
Mac OS X 10.4.2 の Perl5.8.6です
0570デフォルトの名無しさん
2005/10/21(金) 01:29:35http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldata.html#List_value_constructors
うまくいくのは勘違いかバグだろう。
0571デフォルトの名無しさん
2005/10/21(金) 01:56:26cygwin版では 処理の優先順位が違うのかな?
ちなみに
perl, v5.8.4 built for i386-linux-thread-multi
perl, v5.8.7 built for MSWin32-x86-multi-thread
でも () で array にする必要あり。
0572デフォルトの名無しさん
2005/10/21(金) 07:24:30最近perlを学習し始めたんですが、perlで書かれたプログラムで
きれいなソースのやつを教えてもらえませんか。
0573デフォルトの名無しさん
2005/10/21(金) 08:08:37最近、Perlを学習し始めたのなら、きれいなソースを見たってしかたないだろ。
もっと勉強してから出直してこい。
0574デフォルトの名無しさん
2005/10/21(金) 10:04:39http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlstyle.html
自作CGIを評価するスレ
http://pc8.2ch.net/test/read.cgi/php/1049514428/
0575デフォルトの名無しさん
2005/10/21(金) 10:29:24「きれいなソース」とは、どういう意味で言ってる?
コーディングスタイルのこと?
それとも、様々なテクニックを駆使した芸術的なコードのこと?
初心者なら、後者はまだ不要。
本屋で売っているPerl入門書で、まずはみっちり勉強することだ。
どんな本でも良いが、それとは別に“ラクダ本”は必ず買っとけ。
Perlのバイブルだし、設計思想なども学ぶことができる。
0576デフォルトの名無しさん
2005/10/21(金) 10:30:06cpanに行けばPer Hackerが書いたスクリプトが
沢山あるからみてみることをお勧めする
逆に汚い例は日本の巷に溢れるCGIスクリプトだな。
当然綺麗なものも中にはあるんだろうが、悪い例に毒されたものが多すぎる…
0577デフォルトの名無しさん
2005/10/21(金) 10:46:522レベルになるとタブでインデントしてあったりするんだが、何を使うとこうなるんだろ・・・
普段タブ幅を4でやってるからそのままじゃ読みにくくてかなわん
0578デフォルトの名無しさん
2005/10/21(金) 11:18:360579デフォルトの名無しさん
2005/10/21(金) 11:25:21そうなのか・・・Un*x環境ではVim派な漏れ
# vim:set ts=4 sts=4 sw=4 tw=0:
0580デフォルトの名無しさん
2005/10/21(金) 11:52:54一時的にタブ幅の設定を8に変えるか(ts=8)、expand(1)などで
自分好みにおきかえたファイルを別に作るかだろうな。
0581572
2005/10/21(金) 12:21:33お返事どうもです。
ええっと、言葉が足りなかったですね。他の言語での経験はあります。
あと、「きれい」とは「保守しやすい」という意味で使ってました。
必要に駆られて、perlを勉強することになったのですが、ソース読みながら
勉強したほうが早いので、おススメのがあれば、と聞いてみました。
CPANを探してみることにします。
e-book版が安かったから、ApressのJames Lee"Beginning Perl, Second Edition"
を使って勉強しています。自分にはちと初心者向けすぎて冗長な感じがしますが、
読みやすく、ハマりそうなところもきちんと説明してあって、良い本だと思いました。
精進します。それでは。
0582デフォルトの名無しさん
2005/10/21(金) 12:25:45http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlstyle.html
の
> その行内でマッチする最後の括弧の後にスペースを入れる。
だけ意味が分からなかった。どういう意味なんだろう。
0583デフォルトの名無しさん
2005/10/21(金) 13:04:34漏れも分からん。
原文ではSpace after last parenthesis matching on current line.とあるから、丸括弧のことだろうが…
0584デフォルトの名無しさん
2005/10/21(金) 13:24:16外してる可能性が高いが、
if( EXPR ){ ... } と書かず
if (EXPR) { ... } と書け、という事では無かろうか。
0585デフォルトの名無しさん
2005/10/21(金) 13:48:56defined($self->param($name)) ) ) {
の2行目の後から3つ目のカッコのあとに入れたスペースのようなもののことではないかと。
(上の例ははlib/CGI.pmの中から抜き出したものです)
0586デフォルトの名無しさん
2005/10/21(金) 13:56:22(a + (b +
(c + d)_))
_ の箇所にスペースを入れろ、ということだと思われるが
0587586
2005/10/21(金) 13:57:480588デフォルトの名無しさん
2005/10/21(金) 17:04:59perlの配列変数の添え字を7ケタにすると500エラーになってしまうのですが
これはこういうものですか、それとも鯖依存でしょうか?
$test[0] = test;
print "content-type:text/html\n\n";
print "$test[0]";
は動くけど
$test[1234567] = test;
print "content-type:text/html\n\n";
print "$test[1234567]";
はエラーになる
0589デフォルトの名無しさん
2005/10/21(金) 17:29:24とした時点で1234567要素分の配列のためのメモリ領域がとられるから、
制限がケチだとメモリ使い杉でエラーになるかもな。
0590デフォルトの名無しさん
2005/10/21(金) 17:36:00このスレに書くならせめて「500エラー」じゃなくてエラーメッセージを調べて書こうな。
配列ってのは基本的に連続したデータのためのものだから、
連続したデータじゃないなら連想配列を使うべし。
連続したデータなら…そんな大きなデータを扱わなくても良いように設計を見直すべし。
0591デフォルトの名無しさん
2005/10/21(金) 17:38:54なるほど、納得
0592デフォルトの名無しさん
2005/10/21(金) 17:42:27即レス感謝です。
恥ずかしながらyyyymmddをそのまま添え字にして動かしてました
1900と1足してなかったから今まで何とか動いてただけかorz
0594デフォルトの名無しさん
2005/10/21(金) 20:30:500595デフォルトの名無しさん
2005/10/21(金) 22:09:53ヒント:連想配列
0596デフォルトの名無しさん
2005/10/22(土) 01:02:59鯖屋との契約内容次第だろ。
鯖屋にメールしる。
0597デフォルトの名無しさん
2005/10/22(土) 14:06:39Perlで残り容量調べれないとこれ以上書き込めませんっていうメッセージ出せない
0598デフォルトの名無しさん
2005/10/22(土) 14:52:38> Perlで残り容量調べれ
るようにしているかは鯖屋次第。
0599デフォルトの名無しさん
2005/10/22(土) 17:17:36print "変数から実行\n $zz";
○○○○の中だけ、いじれる場合に【print "123"】とか実行させることは
できないでしょうか?
$zzに色々関数を入れたいんですが・・・
0600デフォルトの名無しさん
2005/10/22(土) 17:21:590601デフォルトの名無しさん
2005/10/22(土) 17:33:25print "変数から実行\n $zz";
[出力]
変数から実行
eval(print "123")
※注 ○○○○の中だけなので、
【print "変数から実行\n】の後ろに認識する「ダブルコーテーション」を
入れることができれば・・・無理かなぁ
0602デフォルトの名無しさん
2005/10/22(土) 17:35:420603デフォルトの名無しさん
2005/10/22(土) 20:10:14つーか、'使えばすぐ出来るだろ。
0604デフォルトの名無しさん
2005/10/22(土) 21:32:09下みたいなコードを書いて一応期待通りに動いていますが、もっとスマートな方法ありませんか?
なお、単語はスペースで区切られていて、hoge は hogehoge とは一致しないものとします。
my $KEY = 'hoge'; #キーワード
my $str = 'hoge hogehoge foo hoge bar hoge';
my $count = 0;
while($str =~ s/(^$KEY\s|\s$KEY\s|\s$KEY$)//) { $count ++; }
print "ans = $count\n";
0605604
2005/10/22(土) 21:38:59こうしないと、カウント失敗するパターンがあるので。 (' a hoge hoge' とか)
正) while($str =~ s/(^$KEY\s|\s$KEY\s|\s$KEY$)/ /) { $count ++; }
0606デフォルトの名無しさん
2005/10/22(土) 21:59:07こんなもんかな。
my $KEY = 'hoge'; #キーワード
my $str = 'hoge hogehoge foo hoge bar hoge';
my %count;
foreach (split(/\s+/, $str)) {$count{$_}++ }
print "ans = $count{$KEY}\n";
0607酩酊 ◆TWARamEjuA
NGNGでもよさそうな?
0608デフォルトの名無しさん
2005/10/22(土) 22:25:25始めそう思ったが駄目なはず。
@a = ($str =~ /\b$KEY\b/og); $count = scalar(@a);
破壊してよいなら、リファレンスマニュアル的に
$count = ($str =~ s/\b$KEY\b//og);
0609608
2005/10/22(土) 22:40:22$count = () = $str =~ /\b$KEY\b/og;
0610酩酊 ◆TWARamEjuA
NGNGあれま、、、浅はかだったかぁ。。。
printf "ans = %dn", scalar map 1, $str =~ m|b$KEYb|og;'
これだと出てくるのかぁ(汗)
0611604
2005/10/22(土) 22:45:23ところで、
>>607 の m|\b$KEY\b|g; はどういう処理ですか?
基本構文っぽいけど、見たことない。
0612デフォルトの名無しさん
2005/10/22(土) 22:49:53ああ、なるほど。いったん配列で受けるのか。
これは応用でいろいろ使えそうですね。
0613デフォルトの名無しさん
2005/10/22(土) 22:52:25>>611
…スマートどうこう垂れるなら、マニュアル,FAQぐらいひけよ。
608,609 はそこにそのまま載っている。
0614デフォルトの名無しさん
2005/10/23(日) 01:06:44の出力が0とか1になるのですが、ちゃんとしたpingとかの
リプライを出力するにはどうしたらよいのでしょうか?
よろしくお願いいたします。
0615デフォルトの名無しさん
2005/10/23(日) 01:31:510616デフォルトの名無しさん
2005/10/23(日) 01:37:10printがいらないのでは?
0617デフォルトの名無しさん
2005/10/23(日) 01:43:30printで解決をしたいです!
0618デフォルトの名無しさん
2005/10/23(日) 01:52:43pingの出力をファイルに書き出して、
それを読むのもだめ?
0619デフォルトの名無しさん
2005/10/23(日) 01:55:320620デフォルトの名無しさん
2005/10/23(日) 03:39:22print `ping -c 3 10.1.1.1`;
0621デフォルトの名無しさん
2005/10/23(日) 10:41:58$host = '127.0.0.1';
$a = system("ping $host");
print "ping -c $host";
print $a;
$aにpingの結果を入力し、その中からtime<1msの部分を抜き出す
プログラムを作りたいのです。
が、print $a;
の出力が0とかになるので、そこを直したいです。
0622デフォルトの名無しさん
2005/10/23(日) 10:57:040623デフォルトの名無しさん
2005/10/23(日) 11:22:28ありがとうざいます。
その中からTimeのところを抜き出したいのですが、
ヒントをください。
NOTFILEDIRECTORYになってしまいます。
よろしくお願いいたします。
#!/usr/bin/perl
$host = '127.0.0.1';
$a = ` ping $host `;
print $a;
$b = `grep time $a`;
0624デフォルトの名無しさん
2005/10/23(日) 11:52:50Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Linux>exit
Windows>telnet 10.1.1.1
Username:
Password:
Unix> ping -n 2 127.0.0.1
Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<5ms TTL=128
Reply from 127.0.0.1: bytes=32 time<5ms TTL=128
Unix>exit
上記のようなログがあり
その中からpingのリプライのtime<xmsをリストするプログラムを教えてください
出力としては
Linuxtime<1ms
Unixtime<5ms
にしたいです。
よろしくお願いいたします。
0625デフォルトの名無しさん
2005/10/23(日) 11:58:082行のReplyが1行になってるけど、timeは平均するの?
0626デフォルトの名無しさん
2005/10/23(日) 12:13:16split
0627625
2005/10/23(日) 12:13:55my $time = 0;
my $time_count = 0;
while ($line = <>) {
if ($line =~ m/>.*?ping/) {
print "ping\n";
$time = 0;
$time_count = 0;
} elsif ($line =~ m/Reply[^<]+<(\d+)ms/) {
print "reply\n";
$time += $1;
$time_count++;
} elsif ($line =~ m/^(.*?)\s*>\s*exit/) {
print "exit\n";
my $name = $1;
next if $time_count == 0;
my $ms = $time / $time_count;
print $name, "<", $ms, "ms\n"
}
}
0628デフォルトの名無しさん
2005/10/23(日) 12:21:010629デフォルトの名無しさん
2005/10/23(日) 13:19:27めんどくさいから
0630デフォルトの名無しさん
2005/10/23(日) 20:13:290631デフォルトの名無しさん
2005/10/23(日) 23:24:12答えの出力方法が分からないのですが、どうやれば良いのでしょうか?
use strict;
print "整数値を入力してください:\n";
chomp(my $number = <STDIN>);
factorial($number);
sub factorial
{
my $number = shift @_;
return undef if $number < 0; # 無効な値
return 1 if $number == 0;
return ($number * factorial($number-1));
}
0632デフォルトの名無しさん
2005/10/23(日) 23:25:48じゃないの?
0633デフォルトの名無しさん
2005/10/23(日) 23:29:28""の使い方間違っていました。
ありがとうございます!
プログラムって面白いですね。
0634デフォルトの名無しさん
2005/10/23(日) 23:31:33> プログラムって面白いですね。
そう思うなら早めにPerlから他の言語に鞍替えしなさい
0635デフォルトの名無しさん
2005/10/24(月) 01:40:03モジュールの解説本(邦もの)で良いやつ紹介して。
0636デフォルトの名無しさん
2005/10/24(月) 02:10:29本当に再帰呼出を使うのはヴァカがすることです。
$ans *= $num-- while $num > 0;
0637デフォルトの名無しさん
2005/10/24(月) 02:16:200638デフォルトの名無しさん
2005/10/24(月) 02:29:43今HP自動巡回で使う wgetを使用してHPのhtmlファイルを集めています。
そこで、対象のアドレスがhttp://www.〜〜〜〜〜/k494949/ になっており
0〜999999までを集めるために繰り返し文を作成したのですが、エラーになってしまいます。
!#C:Perl
for($i=0;$i<=999999;$i++){
system("wget http://〜〜〜〜〜〜〜.jp/k$i/");
このように、アドレスの数字の部分を変数にして回したいのですが
どうすればこのスクリプトは動きますか??
文法エラーだと出力されて、for と++)の近くが怪しいと出ています。
どなたかお力をお借りしたいです。
}
0639デフォルトの名無しさん
2005/10/24(月) 02:39:20for($i=0;$i<=999999;$i++){
system("wget http://〜〜〜〜〜〜〜.jp/k$i/");
}
これで大丈夫(^^)
0640デフォルトの名無しさん
2005/10/24(月) 02:41:15迷惑だからやめろといいたいが、やるならせめて wget -w 5 …としてやってください
で、
!#C:Perl
がおかしいと思う
0641デフォルトの名無しさん
2005/10/24(月) 02:58:49返答ありがとうございます。
今試してみたのですが、うまくいっているようです(^^)
あとできればもう一つ質問なんですが、得られたhtmlファイルが〜.html.1
〜.html.2という風に同ディレクトリに作成されます。
これをk494949.htmlまたは494949.htmlとアドレス通りのファイル名にした
と考えています。
このやり方もご教授願えないでしょうか?
>640
htmlファイルを集めて、文字パターンを使ったマッチングで必要な
文字を抜き出して、CSVファイルを作ろうとしています。
0642デフォルトの名無しさん
2005/10/24(月) 05:39:23rename("index.html.$i", "k$i.html");
}
0643デフォルトの名無しさん
2005/10/24(月) 14:02:18どうやればいいんですか?
0644デフォルトの名無しさん
2005/10/24(月) 14:09:50File::Copy でも使えば?
なんなら rename でも。
0645デフォルトの名無しさん
2005/10/24(月) 14:51:23http://pc3.2ch.net/tech/kako/1017/10177/1017736187.html
0646デフォルトの名無しさん
2005/10/24(月) 15:49:53書いてて嫌になったんだけど、.hを通すとそれっぽい
テンプレートにしてくれるツールとかないすかね。
0647デフォルトの名無しさん
2005/10/24(月) 16:02:18ありがとうございました。うまく変換することができました。
やっぱりリファレンス本が必要ですね。
助かりました。
0648デフォルトの名無しさん
2005/10/24(月) 16:19:30system関数が機能しません。
何故でしょうか?教えて下さい。
ちなみにパスは通っています。
0649デフォルトの名無しさん
2005/10/24(月) 16:25:48なんてエラーでるの?
0650デフォルトの名無しさん
2005/10/24(月) 16:33:42perldoc -f system を実行すると、
Can't spawn "cmd.exe":No such file or directory at C:/Perl/lib/Pod/Perldoc.pm line1515.
とエラーがでました。
何度か再インストールも行いました。
色々調べましたが、原因不明です。
お願いします。
0651デフォルトの名無しさん
2005/10/24(月) 16:41:07c:\windows\system32にパスが通ってないんじゃない?
perlにはパス通したけどシステムのパスはずしちゃったってオチ?
0652デフォルトの名無しさん
2005/10/24(月) 16:48:21PATHにはC:\Perl\bin\が通っており、
ComSpecにはC:\WINNT\system32\cmd.exeが通っております。
PATH=C:\Perl\bin\;C:\WINNT\system32\
とすれば良いのでしょうか?
環境変数を変更した後って再起動が必要でしたっけ?
0653デフォルトの名無しさん
2005/10/24(月) 16:48:33File::Copy使えない環境だとどうすればいいですか?
0654デフォルトの名無しさん
2005/10/24(月) 16:50:33>PATH=C:\Perl\bin\;C:\WINNT\system32\
>とすれば良いのでしょうか?
それでやってみなよ。
コマンドプロンプトの再起動だけでいい。
# 当方XPなのでC:\windowsとか言って失礼
0655デフォルトの名無しさん
2005/10/24(月) 16:55:05mkdir() して rename() でいいのでは?
0656デフォルトの名無しさん
2005/10/24(月) 16:56:08仰る通りでした。本当にありがとうございました。
大変感謝しております。
0658デフォルトの名無しさん
2005/10/24(月) 17:00:07無料鯖のCGIとか?
0659デフォルトの名無しさん
2005/10/24(月) 17:17:49ちなみにActivePerlってC:\Program Filesにインストールしても、
パスを通してやれば、ちゃんと動くんでしょうか?
半角スペースが入っているとダメでしたっけ?
0660644
2005/10/24(月) 17:19:05書き方が分かりづらかったね。
File::Copy 使うか、モジュールが使えない環境なら rename でも用は足りるだろ、といいたかった。
0661デフォルトの名無しさん
2005/10/24(月) 17:25:30動くだろうけど、絶対問題が起こらないとは言い切れないな。
0662デフォルトの名無しさん
2005/10/24(月) 17:45:27わかりました、やってみます。
本当に色々とありがとうございました。
0663デフォルトの名無しさん
2005/10/25(火) 20:48:13closeで止まってしまいます。
どうしたら動いてくれますか?
----------------------------------
open FH, "tail -f /var/log/messages |";
sleep 1;
close FH;
----------------------------------
0664デフォルトの名無しさん
2005/10/25(火) 21:09:460665デフォルトの名無しさん
2005/10/25(火) 21:19:40Convert::Binary::C
0666デフォルトの名無しさん
2005/10/25(火) 22:00:45perldoc -q tail
0667デフォルトの名無しさん
2005/10/25(火) 22:28:02while(1)で永久ループさせるのってアリですか?
0668デフォルトの名無しさん
2005/10/25(火) 22:41:13単なるプログラミングの一般論としてはアリ。
ただしレン鯖とかだと常駐モノは禁止されてることもある。
0669663
2005/10/25(火) 22:58:21ログファイルのローテートに対応するために、
open FH, "tail --follow=name --retry /var/log/messages |";
としてtailコマンドを使いたかったんですけど、この目的のためには
File::Tailしかないのかなぁ?
0670デフォルトの名無しさん
2005/10/25(火) 23:18:00だからなぜFHをcloseするのかと...
普通に読み出せばええやん。
0671デフォルトの名無しさん
2005/10/26(水) 01:07:16while(<FH>)
0672デフォルトの名無しさん
2005/10/26(水) 01:39:500673デフォルトの名無しさん
2005/10/26(水) 02:05:591 は読んだ?
0674デフォルトの名無しさん
2005/10/26(水) 02:14:23それなら、どこで聞けばいいかな・・・
0675デフォルトの名無しさん
2005/10/26(水) 02:43:071 は読んだ?
0676デフォルトの名無しさん
2005/10/26(水) 08:00:11現在はPerlMagick+Win32::GUIを使い、
【PerlMagickで画像作成&png等書き出し→
Win32::GUI::DIBitmapでpng等読み込み&bmp保存→
Win32::GUI::Bitmapで読み込み】
としているのですが、一時ファイルを使わない方法を探しています。
勉強中なので同じ処理ができるかどうかわかりませんが、もしGDやTkで可能でしたら教えてください。
0677663
2005/10/26(水) 11:50:18straceでみるとwait4で止まったままです。
下記のスクリプトは問題箇所だけを抽出しましたが、print文は
実行されません。
----------------------------------
open FH, "tail -f /var/log/messages |";
#ログの処理
sleep 1;
close FH;
print "end\n";
----------------------------------
0678デフォルトの名無しさん
2005/10/26(水) 13:14:31openからPID獲って、closeする前SIGINTでも撃ち込めばいいんじゃないの?
0679デフォルトの名無しさん
2005/10/26(水) 13:20:11EOF フラグを消す必要がある。
see perl cookbook 3rd ed.
open FH, "/var/log/messages" or die $!;
for (;;) {
while (<FH>) { #ログの処理 }
sleep $SOMETIME;
seek( FH, 0, 1 ); # EOF フラグをクリア
}
0680デフォルトの名無しさん
2005/10/26(水) 13:21:21sorry.
0681デフォルトの名無しさん
2005/10/26(水) 14:21:58> PerlでDDNSクライアントを作っているのですが、
もうあるよ
0682デフォルトの名無しさん
2005/10/26(水) 17:38:21かたかなとひらがなを判別することは
できるんでしょうか??
全角半角まではたどり着いたのですが、
カタカナでなかったらエラー、としたいのです。
よろしくお願いします。
0683デフォルトの名無しさん
2005/10/26(水) 17:44:420684デフォルトの名無しさん
2005/10/26(水) 17:49:30http://www.din.or.jp/~ohzaki/perl.htm#Character
>>390-辺りにも同様の質問があるのでこちらも参考に
0685デフォルトの名無しさん
2005/10/26(水) 17:50:410686デフォルトの名無しさん
2005/10/26(水) 20:32:36逆に、ファイルの最後のの行から一行ずつ、逆順に読み出す為にはどうしたら良いでしょうか。
0687デフォルトの名無しさん
2005/10/26(水) 20:55:46File::ReadBackwards
0688デフォルトの名無しさん
2005/10/26(水) 21:06:32http://www.din.or.jp/~ohzaki/perl.htm#File_Reverse
0689デフォルトの名無しさん
2005/10/26(水) 21:11:31うおおおおおおおお!
ありがとうございます!!
大変助かりました!!!!
0690デフォルトの名無しさん
2005/10/26(水) 21:50:04MyDNSで使えるクライアントある?
0692デフォルトの名無しさん
2005/10/26(水) 22:51:06話をループさせてるな。
0693デフォルトの名無しさん
2005/10/26(水) 22:53:080694デフォルトの名無しさん
2005/10/26(水) 22:59:11やっぱり? 俺もさっき繋がらなかったヨー
0695デフォルトの名無しさん
2005/10/26(水) 23:07:39コンソールから
$ hoge.pl [Enter]
と生手打ちで起動されたか、
あるいは Cronなどから無人で起動されたかを
スクリプト内から判断する方法ってないでしょうか?
すんません、よかったら教えてください。
0696デフォルトの名無しさん
2005/10/26(水) 23:14:58http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq8.html#How_do_I_find_out_if_I_m_running
0697695
2005/10/26(水) 23:26:40-t という演算子も初めて知りました。
ありがとうございます。
0698デフォルトの名無しさん
2005/10/26(水) 23:30:36理由はMyDNSで使えるものが無かったからです。
DDNSサーバによって認証方法がまちまちなので
認証実行部分はクラス化してStrategyパターンで
プラグイン可能にしてあります。
0699デフォルトの名無しさん
2005/10/26(水) 23:43:130700デフォルトの名無しさん
2005/10/27(木) 07:49:32今のところ、ハッシュで二次元配列を作り、その値を<=>でソートするような事
しかイメージできていないのですが、これだと、$aと$bをどう使いまわせばいい
のか思いつきません。このような方法か、二次元配列以外の方法で、解決する方
法がありましたら、御教授ください。
よろしくお願いします。
0701デフォルトの名無しさん
2005/10/27(木) 09:47:56http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_do_I_sort_an_array_by_anyth
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldsc.html
0702デフォルトの名無しさん
2005/10/27(木) 11:50:01のabcの中身はどうすれば確認できるでしょうか?
printなどを試してみましたが、うまく行かなかったので
お教えください。
0703ヽ(´ー`)ノ ◆.ogCuANUcE
2005/10/27(木) 12:21:310704デフォルトの名無しさん
2005/10/27(木) 14:39:33ありがとうございます。
うまく出力できました。
0705デフォルトの名無しさん
2005/10/27(木) 14:57:29my $flg_binary = sprintf("%d%04d%d%d%d%d%03d%d", 0, 0, 0, 0, 1, 0, 0, 0);
my $flg = pack("B16", $flg_binary);
my $question_count = pack('n', 1);
my $response_count = pack('n', 0);
my $auth_count = pack('n', 0);
my $ext_count = pack('n', 0);
my $query_name = "wwwyahoocojp";
my $query_type = pack('n', 1);
my $query_class = pack('n', 1);
my $question = $query_name.$query_type.$query_class;
my $request = $id.$flg.$question_count.$response_count.$auth_count.$ext_count.$question;
というプログラムで最後の行の$requestの中身が知りたいのですが、
print "request = $request\n";
と最後に追加して実行すると下記のように表示されます。
request = wwwyahoocojp
プログラムの流れを見ていると、
もっといろいろ付加されているように思われるのですが、
$query_nameの値しか反映されておりません。
どこに問題があるか分かる方いらっしゃいますか。
分かるようでしたら教えてください。よろしくお願いします。
0706デフォルトの名無しさん
2005/10/27(木) 15:06:55なぜか空のディレクトリだけスルーされてしまう。中身の入ったディレクトリandファイルは全てGetできてます。
わかる人いますか?なんかオプションの指定とかでできるのかな?
$ftp -> rget;
0707デフォルトの名無しさん
2005/10/27(木) 15:28:35>>705
sub hd { join ' ', map uc unpack('H2', $_), split //, $_[0] }
my %data = (
id => '0000000000000000',
flg => [ 0,0,0,0,1,0,0,0 ],
question_count => 1,
response_count => 0,
auth_count => 0,
ext_count => 0,
query_name => 'wwwyahoocojp',
query_type => 1,
query_class => 1,
);
my $request = join '', (
pack(B16 => $data{'id'}),
pack(B16 => sprintf '%d%04d%d%d%d%d%03d%d', @{$data{'flg'}}),
pack(n => $data{'question_count'}),
pack(n => $data{'response_count'}),
pack(n => $data{'auth_count'}),
pack(n => $data{'ext_count'}),
$data{'query_name'},
pack(n => $data{'query_type'}),
pack(n => $data{'query_class'}),
);
print hd($request);
0708デフォルトの名無しさん
2005/10/27(木) 15:36:09単に表示可能な文字列ではないだけだと思うが。
0709デフォルトの名無しさん
2005/10/27(木) 16:16:19>708
実行してみたところ、下記のように表示されましたが、
もうしわけありません、理解できませんでしたorz。
00 00 01 00 00 01 00 00 00 00 00 00 77 77
77 79 61 68 6F 6F 63 6F 6A 70 00 01 00 01
今やろうとしているのは
http://x68000.q-e-d.net/~68user/net/sample/resolver-1.pl
の、DNSクライアントをCに移植させたいと思っています。
$requestの中身を表示させたかったのは
この中身がDNSパケットのデータそのものではないかと思い、
これが分かれば、そのデータをそのまま決め打ちしてDNSサーバにデータを
送っても名前解決をしてくれないかなと思ったからです。
最終的には決めうちではなく、
入力されたデータにきちんと対応するようにしたいのですが、
pack('B16', ...)に相当するC言語の処理の仕方が分からないなどの問題があり、
とりあえず決め打ちさせてみようと思いました。
ここら辺のお話が分かるようでしたらご教授願えればと思います。
よろしくお願いします。
0710デフォルトの名無しさん
2005/10/27(木) 16:22:13その辺の基礎から教えるのは疲れるからやだな。いろいろ
勉強してから出直してくれ...
0711デフォルトの名無しさん
2005/10/27(木) 16:36:55たしかにそのとおりですね。
perlはほとんど触ったことが無いのでもっとperlの勉強をやらないとだめですね。
一応16進ダンプの中身は分かるのですが。
00 00がid
01 00がflg
00 01がquestion_count
00 00がresponse_count
00 00がauth_count
00 00がext_count
77 77 77 79 61 68 6F 6F 63 6F 6A 70がwwwyahoocojp
01がquery_type
01がquery_class
でも作っていただいたソース自体が理解できてないorz。
0712デフォルトの名無しさん
2005/10/27(木) 18:02:27707じゃないけど。>>705は単発の変数使いまくりだからハッシュでまとめてる。
「=>」は左辺を文字列として認識するカンマ。
「 . 」でちまちま連結してるところはjoin ''で一気に連結。
flgは無名配列のリファレンス取って後でデリファレンスしてる。
packはテンプレートの対応表見ればすぐできそう。
ttp://www.rfs.jp/sitebuilder/perl/05/func/pack.html
0713デフォルトの名無しさん
2005/10/27(木) 20:04:39↑
にperlのプログラムです。文の要約をするプログラムなのですが、真ん中らへんの
if($keitaiso[$i] ne "EOS"){
$len[$i] = length($keitaiso[$i]);
$mojisuu[$k] = $mojisuu[$k] + $len[$i];
の部分と
$moji = 0;
$gyou = 0;
と書かれているとこより下の部分が何をやっているのかよくわからないのですが、
だれか解説してくれませんか?
0714デフォルトの名無しさん
2005/10/27(木) 20:10:54>>2
0715デフォルトの名無しさん
2005/10/27(木) 20:24:55> if($keitaiso[$i] ne "EOS"){
> $len[$i] = length($keitaiso[$i]);
> $mojisuu[$k] = $mojisuu[$k] + $len[$i];
ここは読んで字の如しじゃないの?
もし EOS でなければ、
文字数 += $keitaiso[$i] の文字数
EOS は end of string の略とかでは。
0716デフォルトの名無しさん
2005/10/27(木) 20:29:260717デフォルトの名無しさん
2005/10/27(木) 20:44:39だよなあ。それに use strict とかしろっつー見本というか、のっけからコレだし。
> open(FP1,$chfname) || die "can't open $chname\n";
0718デフォルトの名無しさん
2005/10/27(木) 20:47:36ああああああああああああああああああああ!
こうゆうソースを見ると、無性に書き直したくなる。
$mojisuu[$k] += length($keitaiso[$i]) if $keitaiso[$i] ne "EOS";
0719デフォルトの名無しさん
2005/10/27(木) 21:09:20その先は、結果の出力。
中身が数値の $rank[$gyou] が文字列 "99" と等しい時に出力を抑制しているので、
数値から文字列への変換フォーマットには注意が必要やね。
0720デフォルトの名無しさん
2005/10/27(木) 21:12:24いろいろ意見ありがとうございますm(__)m
0721デフォルトの名無しさん
2005/10/27(木) 21:59:27他のソース(もっときれいなやつ)で勉強しなされ。
0722デフォルトの名無しさん
2005/10/27(木) 22:35:09「きれいなソースはどこに行けば見れますか?」
あえて言うが川合-Hippo2000-孝典氏のソースを推薦する。
0723デフォルトの名無しさん
2005/10/27(木) 22:41:49本人自薦乙
0724デフォルトの名無しさん
2005/10/27(木) 22:41:52いろいろとご指導ありがとうございます。
その後>707のソースを>709の該当部分に移植して、
どんなドメイン名を渡したら、どんな16進の値が格納されるか分かりました。
格納される値についても理解できました。
例
「www.yahoo.co.jp」を渡すと
00000100000100000000000003777777057961686F6F02636F026A700000010001
「infoseek.jp」を渡すと
00000100000100000000000008696E666F7365656B026A700000010001
もっともCに移植する際に必要なものは、この16進の値ではなく
その一歩前の値のような気がするのですが、
それをどう移植すればよいか分からずorz
0725デフォルトの名無しさん
2005/10/27(木) 22:47:06そもそもな話だけど、そんなリバースエンジニアリングみたいなセコいことせずに、
DNS の規格に当たった方が良いような気がする。
もっと言うと、巷にころがってる既存の DNS のリゾルバライブラリを探した方が、
楽してマトモなモノができるような気がする。
0726デフォルトの名無しさん
2005/10/27(木) 22:55:27これからperlを勉強しようと、WinXPに最新のActivePerlを
入れてみました。
でよくあるプログラムのように、先頭に
#!c:/perl/bin/Perl.exe
とやってprintとか適当にやってみたら実行できましたが、
この先頭の#!の行を取り除いても実行できてしまいました。
先頭のPerlの指定はなぜいらないのでしょうか?
どのようなときに必要なのですか?
0727デフォルトの名無しさん
2005/10/27(木) 23:26:14http://www.google.co.jp/search?hl=ja&q=%22bang+path%22+OR+%22shell-bang%22+OR+%22%22shebang+line%22&lr=lang_ja
0728デフォルトの名無しさん
2005/10/27(木) 23:56:50「シュワルツ変換」とか「シュワルツ変換とは」でgoogleしてみたのですが、
以下のようなコードが出てきて、何をやっているかはわかるんだけど、これのうち、
どの考え方のことをシュワルツ変換と呼ぶのかがわかりません。
@data = map {$_->[0]}
sort {$a->[2] <=> $b->[2]}
map {[$_, split /,/]} @data;
map とか sort とかを多段で使うことを言うのでしょうか。
(そうではないという気はしているんですが。うまく言えない。)
0729デフォルトの名無しさん
2005/10/27(木) 23:56:54windows 上では 拡張子と実行ファイルが関連付けられているので
その1行目は不要。
.html ファイルをダブルクリックしたら
windows 上だったらブラウザが起動したりするのと同じ仕組み。
0730デフォルトの名無しさん
2005/10/28(金) 00:09:22ラクダ本かperl cookbook に詳しく書かれてる。参考まで。
0731デフォルトの名無しさん
2005/10/28(金) 00:14:18http://d.hatena.ne.jp/keyword/Schwartzian%CA%D1%B4%B9
0732726
2005/10/28(金) 00:29:21ありがとうございました。
たしかにそうですね。
Windows上でもWebサーバに拡張子cgiでおく時なんかに先頭の行が
必要になってくるんですね。
0733デフォルトの名無しさん
2005/10/28(金) 00:38:230734デフォルトの名無しさん
2005/10/28(金) 01:29:22http://www.hippo2000.info/perl/tsvg.htm
これがオススメのソースだって?センス疑うぜ。本人乙。
0735デフォルトの名無しさん
2005/10/28(金) 01:34:460736デフォルトの名無しさん
2005/10/28(金) 02:08:13そのまんまのデータを書き込む方法しか知らないので
ファイルを見られたら何が保存されているかすぐわかっちゃうので
WINDOWSのアプリのデータファイルみたいに読めないような形式で保存したいんだけど
Perlではこういう形式では保存できないんでしょうか?
0737デフォルトの名無しさん
2005/10/28(金) 02:19:120738デフォルトの名無しさん
2005/10/28(金) 02:50:12確かに、Windowsのアプリのデータって言ったら>>737のように
大半は単にバイナリデータとして保存されてるだけが
それだけじゃちょっと知識がある人が見ればすぐに分かるが。
文字列データはそのまま格納されてるしな。
そういう目的ならCrypt::CBCとか使って暗号化でもすれば?
0739デフォルトの名無しさん
2005/10/28(金) 03:18:23ロゴのAの文字がケーキに変わってたのか。いまさら気づいた
0740デフォルトの名無しさん
2005/10/28(金) 04:37:26if ($hoge eq 'a' |$hoge eq 'b' |$hoge eq 'c' |$hoge eq 'd')
これ、もっとシンプルな書き方ありませんか?
0741デフォルトの名無しさん
2005/10/28(金) 04:50:080742デフォルトの名無しさん
2005/10/28(金) 05:07:45ありがとうございます。
'a','b','c','d'のほうに|,ORをかける方法ありませんか?
0743デフォルトの名無しさん
2005/10/28(金) 05:10:440744デフォルトの名無しさん
2005/10/28(金) 05:30:49やっぱマッチ使わないと駄目か。。
0745デフォルトの名無しさん
2005/10/28(金) 05:33:02マッチングを使いたくないならサブルーチン作っとけば?
sub in_array ($@) {
my $val = shift;
$val eq $_ && return 1 for @_;
0;
}
if (in_array($hoge, 'a', 'b', 'c', 'd'))
ところで|じゃビット演算だぞ。論理演算なら||にしないと
0747デフォルトの名無しさん
2005/10/28(金) 11:08:35オマエならそのコードどう書くね?
0748デフォルトの名無しさん
2005/10/28(金) 20:52:19Perlのプログラムからシステムコマンドを実行できますよね。
`perldoc`;
こんな感じで。
でも
`perldoc -u -t`;
みたいにオプション指定でスペースが含まれてしまうと、
コマンドがちゃんと実行されないようです。
変数には取り込めるようですが・・・。
スペースが含まれてるとだめなのでしょうか?それとも何か
方法があるのでしょうか?
0749デフォルトの名無しさん
2005/10/28(金) 23:41:17そりゃ大いにあなたの何か勘違いでしょう。
ちなみにいちおう system()と ``(qx//)は違うものですよ。(マニュアル参照)
perl -e 'system "echo A B C"'
perl -e '`echo A B C`'
perl -e 'print `echo A B C`'
0750デフォルトの名無しさん
2005/10/29(土) 00:25:51%match = ( a => 1, b => 1, c => 1, d => 1);
if ($match{$hoge}) {
}
じゃ駄目なの?
0751デフォルトの名無しさん
2005/10/29(土) 00:42:13$hoge == 'a' OR 'b' OR 'c' OR 'd'
とかでも書けるのがシンプルなんだと想いたいだけと思われ。
0752デフォルトの名無しさん
2005/10/29(土) 01:42:08if ($hoge == any('a', 'b', 'c', 'd')) { ... }
0753デフォルトの名無しさん
2005/10/29(土) 01:56:020754ヽ(´ー`)ノ ◆.ogCuANUcE
2005/10/29(土) 02:25:100755デフォルトの名無しさん
2005/10/29(土) 04:36:11それをrequireしたファイルで使うことってできないのでしょうか?
0756748
2005/10/29(土) 11:55:17レスどうもです。
ようやくわかりました。
逆クォートは出力を取り込むときなんかに使うみたいですね。
単にコマンド実行したい場合は、そうやっちゃいけないと、
リャマにありました。
0757デフォルトの名無しさん
2005/10/29(土) 12:27:37http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlmod.html
0758デフォルトの名無しさん
2005/10/29(土) 12:38:55Exporter
0759デフォルトの名無しさん
2005/10/29(土) 13:58:45Explorer
0760デフォルトの名無しさん
2005/10/29(土) 18:06:48言ってるコトが微妙にわからんけど、requireじゃなくてuseで呼び出すのでは?
えーと、て言うかよくわからんので、俺なりの答え。
1:定数定義は、定数を使ってる所より先にコンパイラにお見せする。
2:名前空間(パッケージ)がちゃんと同じになるように気をつける。
3:同じプロセス内である。
これを満たせば大丈夫かと。
0761デフォルトの名無しさん
2005/10/29(土) 19:29:27Explorer
0762デフォルトの名無しさん
2005/10/29(土) 21:23:340763デフォルトの名無しさん
2005/10/29(土) 22:06:22`id -u ユーザ名` または passwdファイルを見る
以外の方法があれば教えてください。
0764デフォルトの名無しさん
2005/10/29(土) 22:53:47getpwnam
0765デフォルトの名無しさん
2005/10/29(土) 22:55:01ユーザ名と UID の対応表は passwd ファイルなんだから、
それを見ずに得るのは無理なんじゃないか?
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_getpwnam_NAME
0766デフォルトの名無しさん
2005/10/29(土) 23:14:35どもですー。
passwdファイルを見るっていうのは自分でopenなどする処理を書くという意味です。
隠蔽してくれるならそれでOK。
0767デフォルトの名無しさん
2005/10/30(日) 00:26:27隠蔽って言葉の使い方間違えてるんじゃあるまいか。
素直に、ユーザ名からuidを得る為のAPIかライブラリ、コード片を教えてください、
自分ではきれいに書けないので、とでも言うほうが話が通じるだろうに。
つか、>>764 にそのものズバリ教えてもらっているのに、マニュアルや
リファレンスをまともに見たことも見る気も一度も無いのバレバレだよ。
(ドキュメントはいっさい隠蔽されました?)
0768デフォルトの名無しさん
2005/10/30(日) 00:48:41隠蔽の意味はどうだか知りませんが、/etc/passwdから読むぐらいの処理は自分でもかけますよ。
「perl ユーザ名 uid」とか適当にぐぐったけど見つからなかったので質問しました。
マニュアルをどう探せばよかったのか教えてもらえれば役に立つと思います。
0769デフォルトの名無しさん
2005/10/30(日) 00:54:210770デフォルトの名無しさん
2005/10/30(日) 01:25:29無理なんでしょうか?
print <<"$EOM";
abc
def
ghi
jkl
mno
0771デフォルトの名無しさん
2005/10/30(日) 01:38:22Perl の事はググる前にマニュアル (perldoc) 読むか CPAN 探すか
した方がいいよ。UNIX 系 OS なら man perl とか man perldoc すれば
どのマニュアルページに何が載ってるかとか効率的な探し方とか
分かるし、ActivePerl ならインストールしたディレクトリに HTML 化
されたマニュアル群が入ってる。オンラインマニュアルの在り処は
>>2 に書いてある。
>>770
普通はできない。それができて嬉しい事って思いつかないんだけど、
どうしたいの?
http://search.cpan.org/~nwclark/perl-5.8.7/pod/perlfilter.pod
0772デフォルトの名無しさん
2005/10/30(日) 02:39:02use A1; はよくて、use B1 の方は INC に無いと怒られてしまいます。
2つのpackageの定義はどうしたらよいでしょうか?
0773デフォルトの名無しさん
2005/10/30(日) 02:48:36http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlmod.html
0774デフォルトの名無しさん
2005/10/30(日) 03:18:15eval使やできなくはないと思うが、普通そんなことしたいと思わないぞ。
仮にそれが必要だったとしたら、設計間違ってる気がする。
0775デフォルトの名無しさん
2005/10/30(日) 05:16:37まさしく、
>マニュアルやリファレンスをまともに見たことも見る気も一度も無いのバレバレだよ。
>(ドキュメントはいっさい隠蔽されました?)
そのものというわけですね。
771氏が丁寧に書いてくれてるけど、ドキュメントも読めないでぐぐればすむと
勘違いしてるリテラシの低さに気がつかないままの人も少なくないのかsigh.
>>/etc/passwdから読むぐらいの処理は自分でもかけますよ。
プチワロタ
0776デフォルトの名無しさん
2005/10/30(日) 05:23:12だいたい例えば終端が ghi ならその後構文エラーだろ。
そんな仕掛け、まあ必要でもないしほとんど意味無いよな。
print <<"$EOM";
abc
def
ghi
jkl
mno
0777デフォルトの名無しさん
2005/10/30(日) 06:53:55ところには誰もつっこまないのか?
0778デフォルトの名無しさん
2005/10/30(日) 06:56:37その前に、NISクライアントはどうする?
/etc/passwdなんか見たって、役に立つ情報は何もないぞw
0779デフォルトの名無しさん
2005/10/30(日) 07:42:160780770
2005/10/30(日) 14:24:15どもです。
まあまあ。
ヒアドキュメントに書いたSQLをDBIに投げることをよくやってるのですが
「ある条件の場合はWHERE句以降いらない」とか、逆に「AND でつないで条件追加」
とかそんな感じの処理がよく出てくるわけです。
制御が複雑になってくると、だんだん見た目にごちゃごちゃしてきちゃうんだけれども
ヒアドキュメント自体は分かりやすい仕組みだし、これで通せればそれに越したことはない。
変数かなにかで終端位置を制御できればなんかできるかなぁ〜?
と思いまして、そういうところです。
0781デフォルトの名無しさん
2005/10/30(日) 15:19:00根本的に、設計思想が間違ってる。
かの有名な「プログラム書法」でも読むことだな。
0782770
2005/10/30(日) 15:59:56え?なんでですか? Perlの設計思想のこと?
ラクできるならラクしたいですよね。
無い物ねだりだったみたいだけれど…
(つまり、それ用のプリプロセッサでも書きなさいということなんでしょうかね)
0783デフォルトの名無しさん
2005/10/30(日) 16:07:31まあ間違っとるとまで判断材料ないけど、センスは無いよなぁ。
終端位置を制御(??)したって解決になりゃしなかろうに。
手書きSQLと同じベタで書けば、あたかも見通しが良さそうな気がするだけだろうが、
ヒアドキュメントでベタに点在すれば、構造見難くごたつくのはあたりまえ。
0784デフォルトの名無しさん
2005/10/30(日) 16:08:56sub join_range($@) {
my $range = shift;
join('', @_[@$range])
}
print join_range([0..1], <<FOO, <<BAR, <<BAZ);
hogehoge
FOO
fugafuga
BAR
piyopiyo
BAZ
0785デフォルトの名無しさん
2005/10/30(日) 16:11:01なら、SQL文のタネになる文字列をヒアドキュメントで読み込んでおき、
条件に応じてその文字列を編集するというのが普通の考え方だろう。
0786785
2005/10/30(日) 16:25:03「--caseA」のみを消す、さらに「--caseB」を消す、
という使い方ができる。
$sql_org = <<'__EOS__';
SELECT * FROM PRODUCTS
--caseA WHERE CATEGORY = 'DISK'
--caseA --caseB AND PRICE > 1000
__EOS__
0787770
2005/10/30(日) 16:30:12わっ!すばらしい。配列/リストで制御するのですね。ばっちり!
サンクスです。こんな感じにしてみました。
my $sql = join '', (<<"--> BASE", <<"--> EXTEND1", <<"--> EXTEND2", )[0..2];
SELECT * FROM hoge
--> BASE
WHERE a = 1
--> EXTEND1
AND b= 2
--> EXTEND2
これならヒアドキュメント全体をそのまま切り取ってsqlplusなどでテストできますし
いちいちクエリを文字列に落としてからテストする手間がはぶけますよ。
ありがとうございます。
>> 785
確かにふつうはそうなんでしょうが…、もっとPerl的な解決法が
あるんじゃなかろうかと思ってたのです。
0788770
2005/10/30(日) 16:38:12サンクスです!カキコ中にかぶってしまったようです。すんません。
$sql_origを作ったあと
$sql_orig =~ s/--caseA//g if ($case eq 'A');
という感じにするわけですね。これもいいなあ。ありがとうございます。
0789デフォルトの名無しさん
2005/10/30(日) 17:50:43この場合ならフォーマット使って3項演算子使えばいいんじゃないの?
printf (
'%s%s%s%s',
$hoge,
$Hage,
$fuge
$nullpo
);
どちらにしろ設計やり直したほうがよさ毛だけどね。
0790デフォルトの名無しさん
2005/10/30(日) 17:59:380791770
2005/10/30(日) 18:06:50どもです。いや、sprintfで3項演算子とかだと
その部分を切り取った場合にSQL互換じゃなくなるので
いまいちです。
(→整形しなければそのままクエリとして流してテストできないので)
0792デフォルトの名無しさん
2005/10/30(日) 18:10:300793デフォルトの名無しさん
2005/10/30(日) 18:24:52HTTPSつかってGETしたりPOSTしたりはLWPでできるけどこれじゃ駄目かい?
http://digit.que.ne.jp/work/index.cgi?Perl%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2FLWP
0794デフォルトの名無しさん
2005/10/30(日) 19:13:19うわぁ…。保守性とか全く考えてない気がするんだが。
0795デフォルトの名無しさん
2005/10/30(日) 20:07:21? それはshプログラマの様に保守的という意味でか?
787のは下手に変数切り貼りするより、ずっと保守性向上しているように見えるが。
0796デフォルトの名無しさん
2005/10/30(日) 20:27:241:ロック用ファイルがなければopen関数でロック用ファイルを作る(あればデータを書き込まない)
2:ファイルのデータを全部読み出し配列に格納する
3:書き込むデータを配列に追加
4:配列のデータをopen関数で全部ファイルに書き込む
5ロック用ファイルの削除
でも問題ないんでしょうか??
0797デフォルトの名無しさん
2005/10/30(日) 20:34:29>5ロック用ファイルの削除
する前に何らかの事情でプログラムが dieしたとき困ると思うけどな。
END{ }かなにかにロックをクリーンアップする仕組みも入れておいた方がいいよ。
その他の問題は別としても。
0798デフォルトの名無しさん
2005/10/30(日) 20:36:21ハンドラ設定した方がよいか。
0799デフォルトの名無しさん
2005/10/30(日) 20:37:45それじゃ完全なロックになって無いな
1のところはこういう感じの実装だろう
return if -e $lock; # 戻るなりsleepするなり
open LOCK "> $lock";
close LOCK;
しかし、二つのプロセスがこういう順番で動いたときを考えて欲しい
proc1: return if -e $lock;
proc2: return if -e $lock;
proc1: open LOCK "> $lock";
proc2: open LOCK "> $lock";
これでは、ファイルが作られる前に双方共にチェックを通過してしまうため、ちゃんとロックされない。
一般的にはmkdirとかsymlinkとかを使って、作ることが出来なかったらロック中、という方法を使う。
参考: http://homepage1.nifty.com/glass/tom_neko/web/web_04.html
0800デフォルトの名無しさん
2005/10/30(日) 21:36:00CPANで探してみたらLockFile-Simpleってのがあったけれど、
オブジェクト一つがロック一つに対応しているんじゃないあたりとかどうもしっくり来ない…
良い感じに抽象化されたモジュール無いかな
0801デフォルトの名無しさん
2005/10/30(日) 21:40:48違いありませんよね?
0802デフォルトの名無しさん
2005/10/30(日) 21:49:35$, == ""である時だけね
0803デフォルトの名無しさん
2005/10/30(日) 21:51:04eqだろ
0804デフォルトの名無しさん
2005/10/30(日) 21:51:43ヘッダに色々付け加えたいのでそれではできませんでした。
0805デフォルトの名無しさん
2005/10/30(日) 21:53:500806デフォルトの名無しさん
2005/10/30(日) 22:03:34http://search.cpan.org/~gaas/libwww-perl-5.803/lwpcook.pod
http://homepage3.nifty.com/hippo2000/perltips/lwpcook.html
http://search.cpan.org/~gaas/libwww-perl-5.803/lib/LWP.pm
http://homepage3.nifty.com/hippo2000/perltips/LWP.html
>>805
s/配列/引数の区切り/
0807デフォルトの名無しさん
2005/10/30(日) 22:08:22ええと、避けてる選択肢に間して掘り下げて聞いて悪いんだけど、
HTTP::RequestにHTTP::Headersを喰わせるんじゃ出来ないのかな
use HTTP::Request;
use HTTP::Headers;
my $h = new HTTP::Headers;
$h->header("Hoge-Hoge" => "hoge");
my $req = new HTTP::Request GET => 'http://example.com/', $h;
これが駄目ならIO::Socket::SSLとかを使ってシコシコ書くしか無いだろうな…
0808デフォルトの名無しさん
2005/10/30(日) 22:25:07>>807
http://kage.monazilla.org/system_DOLIB100.html
この処理をperlにやらせたいんですが、
HTTPS使って、POSTでヘッダに X-2ch-UAをつけるのは無理なんでしょうか。
0809デフォルトの名無しさん
2005/10/30(日) 22:35:29> データを書き込むときのファイルロックの方法ってflock以外では
「Perlの排他制御」
http://homepage1.nifty.com/glass/tom_neko/web/web_04.html
0810デフォルトの名無しさん
2005/10/30(日) 22:38:14> HTTPS使って、POSTでヘッダに X-2ch-UAをつけるのは無理なんでしょうか。
無理ってどういう意味だよ
0811酩酊 ◆TWARamEjuA
NGNG$ua->default_header( $field => $value )
これでよさげな・・・
0812デフォルトの名無しさん
2005/10/30(日) 23:15:27まぁ内部的にはそうなのかもしれませんが、出力される結果は
同じになるのではないかと・・・。
0813デフォルトの名無しさん
2005/10/30(日) 23:53:42文字列を連結してから print するよりも、print したいものをコンマで
区切って与えた方が速いことがある。<中略> これに反して、
アーキテクチャと値によっては、連結したほうが速い場合もある。
-- 駱駝本 2nd Edition 8.3.1 時間の効率を上げるためのヒント より
sub foo { @_ }
print foo('bar', 'baz'), "\n"; # リストコンテキストなので barbaz
print foo('bar', 'baz') . "\n"; # スカラーコンテキストなので 2
print 'foo', my $bar = 'bar', 'baz'; # コンマならこういう書き方も可能
0814デフォルトの名無しさん
2005/10/31(月) 00:44:46なるほどねぇ。
やっぱり違いますね。コンマと連結とじゃあ・・・。
ところでサブルーチンですが、組み込み関数のように&なしで
呼び出す場合、起動よりも前でサブルーチンを定義していなきゃ
いけないと本にあったのですが、起動より後に定義してあっても
&なしで普通にコールできたのですが、このあたりはあいまいですか?
0815デフォルトの名無しさん
2005/10/31(月) 00:57:51http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsub.html
> サブルーチンは、“&”というプリフィックスを付けて呼び出すことができます。
> 最近のPerlでは“&”は省略可能であり、サブルーチンがあらかじめ宣言されている場合には括弧も省略できます。
あらかじめ宣言されている場合は、括弧が省略できる
&はリファレンスじゃなければ通常は省けるよ
0816デフォルトの名無しさん
2005/10/31(月) 01:00:45知らない関数かと思ってリファレンス引いちゃうよorz
0817デフォルトの名無しさん
2005/10/31(月) 01:13:23悪い癖は直しましょう。
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq7.html#What_s_the_difference_between_ca
0818デフォルトの名無しさん
2005/10/31(月) 02:00:52> &があったほうが個人的にはみやすいかな。
> 知らない関数かと思ってリファレンス引いちゃうよorz
熟達者は、「知らない関数は無い」という域に突入することで、
そのような混乱から無縁でいられる。
関数一覧を舐めるように読むのが彼らの楽しみである。
0819デフォルトの名無しさん
2005/10/31(月) 02:23:38てことは&つけなくて呼び出すときは、渡すものが無くてもhoge();と書けって事?
0820デフォルトの名無しさん
2005/10/31(月) 02:29:44foo;
で呼び出せる。
0821デフォルトの名無しさん
2005/10/31(月) 02:35:37「使う前」に宣言してさえあればプロトタイプの有無に関係無くそう呼べる。
sub foo { print 'foo' }
foo;
sub bar;
bar;
sub bar { print 'bar' }
0822デフォルトの名無しさん
2005/10/31(月) 02:42:37今後は意識して書くようにします。
0823デフォルトの名無しさん
2005/10/31(月) 02:45:48やべ、プロトタイプいるんだと思い込んでたorz
普段、先頭でプロトタイプ付きで宣言して、コードの最後で本体を書いてるからか。
0824デフォルトの名無しさん
2005/10/31(月) 06:26:060825デフォルトの名無しさん
2005/10/31(月) 07:44:180826814
2005/10/31(月) 07:59:52&は定義の位置や宣言の有無にかかわらず、省けるんですね。
カッコ省略は前方に定義や宣言がいるわけですね。
0827デフォルトの名無しさん
2005/10/31(月) 09:07:37それらとは無関係に & が省略できないコンテキストは存在する。
マニュアルの内容も確認できない奴が、仕様が曖昧だとか、
そんな中途半端な覚え方なぞする必要はまったく無いし有害だ。
0828デフォルトの名無しさん
2005/10/31(月) 09:59:080829デフォルトの名無しさん
2005/10/31(月) 10:17:15sub absolute($)
{
my $str = shift;
my $ret;
$str =~ s/^"//;
$str =~ s/"$//;
if($str =~ m,^/,) { return qq("$server$str"); } elsif($str =~ m,^http://,) { return qq("$str"); } else { return qq("$base$str"); }
}
ってのを発見して使いたいなと思ったのですが、サーバー名とベース名をURLから切り分けるのが何故かうまくいきません
$url = 'http://www.example.com/files/test.html';
$url =~,(http://[^/]*/)(.*),;
$server = $1;
$base = $2;
とした場合、$baseにtest.htmlも含まれてしまいます。
これの正しい正規表現はどうなるのでしょうか?宜しくお願いします。
0830デフォルトの名無しさん
2005/10/31(月) 10:32:30ちょっとは考えようや
$url =~,(http://[^/]*/)(.*)([^/]*),;
0831デフォルトの名無しさん
2005/10/31(月) 10:36:34/ で終わってないやん
0832デフォルトの名無しさん
2005/10/31(月) 14:13:56$url =~ m,(http://.*?)(/.*/),;
absoluteって絶対パスにするって意味じゃないのか?それ不完全なわけだが
URIモジュールのabsメソッドで使ったほうが簡単そうな予感
http://search.cpan.org/~gaas/URI-1.35/URI.pm
URI->new('../file')->abs('/base/');
0833デフォルトの名無しさん
2005/10/31(月) 15:40:170834824
2005/10/31(月) 16:32:12ファイルネームなしで突っ込むとファイルを取ってこれないんです。
0835デフォルトの名無しさん
2005/10/31(月) 16:42:26それを知る方法は無い、といわれてるんだが
Apache以外知らないが、Apacheの場合はhttpd.confは元より、
.htaccessに関しても外部からはアクセスできないようになっていることが多い。
そのサーバーのパスワードが知りたいんですがどうすれば良いんですか?
と同じくらい愚問だということだ
まあ、index.htmlとかindex.phpとかありがちなものに対してHEADリクエストを送ってみるという手はあるかもね
0836デフォルトの名無しさん
2005/10/31(月) 16:44:223xxコード出てますか?
0837デフォルトの名無しさん
2005/10/31(月) 16:52:17何か間違えたんじゃないか?DirectoryIndexの処理はサーバ側で行われる
/path/の形でリクエストを送ればサーバからは普通に返ってくるぞ?
どうやってそのウェブページをPerlで取得しようとしてるのか書いてみれば
誰かアドバイスをくれるかもね
0838デフォルトの名無しさん
2005/10/31(月) 17:00:55まあperl以前の話だから他で勉強しなおしてこいよ。
(RFC読むとかさ。wgetか telnetで server responseでも見れ)
0839デフォルトの名無しさん
2005/10/31(月) 18:51:28> じゃあ、ブラウザはどうやってとってきてんですか?
> 3xxコード出てますか?
それを調べることができるのはお前だけ。
0840デフォルトの名無しさん
2005/10/31(月) 21:19:44ありがとうございます。
かなり使いたかったので真剣に読んで見ましたが英語が得意ではないためにあまり使い方が理解出来ませんでした。すいません。
0841デフォルトの名無しさん
2005/10/31(月) 21:49:57うまくいきません
pcheck.cgiでチェックすると
[Mon Oct 31 21:46:15 2005] wiki.cgi: Can't locate Yuki/RSS.pm in @INC (@INC contains: . /usr/local/lib/perl5/site_perl/5.8.4/mach /usr/local/lib/perl5/site_perl/5.8.4
/usr/local/lib/perl5/site_perl/5.005 /usr/local/lib/perl5/site_perl /usr/local/lib/perl5/5.8.4/BSDPAN /usr/local/lib/perl5/5.8.4/mach /usr/local/lib/perl5/5.8.4) at wiki/wiki.cgi line 18.
[Mon Oct 31 21:46:15 2005] wiki.cgi: BEGIN failed--compilation aborted at wiki/wiki.cgi line 18.
Content-type: text/html
Software error:
Can't locate Yuki/RSS.pm in @INC (@INC contains: . /usr/local/lib/perl5/site_perl/5.8.4/mach /usr/local/lib/perl5/site_perl/5.8.4 /usr/local/lib/perl5/site_perl/5.005
/usr/local/lib/perl5/site_perl /usr/local/lib/perl5/5.8.4/BSDPAN /usr/local/lib/perl5/5.8.4/mach /usr/local/lib/perl5/5.8.4) at wiki/wiki.cgi line 18.
BEGIN failed--compilation aborted at wiki/wiki.cgi line 18.
というメッセージがでます
18行目はuse Yuki::RSS;となっているのですがどうすればうまくいくでしょうか?
0842デフォルトの名無しさん
2005/10/31(月) 22:05:25つ http://homepage3.nifty.com/hippo2000/perltips/URI.html
>>841
多分、Perlの問題というより、設置の仕方の問題
WebProg板の設置関連のスレへどうぞ
0843デフォルトの名無しさん
2005/10/31(月) 22:05:38CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc8.2ch.net/php/ )
0844841
2005/10/31(月) 22:23:48ありがとうございました
0845デフォルトの名無しさん
2005/10/31(月) 23:34:35IO::Sockt::INET でオープンしたソケットに対して操作したいんだけど。
0846デフォルトの名無しさん
2005/11/01(火) 01:37:16Client-SSL-Warning: Peer certificate not verified
と怒られてしまいました。IDとPasswordはあっています。
どうしてかわかりません。教えてください。
0847デフォルトの名無しさん
2005/11/01(火) 01:54:32CA証明書が発行されていないからだろ
0848デフォルトの名無しさん
2005/11/01(火) 12:15:50open(LIST, "dir /b log|");
という文が
dir: /b: No such file or directory
とエラーを吐いてしまいます。
logディレクトリにあるファイルの一覧をパイプ経由で開きたいのですが
正常に動かそうとするにはどう書けばいいんでしょうか?
0849デフォルトの名無しさん
2005/11/01(火) 12:38:28じゃない?
0850デフォルトの名無しさん
2005/11/01(火) 12:44:24なんつーか・・・もしかしてUn*x系のシステムでそのコマンドを実行しようとしてるんじゃあるまいね?
0851デフォルトの名無しさん
2005/11/01(火) 12:45:29奇妙だね…
0852デフォルトの名無しさん
2005/11/01(火) 12:48:36open LIST, 'dir -B log |' or die $!;
0853デフォルトの名無しさん
2005/11/01(火) 12:52:310855848
2005/11/01(火) 13:05:29としたら通りました…
ちょっと前まではこんなことしなくても動いてたんですけど。
何故なんでしょう?
0856デフォルトの名無しさん
2005/11/01(火) 13:07:40>>853
多分これ。最近新しく何かソフトをインストールしたりしなかったか?
0857848
2005/11/01(火) 13:12:34ビンゴでした。先日cygwinをインストールしたのが原因のようです。
cygwinにdirコマンドなんてあったんだ…。
cmd.exeの方を優先するように出来ないのかなあ。
0858デフォルトの名無しさん
2005/11/01(火) 13:24:42pathが通った場所においておくということ自体、それを何所からでも使えるようにしたいということなのだから、
dir.exeを消すか、またはCygwin内のみpathが通るような場所に置くべきじゃないかな
# スレ違いスマソ
0859デフォルトの名無しさん
2005/11/01(火) 13:52:42その結果をファイルに保存したいのですが、どうしたらいいのかわかりません。
perlの入門書を購入し、cgiの本も購入したのですが、わかりませんでした。
どんな本、または、どんなキーワードで検索すればいいですか?
0860デフォルトの名無しさん
2005/11/01(火) 13:54:27perl を使う用途(と Cygwin を入れた意図)によっては
ActivePerl 捨てて、perl 使う作業は cygwin 環境に一本化という手もある。
>>848のようなパイプ処理がしたいのならなおさら。
0861デフォルトの名無しさん
2005/11/01(火) 13:56:47板違い。
WebProg板
http://pc8.2ch.net/php/
0862デフォルトの名無しさん
2005/11/01(火) 13:58:51>どんな本、または、どんなキーワードで検索すればいいですか?
致命的だな。
板違いなのはおじさんゆるしてあげるから、他板で聞くときはちゃんと
どんな本を買ったかくらい言うんだよ。
0863デフォルトの名無しさん
2005/11/01(火) 16:34:50可能なら極力外部コマンドを使わないような方針にするのが良いと思う。
0864デフォルトの名無しさん
2005/11/01(火) 16:57:270865デフォルトの名無しさん
2005/11/01(火) 17:39:29864が言ってるopendir 他、glob, DirHandleモジュール、File::Findモジュールとか調べとけ。
0866デフォルトの名無しさん
2005/11/01(火) 22:09:55CHECKはPerlの予約語だから使用は控えておけ
0867デフォルトの名無しさん
2005/11/02(水) 05:00:41えらい前のレスチェックしてるんだなぁ
0868デフォルトの名無しさん
2005/11/02(水) 06:10:10レス先以外にも等しく意味を持つ話なら、内容が古くない限り亀上等だし。
0869デフォルトの名無しさん
2005/11/02(水) 09:56:32そうだっけ? 全部小文字だと将来予約語とぶつかるかもしれないから
ラベルやファイルハンドルには大文字まぜとけってのは聞いたこと
あるが。
0870デフォルトの名無しさん
2005/11/02(水) 11:36:200871デフォルトの名無しさん
2005/11/02(水) 13:42:11そのあたりどこかにまとめて書いてる?
0872デフォルトの名無しさん
2005/11/02(水) 13:56:480873デフォルトの名無しさん
2005/11/02(水) 14:20:00いや、perldoc でどこに書いているか探せれなかったので聞いてるんですが・・・
0874デフォルトの名無しさん
2005/11/02(水) 14:25:18tp://www.google.co.jp/search?num=50&lr=lang_ja&q=perldoc+begin+end+check+init
検索も出来ないのか?
0875デフォルトの名無しさん
2005/11/02(水) 14:32:29すんませんでした。
ローカルにある perldoc の内容をインターネットで検索するという
富豪的な発想ができない貧弱な頭なのです・・・
0876デフォルトの名無しさん
2005/11/02(水) 16:45:20まぁ、紛らわしいから俺は使わんけど、安全といえば安全。
0877デフォルトの名無しさん
2005/11/02(水) 17:07:49ラベルだと思って書いてた文字列が式になっちゃった、という
ことを避けるには小文字だけの名前を使うなということに
なっている。たぶん式になるような予約語は小文字だけという
方針があって、大文字のBEGINやCHECKは式にはならない
ので区別がつくからかまわんってことなんだろうな。
876同様、オレも見かけ上まぎらわしいと思うのでそういうの
は避けるけど、後から追加されるのはどうしようもないなぁ。
0878デフォルトの名無しさん
2005/11/02(水) 18:22:16CHECK() の存在を知っていてこれらのルーチンを不注意で
呼び出しちゃうんじゃないかと心配する子というのは相当に
歪な学び方をしていると思う。
<q cite="http://search.cpan.org/~nwclark/perl-5.8.7/pod/perlmod.pod#BEGIN,_CHECK,_INIT_and_END">
One should note that these code blocks don't really exist
as named subroutines (despite their appearance).
</q>
#!/usr/local/bin/perl
use strict;
BEGIN { print "1\n"; my $rv = 'BEGIN' }
sub BEGIN { print "2\n"; my $rv = 'BEGIN' }
my $i = 6;
BEGIN: {
++$i < 10 || last BEGIN;
eval { goto &BEGIN } || print $@;
eval { goto BEGIN() } || print $@;
print "$i\n";
eval { goto BEGIN } || print $@;
}
__END__
0879デフォルトの名無しさん
2005/11/02(水) 19:31:241ヶ月ネット無し生活だったもので。。。
0880デフォルトの名無しさん
2005/11/02(水) 20:42:31よく耐えた!感動した!
0881デフォルトの名無しさん
2005/11/02(水) 22:01:16Windowsでperlのプログラムを作成できる環境が欲しいのですが。
0882デフォルトの名無しさん
2005/11/02(水) 22:03:400883デフォルトの名無しさん
2005/11/02(水) 22:37:18>>2 の最初の URL
0884デフォルトの名無しさん
2005/11/03(木) 01:30:49間違ってたらすみません.
簡単なメモを作りたいのですが,テキストエリアからのフォームデータを
$memo = $cgi -> param(memo);
というように取得すると,テキストエリアでの改行が無視されます.
配列で受け取ってもダメでした.改行(空改行も)受けとるにはどうすれば良いのでしょうか.
どうかアドバイスをお願いします.
0885デフォルトの名無しさん
2005/11/03(木) 01:55:58自信ないけど、$memoをhtmlとして表示するなら改行を<br>にしなきゃ
あとWebProgにもPerlスレあるよ
0886デフォルトの名無しさん
2005/11/03(木) 02:09:55WEBプログラミング板のほうが良いかと。
0887デフォルトの名無しさん
2005/11/03(木) 04:43:18受け取れない、無視されるって、どういう意味?
「改行コードの入ったプレーンテキストを、HTML形式のデータの一部としてブラウザに
表示させようとすると、ブラウザが改行を無視して表示する。」という意味だったら、
それはHTMLの規約。普通にテキストエディタでHTMLファイルを作ったときにも、
改行は無視されるはずだよ。
詳しくはWebProg板で聞いたほうがいいと思う。
0888デフォルトの名無しさん
2005/11/03(木) 08:46:140889デフォルトの名無しさん
2005/11/03(木) 11:56:23なるほど!改行が<BR>になることを忘れていました.
的確なアドバイスありがとうございました.
これからWebProgのほうでもっといたしてきます.
0890デフォルトの名無しさん
2005/11/03(木) 22:42:02srandに何を与えたら良いでしょう?
srand(time^$$)とかsrand(time^($$+(15<<$$)))とかは同じにならなかったので
疑問に思いました。おねがいします
0891デフォルトの名無しさん
2005/11/03(木) 22:47:10Perlデフォルトの初期値はおろか、
Perl自身にはデフォルトの乱数計算式もありません。
計算式は環境に依存します。
0892デフォルトの名無しさん
2005/11/03(木) 23:48:46デフォルトの乱数列が欲しいのなら srand を使わなければいいじゃない。
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#Why_aren_t_my_random_numbers_ran
0893デフォルトの名無しさん
2005/11/04(金) 01:45:585.5あたり以上から、明示的なsrandの指定がない場合、初期値はランダムに自動生成されます。
また乱数列もPerlがインストールされている環境に依存し、
デフォルトと言うのは初めから存在しません。
0894デフォルトの名無しさん
2005/11/04(金) 01:50:300895デフォルトの名無しさん
2005/11/04(金) 01:51:26そのランダムはどうやって算出するの?
0896デフォルトの名無しさん
2005/11/04(金) 02:55:52rand()
嘘。
0897デフォルトの名無しさん
2005/11/04(金) 03:45:110898デフォルトの名無しさん
2005/11/04(金) 03:58:27代入するにはどうすればいいでしょうか?
use XML::RSS;
use strict;
my $rss = new XML::RSS (version => '1.0');
$rss->channel(
title => "○○○",
link => "○○○○",
description => "○○○○○",
dc => {
以下略
0899デフォルトの名無しさん
2005/11/04(金) 08:43:110900デフォルトの名無しさん
2005/11/04(金) 10:27:43" " を除いてそこに書く。
小物が釣られましたよー。
0901898
2005/11/04(金) 11:45:12>>900
説明不足でした。というか、うまく説明できない。
たぶん変数に問題があるんだと思うんですけど。
CGI エラー - Content-Type ヘッダが正しくありません。
CGI 出力メッセージ:
Variable "$text" is not imported at C:\Program Files\httpd142n\cgi-bin\perl2.cgi
line 73.
Global symbol "$text" requires explicit package name at C:\Program Files\httpd14
2n\cgi-bin\perl2.cgi line 73.
Execution of C:\Program Files\httpd142n\cgi-bin\perl2.cgi aborted due to compila
tion errors.
0902デフォルトの名無しさん
2005/11/04(金) 11:48:38もう、rand()の話はやめな。
キミの目的は解っている。
どこかのサーバと同じ乱数を生成して、何かのセキュリティを破ろうとしているのだろう。
キミが知りたいことは、Perlのソースコードを読めば解る。
他の人には興味の無いことだから、ここで質問しても無駄だ。
0904デフォルトの名無しさん
2005/11/04(金) 14:39:02今、ローカルPCにPerlを入れて、Apache起動でPerlを動かしているのですが、
Perl文法にエラーがあった場合、エラーログに残ると思いますが、
これがどのあたりでエラー出てるか(〜.cgiの200行目あたりって感じ)を出す事は出来るでしょうか?
0905デフォルトの名無しさん
2005/11/04(金) 15:03:08あれってみなさん英語を読んでるのでしょうか?
日本語のものってあるのでしょうか?
0906デフォルトの名無しさん
2005/11/04(金) 15:10:48このスレのテンプレを 1000 回読め。
それでも分からなかったらもう一度来い。
0907デフォルトの名無しさん
2005/11/04(金) 15:28:50スレ違い。apache スレへ。
>>905
英語。中学を出ていないのなら・・・ あまり役に立たないが、excite 等で
翻訳サービスあり。
0908デフォルトの名無しさん
2005/11/04(金) 15:29:11普通出てると思う。自分で試してみたの?
その行にエラーがあるとは限らないけどね。
0909デフォルトの名無しさん
2005/11/04(金) 15:43:09> ここでよくPerlのドキュメントを確認しなさいと言う人がいますが、
> あれってみなさん英語を読んでるのでしょうか?
こういうののドキュメントに使われているのは、英語のサブセットでしかない。
英語が読めなくても読める。
0910デフォルトの名無しさん
2005/11/04(金) 16:18:040911デフォルトの名無しさん
2005/11/04(金) 16:41:57/dev/urandom
0912デフォルトの名無しさん
2005/11/04(金) 22:38:36Perlのドキュメントすら読めないとなると、
よほど中学時代さぼってたんだな
0913デフォルトの名無しさん
2005/11/04(金) 22:42:510914デフォルトの名無しさん
2005/11/04(金) 23:01:19分かるだろうがよ。
0915デフォルトの名無しさん
2005/11/04(金) 23:03:08塾行かなかったら知らないままだったよ
0916デフォルトの名無しさん
2005/11/05(土) 00:28:100917デフォルトの名無しさん
2005/11/05(土) 00:34:470918デフォルトの名無しさん
2005/11/05(土) 00:37:52読もうというのなら高卒はおろか大卒でも読めない人はいるだろうな。
そういうことではなく、中学で習う程度で素地はあるわけだから
あとは読もうという気の問題だ。
プログラム言語でも同じ。
独学でやる人が多いと思うが、習っただけでは「できません」という人と、
それをもとにやっていける人がいる。
0919デフォルトの名無しさん
2005/11/05(土) 00:43:04まぁ、読もうと思えば当然努力は必要ってこった。
0920デフォルトの名無しさん
2005/11/05(土) 01:23:520921デフォルトの名無しさん
2005/11/05(土) 02:53:55英語ができないなら、自分で勉強するしか無いんだよ。
Perlに関する英語なら、解らないことはこのスレで質問
すればいいだろう。
0922デフォルトの名無しさん
2005/11/05(土) 03:15:28{
$dat{name} = "hiro";
$dat{addr} = "jp";
}
my %dat;
$dat{name} = "takashi";
$dat{addr} = "cn";
print "1:$dat{name} / $dat{addr}\n";
&test(%dat)
print "2:$dat{name} / $dat{addr}\n";
―と言うソースコードで、
1:takashi / cn
2:hiro / jp
―と言う結果を得たいのですが、2:hiro / jpが出力されてきません。
要はハッシュ(連想配列)を参照渡しし、サブルーチン内で変更された
結果をprintしたいのですが。
0923デフォルトの名無しさん
2005/11/05(土) 03:21:39http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsub.html#Prototypes
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq7.html#What_s_the_difference_between_ca
0924デフォルトの名無しさん
2005/11/05(土) 03:22:46> sub test(%dat)
ここCとかと混同してるね。
とりあえずperlsubとperlrefを読んで見るといいよ
・プロトタイプ
・引数の受けかた
・リファレンス(参照)
の三点について調べるべし
0925デフォルトの名無しさん
2005/11/05(土) 03:41:09つ English板
ここで質問するように、英語についてはそちらで質問可
0926デフォルトの名無しさん
2005/11/05(土) 03:46:30してもテスト数が no_plan になってしまう。どうすればいいの?
0927デフォルトの名無しさん
2005/11/05(土) 06:02:18> 中学だと仮定法やんないけどな。
文学作品には当然のようにじゃんじゃん出てくる仮定法は、幸いなことに、
ビジネス文書や技術書には出てこないよ。
(英語の技術書を読んでいると、技術的な説明は簡単に理解できるのに、
各章の始めに書いてあるジョークのたぐいは、何がなにやら分からない。)
幸いなことに、プログラムの本は、技術的な説明の英文と、サンプルの
ソースを見れば、英語力が乏しくてもたいてい理解できる。
0928デフォルトの名無しさん
2005/11/05(土) 09:18:55んでも、理屈が必要な本はそれなりにめんどくさい。
あと、MSDNでその関数仕様に不具合があると英語が不自然にややこしくなる。
0929デフォルトの名無しさん
2005/11/05(土) 14:39:51世代によっても違いそうだな
>>913はゆとり教育世代か?
0930デフォルトの名無しさん
2005/11/05(土) 17:20:56俺なんて受験勉強するまで英文なんて読めませんでしたから。
そんなもん必要になったら勉強すりゃいいんだよ。
0931デフォルトの名無しさん
2005/11/05(土) 18:45:59Perl を勉強してて詰ったら、ドキュメントを読め。
ドキュメントが英語で困ったら、英語を学べ。
…でよろしいか?
0932デフォルトの名無しさん
2005/11/05(土) 18:59:37いはじめた時、英語を分かりたかったんでいろんなもの読んだ。
その中、中学3年間の教科書なぞ5日間読破で、しかもがっちり
理解できた。 おれスゲーと思ったぞ。(なぜこれが3年間も掛か
るんだ、ともちょっと思った)
つまり、必要に駆られて死ぬ気でやると、思ったより意外といける。
0933デフォルトの名無しさん
2005/11/05(土) 19:27:020934デフォルトの名無しさん
2005/11/05(土) 20:19:56ホントに嫌いだなお前らw
0935デフォルトの名無しさん
2005/11/05(土) 20:30:060936デフォルトの名無しさん
2005/11/05(土) 22:06:110937デフォルトの名無しさん
2005/11/05(土) 22:09:45↓次のPerlについての質問どうぞ
0938デフォルトの名無しさん
2005/11/05(土) 23:17:440939デフォルトの名無しさん
2005/11/05(土) 23:20:480940デフォルトの名無しさん
2005/11/05(土) 23:27:160941デフォルトの名無しさん
2005/11/05(土) 23:52:530942デフォルトの名無しさん
2005/11/06(日) 01:16:390943デフォルトの名無しさん
2005/11/06(日) 01:17:430944デフォルトの名無しさん
2005/11/06(日) 01:31:120945デフォルトの名無しさん
2005/11/06(日) 02:53:30・クックブックは第二版が出てURLが変わっている。
・cpan.jp と perldoc.com は死んでる?
・[モジュール]と[テクニック]は混ぜちゃっていいと思う。
09462 (案)
2005/11/06(日) 02:58:45Perlプログラミング講座: http://www.site-cooler.com/kwl/perl/
[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873112028/
[オンラインマニュアル]
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.7/
perl5.8.x のドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
perldoc.jp: http://www.perldoc.jp/
09473 (案)
2005/11/06(日) 03:02:55CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://homepage3.nifty.com/hippo2000/
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
[Perl5.8Unicodeメモ]
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
http://www.namazu.org/~tsuchiya/perl/perl-5.8.html
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0948デフォルトの名無しさん
2005/11/06(日) 05:06:15Smart! http://www.rfs.jp/sitebuilder/perl/
あと次のスレNo20ね。 経緯>>7-10
0949デフォルトの名無しさん
2005/11/06(日) 05:31:06はアサマシすぎる。
こういう収入目的のサイトはテンプレに入れない方がいいな。
0950デフォルトの名無しさん
2005/11/06(日) 06:32:24一次情報が書いてあるサイトと、それを補う情報のあるサイト、
あと FAQ に対して「ココ見とけ」と示せるサイトを小数精鋭で
挙げた方が使い易いリンク集になると思う。 Smart! のように
大半のページがドキュメントの抜粋でできているサイトは、
本物のドキュメントの在り処を書いておけば敢えて挙げる
必要は無いと思う。
>>949
私がそのサイト (の移転前のサイト) を挙げた者ですが、単に
・リャマ本でも敷居が高いと感じるズブの素人が
・オンラインでチュートリアル的に読み進められて
・インストールの方法から巷で配布されているスクリプトを読む
のに困らん程度までは学べて
・「CGI」の解説サイトでは無いサイト
という条件で探したらそこが見つかったってだけで拘りは無いです。
上記条件に該当するもっといいサイトがあったら差し替えて下さい。
0951デフォルトの名無しさん
2005/11/06(日) 07:35:54私んとこにもようやくデュアルコアのCPU使ったマシンが来たんですが、
これをいかす方法がないかな、と思って。
といってもマルチスレッドに対応したスクリプトを書くような
技術もないんですが、メインが整数演算を主とした、単純だけど
時間だけはかかる(数時間〜数日)シミュレーションプログラム
なんで、perlで勝手に?マルチスレッドに分割してくれる
ようなライブラリでもないかと思いまして・・・甘い?
0952デフォルトの名無しさん
2005/11/06(日) 08:02:21甘い。
http://search.cpan.org/~nwclark/perl-5.8.7/pod/perlthrtut.pod
0953デフォルトの名無しさん
2005/11/06(日) 08:09:29マルチスレッドは簡単に書けるよ。
ただ、実装は環境に依存すると思うから、目的の環境でどこまで実装されているかは
保証できないけれど。
>>950
たしかにチュートリアルやリファレンス的なサイトがテンプレにあれば初心者には便利かもね。
広告べたべたのサイトをスレ御用達のようにするのは気が乗らないけれど、
他に候補がなければ仕方なしかな。
0954デフォルトの名無しさん
2005/11/06(日) 08:54:190955デフォルトの名無しさん
2005/11/06(日) 09:03:20いや、例えば $a == '' のとき、前者は false、後者は true だよ。
0956デフォルトの名無しさん
2005/11/06(日) 09:50:29undef と空文字列は数値として評価された場合 0 と見做される。
undef は文字列として評価された場合空文字列と見做される。
$a == undef が真になるのは $a の値が 0 と見做される時。
$a eq '' が真になるのは $a が undef もしくは空文字列の時。
0957デフォルトの名無しさん
2005/11/06(日) 10:14:37undef 関係で気をつける必要があるケースは、hash の key を消す場合と、
数値と文字列のどちらで評価されるかで真偽値が変わる等かな。
後者は例えば、
$a = '0';
if $a == undef; # true
if $a eq ''; # false
095811
2005/11/06(日) 11:25:44template-toolkitのプラグインがインストールされているパスを
相対パスで指定かつ、キャッシュディレクトリを相対パスで指定している場合、
2回目以降キャッシュから実行する際にカレントディレクトリが一時的に
キャッシュフォルダにchdirされるため相対パスで指定されているプラグインが
読み込めなかったようです。
前回mod_perl環境下で今回はCGIで動かしているのですが原因は同じだと思われます。
解決法は
・キャッシュフォルダを絶対パスにすればchdirされない
・@INCに絶対パスで格納する
等です。
すっきりした
0959954
2005/11/06(日) 11:27:22ありがとうございます。 0 も undefなのですかぁ。
用途によって使い分けなきゃいけないってことですね。勉強になりました。
0960954
2005/11/06(日) 11:46:53!$a , $a eq '' を書くようにしようと思います。
0961デフォルトの名無しさん
2005/11/06(日) 12:03:060962デフォルトの名無しさん
2005/11/06(日) 12:29:10それだ!
0963954
2005/11/06(日) 20:37:50if defined($a); # true
$a='';
if defined($a); # false
で、判定の方向性がちょっと違ってきますね。
0964デフォルトの名無しさん
2005/11/06(日) 20:43:070965デフォルトの名無しさん
2005/11/06(日) 20:52:100966デフォルトの名無しさん
2005/11/06(日) 21:18:20お前みたいな暇な無職じゃともあくこっちは将来が期待される身なんだよw
ま英検1級なんぞ17歳でとったが
0967デフォルトの名無しさん
2005/11/06(日) 21:25:480968デフォルトの名無しさん
2005/11/06(日) 21:58:39s/<.*?>//
という正規表現を書いたのですが<day>はきえても</day>はきえません。なぜでしょう?
0969デフォルトの名無しさん
2005/11/06(日) 22:03:310970デフォルトの名無しさん
2005/11/06(日) 22:06:56普通それで全部消える
なんか忘れてる事ないか
0971デフォルトの名無しさん
2005/11/06(日) 22:07:21それで一応できたんですが.は/にはマッチしないんでしょうか?
0972デフォルトの名無しさん
2005/11/06(日) 22:11:470973デフォルトの名無しさん
2005/11/06(日) 22:11:50なんか忘れてること無いか?
0974デフォルトの名無しさん
2005/11/06(日) 22:16:11gでしたorz
同じ行に2つあると1個しか消してくれなかったようです。
0975デフォルトの名無しさん
2005/11/06(日) 22:22:070976デフォルトの名無しさん
2005/11/06(日) 22:22:20そんな事もあるさ
0977デフォルトの名無しさん
2005/11/06(日) 22:22:45乙。。
0978デフォルトの名無しさん
2005/11/06(日) 22:49:45夢
0979デフォルトの名無しさん
2005/11/06(日) 22:57:270980デフォルトの名無しさん
2005/11/06(日) 23:00:19俺が立てるが
0981デフォルトの名無しさん
2005/11/06(日) 23:04:06タイトルこれでよろしこ。>>1の本文はこのスレとそっくりそのままでOK
0982デフォルトの名無しさん
2005/11/06(日) 23:13:46http://pc8.2ch.net/test/read.cgi/tech/1131286411/
立てた。テンプレ貼りよろしく
0983デフォルトの名無しさん
2005/11/06(日) 23:18:40乙
0984デフォルトの名無しさん
2005/11/07(月) 02:06:40http://pc8.2ch.net/test/read.cgi/tech/1131292946/
0985デフォルトの名無しさん
2005/11/07(月) 02:08:01/.*!/s
というパターンなんですが、この場合の'.'はすべての文字を
表すんですよね。ということは'!'文字も'.*'に含まれるような
気がするのですが、実際には検索する文字列の最後の'!'文字の
直前までが'.*'になるようです。
これはどう解釈すればいいのでしょうか・・・。
0986デフォルトの名無しさん
2005/11/07(月) 02:18:410987デフォルトの名無しさん
2005/11/07(月) 02:19:460988デフォルトの名無しさん
2005/11/07(月) 02:29:39"a!b!c!"
という文字列が対象なら
「a!b!c」
が'.*'にマッチするんで、>>987のようなある種強引な解釈が必要かと。
0989デフォルトの名無しさん
2005/11/07(月) 02:53:30>>987 のは「解釈」でなくて、正規表現エンジンの基本的な
挙動なんだがな。「バックトラック」でググって勉強してくれ。
0990デフォルトの名無しさん
2005/11/07(月) 03:31:270991デフォルトの名無しさん
2005/11/07(月) 03:36:080992デフォルトの名無しさん
2005/11/07(月) 04:09:49(なのはの手が彷徨っているのに気づいて手を伸ばす)
…なのは…の舌が…いいから…いっぱい出てくよ…
いっぱい…いっぱい飲んで…ハァァ…なのは…ああん…
(ビクビクと身体を震わしながら快感を感じ続け)
ああ…アアッ…なのはァ!
…なのはも…気持ちよくなるように…舐める
(身体をなのはに乗せて舌を伸ばし子犬のようになのはのおまんこを舐め続け出す)
……ここ……動いて…いっぱい溢れてる…なのはの蜜…おいひい…ちゅ…ペロペロ…
…なのはの身体の胸のポッチあたってるよ…それも気持ちいい…
なのは…私と一緒にイクよ…いこお…
(なのはのおまんこに口をくっつけて音をたてて吸う)
0993デフォルトの名無しさん
2005/11/07(月) 04:10:06(フェイトちゃんのおまんこを味わいながら)
(さ迷わせた手がフェイトちゃんの手に触り きゅっと握り締める)
ん、ぅ、あふぅっ…
おいひぃ、おいひいの…ふぇいとちゃんのおまんこ汁おいひしゅぎて、
なのは、なのは頭が蕩けひゃうの…
ふぇいとひゃん、ふぇいとひゃぁんっ!ん、じゅぅぅっ…
(自分の愛撫でフェイトちゃんが感じてるのがわかり)
(愛液と唾液にまみれた顔を激しく動かして啜り上げる 嘗め回す)
あ。っ、ひゃ、あぅあっ、やぁ…!ふぇいとひゃぁん
しゅごっ!しゅごいひた おまんこ おまんこなめっ いひぃっ!!
いぐっ、いぐ、いくぅぅっ!!
(体が痙攣して、愛液を吹き)
(足をピンと伸ばして イってしまう)
フェイトひゃンも・・・…いっしょぉ…ぅ
(フェイトちゃんのおまんこに舌を突きこみ ナカを嘗め回して舌を出し入れ)
0994デフォルトの名無しさん
2005/11/07(月) 04:10:16香りも…豊かだよ…なのは……くらくらくるよ…
ああ…ハァッァアッ…なのは……私も…じゅる…んんじゅずっ…
なのはの…おまんこ…おいひいよ…いい…ひいの…なのは…
アアッ…あアッ
(なのはの愛液が顔にいっぱいかかる、なのはの舌でかき回されてすぐにイってなのはにも思い切り潮を浴びせる)
(ガクガクと腰が震え、なのはと繋いだ手をぎゅっと固く握りしめる)
なのはァァアアア!
(ピクピクとなのはの上でだらしなく余韻に浸る)
…なのは…いい…よかった…なのは…好き…なのは……
0995デフォルトの名無しさん
2005/11/07(月) 04:10:26ふぇーとひゃんすすりゅっ じゅ、ぶってでりゅ
なのははふぇいとひゃんの、おまんこ汁製造機なの!
だかりゃぁ…いっぱいのんれ、まんこ啜ってえ!!
ふわぁぁぁっ、あ、あはあぁぁぁっ
あったかいあったかいふぇいとちゃんのまんこ汁あったかぁいぉぅ
(手を握り返して、顔に掛かったお汁を舌で舐めてのみ)
ふぇいとひゃぁぁぁんっ!
……ぁん、ふぇいとひゃん…ふぇいとひゃぁんっ
らいしゅき、なのぉ らいしゅきぃっ
(うわごとみたいに呟いて、足をフェイトちゃんの体に絡ませる)
(…はなれないように)
0996デフォルトの名無しさん
2005/11/07(月) 04:10:35ちゅ…ぺろ…じゅる…じゅずぅ…
…なのはにもいっぱい…私の…かかったね…
(身体に足をからまされ密着する)
なのは…うん…
(なのはのお尻を撫でながら太股やおまんこを愛おしくキスし続ける)
……あったかいね…なのは…
0997デフォルトの名無しさん
2005/11/07(月) 04:10:45ずっと出てる だすのぉっぅ ああっは舌がまんこ舐める
きもぢいいのぉ
はぁ…、はぁ、なのははフェイトひゃんのにおいでいっぱいにゃの
フェイトひゃんのにおいで染まったの
大好き だいすきなの
(愛撫とキスに身体を揺らし悶えながら身体を押し付けて)
あったかいの…いっしょだと、さむくないの…
ねえ、フェイトちゃん…
…また…してね
0998デフォルトの名無しさん
2005/11/07(月) 04:10:55大好きだよ…なのは…
このまま…二人なら寒くないね…
ああ…わかったよ…なのは…
0999デフォルトの名無しさん
2005/11/07(月) 04:11:051000デフォルトの名無しさん
2005/11/07(月) 04:11:17本当にありがとうございました
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。