Perl言語に詳しい人に質問!

このエントリーをはてなブックマークに追加
932デフォルトの名無しさん:2009/12/04(金) 12:40:06
でもお前ら、偉そうなこと言ってfeatureで一番心待ちにしてるのはsayだろ?な?
すでにuse feature qw/say/;とかsub say {print shift . "\n"} とかしてるやつ手を挙げろ。
933デフォルトの名無しさん:2009/12/04(金) 19:18:26
use 5.010; 派
934デフォルトの名無しさん:2009/12/05(土) 00:04:06
export PERL5OPT=-M5.010


exe 'inoreabbrev <buffer> say '. 'print, "\n";'. "<C-O>F,"
935デフォルトの名無しさん:2010/03/07(日) 23:52:03
( ´・ω・`)
936デフォルトの名無しさん:2010/03/08(月) 00:18:35
(´・ω・`)
937デフォルトの名無しさん:2010/03/08(月) 23:59:23
アクセスした人のポート番号80が空いてるかどうかを調べるにはどうすればいいでしょうか?
REMOTE_PORT関数で調べれると思ったのですがうまくいかなくて・・・
938デフォルトの名無しさん:2010/03/09(火) 08:35:01
>>937
telnetででも80番叩いてみればいいじゃん。
939デフォルトの名無しさん:2010/03/13(土) 13:37:02
(´・ω・`)
940デフォルトの名無しさん:2010/03/14(日) 02:32:42
>>938
スレタイ読めないの?
941デフォルトの名無しさん:2010/03/14(日) 02:39:43
>>937
最近、phpしか触ってないのでperlの方を忘れたけど、phpならこんな感じ。
function is_online($server_ip)
{
    $ip = gethostbyname("{$server_ip}");
    if ($fp = @fsockopen($ip, 80,$un,$sinn,2)) {
        fclose($fp);
        return true;
    } else {
        return false;
    }
}

要するに、ソケットをオープンして成功すれば、そのポートが開いてるってこと。
「perl ソケットオープン」
で検索汁
942デフォルトの名無しさん:2010/03/14(日) 02:41:04
>>941
スレタイ読めないの?
943デフォルトの名無しさん:2010/03/15(月) 07:09:23
アクセスした人のIPアドレスが12.34.56.78 だった場合
お手元のブラウザで

ttp://12.34.56.78/

(頭にtをつけてね)

ってやってサーバーが見つかりませんってエラーがでたら80番空いてない。
何かしら出てきたら空いてる。

これでどうよ。
944デフォルトの名無しさん:2010/03/15(月) 11:21:04
>>940
あぁ、ごめん、perlスレだったw

use LWP::Socket;
my($server, $port) = ('localhost', '80');
my $socket = LWP::Socket->new;
$socket->connect($server, $port);

ただ確かめるだけならこんなんでいいんじゃない?
945デフォルトの名無しさん:2010/03/15(月) 21:52:13
一週間もまえの書き込みに今更・・・
946デフォルトの名無しさん:2010/03/16(火) 03:03:36
open FILE, "<:encoding(cp932)", $hage;
read FILE, my $text, -s FILE;
close FILE;

みたいなスクリプトで cp932 *以外*のファイルを読んでしまうと

cp932 "\xEF" does not map to Unicode at C:\workspace\hoge\fuga.pl line **.

ってワーニングが出ますが、perlスクリプトはそのまま続行してしまいます。
ほんとうは停止してほしいんですけど、
read FILE, my $text, -s FILE or die; としても止まってくれません。
eval { ..... } die if $@; でも止まってくれません。
何か方法があれば教えてください。
947デフォルトの名無しさん:2010/03/16(火) 03:20:17
>>945
local $SIG{__WARN__} = sub{ die @_ } ;
スクリプトの最初の方にでも突っ込んどけば?
948デフォルトの名無しさん:2010/03/16(火) 22:45:43
use PerlIO::encoding;
use Encode qw[ :fallbacks ]; # 定数の import
$PerlIO::encoding::fallback = Encode::DIE_ON_ERR;

open ...

という風に $PerlIO::encoding::fallback に定数を入れてやると
PerlIO で Encode がまずったときの動作を指定することが出来たはず.
定数については Encode の check に書いてあったと思う.
949デフォルトの名無しさん:2010/03/17(水) 04:34:23
>>946
encoding使わないでdecode_utf8すれば良いんじゃない?
出力でencodeし直せばおけー
950デフォルトの名無しさん:2010/04/15(木) 09:11:18
perlccがうまく動きません><

だれかこの部分だけでいいから、Cにしてくれ〜。

/^(.*) (.*) (.*) \[(.*)\] "(.*)" (.*) (.*) "(.*)" "(.*)"/;
951950:2010/04/15(木) 11:15:49
すまん、やっぱいい
952デフォルトの名無しさん:2010/05/24(月) 01:43:38
答えてやって

ttp://anchorage.2ch.net/test/read.cgi/siberia/1235319741/680
> プログラミング初心者です。以下の課題が出されたのですが、まったくわかりません。助言おねがいします。
953デフォルトの名無しさん:2010/05/24(月) 02:30:38
954デフォルトの名無しさん:2010/05/24(月) 05:03:52
>>952
Perl じゃないじゃん
955デフォルトの名無しさん:2010/06/11(金) 13:46:42
         / ̄ ̄\
       / ヽ、. _ノ \
       |  (●)(●) |
       |  (__人__) | ヨナも そうおもう
          |   ` ⌒´  |  
        |        }
        ヽ       }
        人_____ノ"⌒ヽ
      /           \
     /            へ  \
     (  ヽγ⌒)     |  \   \
  ̄ ̄ ̄\__/
