Perl 初心者コーナー Part22
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
03/04/15 10:15ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
参考書籍の話題は、【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0951nobodyさん
03/05/14 18:49ID:???という条件は、以下であってると思ったのですが、どうも違うようです。。。
どうしてだめなのでしょうか?
m/^[,\n\r]*$/gm){
0952nobodyさん
03/05/14 19:18ID:???if ($_ =~ /^,+$/) {
print $.. "行目マッチ!\n";
next;
}
print $.. "行目クリア\n";
}
exit;
__END__
,,,,
,1,1,1
,,,,,,
aaa,aaa,aa,
・・・と、作ってみる。
改行は普通ではマッチしない。
で、例の如くタブは全角ス(ry
0953nobodyさん
03/05/14 21:45ID:???/m … ^ が「全ての行頭」、$ が「全ての行末」にマッチ
/s … ^ が「文字列の先頭」、$ が「文字列の末尾」にマッチ
0954nobodyさん
03/05/14 22:05ID:???正規表現道場@2ch Part2
http://pc2.2ch.net/test/read.cgi/php/1038146241/l50
0955nobodyさん
03/05/15 00:00ID:???0956nobodyさん
03/05/15 00:06ID:???0957nobodyさん
03/05/15 16:12ID:???perl5.6でXMLにチャレンジしてみようと思って、
#!/usr/bin/perl
use strict;
use Jcode;
use XML::Parser;
my $topic;
while($line = <STDIN>)
{
$topic .= $line;
}
my $xml = new XML::Parser(Style => 'Debug',ProtocolEncoding=>'x-euc-jp-unicode');
my $result =$xml->parse($topic);
こんな感じでXML文書を読み込ませてみたら、途中で、
Substitution loop at /usr/lib/perl5/site_perl/5.6.1/i386-linux-thread-multi/XML/
Parser.pm line 346, <STDIN> line 75.
こんなエラーが出ます。エラーの出る行には日本語が入っています。
日本語非対応かなと思っていろいろ試してみると、たとえば「◇」のような文字が
含まれているとだめだったりするようです。(だめなのはこれだけではなさそう)
やりたいのは、perlで日本語のXML文書を読み込むことです。
その読み込みの時点ではまってしまうので困っています。
別に文字コードがeucである必要はないし、モジュールもXML::Parserを使うことにこだわりないです。
この辺のことを処理するにはどうすればいいでしょうか?
UTF-8にしてみたら?
# 読み込みアルゴリズムが違うのははただの趣味
undef $/;
my $topic = <STDIN>;
Jcode::convert(\$topic, 'utf8', 'euc'); # これ
my $xml = new XML::Parser(Style => 'Debug',ProtocolEncoding=>'utf-8');
# ...
0959957
03/05/15 18:20ID:???UTF-8でやってみました。
以降Jcodeにてeucをutf8に変換したものとして話をさせていただきます。
utf-8にしても、同じエラーが出るには変わりなかったので、
エラーの出る部分を特定しようとして、ひとつ気がつきました。
*文字の種類によってエラーがでるのではなく、文字数によってエラーが出る。*
日本語だけで記述された文の場合、文字が10個続くと必ずエラーが出ます。
9文字までならエラーになりません。
アルファベット(半角文字)で始まる文の場合、
アルファベットが1つ,2つの時は同じように日本語10文字で同じエラーになります。
アルファベットが3つあると、日本語16文字で同じエラーになります。
アルファベットが4つあると、日本語18文字で同じエラーになります。
アルファベットが5つあると、日本語20文字で同じエラーになります。
なんなんでしょう、これ。
ちなみにエラーの出るXML::Parser.pmの346行のコードは、
$text =~ s/([\x80-\xff])/sprintf "#x%X;", ord $1/eg;
だそうです。
0960あすか
03/05/15 21:05ID:???掲示板で、URLを張ると、そのURLの「HTMLソース」が見れる様になるものがあるんですが
あれって、どういう仕組みなんでしょうか。。
例えば
http://www.yahoo.co.jp/ (Text)←yahooにアクセスしなくともhtmlソースが見れる
の様なものです★
0961動画直リン
03/05/15 21:10ID:fs87NLJj0962nobodyさん
03/05/15 21:23ID:???view-source:http://www.yahoo.co.jp/
0963nobodyさん
03/05/15 21:39ID:bacZc7Vd例
d:/aaa/bbb/ccc/ddd/file.txt -> file.txt
d:/aaa/bbb/aaa.dat -> aaa.dat
d:aaa.dat -> aaa.dat
d:/aaa/bbb/aaaa -> aaaa
d:/aaa/bbb/ccc/ddd/eee/.fff -> .fff
d:.abcde -> .abcde
perlで、自分自身のファイル名を得たいので
$0 っていう特殊変数を使うと、フルパスで出てしまうので、
ファイル名のみを、、
0964963
03/05/15 22:03ID:bacZc7Vd$ENV{SCRIPT_NAME} =~ s|.*/||;
で、できました。
ただ、これを変数に入れるのはどうすればいいでしょう?
my $filename = $ENV{SCRIPT_NAME} =~ s|.*/||;
ってやっても、$filename には 1 としか入らんもんで、、
0965nobodyさん
03/05/15 22:46ID:mip2uT4/それをSSIで出力したいのですが、思いつくのは、Bサーバの1個のファイルに対して、
if(-e $file){
print "稼動中";
}else{
print "ダウン中";
}
という、つながるか、つながらないか、というのしかできそうにありません。
pingでパケット送ったり、みたいなのはないですか?
0966965
03/05/15 23:01ID:???翻訳の天才だ。日本語だって訳してみせらぁ。でも脳内単語だけは勘弁な。
--
あるサーバ(A)から別のWebサーバ(B)の状況を確認したい。
確認したい内容は、1.健在 2.レスポンスが悪い 3.沈黙。
自分で考えた方法は、Bサーバで if(-e $file)を実行する方法。
できることならpingの確認もしたい。
0967nobodyさん
03/05/15 23:07ID:mip2uT4/ありがとう。
pingの確認というのは、-eでは健在or沈黙しか得られないので、
pingなど、レスポンスの良し悪しも分かるコマンドはないですかってことです。
わざわざスマソ
0968nobodyさん
03/05/15 23:09ID:???0969bloom
03/05/15 23:10ID:fs87NLJjう〜む。分からない。
エラーが起きる最小のコードXML文書を抜き出せる?
あとXML::Parserのバージョンも教えて。
0971965=967
03/05/15 23:26ID:mip2uT4/>自分で考えた方法は、Bサーバで if(-e $file)を実行する方法。
やっとこの意味がわかった。Bサーバでif(-e $file)を実行して、Aサーバに
SSIでフルパスで呼び出すってことですか。。
書き忘れましたが、AサーバはSSI,CGI可で、BサーバはSSI,CGI共に不可なんです。
if(-e $file)ってのをURLいれてやったら失敗したから、この場合どうしようもないのかな・・・・
0972nobodyさん
03/05/15 23:33ID:???my $filename = $ENV{SCRIPT_NAME};
$filename =~ s|.*/||;
ちったぁ、頭使おうぜ。
0974965=967
03/05/15 23:52ID:mip2uT4/ありがとう。
is_success使ってできた。。。でも、レスポンスが悪いとかは無理かな?
これは、生存or死亡だけっぽい
0975nobodyさん
03/05/16 00:16ID:???0976965=967
03/05/16 01:39ID:HXybd+Xv時間はあんまり詳しくないんです、、ハイ
0977nobodyさん
03/05/16 11:03ID:+7wsfVA8sprintf("%0.2f",$num)
これだと四捨五入になるので、お願いします。
0978bloom
03/05/16 11:10ID:n/FznajZ0979nobodyさん
03/05/16 11:12ID:???$number = 1.234567;
$number = int ( $number * 100);
$number /= 100;
0980nobodyさん
03/05/16 11:22ID:???■ 新スレ用意いたしますた ■
Perl 初心者コーナー Part23
http://pc2.2ch.net/test/read.cgi/php/1053051519/
0981nobodyさん
03/05/16 11:26ID:???<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="http://example.com/index.xsl"?>
<Subject>ああああああああああ</Subject>
これでエラーになります。
XML::Parserのバージョンはたぶん2.31、
昨日CPANからインストールしたので最新バージョンだと思います。
あと、調べたらStyle=>'Debug'の時だけエラーになるようです。
Style=>'Tree'の時にはエラーになりませんでした。
たぶん実際に使うときにはDebugでは使わないから別にいいのかな……。
ごめん、分からなかった。
perl5.8+XML::Parser2.31では再現せず…。"Wide character in print"なんて警告は出たけど、謎。
多分、XML::Parser::Expatを経由するに立てられたUTF8フラグが悪さをしているんだと思うけど…。
とりあえず置換えはどうせデバッグの為だけだし、こんな感じでメソッドを再定義すればとりあえずは動くはず。
sub XML::Parser::Debug::Char{
my $expat = shift;
my $text = shift;
print STDERR "@{$expat->{Context}} || $text\n";
}
my $parser = new XML::Parser(...);
0983nobodyさん
03/05/16 17:38ID:Jkp+t2ia'sql_arrange' => "顧客絞込み条件の入力",
'select' => "該当顧客の閲覧",
'writemail' => "メールの記入"
);
foreach $value (keys %mode2name){
$HtmlTmp .= qq|$mode2name → |;
}
print $HtmlTmp;
とやると、
「該当顧客の閲覧 → メールの記入 → 顧客絞込み条件の入力 → 」
と表示されます。
これを、%mode2name = で設定した順番、つまり、
「顧客絞込み条件の入力 → 該当顧客の閲覧 → メールの記入」
と表示させるには、
foreachの部分はどう書けばいいのでしょうか?
0985nobodyさん
03/05/16 18:04ID:???おつきあいどうもありがとうございました。なんとかこれでやってみます。
スレ埋め立ても兼ねてちょっとみなさんに聞きたいのですが、
なんかどこもかしこもXMLになってきているなかで、なんかgoogleっても
perl+XMLな話題が少ないような気がするのですけど、
スクリプトでXMLいじる人ってのは
perl以外(rubyとかpythonとか)の方が最近は多かったりするんでしょうか?
周り見てみて、いかがですか?
0986nobodyさん
03/05/16 21:42ID:4ZXWJHXL探しているんですが見つからないんです。
0987nobodyさん
03/05/16 21:53ID:???http://www.google.com/search?q=perl+WindowsXP&num=100&hl=ja&lr=lang_ja&ie=UTF-8&inlang=ja&c2coff=1&safe=off&filter=0
0988nobodyさん
03/05/17 00:14ID:GaxUmwFmサーバーによって何か設定変えないければならないのでしょうか?
perl5、apache、freeBSDのサーバーなんですが。。
0989nobodyさん
03/05/17 00:25ID:???どこかのレンタル?
$ENV{'REMOTE_HOST'}を取得できない鯖はよくあるよ。
$ENV{'REMOTE_ADDR'}から必要に応じてホストに変換で。
0990988
03/05/17 00:43ID:GaxUmwFm$ENV{'REMOTE_ADDR'}は取得出来ましたので必要に応じてホストを調べればいいという事ですね。
ちょっとスレ違いですが、例えば掲示板で変な書き込みがあったときに、プロバイダに連絡して注意してもらう為には$ENV{'REMOTE_ADDR'}と書き込み時間を取得しておけば大方はOKでしょうかね?
0992988
03/05/17 00:52ID:GaxUmwFm0993nobodyさん
03/05/17 17:47ID:???PERL、Perl、perl、PERL、Perl、perl
Perl、perl、PERL、Perl、perl
perl、PERL、Perl、perl
PERL、Perl、perl
Perl、perl
perl
erl
rl
l
rl
erl
perl
perl、 Perl
perl、 Perl、 PERL
perl、 Perl、 PERL、 perl
perl、 Perl、 PERL、 perl、Perl
perl、 Perl、 PERL、 perl、Perl、PERL
0997nobodyさん
03/05/17 18:41ID:???0998nobodyさん
03/05/17 18:55ID:???0999nobodyさん
03/05/17 19:01ID:???1000nobodyさん
03/05/17 19:02ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。