956デフォルトの名無しさん:2010/07/21(水) 22:32:12
クライアントがサーバへファイル名を送り、サーバがそれを検索しそのファイルを送るサーバプログラムはどうかけばいいですか?

初歩的な質問で申し訳ないですが、よろしければご教授ください。
957デフォルトの名無しさん:2010/07/22(木) 01:53:34
宿題は自分でやれ
958デフォルトの名無しさん:2010/07/22(木) 22:32:22
>>956
> クライアントがサーバへファイル名を送り、
 ieとかでwww.yahoo.co.jp/index.htmlと入れる。

> サーバがそれを検索しそのファイルを送る
 apacheがindex.htmlの内容を返す。

つまり、apache のソースを提出すればよろし
959デフォルトの名無しさん:2010/08/05(木) 06:17:40
hosyu age
960デフォルトの名無しさん:2010/08/07(土) 12:37:44
use strict; をすり抜けて、use warnings; で引っかかる
事例って、どんなのがあるの?
961デフォルトの名無しさん:2010/08/07(土) 15:03:00
あんいにしゃらいずどばりゅうとか?
962デフォルトの名無しさん:2010/08/07(土) 15:50:22
>>960
暗黙の文字列→数値変換で、文字列が数値以外の文字が含まれてるとき。
> perl -Mstrict -Mwarnings -e 'print int("1a")'
Argument "1a" isn't numeric in int at -e line 1.
1
> perl -Mstrict -e 'print int("1a")'
1
963デフォルトの名無しさん:2010/08/07(土) 17:58:46
>>962
なるほど・・・
じゃああえてそういう文字列食わせたいときとかは
一時無効にする必要があるわけか
964デフォルトの名無しさん:2010/09/15(水) 07:02:48
初歩的な質問ですが…

use libでパスを複数指定するとエラーになったりしますか?
例えば、
hoge.pmが/home/***/perl5とかに入ってて
fuga.pmが/home/***/perl5/i386-freebsdに入ってる時
二つのパスをuse libすると500になります。
かといって片方しかパスを指定しない場合はCan't locateのエラーが出ます。
どうすれば両方のモジュールを使用することが出来るのでしょうか?宜しくお願いします。
965デフォルトの名無しさん:2010/09/15(水) 10:20:36
>>964
それ多分違うところでエラーでてるかContent-Type吐いてないかパーミッションがおかしいかそんなとこだろ
どうにかしてエラー内容特定汁
966デフォルトの名無しさん:2010/09/15(水) 10:56:25
#!/usr/bin/perl
use lib qw(/home/***/extlib/lib/perl5 /home/***/extlib/lib/perl5/i386-freebsd);
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
use AnyEvent::HTTP;
use Coro;

print "Content-type: text/html\n\n";
print "hoge";
↑500が出る


/home/***/extlib/lib/perl5/i386-freebsdを残して
/home/***/extlib/lib/perl5の部分だけ切り取り
↑Can't locate AnyEvent/HTTP.pm in @INC (...


/home/***/extlib/lib/perl5を残して
/home/***/extlib/lib/perl5/i386-freebsdの部分だけ切り取り
↑Can't locate loadable object for module Coro::State in @INC (...


/home/***/extlib/lib/perl5/i386-freebsd/auto/Coro/Stateを追加
use AnyEvent::HTTP;があると500になるので削除
/home/***/extlib/lib/perl5だとCoroで500が返るので /home/***/extlib/lib/perl5/i386-freebsdに
↑Can't locate loadable object for module Guard in @INC (...


/home/***/extlib/lib/perl5/i386-freebsd/auto/Guardを追加
↑Can't locate common/sense.pm in @INC (...
967デフォルトの名無しさん:2010/09/15(水) 11:00:35
/home/***/extlib/lib/perl5/commonを追加
↑変わらずCan't locate common/sense.pm in @INC (...が出る

今この状態です。

もちろん
#!/usr/bin/perl
use strict;
use warnings;
print "Content-type: text/html\n\n";
print "hoge";

これはちゃんとhogeが出力されます。
どういった原因が考えられますでしょうか?
2レスに渡り長々とすみません。どうかよろしくお願いします。
968デフォルトの名無しさん:2010/09/16(木) 01:31:37
>>966>>967>>965宛ですすみません><
969デフォルトの名無しさん:2010/09/16(木) 02:31:40
>>966
extlib/ をつくった環境とちがう環境でうごかそうとしたりしてませんか?
/home/***/extlib/lib/perl5/i386-freebsd 以下のディレクトリは環境依存のものがはいっているので、環境がちがうところにコピーしてつかったりはできませんけども。
(ここでいう環境とは OS, アーキテクチャ, -Dusethreads の有無, perl5 のバージョンのことです)
970デフォルトの名無しさん:2010/09/16(木) 02:41:08
>>969
レスありがとうございます!!!
でも俺のレベルだとちょっと理解しきれ無いので、教えてもらった内容に含まれてるキーワードで早速ググッてきます!
971デフォルトの名無しさん:2010/09/16(木) 03:31:29
>>969
解決しました!
環境が違うってのがどういうことかわかりました!#!/usr/bin/perl環境じゃなくてモジュールをインストールしたperl環境じゃないとダメ…みたいなことですよね?
どうもありがとうございました!
972デフォルトの名無しさん:2010/09/25(土) 00:56:56
PerlというかDBIで、fetchが最後まで行って終了した時に、
もう一度先頭行からループし直す時どうすればいいのでしょうか?

カーソルを先頭行に戻すやり方を教えて下さい。
973perl入門者:2010/09/26(日) 10:59:18
すいません。
perlで、以下のような処理を実現したいのですが、
作成された方がいらっしゃいましたら、ご教授お願いします。
(1)「javaのプログラム内の全てのコメントを削除」して表示する
(2)「javaのプログラム内のコメントのみ」を表示する

よろしくお願いします。
974デフォルトの名無しさん:2010/09/26(日) 11:02:53
正規表現使えばいいのでは?
975デフォルトの名無しさん:2010/09/26(日) 11:07:03
Javaのコメントはネスト不可なのか
でも、もしJavaがコメント内の文字列リテラルとかも認識するなら
正規表現だけでは対応できないよ、多分
976デフォルトの名無しさん:2010/09/26(日) 11:11:03
とりあえず正規表現を使わないなら
行コメントは簡単だろうけど、ブロックコメントは
コメントの中にいるかどうかっていう状態変数を作って
読みこみながら処理していけばいい
(コメントの中にいなくて/*にであったらコメントに入る)
(コメントの中にいて*/に出会ったとき、コメントの外に出る、みたいな感じで)

Javaがコメント内の文字列も認識するなら
コメントの中の文字列の中にいるっていう状態変数も作る

もっと複雑なことをする予定ならパーサを作るほうが楽
977デフォルトの名無しさん:2010/09/26(日) 11:13:17
注意すべきは文字列リテラルの中にコメントと同等のシーケンスが入っていた場合。
978デフォルトの名無しさん:2010/09/26(日) 17:38:11
System.out.println("/*うんこ野郎!*/"); /*どうだ参ったか!*/
979デフォルトの名無しさん:2010/09/26(日) 20:50:19
Parse::RecDescent
で、文字列とコメントとそれ以外を定義
980デフォルトの名無しさん:2010/09/26(日) 21:58:05
このGrammarは、Javaでもそのまま使えるんじゃね?
http://www.ibm.com/developerworks/jp/linux/library/l-perl-parsing/stat-comments-dos.pl.txt
981デフォルトの名無しさん
ふーん