トップページ⇒tech
1001コメント298KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
"The duct tape of the Internet"こと、
Perlについての質問箱です
"There's more than one way to do it"ということで
ぱぁるの奥深さについて皆で語り合い、追求してまいりましょう。

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

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

姉妹スレッド
http://pc5.2ch.net/test/read.cgi/php/1089779036/

過去ログは>>2-1001あたり
0002デフォルトの名無しさんNGNG
1 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://pc2.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc2.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/l50
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/l50
9 http://pc5.2ch.net/test/read.cgi/tech/1079114157/l50
10 http://pc5.2ch.net/test/read.cgi/tech/1085564875/l50
0003デフォルトの名無しさんNGNG
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/

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

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

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

[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
0004デフォルトの名無しさんNGNG
>>1
スレ立て乙。
そしてPerlスレ11箱達成おめ。
0005デフォルトの名無しさんNGNG
  ∧_∧
 ( ´∀`) < Parrot
0006デフォルトの名無しさんNGNG
***.plって形でローカルに作成し、ActivePerlでそれを実行することでサーバにFTPアクセスしてファイルをダウンロードしてくるまでの一連の処理を作りたいのですがよくわかりません。ご教授願います。
0007デフォルトの名無しさんNGNG
>>6
Windows版のwgetがあったと思うので、それをsystemを使って呼ぶ。
0008デフォルトの名無しさんNGNG
二次元の連想配列を、値でソートしながらforeachで
出力させたいのですが、うまくいきません。

二次元連想配列を %data として、以下のような感じに書いています。

foreach $value (sort {ソート条件} values(%data)) {
  〜;
}

ここでソート条件の部分で$a、$bを調べると、ハッシュに
なっているので、ソート条件を

%$a{'aaa'} <=> %$b{'aaa'}

のように書くことでうまくいくのではないかなと思ったのですが、
エラーになってしまいます。

どのように書けばよいのでしょうか。

環境は Windows2000、ActivePerl 5.6.1 です。
よろしくお願いします。

0009デフォルトの名無しさんNGNG
>8
すいません。書き込んだ直後に自己解決しました。

%$a{'aaa'} ではなくて、$$a{'aaa'} でした。
0010デフォルトの名無しさんNGNG
>>6
Net::FTP 使え
0011デフォルトの名無しさんNGNG
>>10

Net:FTP使ってみました。
------
use Net::FTP;

my $ftp = Net::FTP->new($server, Debug => 1);
$ftp->login($user, $pass);
$ftp->cwd($dir);
$ftp->get($file);
$ftp->quit;
------

こんな感じで使ってみると、指定ディレクトリ($dir)以下にある指定ファイル($file)はダウンロードできましたが、
これだと、指定ファイルのみダウンロードになってしまいます。
どーにかして指定ディレクトリ毎落とすことはできないのでしょうか?
0012デフォルトの名無しさんNGNG
教えて君ですか・・・
0013デフォルトの名無しさんNGNG
>>13
そこまでわかってたらあとはファイルのリストをとって
ぐるぐるループすりゃいいだけだろ。
0014デフォルトの名無しさんNGNG
>>13
どーすればファイルのリストをとれるのでしょうか?
0015デフォルトの名無しさんNGNG
そのくらいNet::FTPのマニュアル嫁。
0016デフォルトの名無しさんNGNG
どーやったらマニュアルを読めるのでしょうか?
0017デフォルトの名無しさんNGNG
>>16
マニュアル読まずにどうやって >>11 のコード書いたの?
0018デフォルトの名無しさんNGNG
>>17
>>16は私ではありません。
0019デフォルトの名無しさんNGNG
Net::FTP 教えてやったんだから後は自分で頑張れ
0020デフォルトの名無しさんNGNG
>>18 も私ではありません。
0021デフォルトの名無しさんNGNG
なんかすごいヤツがいるな。
0022デフォルトの名無しさんNGNG
Perl用のWeb系フレームワークと、それ用の開発環境って無いですか?
0023デフォルトの名無しさんNGNG
>>22
開発環境は知らんがフレームワークなら http://sl.edge.jp/
それと Web 系の話題は WebPlog 板へ。
0024デフォルトの名無しさんNGNG
sub func {
  my(*x1, *x2) = @_;
}

ってダメなの?
0025デフォルトの名無しさんNGNG
Perlの関数名って大文字から始まるのと小文字から始まるの
どちらが普通?
0026デフォルトの名無しさんNGNG
>>24
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsub.html#When_to_Still_Use_local_
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq7.html#What_s_the_difference_between_dy

>>25
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlstyle.html
0027デフォルトの名無しさんNGNG
26はあぼーん推奨
0028デフォルトの名無しさんNGNG
>27
え?どうしてですか?
0029デフォルトの名無しさんNGNG
>>27
何故?
0030デフォルトの名無しさんNGNG
ファイルを読み込んで処理を行い,保存したいのですが
以下のような感じでやってもうまくできません.

open FILE, "+>$filename";
@array = <FILE>;
foreach $tmp (@array){
処理
}
print FILE @array;
close FILE;

@arrayをプリントしてみたところ配列にファイルの内容が読み込まれてないようです.
0031デフォルトの名無しさんNGNG
>>30
open FILE, "$filename";
0032デフォルトの名無しさんNGNG
>>30
open( FILE, "+>$filename" ) or die $!;
 と、してみたら?
0033デフォルトの名無しさんNGNG
>>30
http://perldoc.com/perl5.8.4/pod/perlopentut.html#Mixing-Reads-and-Writes
0034デフォルトの名無しさんNGNG
ドキュメントの該当箇所探すの面倒なので今後はこのスレに丸投げすることにしよう。
こりゃ楽だわ。
0035デフォルトの名無しさんNGNG
>>31-32
レスありがとうございます.
できませんでしたorz
31さんの方ですと$arrayに読み込むことができるのですが
ファイルに書き込み(上書き)することができませんでした.
32さんの方では30の時と結果変わらずでした.
ちなみにこんな感じでテストプログラム作りました.

$filename = "test.txt";
$tmp = "hoge\n";

open (FILE,"+>$filename")or die $!;
@array = <FILE>;
push @array,$tmp;
print FILE @array;
close FILE;
0036デフォルトの名無しさんNGNG
ttp://take4.dynsite.net/mt/archives/000020.html
ttp://www.ken3.org/cgi-bin/group/vba_ie.asp

上記のページを参考に、Windows上でIEを操作して業務アプリ用の
フォーム自動入力をやらせようとしてます。
ところが、中にいちいちJavascriptで確認を求めるポップアップが
出てくるページがあり、対応に苦慮しています。
アプリのほかの部分で使っているため、
IEの初期設定でJavascriptを切る方法は使えません。

そこで下記のようなアプローチをしていますが、うまく行きません。
お知恵をお貸しくださいますでしょうか。

○ポップアップ機能「だけ」を殺す
http://msdn.microsoft.com/workshop/browser/webbrowser/reference/properties/silent.asp
○Win32::GuiTestでEnterキーを入力
(SendKeysでうまくいかなかった例)
--------------------------------------------------
use Win32::IE::Mechanize;
use Win32::GuiTest qw(SendKeys);

my $ie = Win32::IE::Mechanize->new( visible => 1 );

$ie->get('http://hoge.com/'); #ポップアップが出てくるページ
SendKeys("{ENTER}");
0037デフォルトの名無しさんNGNG
>>30-32 >>35
OSはUNIX系?それともWindows系?
後者はopenに失敗することがあるような。
0038デフォルトの名無しさんNGNG
>>37
windowsでactive perl5.8使ってます。
0039デフォルトの名無しさんNGNG
>>38
うろ覚えだがwindows(NT)+ActivePerl(バージョン失念)のとき
+>$filename
ではopen出来なかったような・・・
0040デフォルトの名無しさんNGNG
>>39
ソウナノカー(;´Д`)
ありがとうございました.
別の方法でやってみます.
0041デフォルトの名無しさんNGNG
CGIからファイルを読むだけでもロックって
必要ですか?
0042デフォルトの名無しさんNGNG
はい。perlには関係ありません。
CGI?スレ違いだよ。
でもおそらくCGIとも関係ないです。

実装するアルゴリズムを自分のなかで整理してから、
どーすれば安全なようになるのか考えて下さい。
0043デフォルトの名無しさんNGNG
読み込み中は書き込みをブロック(読み込みはOK)
0044デフォルトの名無しさんNGNG
>>42
いや、あなたには聞いてないんですが・・・
0045デフォルトの名無しさんNGNG
>>30
+>は読み書きできるようにopenするが、まず最初に>と同様
ファイルを空にするので何も読めないのは当たり前。

+<を使い、適切にseekやtruncateする必要もあるだろう。
0046デフォルトの名無しさんNGNG
>>44 聞いてないならハナから質問すんな
わざわざスレ違いをおしてまで答えたのになんだそりゃ。
まぁ二つも回答が書いてあるんだからもう二度とくんなよ。
0047デフォルトの名無しさんNGNG
>46

いやいや、あなたには聞いてないというだけで、
他の人には聞いてました。
0048デフォルトの名無しさんNGNG
テキストファイルから1行ずつ読み込んで、
末尾の改行を削除するために、以下のように
書いたのですが、えらく時間がかかります。

while ($line = <IN>) {
  $line =~ s/[\r\n]*$//;
}

もっと高速な書き方はあるでしょうか?
0049デフォルトの名無しさんNGNG
>>48
chompは?
0050デフォルトの名無しさんNGNG
>49
すいません。昨日実験したときchompでも変わらなかった
気がしたのですが、今やってみたらえらく速く
なりました。ありがとうございます。
0051デフォルトの名無しさんNGNG
chomp()すれば?
0052デフォルトの名無しさんNGNG
>>51
だからしたっつってんだろうがボケ!
0053デフォルトの名無しさんNGNG
>>52
chompでどう?
0054デフォルトの名無しさんNGNG
chompもいいと思うよ
0055デフォルトの名無しさんNGNG
>>48
ついでだけどその記述、一行づつ読み取ってるのにその正規表現は無意味だにょ。
/(\r\n)$/ でいいような。
005655NGNG
ごめんなさい。すごいボケてました。忘れてください。
0057デフォルトの名無しさんNGNG
chomp には問題がある!!
0058デフォルトの名無しさんNGNG
じゃあ,chop
0059デフォルトの名無しさんNGNG
2バイトの改行だったらどうするんだ。chop君
0060じゃあこうしようNGNG
s/\x0D\x0A|\x0D|\x0A//g;
0061デフォルトの名無しさんNGNG
trのほうが速い
tr/\x0D\x0A//d
0062デフォルトの名無しさんNGNG
これは漏れの勘なんだが、ここ最近の質問は全部同じ質問者だったりして?
略して丸投げ
0063デフォルトの名無しさんNGNG
例えばどれ?
0064デフォルトの名無しさんNGNG
>>62
知ったかぶって答えるやつがいるからそうなるんだろうが。
0065デフォルトの名無しさんNGNG
>>63
ここ最近と言っているんだから、少なくともこのスレッドでの質問全てでは。
0066デフォルトの名無しさんNGNG
>61
実測した?
0067デフォルトの名無しさんNGNG
>>64
まったくもって意味不明ですね。
では、知ったかぶっているのではなく「実際に知っている」人が回答したら
どうなっていたというのでしょう? :-P
0068デフォルトの名無しさんNGNG
改行の質問したものですが、FTPは私じゃないです。
0069デフォルトの名無しさんNGNG
>>68
というか他の質問も私じゃないです。
007062NGNG
>>64 だれに言ってるんだろ?
まー俺的には質問連打けっこーだけど。(てかただの勘だよ)

つーかレスはえーな。w
0071デフォルトの名無しさんNGNG
>64は>62に対して言ってます。
読めば分かると思いますが?
0072デフォルトの名無しさんNGNG
>>70
質問がなきゃスレの意味がないし、答えたくなければスレを見なけりゃ
いいだけの話。
丸投げがあろうとなかろうと関係ないし、例のftpの質問への対応を
見れば度を越せば叱られるわけで、このまま普通にやってりゃ問題は
ない。

丸投げだ何だと書いた奴の目的は「質問スレに質問が来ないようにし
てスレを衰退させること」だろ。その手に乗るなよ。
0073デフォルトの名無しさんNGNG
どのレベルまで調べて質問したって、もっと調べろとか
言ってくる奴はいるんだよね。

逆にこんなとこに常駐してるヤツはそんな難しい質問には
答えられないんだから、今のくらいがちょうどいいんだよ。
0074デフォルトの名無しさんNGNG
>>71
あなた読解力ないですね ;-)
0075デフォルトの名無しさんNGNG
>>73
> どのレベルまで調べて質問したって、もっと調べろとか
> 言ってくる奴はいるんだよね。
だから何なのかが不明瞭ですね。
何かができないこと、あるいは何かをしでかすことに対する
言い訳とか予防線のたぐいですか?
007630NGNG
>>45
レスありがとう。
勉強になりました。
0077デフォルトの名無しさんNGNG
>75
そうだけど?何か?
0078デフォルトの名無しさんNGNG
そもそもこのスレってどういう人種がいるんだ?
職業プログラマだったらここには来ないよな。
情報系の大学生、高校生あたり?
0079デフォルトの名無しさんNGNG
データファイルの更新方法についてなんですが、
 use POSIX;
 use Fcntl qw/:flock/;
 open my $fh, "+< $file" or die $!;
 flock $fh, LOCK_EX;
 my @data = <$fh>;
 # @dataの内容を加工
 truncate $fh, 0;
 seek $fh, 0, SEEK_SET;
 print $fh @data;
 close $fh;
という方法だと、truncate〜printの間にシグナルなどで死んだ時に
データが消えてしまいます。(実際にありました。)
そこで次のように変えることで、自分では対処できたと思っているのですが、
何か見落としなどはありますでしょうか?(今のところ正常に動いてはいます。)
 use File::Temp qw/tempfile/;
 # use POSIX〜@dataの加工まで同じ
 my ($tfh, $tfile) = tempfile(DIR=>$tmpdir);
 print $tfh @data;
 close $tfh;
 rename $tfile=>$file;
 close $fh;
0080デフォルトの名無しさんNGNG
>>48
環境にもよると思うけど、漏れの測ったところでは、これが速かった。
$line =~ s/\n\z//; $line =~ s/\r\z//;
0081デフォルトの名無しさんNGNG
>>79
# 別途ロックファイルを用意してロック
open LOCK, '>' . $lock_file or die $!;
flock LOCK, LOCK_EX;
{
  # 適宜シグナルを書き換え
  local $SIG{'TERM'} = 'IGNORE';

  open OLD, '<' . $data_file or die $!;
  open NEW, '>' . $temp_file or die $!;

  # 加工と書き出し
  my @data = <OLD>;
  ...
  print NEW @data;

  close NEW; # flush
  close OLD;

  rename $temp_file => $data_file or die $!;
}
close LOCK; # 解除
0082デフォルトの名無しさんNGNG
>>79
以下のようなときにだめになる。

Aがロックして処理開始。
Bが来る。flockで待たされる。
Aがロック解放。
Bがflock抜け処理開始。しかしロックされたのはrenameで消えた方のファイルだし、読みこみも更新前の内容。
Cが来る。新しいファイルにはロックかかってないのでそのままflock成功。

対策はロックファイル別に用意するに
俺も一票。
0083デフォルトの名無しさんNGNG
単一プロセスだと思うけれども、、、
cron で動かしているのなら、 pid ファイルでも作って重複しないようにしなきゃかもですね。
svscan のほうが個人的には好きだけれども。
008479NGNG
>>81-82
テストしてみたら、82さんの言う通りでした。
81さんが示してくれた方法でやるようにします。
どうもありがとうございました。
0085デフォルトの名無しさんNGNG
Win2k+ActivePerl環境で日本語を使用してグラフを作成したいのですが、(全角も半角文字も)文字化けして上手く表示されません。
どなたか、解決法をご存じでしたら、教えて下さい。

■環境
Win2k SP4
AvtivePerl v5.6.1 build 633
GD v2.15
GDGraph v1.43
GDTextUtil v0.86
Jcode v0.87
008685NGNG
ソースは http://www.gadgety.net/shin/tips/unix/perl-gd.html からほぼ丸写しです。
カレントディレクトリに HGRSKP.TTF をコピー済です。

use strict;
use Jcode;
use GD::Graph::bars;
my @labels = qw( under 10s 20s 30s 40s 50s 60s 70s over );
my @dataset = qw( 20 40 60 80 65 15 10 20 5 );
my @data = ( \@labels, \@dataset);
my $graph = GD::Graph::bars->new( 400, 300 );
$graph->set( title => jcode("にこにこ村の人口")->utf8,
y_label => jcode("人数")->utf8 );
GD::Text->font_path( "./" );
$graph->set_title_font( "HGRSKP", 14 );
$graph->set_legend_font( "HGRSKP", 8 );
$graph->set_x_axis_font( "HGRSKP", 8 );
$graph->set_x_label_font( "HGRSKP", 10 );
$graph->set_y_axis_font( "HGRSKP", 8 );
$graph->set_y_label_font( "HGRSKP", 8 );
my $image = $graph->plot( \@data );
open( OUT, "> graph.jpg") or die( "Cannot open file: graph.jpg" );
binmode OUT;
print OUT $image->jpeg();
close OUT;
0087デフォルトの名無しさんNGNG
>>85
Perlのバージョンを5.8.5にする。
0088デフォルトの名無しさんNGNG
IPC::Open2を使ってデータのやり取りを繰り返したいのですが
どうもうまくいきません。

#------ test_pipe.pl
use IPC::Open2;

my ($WTR, $RDR);
my $pid = IPC::Open2::open2($RDR, $WTR, "./test_pipe2.pl");
while (<>) {
print $WTR $_;
my $line = <$RDR>;
print STDERR "$line";
}

#------ test_pipe2.pl
printf "%d\n", $_ + 10 while (<>);

データを送るたびにopenとcloseを繰り返すようにするとうまくいったのですが、
test_pipe2.plはいずれ起動に時間のかかるプログラムと入れ替えるので
一度だけのopenで済ませたいです。
どうすれば良いのでしょうか。
0089デフォルトの名無しさんNGNG
ファイルの出力において、ファイル名を変数から決めたいのですが、
例えば
$number = 111111;
$writefile = "$number.txt";
とすると
$writefileが".txt11"となります。
また
$writefile = $number . '.txt'でも同じです。
どなた様がお分かりのかたおられるでしょか?
0090デフォルトの名無しさんNGNG
>>88
たぶんバッファリング問題によるよくあるデッドロックじゃないかと。
test_pipe2.plの最初で、$|=1すると改善するかもしれない。
009188NGNG
>>90
動くようになりました!ありがとうございます。
これでやっと作業を先に進められます。
009289NGNG
すみませんちょっと違いました。

テキストファイルに
111111
という文字列があり
$number = <INPUTFILE>;
chomp($number);
$writefile = "$number.txt";
とすると
$writefileが".txt11"となります。
0093デフォルトの名無しさんNGNG
>>92
全然違うだろ
0094デフォルトの名無しさんNGNG
>>92
再現する最小のコードを貼ってみないかい?
0095デフォルトの名無しさんNGNG
改行コードが入ってるか、
printしたときに2行が1行に上書きされているか、
だと思う
0096デフォルトの名無しさんNGNG
\r に1票
0097デフォルトの名無しさんNGNG
>>95-96 の補足。

>>94
UNIX 系 OS 上で

#!/usr/local/bin/perl
my $num = "111111\x0D\x0A"; # CR/LF
chomp $num; # LF を削除
my $str = $num . '.txt'; # 111111\x0D.txt
print $str, "\n"; # .txt11
__END__

>>89
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Remove
0098デフォルトの名無しさんNGNG
加算結果の数値が33ビット以上になった場合、答えが
強制的に0xFFFFFFFFになるのは仕様でしょうか…?
オーバーフローした分は切り捨てたいので
0xffffffffでandしてみたんですが、どうもうまくいきません。

$val1 = 0xC5943301
$val2 = 0x902F1AD0
$val3 = ($val1 + $val2) & 0xffffffff # 0x55C34DD1としたいのに…

この時、$val3は0xFFFFFFFFになってしまいます
0099デフォルトの名無しさんNGNG
>>98
ありゃ、本当だ。どうしてそうなるかはオレもよくわからんが、
use integerすればお望みの結果になるようだ。


0100デフォルトの名無しさんNGNG
>>99
そ、そんなモジュールが・・・

Cみたいにlongとかが出来ないので四苦八苦してました_| ̄|○
おかげさまで出来るようになりました。有難うございます
0101デフォルトの名無しさんNGNG
perlの擬似乱数に周期性があることを発見しました。2147483648周期と思われます。
処理系で異なるのかも知れませんが、この場合は乱数ジェネレーターが
32ビットで処理しているからだからだと思います。
これは2ちゃんねるのトリップを生成するプログラムを実行中に気づきました。

別に発見して嬉しいわけではなくて、周期性があっては困るので何とかしたいのです。
どうすればこの周期性を回避して乱数を発生させることが出来るのでしょうか?
0102デフォルトの名無しさんNGNG
不定期に初期化する
0103デフォルトの名無しさんNGNG
>>102
それはどうすればいいのでしょうか?
割り込み処理でもしない限り難しいと思うのですが・・・。
0104デフォルトの名無しさんNGNG
>>101
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#Why_aren_t_my_random_numbers_ran
http://search.cpan.org/search?m=all&q=random&n=100
010585NGNG
>>87
遅くなりましたが、なんとか上手くいきました。
どうも有り難うございました。
0106デフォルトの名無しさんNGNG
>>104
srandを使うかライブラリを使うしかないんですね・・・。
それで試してみます。ありがとうございました。
0107デフォルトの名無しさんNGNG
Perl6マダー?
0108デフォルトの名無しさんNGNG
5.8でなにが問題なの?
0109デフォルトの名無しさんNGNG
perlでゲーム画面のキャプチャを考えてます
10秒ごとにキャプってファイルに保存
キャプチャも画面全体ではなく、ある一部分のみキャプチャです
これを数回繰り返すものを考えています
DirectX使っていると思うのでどうすればいいのかわかりません

どなたかご教授お願いします m(_ _)m
0110デフォルトの名無しさんNGNG
>>109
perlでやる意味がわかりません。
0111デフォルトの名無しさんNGNG
>>110
あなたには聞いていません m(_ _)m
0112109NGNG
>>111
うは、あんた誰よ?

>>110
現在、フリーのキャプチャソフト使ってやっているのですが
キャプ後編集するという作業が面倒なので
自動化できないかな?と思った次第です
0113デフォルトの名無しさんNGNG
>>109
10秒ごとにキャプチャーソフトをsystemで呼ぶ。
0114デフォルトの名無しさんNGNG
@motoから@kesitaiを削除し、@nokoriを作りたいのですが、
loopを回す以外にスマートな方法は無いでしょうか?

魔法使いの皆様方、ご教示を。
0115デフォルトの名無しさんNGNG
>>114
my @moto = 1..10;
my @kesitai = (1,3,5,7,9);
my @nokori;
my %check;
@check{@kesitai}=(1)x@kesitai;
@nokori = grep !$check{$_},@moto;
0116デフォルトの名無しさんNGNG
>>114
perlクックブックのサンプルだとloop回してるなぁ。
だが、十分スマートに思える。
0117109NGNG
>>113
ただ単純に一定時間ごとにキャプするなら(全画面)
今使ってるソフトでもできます(^^;)
肝心な点は、編集を自動化することなんです
でそのためには画像キャプ→編集→ファイル保存
という流れを自動化する必要があるということなんです
編集する位置、大きさがまちまちなんで・・・

やっぱ手作業ですかね・・・?
0118デフォルトの名無しさんNGNG
>>117
どういった編集かわからんけど、
編集する位置と大きさが分かるのなら
imagemagick + perlmagickで出来そうだけど。
0119名無し募集中。。。NGNG
>>117
>編集する位置、大きさ
これ次第でPerlで出来るか出来ないか決まると思うんだが
この判定基準を詳しく書きなよ
0120109NGNG
>>118 >>119
すみません。編集というよりトリミングです。
例えば、1024×768の画面をキャプチャしてから
開始位置10,10から20×15を抜き出す
というような処理を全て位置指定して一定時間ごとに
抜き出して保存したいだけです。形式はビットマップで。
一番いいのは先の例だと開始10,10から20×15の範囲を
キャプチャして保存というのが理想ですかね。

正直なところPerlよくわかりません。
なんかこれ用にexeをつくらないとダメとかならお手上げなのですが。
0121118NGNG
サイズを指定してキャプチャするよりも、
フルサイズでキャプってからトリミングのほうが簡単なような...
位置&サイズは画像毎に異なるのですか?それはどうすれば取得できる?

位置&サイズさえ取得できればそれほど難しくないような...
0122118NGNG
一定時間毎にキャプチャは既存ソフトで出来るのなら、
トリミング工程だけを自動化すればいいわけか...
なぜPerlをご指名なのか分からんけど、位置&サイズが全部同じなら
Imagemagickのconvertコマンドかmogrifyコマンドのcropオプションでなんとかなりそう。
0123デフォルトの名無しさんNGNG
トリミングする位置とサイズが
絵柄を見ないと判断できないなら自動化は多分無理

キャプチャーソフトが外部から操作するAPIを持っていて
かつPerlがそのAPIへのインターフェースを持っていなければ
多分無理

JPGに保存してからImageMagickとかで処理するという手もある
0124デフォルトの名無しさんNGNG
>>109
一定間隔ってのが0.1秒とかだと話はかわりそうだな。
ついでにその記録時間が半永久でなく、HDDの容量が許せばマクロとかバッチ処理が可能なツール使ったりもできるな。

>正直なところPerlよくわかりません。
>なんかこれ用にexeをつくらないとダメとかならお手上げなのですが。
PerlでやるよりVBでキャプチャツール作る方が簡単かも。
0125109NGNG
ImageMagickすか。よくわからんですけど
ググって来ます。皆さんありがとうございました。
0126デフォルトの名無しさんNGNG
カレントディレクトリを取得しようとして
use Cwd;
$dir = getcwd;
としたのですが、パスの区切りが/になってしまいます。
私はwindowsなので\に変換したくて
ttp://www5a.biglobe.ne.jp/~n_rieko/perl/8.htm
等をお手本にさせていただきながら
$dir = ~s/\//\\/g;
としたのですが上手くいきません。
数字の羅列がでてしまいます。

う〜ん・・よろしければアドバイスお願いできないでしょうか。
0127デフォルトの名無しさんNGNG
「= ~」 じゃなくて 「=~」な
0128126NGNG
ぁ・・
ありがとうございました!!!
0129名無し募集中。。。NGNG
>>109
いやだから
>開始位置10,10から20×15を抜き出す
>というような処理を全て位置指定して
この位置指定は何で決めるわけ?絵柄?その他の条件?
それ言ってくれないとPerlでできるできないは助言できんのだが

>>123の言うように絵柄でトリミング範囲が決まるならまず無理です
範囲が決まれば誰にでもできる程度
0130デフォルトの名無しさんNGNG
取込んだファイルを、Photoshopのアクションで自動化しろと
思うのは、俺だけですか?
Imagemagickでもいいけど、スクリプト書かなくちゃいけないでそ?
0131デフォルトの名無しさんNGNG
文字列置換したいのですが、以下の1行が間違ってるみたいで動きません・・
どこが悪いんでしょうか

$_[0] = s/[;`'\\"|*?~^()\[\]{}$]//g;
0132デフォルトの名無しさんNGNG
~
0133デフォルトの名無しさんNGNG
>>132さん

え??・・・・
0134デフォルトの名無しさんNGNG
>>131
どういう結果を期待されているのか分からないため
答えれません
0135デフォルトの名無しさんNGNG
例えば、

あいう;えお →あいうえお
あいう*えお →あいうえお

です・・・答えになってますでしょうか?
0136デフォルトの名無しさんNGNG
=~
0137デフォルトの名無しさんNGNG
すみません tr で、上手くいきました・・・
どういうわけか、=~ だめでした。スペースも空けてません
0138デフォルトの名無しさんNGNG
$_[0] =~ s/\*//g;
0139デフォルトの名無しさんNGNG
WebProgのPerlスレには書きましたが、こちらでも宣伝させていただきます
Perlスレ用のQ&A登録アプリをつくりました。 だれでも登録編集できます
スレで出た質問&解答をちょっと整形して登録していただけると嬉しいです
http://xxxyz.zive.net/~the2/mod-perl/thefaq/faq.cgi
0140デフォルトの名無しさんNGNG
>>139
レスポンスが速いですね。
mod_perlですか?
0141デフォルトの名無しさんNGNG
>>140
ども。 mod_perlとmod_gzipです。
0142デフォルトの名無しさんNGNG
>>139
URLっぽい文字列抽出してリンクになってるといいなと思った。
perldoc.com参照してるやつとか。
0143デフォルトの名無しさんNGNG
>>141
できればカテゴリなんかも設定できるようにしてよ
あと内容の校正は誰が?
コピペ突っ込むだけなら無料レンタルけいじばんでもOKな気がw
0144デフォルトの名無しさんNGNG
>>142
OK

>>143
ひどいこと言うなー。
と、わかった。 カテゴリね。
まぁ、検索がついてるので、掲示板に貼り付けていくよりは良いという事で。
内容は各自。 荒らされても、一応バックアップは頻繁に取られてるので。
0145デフォルトの名無しさんNGNG
wikiでいいよ
0146デフォルトの名無しさんNGNG
wikiの方がいいかも
0147デフォルトの名無しさんNGNG
>>139
RSSキボン
0148デフォルトの名無しさんNGNG
wikiにしたら荒らします♪
0149デフォルトの名無しさんNGNG
荒らしたら告訴します♪
0150デフォルトの名無しさんNGNG
告訴したら手伝います♪
0151デフォルトの名無しさんNGNG
こんな感じでqmailのsendmail使ってメール送信するものを作ったのですが、
--------------
open MAIL, "| /var/qmail/bin/sendmail -f $from_add -t $to_add";
print MAIL "From: $from_add\n";
print MAIL "Subject: ここが件名\n";
print MAIL "\n";
print MAIL "$mail_honbun";
close MAIL;
--------------
ここで$to_add(メールのあて先)に複数のメアドを
$to_add="test1\@xxxx.co.jp,test2\@xxxx.co.jp"
って形で指定すると上手くメールが飛びません。

どなたか指定の仕方を知っている方お願いします。
0152デフォルトの名無しさんNGNG
>>151
> open MAIL, "| /var/qmail/bin/sendmail -f $from_add -t $to_add";

|を前にもってくると入力になるんだけど。
0153152NGNG
いやなんでもないなんでもない(^_^;) 見なかったことにして。
0154デフォルトの名無しさんNGNG
>>151
Perl 関係ない。 man sendmail したか?
-t の場合は宛て先をヘッダから抽出するようになる。その $to_add の指定は間違い。
ヘッダに To: とか Cc: とか Bcc: とかで指定する。
0155デフォルトの名無しさんNGNG
>>151
http://qmail.jp/
文面が痛いが djb と大先生なんだから我慢しる(w
個人的には、qmail-inject 推奨。

>>152
てめぇマァヴだな? > (^_^;)
0156デフォルトの名無しさんNGNG
>>154
qmailのは知らんがsendmailは-tするとヘッダからもあて先を
取り出すけど、コマンドラインで指定したあて先も有効だったような。

他に気になるのは、「,」で区切ってることだな。普通は別々の
引数になるように空白で区切る。本家sendmailはそれでも適当に
よろしくやってくれますがqmailのはどうだろうか?
0157デフォルトの名無しさんNGNG
うるへー! Wikiでもいいんだったらこれでもいいだろ

>>147
OK. RSS勉強してくるぜ
0158デフォルトの名無しさんNGNG
気づくといつのまにか Wiki になってた、という展開きぼんぬ。
0159デフォルトの名無しさんNGNG
>>151 のロジック実行してメール送信してみた。

ちゃんとメール送信できた。
(ちなみに $to_add="test1\@xxxx.co.jp , test2\@xxxx.co.jp" ってやると複数指定できた。)

でも何故か送られてきたメールのTo欄の内容が無い。一切無い。

これは何ゆえ? そういう仕様なのか?
0160デフォルトの名無しさんNGNG
>>159
そういう仕様です。自分で To 欄出力してください。
0161デフォルトの名無しさんNGNG
>>159
「,」宛にもメール出されてないか?
0162デフォルトの名無しさんNGNG
use Hoge qw/foo bar/のfoo, barの部分はどうやってモジュール側から受取ればいいんですか?
0163デフォルトの名無しさんNGNG
age忘れ
0164デフォルトの名無しさんNGNG
import
0165デフォルトの名無しさんNGNG
あるPerlスクリプトが、require等で別のスクリプトから呼ばれた場合と
直接起動された場合を区別する方法はありますでしょうか?
ActivePerlの5.8を使っています。
0166デフォルトの名無しさんNGNG
>>165
if (-t) {} else {} は無理?
0167デフォルトの名無しさんNGNG
>>166
レスありがとうございます。
試してみたところ、どちらの場合も -t が真となってしまいました。
0168デフォルトの名無しさんNGNG
>>167
あー、すまん。requireしている方もコマンドラインから起動してたら真になってしまうな。
俺にはわかんねーや。

ところでrequireされる方を起動して何が起きるの?やりたいことがよく分からんが。
普通1返して終わりじゃない?
0169デフォルトの名無しさんNGNG
あー、これでどう?
--- hoge.pl ---
require 'req.pl'

--- req.pl ---
if ($0 eq 'req.pl') {
print "direct"
} else {
print "required";
}
1;
0170デフォルトの名無しさんNGNG
>>169
こちらでも動きました。ありがとうございます。
やりたかったのは、単体としてもモジュールとしても使えるスクリプトです。
単体の場合はコマンドライン引数を用いて処理します。
0171デフォルトの名無しさんNGNG
>>170
> 単体の場合はコマンドライン引数を用いて処理します。
だったら @ARGV を調べればいいんでないの?
0172デフォルトの名無しさんNGNG
>>169
ふつー if (__FILE__ eq $0) では?
0173デフォルトの名無しさんNGNG
@list = grep {/hoge/} @list;
$a = $list[0];

を1行で書きたいのですが、どうすればイイですか?

@list = grep {/hoge/} @list;$a = $list[0];
以外で・・・

0174デフォルトの名無しさんNGNG
$a = (grep {/hoge/} @list)[0];
0175デフォルトの名無しさんNGNG
>>173
>>174
@listの更新も入れたいなら
 $a = (@list = grep {/hoge/} @list)[0];
か? 試してないけど。
0176デフォルトの名無しさんNGNG
>>173
174,175以外で
@list = grep {/hoge/} @list , $a = $list[0];
($a) = grep {/hoge/} @list;
0177176NGNG
>>176
@list = grep {/hoge/} @list , $a = $list[0];は嘘。 スマソ
0178デフォルトの名無しさんNGNG
意味もなく1行で書いてどうすんの?

正規表現でも無理やり一行で書いて、効率を犠牲にしてるのを見るけど。
0179デフォルトの名無しさんNGNG
効率は犠牲になってないかと思われ。別に速度計ってないけど。
あとこの場合は一行の方が見やすい気が?(たぶん。

>>173
@listん中には最初のヤツ入らないけど。
($a, @list) = grep {/hoge/} @list;
0180デフォルトの名無しさんNGNG
みなさん、ありがと
>>174さんを使わせていただきます。
0181デフォルトの名無しさんNGNG
効率を気にするならこういうのはどうですか?本文は1行。

sub test { foreach (@_) {return $_ if(/hoge/)} }

$a = &test (@list);
0182デフォルトの名無しさんNGNG
>>181
grepよりforeachで回したほうが速いんですか?
0183デフォルトの名無しさんNGNG
>>182
ベンチ取る癖を付けた方がいいぞ
モジュール使えば面倒でもないから
0184181NGNG
>>182
たとえば、@list = ("hoge", "geho", "foo", "bar"); のとき、
 ・ (grep {/hoge/} @list)[0]; の文字列照合回数は4回
 ・ &test(@list) の文字列照合回数は1回

と考えました。ベンチ取ってないけど。
0185デフォルトの名無しさんNGNG
とりあえずベンチ。

use Benchmark;

@list = qw(hoge geho foo baa);

timethese(undef, {
grep => sub {
$a = (grep {/hoge/} @list)[0];
},
test => sub {
$a = &test(@list);
},
});

sub test { foreach (@_) {return $_ if(/hoge/)} }

で、結果は、
grep: 2 wallclock secs ( 3.11 usr + 0.00 sys = 3.11 CPU) @ 125654.98/s (n=390787)
test: 4 wallclock secs ( 3.09 usr + 0.01 sys = 3.10 CPU) @ 297963.87/s (n=923688)

hogeが最初は不公平すぎるので最後にしてみたがそれでも
grep: 2 wallclock secs ( 3.10 usr + 0.00 sys = 3.10 CPU) @ 126060.32/s (n=390787)
test: 4 wallclock secs ( 3.19 usr + 0.00 sys = 3.19 CPU) @ 205490.60/s (n=655515)

0186デフォルトの名無しさんNGNG
>>185
追試。環境は ActivePerl Build810 (5.8.4)

#!/usr/local/bin/perl
use Benchmark;
our @list = qw(hoge fuga piyo foo bar baz);

sub t_l { /hoge/ && return $_ for @_ }

timethese(-5, {
  g_b => sub { my $a = (grep {/hoge/} @list)[0] },
  g_e => sub { my $a = (grep /hoge/, @list)[0] },
  g_l => sub { my($a) = grep /hoge/, @list },
  t_l => sub { my $a = t_l(@list) },
});
__END__

Benchmark: running g_b, g_e, g_l, t_l for at least 5 CPU seconds...
g_b: 6 wallclock secs ( 5.16 usr + 0.00 sys = 5.16 CPU) @ 49723.26/s (n=256572)
g_e: 5 wallclock secs ( 5.32 usr + 0.00 sys = 5.32 CPU) @ 193839.10/s (n=1031224)
g_l: 5 wallclock secs ( 5.11 usr + 0.00 sys = 5.11 CPU) @ 199724.07/s (n=1020590)
t_l: 5 wallclock secs ( 5.33 usr + 0.00 sys = 5.33 CPU) @ 193475.42/s (n=1031224)
0187デフォルトの名無しさんNGNG
ソースコードは分かりやすいのが一番。
ということで、こんなのも。
use List::Util qw/first/;
my $a = first {/hoge/} @list;
※要Perl5.8
0188デフォルトの名無しさんNGNG
>>186
grepの条件をblockにしてるから遅くなってたのか。

1つの式ですむならblockにしてはいかんということだな。勉強になった。
0189名無しさん@Vim%ChaliceNGNG
PDFJ-0.76で質問です
nouhinsho.plのプログラムで使っているデータファイル
nouhinsho.datのデータを書き換えて
LANケーブル 0.5m アイボリー 5   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
な感じにすると"aaa..."の部分が折り返されません。
LANケーブル 0.5m アイボリー 5   ああああああああああああああああああああああああああああああ
"あああ..."だったら折り返されます

"aaa..."な方でも折り返しにする設定はどうすればよいのでしょうか?
0190デフォルトの名無しさんNGNG
Perlでコンパイラを作った人もしくはそのような
解説サイトをご存知の方いらっしゃいませんか?
0191デフォルトの名無しさんNGNG
>>190
perlcc, perl2exe, parとかがある
0192デフォルトの名無しさんNGNG
Perl "の" コンパイラじゃなくて
Perl "で" コンパイラを作った人じゃないの?
0193デフォルトの名無しさんNGNG
そんな無駄なことする人いるのだろうか?
0194デフォルトの名無しさんNGNG
作れるわけね-じゃん
0195デフォルトの名無しさんNGNG
一応作れるぞ
0196デフォルトの名無しさんNGNG
Parrotコンパイラ・アセンブラはPerlで書かれているわけだが。
0197デフォルトの名無しさんNGNG
そんなことしても自己満足以外なんにもならないから誰もしないだけ。
0198デフォルトの名無しさんNGNG
たしかにPerlなんかで作っても遅いから
自己満足以外なんにもならないね。
0199デフォルトの名無しさんNGNG
>>195
すいません
"おまいらには"
が抜けてましたw
0200デフォルトの名無しさんNGNG
トランスレータならperlccだな
0201デフォルトの名無しさんNGNG
>>197
そんな事は無いと思うけど。
インタプリタ言語でコンパイラを作るって事は、昔のパソコン雑誌では
普通に連載されていたよ。
BASICでコンパイラ言語を、記述。
そのコンパイラのソースを、BASICインタプリタでコンパイル。
出来たコンパイラで、そのコンパイラ(のソース)を、機能拡張する。
そのソースを、コンパイラでコンパイル。
でまた機能拡張、またコンパイルまた機能拡張またコンパイル
きりねー。と。WICSなんかそうだったな。
0202デフォルトの名無しさんNGNG
コンパイルといっても、CやPerlのような大規模な
言語のコンパイルとは限らないからね。
コンパイルは要はファイル変換。小規模なものなら
Perlでも十分できると思う。

>>190
字句解析や逆ポーランド記法等の一般的な知識が
使えると思うので、
その手の勉強をしてみれば?
0203デフォルトの名無しさんNGNG
#/usr/local/bin/perl
$script = <STDIN>;
eval($script);
exit(0);

インタプリタができたYO!あとは標準入出力で(ry
0204デフォルトの名無しさんNGNG
cpanにyaccやlexのモジュールがぱらぱらあるから
それを作ったやつや使ってるやつを探せばいいんじゃないかな。
0205デフォルトの名無しさんNGNG
perl -e %1

バッチファイルでインタープリタが出来ますた。
0206デフォルトの名無しさんNGNG
インンタープリタじゃなくて丸投げって言うんだろ
0207デフォルトの名無しさんNGNG
インタープリンタです!失礼な………
0208デフォルトの名無しさんNGNG
PIC のコンパイラ/アセンブラとかあると嬉しいかも。既にあるのかな。
0209デフォルトの名無しさんNGNG
トークンの切り出しとか字句解析はPerlの十八番だよな。
0210デフォルトの名無しさんNGNG
バイナリ(HEX)単位での扱いは?
0211デフォルトの名無しさんNGNG
yacc みたいなのの定番ってありますか?
0212デフォルトの名無しさんNGNG
Perl程コンパイラ向けの言語ってのも無いだろ。
速度だってそんなに遅くないし。
0213デフォルトの名無しさんNGNG
とか言う割には一向にコンパイラが挙がって来ませんねえ
0214デフォルトの名無しさんNGNG
Parrot
0215デフォルトの名無しさんNGNG
>>210
pack や unpack あたりでできそう。
でも、たしかに Perl ばかりやってるとバイナリの処理が
苦手になるかも…。
0216デフォルトの名無しさんNGNG
そこで Binutils のモジュール化ですよ。と云ってみるてst
0217デフォルトの名無しさんNGNG
Perlばかりやってるとバカになる
0218デフォルトの名無しさんNGNG
実感。C++, Java のコードが組めなくなってたり

「なんでExcelのマクロにPerlが使えないんだyp!」と発狂してみたり。
0219デフォルトの名無しさんNGNG
Perlだとすぐできるのに〜と思うことが多くなった。
0220デフォルトの名無しさんNGNG
Perlやってるとsh,sed,awkの使い方忘れる。
0221デフォルトの名無しさんNGNG
テキストの置換なんかは「あー、このソフトでPerl流の置換式使えたらなぁ」ってよく思う
0222デフォルトの名無しさんNGNG
テキスト入力なんかじゃ
ATOK用perl機能追加プラグイン
ttp://www.hirax.net/diaryweb/2004/04/09.html#200404092

なんてのもある
ATOK入ってないんで私は使えませんがね・・・
0223デフォルトの名無しさんNGNG
ねぇ、pack や unpack ってどうやって使うの?
つか、どんなときにつかうの?
0224デフォルトの名無しさんNGNG
perlfuncを見りゃわかる。
Cなら構造体を作るだろうなってときに使う。
0225デフォルトの名無しさんNGNG
>>223
CGIでURLエンコード・デコードとかに使う。
%82%CA%82%E9%82%DB
みたいなの
0226デフォルトの名無しさんNGNG
>>223
シリアライズ・デシリアライズ
0227デフォルトの名無しさんNGNG
>>223
カレーライス・ハヤシライス
0228デフォルトの名無しさんNGNG
i18n m17n
0229デフォルトの名無しさんNGNG
perlのハックして自分独自のperlを使ってる人いる?
0230デフォルトの名無しさんNGNG
自分独自のPerlってなに?
インタプリタをカーネルに組み込んで、
モジュールをPerlで書けるようにするとか?
0231デフォルトの名無しさんNGNG
dukeで画像掲示板に画像をアップしたいのですがうまくいきません
0232デフォルトの名無しさんNGNG
>>229
昔のえらい人たちは Perl をハックして JPerl を作った
みんな感謝して使っていた
0233デフォルトの名無しさんNGNG
>>189

「折り返し」って? foldingのこと? アルファベットは空白文字が来ないと
発生しないよーな希ガス。
0234デフォルトの名無しさんNGNG
>>232
じゃあ君のために KusoPerl っていうの作ってあげるから
感謝して使ってくれ。
0235デフォルトの名無しさんNGNG
夏だな
0236デフォルトの名無しさんNGNG
>>234
もっとカルシウム取れよ。
0237デフォルトの名無しさんNGNG
>>234
今日の宿題は終わったのか?
おやつ食べて大好きなプールにでも行ってきたらどうだ?
0238デフォルトの名無しさんNGNG
なんか書けよ。
0239デフォルトの名無しさんNGNG
なんか
0240デフォルトの名無しさんNGNG
Perl6のリリースは2006年だってさ
http://japan.linux.com/desktop/04/07/27/1436242.shtml?topic=1
0241デフォルトの名無しさんNGNG
>>240
そんなに待てるか!
俺、死んじゃってるかもしれないじゃないか!
0242デフォルトの名無しさんNGNG
不治の病を患ってるやしがいるな(ノД`、)逝�`
0243デフォルトの名無しさんNGNG
人間は全員不治の病を患っている。
0244デフォルトの名無しさんNGNG
packageに外部に公開しないサブルーチンを作るにはどうすればいいでしょうか?
(JavaとかC++のprivateメソッドっぽいのを作りたい)
0245デフォルトの名無しさんNGNG
my をつける
0246デフォルトの名無しさんNGNG
"my sub" not yet implementedと怒られてしまいました
0247デフォルトの名無しさんNGNG
sub my だ
0248デフォルトの名無しさんNGNG
syntax error at ***.pm line 16, near "sub my ***"
えー?
0249黒死犬 ◆EgxBlf8nvc NGNG
my $unko = sub {
return $$**$$;
}

しかし、そのうち my sub って書ける様になるらしい
0250デフォルトの名無しさんNGNG
そのうち = Perl6
0251デフォルトの名無しさんNGNG
前川くん、マルチポストは・・・・・
0252デフォルトの名無しさんNGNG
ikannzaki
0253デフォルトの名無しさんNGNG
>>249
$$**$$ってパッと見ただのデタラメに見えるが
$$はプロセスID,**はべき乗演算子なので正しい
式なのか...
0254デフォルトの名無しさんNGNG
$hoge{"ユニークな文字列"} = ユニークじゃない数値
というハッシュがあるんですが、これを数値の降順にソートして、
値が大きい方からいくつかの要素、というかキーの文字列を取り出したいんですが、
どうするのがかしこい方法でしょうか。
数値がユニークなら、キーと値を入れ替えて、keys %hogeをsortでソート
すればいいのでしょうけど…。
0255デフォルトの名無しさんNGNG
前川くん、お礼は・・・・・?
0256デフォルトの名無しさんNGNG
>>254
とりあえず正攻法で。

my @ranking = sort { $hoge{$a} <=> $hoge{$b} } (keys %hoge);
0257デフォルトの名無しさんNGNG
>>255
前川君とやらが誰かは知らないが粘着はやめれ。
0258デフォルトの名無しさんNGNG
>>256
問題の意味がわかってない馬鹿
0259デフォルトの名無しさんNGNG
>>258
ありゃ、間違い?どういう問題だったの?
0260デフォルトの名無しさんNGNG
>>257
2回名前が出ただけで・・・・・・


























前川くん、必死だな
0261デフォルトの名無しさんNGNG
前川君ってのが誰なのか、このスレしか読んでない俺に説明してくれ
0262デフォルトの名無しさんNGNG
>>244
man perlstyleによると、名前が"_"で始まるサブルーチンは
パッケージ外部から呼ばない約束にしています。

実際には公開されているけれど、コーディング時のマナーで対処すると
いうことだと解釈してます。
0263デフォルトの名無しさんNGNG
>>258
>>256 であってると思うが
0264デフォルトの名無しさんNGNG
>>258
おれも合ってると思うが、降順にするなら$aと$bは逆だな
0265デフォルトの名無しさんNGNG
>>264
がーん。スマソ、逆だったか・・・_| ̄|○
0266デフォルトの名無しさんNGNG
>>265
むしろ>>258が「問題の意味がわかっていない」我々に、正しい問題の
意味と解答を見せ付けてくれることを希望。
ソート順程度のケアレスミスを「問題の意味がわかっていない」など
と大袈裟な表現をして悦に入るような馬鹿ではないだろうから、きっ
と我々を仰天させ、沈黙させるような素晴らしい「かしこい方法」を
示してくれるに違いない。
0267デフォルトの名無しさんNGNG
内容の無いいちゃもん付けは大抵ヘタレだから無理
0268デフォルトの名無しさんNGNG
むしろ >>258 が >>256 の意味をわかっていないと思われ

0269デフォルトの名無しさんNGNG
>>268
俺もそう思う
0270デフォルトの名無しさんNGNG
>>262
派生クラスでオーバーライドするのはあり?
CGI::Session::Authはそれやらないとだめなんだが。sub _login {}
0271デフォルトの名無しさんNGNG
いいんじゃないの?
protectedメソッドたと思えばいいじゃない。
0272デフォルトの名無しさんNGNG
つーか、perlでOOPって無理があるよね
0273デフォルトの名無しさんNGNG
>>272
うん
0274デフォルトの名無しさんNGNG
>>272
かなりね
っていうか無理にPerlでOOPしても嬉しくないから
そういうときはRuby使う
0275デフォルトの名無しさんNGNG
インスタンスの生成ができるのは便利だ
0276デフォルトの名無しさんNGNG
なんか知らんがこんなスレが立ってます。
http://idol.bbspink.com/test/read.cgi/ascii2d/1073747234/
0277デフォルトの名無しさんNGNG
アホや
0278デフォルトの名無しさんNGNG
はじめまして
>
#!/usr/bin/perl

print<<HTML_DOCUMENT;
content-type: text/html

<html>
<body>
こんにちは<br>
私の名前は藤森水絵です<br>
</body>
</html>
HTML_COCUMENT

をコンパイルすると必ず
>C:\httpd\cgi-bin>perl 52.pl
Can't find string terminator "HTML_DOCUMENT" anywhere before EOF at 52.pl line 3.

というエラーが出てきます。
どうしたらよいのでしょうか?
解決方法知っている方教えてください。
0279デフォルトの名無しさんNGNG
typo
下らんことで他人の手を煩わすな。
0280デフォルトの名無しさんNGNG
>>278
エラーメッセージが指定する行数に間違いが見つからなかったら
その前後の行と、関連する事柄などをチェックすること。

もうね、ソースの一番最後の行でおじさんがっくり来ちゃったよ。
0281デフォルトの名無しさんNGNG
> Can't find string terminator "HTML_DOCUMENT" anywhere before EOF at 52.pl line 3.
終端文字列「HTML_DOCUMENT」がファイル終端以前の何処にもありません。(52.pl 3行目)

読め
0282デフォルトの名無しさんNGNG
コキュメント・・・。
0283デフォルトの名無しさんNGNG
>>278
Perlの前に、少し英語を勉強するといいかも。
0284279NGNG
>>278
>>279撤回。
みんなつまらんミスを論うのが好きなようだ。
どんどんやってくれ。
0285デフォルトの名無しさんNGNG
my で$a,$b・・・といくつもの変数すべてに0を入れたいんですが、
以下のやり方より、もっと効率的な書き方はないでしょうか?

my($a,$b,$c);
$a=$b=$c=0;
0286デフォルトの名無しさんNGNG
>>285
my($a,$b,$c) = (0, 0, 0);
my($a,$b,$c) = (0) x 3;

tu-ka、初期値がどうしても必要になるところとか、無駄に変数宣言していることを改訂してみるとか。。。
0287デフォルトの名無しさんNGNG
>>286
整数の宣言のつもりで0を入れてたんですが、要らないんですねorz
一部初期値が必要なところがあるんで、(0) x 3 を活用できそうです。

ありがとうございました。
0288デフォルトの名無しさんNGNG
>>287
最初から0が入っている気がs(ry
0289デフォルトの名無しさんNGNG
>>276
キショ
0290デフォルトの名無しさんNGNG
>>288
my $a; で $a の値は undef 。undef は数値として評価すれば
0 だが文字列として評価すれば空文字列なので、陽に 0 を
入れておかなければ以下のような場合に困る。

my($a, $b, $c);
print join '|', $a, $b, $c, "\n"; # |||

文字列としての 0 が必要になった段階で、

# 数値コンテキストにおけば値は undef のまま "0" を得られる。
print join '|', $a, $a + 0, "$a\n"; # |0|

# 0 を足したり、代入してしまえば以後も "0" として扱える。
$b += 0; $c ||= 0;
print join '|', $a, $b, $c, "\n"; # |0|0|
0291デフォルトの名無しさんNGNG
ここの人はPerl用のIDEには何を使ってるの?
0292デフォルトの名無しさんNGNG
>>291
まずは藻前が答えれ
0293デフォルトの名無しさんNGNG
今時Cをcatとechoで書いてる変態はいないだろうが、
perlならまだまだいるのでは?もともとワンライナーで
バーっと書くのに都合がいいツールでもあるし。
0294デフォルトの名無しさんNGNG
>292
Open Perl IDE

0295デフォルトの名無しさんNGNG
初めて投稿します。
Perl/Tkについて質問です。

メインウィンドウ全体に背景画像を貼り付けたいのですが、オライリーの「入門Perl/Tk」を読んでも
やり方がわかりません。
ぐぐっても、見つかりません。

フレームを使ってもイメージはサポートしていないようですし。

ご存知の方、サンプルソースもしくはURIを貼ってもらえると助かります。

板違いだったら、誘導をお願いします。
0296デフォルトの名無しさんNGNG
>292
オレはPhantom
0297デフォルトの名無しさんNGNG
>>291
vi で何の問題も無い。
0298デフォルトの名無しさんNGNG
>297
Windows環境で使えるviってある?
0299デフォルトの名無しさんNGNG
ここって情報返ってくるの遅いね。
0300デフォルトの名無しさんNGNG
今更Perlなんて使ってる香具師ほとんどいないからな
0301デフォルトの名無しさんNGNG
Perlerな俺って少数派だったのかorz
0302デフォルトの名無しさんNGNG
>>301
しぃーっ! いまどき Perler ですだなんて恥ずかしいから隠しておいた方がいいよ。
0303デフォルトの名無しさんNGNG
Perl
↓
Ruby…スクリプト言語でOOしたい。
Python…シェルスクリプトとして使いたい。
PHP…WEB向けスクリプトが書きたい。

さようならPerl
0304デフォルトの名無しさんNGNG
いまだにPerlしか使えないプロバイダ多いと思うけど、
その辺の事情はどうなの?>303
0305デフォルトの名無しさんNGNG
>>303
Ruby,Python,PHP
↓
Perl6…スクリプト言語でOOしたい。
Perl6…シェルスクリプトとして使いたい。
Perl6…WEB向けスクリプトが書きたい。
0306デフォルトの名無しさんNGNG
>>305
もし LLW に行ってそこまで言えるとしたら頭がおかしいとしか言いようがない。
0307デフォルトの名無しさんNGNG
エディタはおれも vi 。
それで十分だなぁ。
0308デフォルトの名無しさんNGNG
秀丸な俺って少数派なのかなorz
0309デフォルトの名無しさんNGNG
orzって何?
0310デフォルトの名無しさんNGNG
○| ̄|_
orz
0311デフォルトの名無しさんNGNG
http://dp04021932.lolipop.jp/cgi-bin/bbs/bbs.cgi
0312デフォルトの名無しさんNGNG
どこもかしこも寂れてるね
0313デフォルトの名無しさんNGNG
>>298
cygwinとか。
0314デフォルトの名無しさんNGNG
>>298
普通にvimとか
ってか、viって何故好んで使うんだ。
絶対おかしいって。
オナニーとしか思えん。
0315デフォルトの名無しさんNGNG
何で井出らっきょの話がエディタの話になってるんだ?
0316デフォルトの名無しさんNGNG
>>315
さむ・・・
0317デフォルトの名無しさんNGNG
わしゃxyzzy

0318デフォルトの名無しさんNGNG
>>298
最近gvimを使ってみましたが多機能でした。perlソースをカラー表示したり。
ttp://pc5.2ch.net/test/read.cgi/unix/1086135625/

それ以前はこのjvimを使ってました。
ttp://www.vector.co.jp/soft/win95/writing/se041333.html
0319デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/unix/1086135625/

http://www.vector.co.jp/soft/win95/writing/se041333.html
0320デフォルトの名無しさんNGNG
Perlに限らずだけど、ソースカラー表示って
見にくくて使いにくいと思わんか?
0321デフォルトの名無しさんNGNG
コメントは緑じゃないと嫌
0322デフォルトの名無しさんNGNG
おとなしめの色に変えて使ってる。
typoは多少減ってると思う。
0323デフォルトの名無しさんNGNG
青い文字でcolor=redと書くところを想像して萎えた。
0324デフォルトの名無しさんNGNG
color=transparent と(ry
0325デフォルトの名無しさんNGNG
初めて色付き見た時、なんてうざいエディタなんだろと思ったけど
30言語以上定義を登録しているので今となっては手放せない。
0326デフォルトの名無しさんNGNG
vimはctermの呪縛から離れられないので、デフォルトの色付けは半ばデモというかヤケというか…
0327デフォルトの名無しさんNGNG
30以上の言語を知っててなんのとくになるのか?
マシン語しってりゃすべて事足りるのだが・・・
0328デフォルトの名無しさんNGNG
また痛いのが現れたな
0329デフォルトの名無しさんNGNG
つか低レベルな釣りだろ
0330デフォルトの名無しさんNGNG
アセンブラのカラー表示ってどんなイメージなんだろうか
0331デフォルトの名無しさんNGNG
タブ区切りの文字列をsplitで分割する際の正規表現で

/\s+/

より速い書き方はありますか?
0332デフォルトの名無しさんNGNG
o とか付けたらどう?
0333デフォルトの名無しさんNGNG
>331
/[ \t\r\n\f]+/
だとえらく遅いね。
0334デフォルトの名無しさんNGNG
この場合は o は効かないだろう
0335デフォルトの名無しさんNGNG
>331
やろうとしていることと関係あるかもしれないネタを1つ。
ファイルから1行ずつ読み出して処理しようとしているなら

while (<IN>) {
@elem = split(/\s+/);
}

よりも

while ($line = <IN>) {
@elem = split(/\s+/, $line);
}

の方が圧倒的に速いです。理由はよく知りません。
0336デフォルトの名無しさんNGNG
/\t+/
0337デフォルトの名無しさんNGNG
>336
それは遅かったです。
0338デフォルトの名無しさんNGNG
/\t/
0339デフォルトの名無しさんNGNG
>335の案が最速じゃない?
0340デフォルトの名無しさんNGNG
>338
あ、これ速いです。この場合って行末の改行って無視してくれます?
0341デフォルトの名無しさんNGNG
ちょっとやってみたけど微妙だなー。
/\s+/
ならchompしなくていいよね。

chompして>338の案を採用したのとどっちが速いか
実測しないとダメでしょ。
0342デフォルトの名無しさんNGNG
改行削除してからsplitすれば?
0343デフォルトの名無しさんNGNG
いままでの実測値希望
0344デフォルトの名無しさんNGNG
>341
やってみた。25000行くらいのTSVファイルを読み込み。
(1) chomp & /\t/
(2) /\s+/
10回試行の合計タイム


(1) ・・・

なんと4回試行して2勝2敗ww
0345デフォルトの名無しさんNGNG
>343
ちょっと待ってください。
0346デフォルトの名無しさんNGNG
約25000行のTSVファイルを1行ずつ読み込み、splitで分割。
10回分の合計タイム。

(1) chompなし、/\s+/→5.417 msec
(2) chompなし、/\s/→6.869 msec
(3) chompなし、/\s{1}/→7.28 msec
(4) chompなし、/[ \t\r\n\f]+/→7.31 msec
(5) chompあり、/\t+/→7.53 msec
(6) chompあり、/\t/→5.387 msec

こんな感じ。でも(1)と(6)はやる度に勝敗が変わる。
0347デフォルトの名無しさんNGNG
ちなみに(1)のパターンで>335の対策を行わないと
8.251 msec

正規表現よりも、こっちの方が効果絶大。
0348デフォルトの名無しさんNGNG
chompだけのときのタイムとか
/\t/だけのときのタイムとか
0349デフォルトの名無しさんNGNG
>346
オレ環境だと(6)が毎回速い。
0350デフォルトの名無しさんNGNG
>348
空ループ→2.653 msec
/\t/だけ→5.277 msec
chompだけ→2.814 msec

こういうことかな?
0351デフォルトの名無しさんNGNG
今までは(1)で書いてたけど、よく考えたら(6)がよさそうだな。
0352デフォルトの名無しさんNGNG
>>350
chompの影響ってほとんど無いんだね。
0353デフォルトの名無しさんNGNG
ちなみに
@elem = split(/\t/, $line)
のところを
($a, $b, $c, $d, ・・・) = split(/\t/, $line);
とすると若干遅くなるね。

オレは知らず知らずのうちに最速コードを書いていたらしい。
0354デフォルトの名無しさんNGNG
>346
ホントかなーと思って私も実験してみたんですが、
速い順に
\t > \s+ > \s > \t+
ですね。\t には + が付くと遅くなるのに、\s には + が
付くと速くなるのはなぜなんでしょうか。
0355デフォルトの名無しさんNGNG
対象ファイルの内容で結果は大きく変わるんでしょうか?
0356デフォルトの名無しさんNGNG
>>354
/\s+/ は split の第一引数のデフォルト値で、
このパターンは内部的に最適化されているから。
http://perldoc.com/perl5.8.4/pod/func/split.html
0357デフォルトの名無しさんNGNG
>335
この件だけど、細かく見ると、splitにかかる時間は変わらないんだけど、
@elemに代入する時間が圧倒的に違いますね。
0358デフォルトの名無しさんNGNG
>>357
代入するときに$_ の記憶領域を内部コードの中で再利用してるんじゃないの?
$_ が右辺値にくるようなリスト代入をやると$_ を使わない場合に比べて時間がかかるよ。

たぶん、リスト代入を行うときに$_ の記憶領域を テンポラリに使用していて
右辺値に$_ が記述(もしくは変数が省略)された場合、$_ の内容を破壊しないように
内部コードのテンポラリの代入操作の直前で$_ をスタックしているのかもね。
だから、代入する数が増大すると時間がかかる。

$_ が右辺値にこなければ、処理全体の直前に1回だけスタックするだけだから時間がかからないと。

そう考えると処理効率を考えた場合は、$_ は無闇につかわない方がいいね。
0359デフォルトの名無しさんNGNG
>358
うーん、オレが今まで書いたPerlコード結構速くなりそうだな。
0360デフォルトの名無しさんNGNG
>>335の下より上のほうが綺麗だよな、うっとり・・・♥

していたが、下のほうが速いのか…
俺のコードも見直すと速くなりそうだ
0361デフォルトの名無しさんNGNG
while (my $line = <IN>) {
@elem = split(/\s+/, $line);
}

while ($line = <IN>) {
@elem = split(/\s+/, $line);
}

どっちが速い?
0362デフォルトの名無しさんNGNG
>>361
下の方が早い。

上の方はループする度に$line 変数の記憶領域を毎回確保しなおすからそれがオーバーヘッドになる。
ただし、ファイルの入力処理のオーバーヘッドの方が十分でかいので無視しても問題ない。

ちなみに自分の環境で1千万行のデータを全て読込むことを想定した場合、上と下とで3秒の差がでてくる。
自分は上のコードをいつも書いているが、この3秒のためだけに下のコードに変えたくない。
0363デフォルトの名無しさんNGNG
ならwhile (<IN>)も毎回確保し直すから遅いだけじゃないの?
while (<IN>)もwhile (my $line = <IN>)も同じ速さって事でしょ?
0364デフォルトの名無しさんNGNG
>>363
オーバーヘッドの場所が違う。

>>335の上は

while ($_ = <IN>) {
@elem = split(/\s+/,$_);
}

の省略型で
オーバーヘッドになっているのは

@elem = split(/\s+/,$_);

の部分
右辺値に$_ があるから@elemへのリストの代入個数が増えると
$_ のスタック回数も一緒に増えているみたいだと言っている。

while (<IN>) {
$line = $_;
@elem = split(/\s+/,$line);
}

とすれば>>335の下と実行速度はほとんど変らない。
0365デフォルトの名無しさんNGNG
350\t\t50\t20
124653215\t50\t20
みたいなデータがあった時(\tで桁合わせしてるTSV)

(5) chompあり、/\t+/→7.53 msec
(6) chompあり、/\t/→5.387 msec
はどちらも正しく分割できるの?
0366デフォルトの名無しさんNGNG
各行の末尾に余分な \t を1つ付けて、chompなしでsplitして
各行の最後の要素は捨てる、という裏技を考えたんだけど、
かえって遅くなってしまった。。。

split で分割される要素数も重要なのね。

不要なカラムがないかどうかとかチェックした方がいいかも。
0367デフォルトの名無しさんNGNG
>365
それはずれちゃうんじゃない?
0368デフォルトの名無しさんNGNG
>360
省略はPerlの美学ってとこあるからなー。
それにしても、たかがタブ区切りファイルの処理で
やけに盛り上がってるね。
0369デフォルトの名無しさんNGNG
ファイルキャッシュに溜まってる同じファイル何度も読むわけじゃないんだから
どう考えても$_と$lineの差なんかよりIOの方が遅いのにね。
0370デフォルトの名無しさんNGNG
>>369
その通りなんだけど配列へのリストのコピーはループ内で結構使うんで
右辺値に$_ があるだけで右辺値の個数に比例して時間が掛かるのはさすがに
無視できないなと思ったわけ。
0371デフォルトの名無しさんNGNG
>>368
普段は適当にやってもうまくいく。
ちゃんと考えたかったら、ちゃんと考える事も出来る。

この塩梅が俺は好きだ。
0372デフォルトの名無しさんNGNG
>>371
ちなみにメモリの容量や、実行効率を考えなければ
こんなコードで2重配列にデータをセットできちゃうPerlがこよなく好きだ!

@elem = map{[split/\s+/]}<IN>;
0373デフォルトの名無しさんNGNG
>>369
別に<IN>と書いてある場所で毎回イオが発生しているわけではない。
0374デフォルトの名無しさんNGNG
>>373
バッファリングしてるもんね。

select IN;
$| = 1;

とかやっていたらバッファリングはしないけどね。
0375デフォルトの名無しさんNGNG
バッファリングしてても重いよ。
フルバッファリングするわけじゃないし。4KBくらいだろ
0376デフォルトの名無しさんNGNG
>>375
あ....、すまん、オレの書き方が悪かった。
>>374は、>>373を肯定していて、イオはデフォルトでバッファリングしているから
>>373なんだよっていいたかったわけで、バッファリングすれば大丈夫っていうことではない。
0377デフォルトの名無しさんNGNG
まあ、IOうんぬんはおいといて  @elem = split(/\s+/)  が
思わぬ速度ロスを招いていたというのは今日の収穫だった。
0378デフォルトの名無しさんNGNG
>>368
いろんなところで予想を裏切る結果だったから
0379デフォルトの名無しさんNGNG
皆さん、色々ありがとうございました。
私の素人質問(>331)が役に立ったようで何よりです。
0380デフォルトの名無しさんNGNG
>>379
お前総括しろよ
0381デフォルトの名無しさんNGNG
>>331の質問が切っ掛けになったのはたしか。
ただ自分にとっては、>>357とその元レスの>>335が一番の引き金だった。
0382デフォルトの名無しさんNGNG
>380
総括。終了。
0383デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/prog/1092405363/
0384デフォルトの名無しさんNGNG
おいおい、俺のたてた名スレのURL貼るなよ
0385デフォルトの名無しさんNGNG
おいおい、そんな迷スレたてるなよ
0386デフォルトの名無しさんNGNG
> 別に<IN>と書いてある場所で毎回イオが発生しているわけではない。
爆発系全体攻撃呪文かと思いました
0387デフォルトの名無しさんNGNG
あーあ。みんな思ってても書かなかったのに。
0388373NGNG
むしろ俺はファイラーとかそういう方に反応するけど?
0389デフォルトの名無しさんNGNG
あれあれ? 怒らせていいんですか? 使いますよ。イオナズン。
0390デフォルトの名無しさんNGNG
またつまらんスレに戻ったな
0391デフォルトの名無しさんNGNG
お前がトドメだな。
0392デフォルトの名無しさんNGNG
そういや split の代わりに /〜/g 使ってどうにかしたら速くならない?
0393デフォルトの名無しさんNGNG
ならない・・・
0394デフォルトの名無しさんNGNG
サブルーチンが存在するかどうかって調べる方法ありますか?
0395デフォルトの名無しさんNGNG
ある・・・とだけ言っておこう。
0396デフォルトの名無しさんNGNG
eval
0397デフォルトの名無しさんNGNG
eval じゃない
0398デフォルトの名無しさんNGNG
eval じゃない?
0399デフォルトの名無しさんNGNG
defined使えよ・・・
0400デフォルトの名無しさんNGNG
>399
definedじゃムリだろ。
0401デフォルトの名無しさんNGNG
オレもdefinedで実現する方法は分からん・・・
0402デフォルトの名無しさんNGNG
Perlは初心者レベルなので、間違ってたらスマソ

print "Sub1は存在しま";
if(defined(&sub1)){ print "す"; } else { print "せん"; }
print "\nSub2は存在しま";
if(defined(&sub2)){ print "す"; } else { print "せん"; }
exit(0);

sub sub1{}
#sub sub2{}
0403デフォルトの名無しさんNGNG
if( main->can("subhoge") ){
 print "i can subhoge";
}

sub subhoge{ }
0404黒死犬 ◆EgxBlf8nvc NGNG
Stashを覗く

print("I can", defined(&{"::sex"})? "": " not", " sex.\n");
sub sex {};
0405デフォルトの名無しさんNGNG
>403
知らなかった・・・
0406デフォルトの名無しさんNGNG
>>405
普通はオブジェクトに適用するものだから。
構文糖的にインチキしてみた。
詳細は続初めてのPerlを読んでくれ、あれは良い本だ。


0407こうゆう事できますか?教えて下さいNGNG
どこに書いたらいいか解らずここに着きました。

自分のやりたい事って意外と
凶悪なのかもしれないのですが、可能な物なのか知りたくなりました。
良くPeal可ってありますよね?鯖屋さんの鯖上にpeal(LWP)自動巡回エンジンを使って
巡回代行させたいのです。リクエストすればzip圧縮してアーカイブして
DL可能とかstmpエンジン内臓させて、である程度の巡回内容の量になったら
zip圧縮してアーカイブしてメルアドに自動送信とか
させたいんですが。

これって可能でしょうか?似たようなサービスはありますが、
自分用に自由に定義して使い倒したいのですが
不可能でしょうか?
0408デフォルトの名無しさんNGNG
可能です
0409デフォルトの名無しさんNGNG
不可能だと疑う理由が分からん。
0410こうゆう事できますか?教えて下さいNGNG
ああ嬉しい。レス有難うです。
可能ですか。

何分知識不足な物で。
0411こうゆう事できますか?教えて下さいNGNG
WindowsのActive perlから入った初心者な物で皆様のご意見が聞きたかったんですが、
自鯖も頑張れば立てられるかもしれませんが(空PCは有りますが)
自宅鯖上ではなくレンタル鯖でやりたいと思ったのですが、可能でしょうか?。

鯖屋さんのグレードによるのかなぁとか考えてしまいますが、
一般的な無料では不可なのでしょうか?




 
0412デフォルトの名無しさんNGNG
>411
まあここでそういうレベルの質問してるようじゃ
無理だろうな。もっと勉強しろ。
0413こうゆう事できますか?教えて下さいNGNG
すいません。
0414デフォルトの名無しさんNGNG
おまいら釣られんなよ、いくらなんでも peal に stmp はねぇだろ。
0415デフォルトの名無しさんNGNG
>>408-409
っていうかおまえらエスパーかよ
>>407の日本語がさっぱり理解できん
(゚∠゚)ニホンゴムズカスィネー
0416デフォルトの名無しさんNGNG
>>411
レンタル鯖でも可能。
ネットへのアクセス(LWPやソケット)が使えるか、
簡単なスクリプト書いて試してみれ。

ただし、無料サバなら不可のところも多いのかも。
サバ屋の中の人の設定次第。
0417デフォルトの名無しさんNGNG
perl6、perl5と互換性無いのにオライリーのラクダ本上下巻、リャマ本(両方とも新品で)
合わせてeffective perl買ってしまったのは(合計1万5千円程した)馬鹿ですか?
0418417NGNG
詳細 正規表現(Perl5.8用)も買ってしまいました。
0419デフォルトの名無しさんNGNG
よく、金あるね。
俺、8000円で悩んでいるのに。。。
0420417NGNG
perl5と互換性の無いperl6出るのに今perl5覚えても意味無いですか?
0421デフォルトの名無しさんNGNG
>>420
プログラミング言語なら、どれ覚えても意味あるよ。
大切なのは言語によらない、普遍的な部分だからね。

ちなみにおれも、ラクダ本上下、クックブック持ってます。
買値以上の価値は絶対あるよ。
0422417NGNG
いくら互換性が無いって言ってもperl5覚えてたらperl6習得に役立ちますか?
0423417NGNG
>>421
ありがとうございます。
高い買い物がperl6の登場で役立たなければどうしようかと焦りました。
0424417NGNG
役立たなければ⇒無用の長物になったら
0425デフォルトの名無しさんNGNG
基本概念は一緒じゃない?
0426デフォルトの名無しさんNGNG
>>425
同意。大事なのは文法の下にある思想やポリシー。
そのエッセンスが自分の考え方の幅を広げ、他の言語にも応用できるようになる。

perl6の新機能とobsolateされた機能を知りたかったならあちゃー・・・・って感じ。
0427デフォルトの名無しさんNGNG
ラクダ本のperl6対応が出るのは(第四版?)まだ先ですよね?
というかオライリーのperl6本。(英語版は出てますが)
0428デフォルトの名無しさんNGNG
Perlごときにそんな分厚い本買ってるからオタって言われるんだよ。
一応言っておくけど俺はアンチじゃないよ。Perlまんせ〜☆
0429デフォルトの名無しさんNGNG
>>428
ヲタクに区別無し。
自分のことを棚に上げ相手をヲタク呼ばわりしているお前もまたヲタクなのです。
0430デフォルトの名無しさんNGNG
アニヲタとは

趣味で金を稼ぐことができる/浪費するの違いがありますが。
0431デフォルトの名無しさんNGNG
>>430
どちらもヲタです。徳の違いはあれどどちらが上下というモノは存在しません。
0432デフォルトの名無しさんNGNG
上下があるという意味で言ったわけではありません。
0433デフォルトの名無しさんNGNG
前後くらいはありそう
0434デフォルトの名無しさんNGNG
>>433
どちらにせよ尊敬することはあれど蔑むことは許されません。あなたもまたそうなのですから。
0435デフォルトの名無しさんNGNG
彼もまた大切な(ry
0436428NGNG
>>430
おまいの言うことはスルーしないぞ。
画面に変なアイコン並べてわけわからん用語使うアニメ野郎と一緒にすんな!
俺はクールでダンディなヲタクなのさ。
0437デフォルトの名無しさんNGNG
>>436
人の話聞けや。お前もヲタクで彼もヲタク。ただそれだけでお前に彼を笑う資格はない。
0438デフォルトの名無しさんNGNG
>>417
続・初めてのPerl も買え、まずはラクダ本よりもむしろそっちだ
0439デフォルトの名無しさんNGNG
0440デフォルトの名無しさんNGNG
今参加するともれなくヲタクになれます。
今日は暇だからどこか行こうかな。
0441デフォルトの名無しさんNGNG
え、マジでPerl6になると全面的に仕様変わるの?
0442デフォルトの名無しさんNGNG
変数の前に $ @ % がいらなくなるらしい
0443デフォルトの名無しさんNGNG
マジ?なんか逆に邪魔な機能だな。
速度はどうなの?
0444デフォルトの名無しさんNGNG
>>442
マジで? 特殊変数はどうなるのさ。
0445デフォルトの名無しさんNGNG
> Perl 6はよりクリーンな言語であり、仕様もより論理的になっている。Conwayによれば、
> すべてのスカラー変数は「$」記号で識別され、「$」記号で識別されるのはスカラー変数だけである。
> さまざまな識別子(「$」、「@」、「%」など)を持つさまざまな変数をさまざまな方法で使うのではない。
> 新バージョンのPerlでは、事実上、使用可能なすべての特殊文字が使用されている。標準のASCII以外の、
> Unicodeの空間の文字も使用されている(これらの文字はキーワードで代用することも可能だ)。
0446デフォルトの名無しさんNGNG
へぇ〜
で、最近気付いたんだが(ベンチマークで)
意外だったのが 
横に長く構文を書くより、
適度に改行して書く方が動作速かった
0447デフォルトの名無しさんNGNG
PerlといいPHPと言い結局同じもんになりつつあるな。

もう全部Javaでいいじゃん!とか世界の中心で叫びたくなるな。
0448デフォルトの名無しさんNGNG
>>447
Java使いか?
0449デフォルトの名無しさんNGNG
Javaの方が速いしOOPとか便利だけど、導入するのがめんどい。
0450デフォルトの名無しさんNGNG
Java、記述が長くなる・・・。
0451デフォルトの名無しさんNGNG
>>446
俺も前に調べたことあるけど、その時のベンチ結果はまったく生かされていない。
つーか、どちらが速いかすら忘れた。
他にもforで1万回printするのとprintを1万行並べるのはどちらが速いかといった
どうでもいいものを調べた事もあったなぁ。
0452デフォルトの名無しさんNGNG
Perl の正規表現の書き方(マッチとか置換とか)が
かなり使いやすくて強力なんだよなぁ。
その辺りがJavaだと・・・。
0453デフォルトの名無しさんNGNG
>>452
regexアルから取りあえずは良いけどね。
無い言語なんて使ってられん。

方言は置いといて結局はクラス型のOOに収束するのが少々悲しい。
0454446NGNG
後、スクリプトの先頭で
my($hoge, $abc) = '';
my(@test) = ();

とかしたら劇的に速度速くなったぞ。いやマジおすすめ
0455デフォルトの名無しさんNGNG
>>454
use strictとかcarpとかは、「劇的に」遅くなりますか?
おしえてケロ。
0456デフォルトの名無しさんNGNG
Perl5のOOとかPHP4のOOは終わってる。
やっぱC++かJavaだね。
0457デフォルトの名無しさんNGNG
>>454
すんごくくだらない事なんだけど・・・
>my($hoge, $abc) = '';
この部分、リスト評価へスカラーで初期化するのはおかしい気がする。
my($hoge, $abc) = ();
こうじゃないかな。
別に間違いじゃないんだろうけど、
でもなんとなく他人のこういう所が気になる・・・
0458デフォルトの名無しさんNGNG
左辺値がリストで右辺値がスカラならそれぞれの左辺値に右辺値が代入されるんじゃないの?
0459デフォルトの名無しさんNGNG
>>458
うーん、たぶん違う。
@hoge = "ほげ";
こんな事しても、$hoge[0]には代入されるけど、
それ以降の配列はnull
0460デフォルトの名無しさんNGNG
WindowsXP、Perl v5.8.4でテストしようとした。
中の人に怒られた。MSの底力を感じた。

use Benchmark;
timethese(-1,{
'Carp' => sub {
my $pid = undef;
unless ($pid = fork) { eval 'use Carp;' }
waitpid $pid, 2;
},
'strict' => sub {
my $pid = undef;
unless ($pid = fork) { eval 'use strict;' }
waitpid $pid, 2;
},
});
0461デフォルトの名無しさんNGNG
useって初回以外は計測しても意味無いんじゃないの?
0462デフォルトの名無しさんNGNG
#!/usr/bin/perl

〜処理〜

my($user, $system, $cuser, $csystem) = times;
print "\n",'--------------------',"\n";
print 'User : ',$user,"\n";
print 'System : ',$system,"\n";
print 'User(child) : ',$cuser,"\n";
print 'System(child): ',$csystem,"\n\n";
print 'Total : ',$user + $system + $cuser + $csystem,"\n";
print '--------------------',"\n";
exit;
0463デフォルトの名無しさんNGNG
>>461
つか、しょえるの外からtimeとかで計測しないと意味ないんでないの?
0464デフォルトの名無しさんNGNG
C:\Perlにあるabc.txtっていうファイルから、
defっていう文字列を含む行を削除するにはどんな構文を書けばいいんでしょうか。
初歩的ですみません。
0465デフォルトの名無しさんNGNG
ageておこう
0466デフォルトの名無しさんNGNG
>>464
perl -i.bak -ne "/def/ || print" C:\Perl\abc.txt
0467デフォルトの名無しさんNGNG
>>466
ありがとうございました。
目的に合わせて改変してみます。
0468デフォルトの名無しさんNGNG
grep -v def abc.txt でいいよな
0469デフォルトの名無しさんNGNG
>C:\Perlにあるabc.txtっていうファイルから
windowsだが・・・
0470デフォルトの名無しさんNGNG
Cygwinでもいれればいいだろ
0471デフォルトの名無しさんNGNG
grep.exeと書けば満足か
0472デフォルトの名無しさんNGNG
はい
0473デフォルトの名無しさんNGNG
.exeは省略しても実行できるような気がするが
0474デフォルトの名無しさんNGNG
>>473
>>469のように勘違いするやつが出てくるからだろ。空気嫁
0475411NGNG
>416様
ありがとうございました。
さっそく試してみます。
0476デフォルトの名無しさんNGNG
ActivePerlはモジュール少ないyo...
0477デフォルトの名無しさんNGNG
インスコしなはれ
0478デフォルトの名無しさんNGNG
標準で入っているモジュールの話?
それともppmにあるモジュールの話?
標準モジュールが足りないと思ったらppmで入れる。
ppmが足りないと思ったらcpanで入れる。
0479デフォルトの名無しさんNGNG
それでも無かったら、ネットで直接DL。
それでも無ければ、自作。
0480デフォルトの名無しさんNGNG
結局無いっつわれたらcpan使えばいいだけじゃん
0481デフォルトの名無しさんNGNG
>>457
厳密な意味で意図した初期化になってない。

null文字列で初期化したければ
my($hoge, $abc) = ('','');

未定義値で初期化したければ
my($hoge, $abc) = ();

もっともmyで新しいローカル変数を定義しているから
my($hoge, $abc);
でも未定義値で初期化される。

my($hoge, $abc) = '';
は
my($hoge, $abc) = ('');
と解釈され、$hogeがnull文字列、$abcが未定義値に初期化される。

よって defined の結果が違ってくる。
0482デフォルトの名無しさんNGNG
>>481
おお〜
ちょっと感動した
0483デフォルトの名無しさんNGNG
こんな基礎的なことで感動されても
0484デフォルトの名無しさんNGNG
素直に喜びナ
0485デフォルトの名無しさんNGNG
空リストの代入は、ハッシュと組み合わせたりすると
有効なキーかどうか判断するときに便利だよね。

@valid{qw"xyz abc ijk"}=();
if(exists $valid{$in}){
print "有効です\n";
}else{
print "無効です\n";
}
0486デフォルトの名無しさんNGNG
>>442,445
$hoge はスカラ
$hoge[$key] は配列の要素のリファレンス
$hoge[@key] は配列の要素のリファレンスのスライス
$hoge{$key} はハッシュの要素のリファレンス
$hoge{@key} はハッシュの要素のリファレンスのスライス
$hoge(@list) は関数のリファレンス
$hoge{$key} はハッシュの要素のリファレンス
@hoge は配列
@hoge[$key] は配列の要素
@hoge[@keys] は配列のスライス
%hoge はハッシュ
%hoge{$key} はハッシュの要素
%hoge{@keys}はハッシュのスライス

配列をスカラで評価すると配列のリファレンス
ハッシュをスカラで評価するとハッシュのリファレンス
配列のリファレンスを数値コンテキストで評価すると配列の要素数

ていうPerl6の初期仕様は破棄されたの?
0487デフォルトの名無しさんNGNG
環境依存の話で申し訳ないのですが、以下のような状況で
DBD::Oracleを作成して利用したいのですが、どうすれば
よいのでしょうか?
スレ違いなら申し訳ありません。どこかふさわしいスレが
あるなら紹介していただけると助かります。

OS :Windows2000
Perl:ActivePerl 5.8
インストール済みOracleソフトウェア:Oracle Clients for Windows
使用したい状況:Apache2.0+mod_perlからSoralis上の
Oracleに接続したい

CPANからDBD-Oracle.tar.gzをダウンロードしてビルド
しようとしても、"ORACLE_HOMEが間違っている"とエラー
になってしまいます。
(レジストリから自動検索してC:\orantがORACLE_HOME
として認識されているようです。)

別の解決方法としてActivePerl 5.6にすれば、DBD::Oracle
は存在します。
しかし、mod_perl(Apache2.0用)がビルドできなくなってし
まいます。
0488デフォルトの名無しさんNGNG
>>487
Makefile.PL 適当に書き換えりゃイインジャネーノ
0489デフォルトの名無しさんNGNG
Perlのオブジェクト指向について質問です。
通常オブジェクトのメンバ変数にアクセスするには、アクセスメソッドを通して行いますが
少し疑問があります。
#######################################
Package Hoge;
sub new{
my $self = shift;
my $hashref = shift;
bless { hashref=>$hashref },$self;
}
sub hashref{
my $self =shift;
%{$self->{hashref}} = ( @_ ) if ($_[0]);
return $self->{hashref};
}
#######################################
Package main;
use Hoge;
my $test = { hoge=>1,hage=>2 };
my $obj = Hoge->new($test);
my $hashref = $obj->hashref();
###########################################

この状態でメインパッケージにの$hashrefに
$hashref->{$_} =~ s/.//g foreach keys %$hashref;
をやってしまうと、Hogeクラスのオブジェクトのプロパティにまで影響を与えてしまうんですが、
これはよくないことですよね?アクセスメソッドの返り血を、リファレンスにするのは禁止事項なのですか?

そういう記述がみつけられないんですが;エロイ人カコイイ回答をおながいします。
0490デフォルトの名無しさんNGNG
釣りかな
0491489NGNG
>>490
真面目です。実はPerl初めて2ヶ月くらいで、パソコン触り始めたのが4ヶ月前位なので
かなり初心者ですorz
アフォな質問なのかもしれませんが、どうかおながいします。
0492デフォルトの名無しさんNGNG
OOP信者でも釣ろうとしているのかと思った。スマソ
0493デフォルトの名無しさんNGNG
>>481
>my($hoge, $abc) = '';
>は
>my($hoge, $abc) = ('');
>と解釈され、$hogeがnull文字列、$abcが未定義値に初期化される。

言ってる事は正しいがこの部分はおかしいだろーと。
スカラーはスカラーで評価されるんだって。
なぜ配列(リスト)で評価されるんだよ。
挙動は同じだが評価のされ方は厳密には違うだろ。
0494デフォルトの名無しさんNGNG
>>489
うーん・・・
戻り値をリファレンスにするのはよくないとか、
そんなのないと思うけど。
好きにすればいいかと。
たとえば影響を与えたくない物はforeach文内でスキップするか、
hashrefメソッド内でうまく加工するか・・・
Perlのオブジェクトは厳格性に欠けるからなぁ〜・・・
0495デフォルトの名無しさんNGNG
>>493
うんそうだね。一応「評価」と書かずに「解釈」と書いたのだが、言葉たらずだね。

my($hoge, $abc) = '';

の初期化の意味の説明のために>>481を書いただけだから。
たしかに知らない人には誤解を与えるね。正直スマンかった。

正確には、配列、スライス及び、リストにスカラを代入すると
配列の先頭要素、スライスの先頭要素、リストの先頭変数にのみ
スカラの値が代入され、配列の要素数は、1になり、
スライスの残りの要素、または、リストの残りの変数には
未定義値がセットされる。
0496デフォルトの名無しさんNGNG
つか、配列とリストってどう違うの?
同じ?
0497デフォルトの名無しさんNGNG
>>496
リストは配列と違って要素の型が全て同じとは限らない。
0498デフォルトの名無しさんNGNG
配列の場合
@var = ('A', 'B', 'C');
@var = 'X';
print join(":",@var);
出力結果
X

スライスの場合
@var = ('A', 'B', 'C');
@var[0,1,2] = 'X';
print join(":",@var);
出力結果
X::

リストの場合
@var = ('A', 'B', 'C');
($var[0],$var[1],$var[2]) = 'X';
print join(":",@var);
出力結果
X::

配列とスカラの混合リストにリストを代入(1)
($var1,@var2) = ('A', 'B', 'C');
print join(":",$var1,@var2);
出力結果
A:B:C

配列とスカラの混合リストにリストを代入(2)
(@var2,$var1) = ('A', 'B', 'C');
print join(":",$var1,@var2);
出力結果
:A:B:C
0499デフォルトの名無しさんNGNG
>>489
>通常オブジェクトのメンバ変数にアクセスするには、アクセスメソッドを通して行いますが

と言っておきながら、

>$hashref->{$_} =~ s/.//g foreach keys %$hashref;

で思いっきりメンバ変数をダイレクトに操作している。

このアクセス方法を行う限り、リファレンスがどうのいうまえにOOPとして破綻する。
>>494が言っている通りPerlはオブジェクトに対する厳格性は求めていないので
実装する側がポリシーを持って、インターフェースを実装するしかない。

メンバ変数の内容を書き換えたくなかったらアクセスメソッドを作りなさいということ。
0500デフォルトの名無しさんNGNG
ちなみに>>489の例題は、

> my $test = { hoge=>1,hage=>2 };

で生成されたハッシュリファレンスをHogeオブジェクトに渡して、それを操作しているので
別Hogeオブジェクトを生成しても渡すハッシュリファレンスが同じものであれば
同じ内容を操作するわけだからオブジェクト間でいつでも値を壊してしまう恐れがある。

>bless { hashref=>$hashref },$self;

の部分を

bless { hashref=>{%$hashref}},$self;

とするだけで、コンストラクタで受け取った先の内容を気にする必要がなくなる。
ただ、>>489のやりたいことを理解していないので全然検討はずれのことを言っているかも。
0501デフォルトの名無しさんNGNG
OOの勉強したいんだったら、PerlでOOするべきじゃない
0502489NGNG
>>499
アクセスメソッドはちゃんと通してますよ?
アクセスメソッドから得たものに置換処理しただけです。
>$hashref->{$_} =~ s/.//g foreach keys %$hashref;
通常直接いじるとは
$obj->{hashref}{$_} =~ a/.//g foreach keys %{$obj->{hashref}};
のようなことを言うんですが・・・・・勘違いされただけですよね?

>>500
なぜリファレンスにこだわったかというと、リファレンスはデリファレンスしない限り、
中身がどんなバイト数でも、処理時間に差は出ないですよね?まあPerlで処理効率とか速度とか言うな!って起こられそうですが;

やはり参照渡しはいいとしても、渡されたリファレンスを直接いじってそのまま返すようなことは
よくないですね。ありがとうございました。

とりあえずリファレンスは使い方を気をつけます。
0503デフォルトの名無しさんNGNG
リファレンスはコピーは速いけどアクセスは遅いですよ。
0504489NGNG
>>503
それはデリファレンスする分だけ遅くなるってことですか?
気づきませんでした;ベンチとればよかたですね。
0505デフォルトの名無しさんNGNG
細かな書き方で効率にこだわる奴に限ってそもそも
全体のアルゴリズムがなってなかったりしがち
だから気をつけろよ
0506デフォルトの名無しさんNGNG
なんか疑問があんだけど
メソッドからの返りがリファレンス変数である限り、異なる名前空間の変数に影響を与えることに
なるよね。↓でもしない限り。

my %test = %{\($obj->hashref())};

でもこんなことしてたら返りをリファレンスにする意味ないよね?なんかおかしくないか?
それともオブジェクトのプロパティにあたる変数だけを守ってれば他は、リファレンス返しして
受け取った相手がそのリファレンスの中身を書き換えてもいいのか?

ん〜PERLならではの悩みなのかこれは?
0507デフォルトの名無しさんNGNG
>>509
>>489のアクセスメソッド
sub hashref{
my $self =shift;
%{$self->{hashref}} = ( @_ ) if ($_[0]);
return $self->{hashref};
}
を
sub hashref{
my $self =shift;
%{$self->{hashref}} = ( @_ ) if ($_[0]);
my $value = {%{$self->{hashref}};
return $value;
}
って書き換えてオブジェクトメンバだけ壊さなければいいんじゃん?
0508506NGNG
>>507
いいのかそれは?それじゃあオブジェクトメソッドのhashrefのローカル変数である
$valueの参照先が安全でないし、それならいっそ
sub hashref{
my $self =shift;
%{$self->{hashref}} = ( @_ ) if ($_[0]);
return %{$self->{hashref}};
}
でいいだろ。なんかリファレンス自体使うなって気がするが、DBIとかは普通にリファレンスで返して来るんだよな。
0509デフォルトの名無しさんNGNG
で、このスレでの結論は?
0510デフォルトの名無しさんNGNG
置換前の値をメモリーに入れたまま
置換後の値もメモリーに入れるんだろ?
どこかでコピーするしかねーじゃん。
0511デフォルトの名無しさんNGNG
04/08/17 18:09
を、
04/Aug/17 18:09

のように出力したい場合、月の部分をいちいち
Jan, Feb, Mar.... と記述しないとダメですか?(y/n)

# $jikan = localtime(time);
# print $jikan;
# とすると、
# Wed Apr 10 18:09:21 2002
# と出力されるので、上記のような面倒なことをしなくて済みそうなんですが・・・
0512デフォルトの名無しさんNGNG
>>510
なら初めからリファレンス使うなよ。
>>509
メソッドやルーチンにはリファレンスで渡すな。返りもリファレンスにするな。
というのがこのスレの結論。
0513デフォルトの名無しさんNGNG
>>511
いろいろやり方はあるが、とりあえずPOSIXモジュールの
strftime使うのをお勧めしておく。
0514デフォルトの名無しさんNGNG
>>489
Perlで禁止されてることなど何1つないよ。
PerlはC++やJavaみたいに言語仕様でOOPを支援してくれる部分が少ないから、
489のような問題のあるコードは書かないように自分で気をつけるしかないわけ。
もちろん、それが必要なら別だけど。

まず、mainパッケージの$testをそのままプロパティにしないで、コピーを
保持するようにする。
sub new {
  my ($class, $hashref) = @_;
  bless { hashref => {%$hashref} }, $class;
}
0515514NGNG
で、hashrefの内容が壊されてはまずいのなら、ここでもコピーを返すか、
指定されたキーの値だけを返すようにする。
sub hashref {
  my $self = shift;

  # パラメタなければ、丸ごとコピーを返す(値にリファがあるケースはとりあえず無視)
  if (@_ == 0) { return %{$self->{hashref}} }

  # パラメタ1つの時、
  elsif (@_ == 1) {
    # ハッシュリファなら、丸ごと交換
    if (ref($_[0]) eq 'HASH') { $self->{hashref} = {%{$_[0]}} }

    # それ以外はキーとみなし、値を返す
    else { return $self->{hashref}->{$_[0]} }
  }

  # パラメタ複数なら、hashrefに値を設定(指定されたキーのみ)
  else {
    while (my($key,$val) = splice(@_,0,2)) {
      $self->{hashref}->{$key} = $val;
    }
  }
}
0516デフォルトの名無しさんNGNG
>>508
>DBIとかは普通にリファレンスで返して来るんだよな。

DBIがリファで返してくるのはプロパティじゃないだろが。
一時的に生成された無名配列や無名ハッシュだったら、
返しても全く問題ない。
0517デフォルトの名無しさんNGNG
http://com.80code.com/index.html
サイゾウで公開されてるやつをつかって
自分のHPに画像掲示板設置してみたんですが
なんかこの掲示板何かを書き込んだ直後にページを更新すると
書き込んだやつを連続投稿しちゃうみたいです。
ページを更新しても連続投稿しないようにしたいんですが
どうにかなりませんか?
どなたかアドバイスを。。
(当方一応perlの基本的な部分はわかってます。)
0518デフォルトの名無しさんNGNG
>>514-6
とりあえずコピーしたりするなら初めからリファレンスで渡さないほうがわかりやすくていいだろ?
まずリファレンスってのは名前空間をある意味で超えてる存在だから厄介なんだよな(OOP時には注意)。

無名ハッシュのリファレンスだろうがなんだろうが、他の名前空間で作られたリファレンスを
リファレンスのまま返して、返し先でデリファレンスして処理を行えば、名前空間を越えて
影響がでる。本当に拡張的なプログラムにするのにそれは好ましいとは思えない。

厳格にOOをするのなら異なるオブジェクト間での、値の受け渡しにリファレンスは使わないという
ルールを作ったほうがいいと思う。ただ、そこまで厳格なものにしたいならPerlで書かなくてもいいんじゃないか?
ってことで適当にPerlなりの柔軟さを生かすのが賢いだろうね。
0519デフォルトの名無しさんNGNG
>>517
無名変数は安全だよ。ちゃんと元のデータを壊されることのないようなコーディングにすれば
大丈夫さ。
0520デフォルトの名無しさんNGNG
パールってプログラム言語と考えてよいのでしょうか?

パールはシェルと呼ばれているようですが、

C++をシェルと呼ばないのはなぜなんでしょうか?

いまいち、パールの位置づけが理解できない・・・・・・・・・・・
0521デフォルトの名無しさんNGNG
>>520
ぱーるハ、いんたーぷりたー
0522デフォルトの名無しさんNGNG
>>520
シェルなんて呼ばれてんだ?
0523デフォルトの名無しさんNGNG
>>521
完全なインタープリタじゃないけどな
0524デフォルトの名無しさんNGNG
>>523
パールはコンパイラってこと?
0525デフォルトの名無しさんNGNG
真珠なくて?
0526デフォルトの名無しさんNGNG
>>524
@INCへ自作モジュールの場所をlibを使わずに追加するときを考えればわかるだろ。
0527デフォルトの名無しさんNGNG
>>518は名前空間とメモリ領域の区別ができないらしいな。
他の名前空間で作られたリファレンスって何よ?
変数名の管理のための名前空間とメモリ領域に関するリファレンスを
同じ土俵で考えること自体ナンセンス。
名前空間を越えて影響がでるとか言ってる時点で終わってる。
プログラムで扱われるメモリ領域が、複数の名前空間の
関数などで利用されることには何の問題もないし至って普通。
0528デフォルトの名無しさんNGNG
>>527
OOPでメモリ領域を考える事がナンセンスだと思うんだが。
横槍スマソ
0529デフォルトの名無しさんNGNG
>>528
527は名前空間とリファレンスを同じレベルで考えることの
無意味さを説いているのでは?
489は設計の問題であって、名前空間がどうのって問題じゃあ
ないのは確か。
0530デフォルトの名無しさんNGNG
>>520
>パールはシェルと呼ばれているようですが、
違う。パールは普通シェルの中に入ってる
0531デフォルトの名無しさんNGNG
>>530
うまい…
0532デフォルトの名無しさんNGNG
うまいなあ。
0533デフォルトの名無しさんNGNG
それで、オブジェクト間での値の受け渡しにリファレンスを使うメリットはあるって結論でいい?
0534デフォルトの名無しさんNGNG
>>530
やっと意味わかった。。。なぞなぞみたい。
0535デフォルトの名無しさんNGNG
パールと言えば御木本幸吉
0536デフォルトの名無しさんNGNG
>>527
>プログラムで扱われるメモリ領域が、複数の名前空間の
>関数などで利用されることには何の問題もないし至って普通。

その言い方だと>>489のコーディングで、オブジェクトのプロパティを壊しても
何の問題もないってことになるな。実際オブジェクトのプロパティはアドレスであって
その中身であるとは限らないからな。

ていうかお前ネタだろ?
0537デフォルトの名無しさんNGNG
>>530
名言!テンプレにでも入れたいよ。
0538デフォルトの名無しさんNGNG
>>530>>531>>532>>537
自演って面白いか?
アホだろお前
0539デフォルトの名無しさんNGNG
('A`)オチケツ
0540デフォルトの名無しさんNGNG
>>538
ラリーのジョーク程度には面白いと思うけどな。

それを面白いと言うかどうかは個々人に任せるが(w
0541デフォルトの名無しさんNGNG
何かキモイのが来てるんだな・・・
0542デフォルトの名無しさんNGNG
まあPerlなんて使ってる香具師ほとんどいないしな
0543デフォルトの名無しさんNGNG
>>536と>>527の続きが気になるんだが・・・・・
どっちが正しいんだよ!俺にもわかりやすく説明しやがれ!!!
0544デフォルトの名無しさんNGNG
パールの問題は1問目、2問目というように問目で数える。
0545デフォルトの名無しさんNGNG
はないちもんめ
0546デフォルトの名無しさんNGNG
パールのようなもの
0547デフォルトの名無しさんNGNG
著しくガイシュツ
0548デフォルトの名無しさんNGNG
>>543
漏れも気になってたんだが、536の
> ていうかお前ネタだろ?
ってどゆ意味?
0549デフォルトの名無しさんNGNG
>>548
多分
冗談で言ってるんだろ?
とかいう感じじゃないか?っていうか漏れは最近Webpg板から写ってきたんだが、
こっちの方がレベルの低い気がしてがっかり;

向こうは結構ちゃんとした回答者が常にいるのに。こっちは中途半端な知識の集まりって感じだねorz
もちろん漏れもその一人だけどさ;
0550デフォルトの名無しさんNGNG
↑
0551デフォルトの名無しさんNGNG
>>550
それってさげろって言ってるの?それとも>>549にアフォって言ってるの?
0552デフォルトの名無しさんNGNG
どう考えても後者だろ
0553デフォルトの名無しさんNGNG
↑

上げるなアフォ
0554デフォルトの名無しさんNGNG
>>549
俺はWebの話し合いのレベルがあまりに低いんでこっちに移った。
俺がWeb板にいてた頃・・・って1年ほど前だけど。
そりゃひどかった記憶が・・・_| ̄|○
0555デフォルトの名無しさんNGNG
ここもかなりのものだ
0556デフォルトの名無しさんNGNG
まあどっちもどっちだな。
0557デフォルトの名無しさんNGNG
549はパンチ5分の3とか言ってコピペで荒らしていた奴だろ。
0558デフォルトの名無しさんNGNG
まぁこっちの板からしてみりゃPerlなんて片手間のツールで、
居着いてまじめに回答しようって奴もそりゃ少ないだろうな。

そもそもPerlなんて、よほどのアホであるか、めちゃくちゃ濃い疑問を持たない限り
「他人に質問しなきゃならない事態」にならないだろ。
0559デフォルトの名無しさんNGNG
>>558
阿っ蘇
0560デフォルトの名無しさんNGNG
>>559
雲素
0561デフォルトの名無しさんNGNG
向こうはCGIしかできません( ´,_ゝ`)プッ
0562デフォルトの名無しさんNGNG
アップロードCGIの勉強をしようと思い、KENTのCLIPBOARDのコードを見てたら

# マックバイナリ対策
if ($macbin) {
$length = substr($upfile,83,4);
$length = unpack("%N",$length);
$upfile = substr($upfile,128,$length);
}

と言うのがあり、さっぱり意味が分かりません。
ググっても明確な答えを見出せませんでした。
どなたかご存知の方、おりますでしょうか
0563デフォルトの名無しさんNGNG
>>562
ここがわかりやすいと思う。

ttp://homepage1.nifty.com/glass/tom_neko/web/web_05.html

これを読んでなおそのコードの意味がわからないようなら
決定的に勉強不足なので、わかる日がくるまで精進するしか
ないな。
0564562NGNG
>>563さん回答ありがとうございます。
おー
なるほど。良く分かりました。
コードの意味は分かります(^^;)
0565デフォルトの名無しさんNGNG
ハッシュのキーの数を表示したくて
print ($_=(keys(%a)));
のようにしたんですが、もっとシンプルな方法ありますか?
0566デフォルトの名無しさんNGNG
>>565
タイプは増えるけど
print scalar keys %a;
とか
0567565NGNG
>>566
ありがとうございます。
scalarなんてのがあるんですね。まさに求めていたものです。
ところで、
print ($_=(keys(%a)));
ってやるとなんでkeysのスカラー値が表示されるのでしょうか?
0568デフォルトの名無しさんNGNG
>>567
perldoc -f keys くらい調べてくれよ。

> (In scalar context, returns the number of keys.)
0569デフォルトの名無しさんNGNG
>>566 のタイプ数を少し減らして

print 0+keys %a;

スカラー評価。


>>567
keys はリストを返すが、リストをスカラー評価すると
リストの要素数が得られる。
$_ = ってのは、右辺をスカラー評価ね。
0570567NGNG
>>568
keys関数をスカラーで評価するとキーの数が返ってくることは知ってます。
なので最初は、
$_=keys(%a);
print $_;
ってやってました。
んで試しに括弧で括ってみたら出来たわけですが、
($_=keys(%a))
でスカラー値が返ってくる仕組みが知りたいのです。
0571デフォルトの名無しさんNGNG
パールでオブジェクト指向できますか?
0572デフォルトの名無しさんNGNG
終わってます
0573デフォルトの名無しさんNGNG
>>570
何を知りたいのか分からんが
$a = $b = 5; とか print ($a=5); を不思議に思う人かい?

# 良い子は $a とか $b なんて変数名を使う習慣を身に付けちゃダメだぞ
0574デフォルトの名無しさんNGNG
>>571
オブジェクト指向の基本をしってるやつなら、Perlでもできる。
まあ何のためのオブジェクト指向かを勉強しれ。

簡単に言うと、賢いやつは何をやらしてもなかなかの結果を出すってことだ。
0575デフォルトの名無しさんNGNG
>>574
なるほど、おまいが結果を出せないわけが良く分かったよw
0576デフォルトの名無しさんNGNG
>>575
同意
0577デフォルトの名無しさんNGNG
自作自演まで三流かよ!
0578デフォルトの名無しさんNGNG
>>570
> んで試しに括弧で括ってみたら出来たわけですが、
> ($_=keys(%a))
> でスカラー値が返ってくる仕組みが知りたいのです。

$_ = ...
の「式の値」は、$_ に代入された値になる。で、
print に渡されるのは、その式の値。

ちなみに、今回のケースでは括弧はなくても大丈夫。

print $_ = keys %a;
0579デフォルトの名無しさんNGNG
喪舞らレベル高いなぁ
関心するよ
0580デフォルトの名無しさんNGNG
だってヲタクですから!!!
残念
0581デフォルトの名無しさんNGNG
質問スレでレベル云々言われてもなぁ。
0582デフォルトの名無しさんNGNG
MSN Messenger APIの仕様書どこかおせーて
0583デフォルトの名無しさんNGNG
少なくともスレ違いだと思います
0584デフォルトの名無しさんNGNG
質問します。

現在、PerlにてCGIを作成しているのですが、
オープンしたファイルに書き込みが出来なくて困っています。
セキュリティーに関してはちょっと置いといて、
Perlソース(一部分)はこちらです。

$dot_qmail_path = "/home/$user_name/.qmail";
if ( -r "$dot_qmail_path" && -w "$dot_qmail_path" ) {
open( QMAIL , ">>$dot_qmail_path" ) || &Error_Print('09',$!);
print QMAIL "aaaaaaaaaa\n";
close(QMAIL);
}

CGIフォームにてユーザーから、$user_nameを受け取り、
その$user_nameユーザーの.qmailファイルに追記したいのです。

ここで、$dot_qmail_path に "/home/$user_name/.qmail" を代入するとNGで
$dot_qmail_path に 直接 "/home/hogehoge/.qmail" と変数を利用しないパスだときちんと
該当ファイルに追記してくれるのです。

変数が2重になっていると変数を展開しないなんて事はないですよね?

print "$dot_qmail_path";
とするときちんとパスは"/home/hogehoge/.qmail"と表示されるんですがね。。。

ちなみに。
/home/hogehoge/.qmail のパーミッションは644のオーナーhogehoge、グループhogehogeになっています。

このCGIのパーミッションは4755のオーナーroot、グループrootです。
(今はセキュリティーは無視しています)
0585デフォルトの名無しさんNGNG
>>584
4755だとするとに$user_nameが汚染されてんじゃねーの?
0586デフォルトの名無しさんNGNG
>>584
$dot_qmail_path = '/home/' . $user_name . '/.qmail';
したらどう?
0587デフォルトの名無しさんNGNG
>>584
バカじゃん
0588デフォルトの名無しさんNGNG
なにがどうNGなんだろね。
tu-ka、.qmail 書き換えるときはスティッキ立てろって書いてあるし、4755 root:root の CGI ってまさしく >>587 の通りだし。

CGI から特定のデータを一旦ファイルに書き出して、書き出したファイル群を巡視する daemon 設置してそちらで .qmail 書き換えるべきだよな。@要root、setuidgid プログラム
0589デフォルトの名無しさんNGNG
>>588
訂正m(_ _)m
書き出したファイル群を巡視するプログラムを svscan でまわしてそちらで .qmail 書き換えるべきだよな。@要root、setuidgid プログラム
0590デフォルトの名無しさんNGNG
http://www.soramimi.info/a-bbs/mbbs/mbbs.cgi?id=12345
管理人殺害!!!
0591570NGNG
>>578
遅レススマソ。
その説明で納得いきました。ありがとうございます。
0592デフォルトの名無しさんNGNG
Effective Perlってどう?
古い?
0593584NGNG
もしかすると、
>>585
>>587
>>589の意図するところは

>>586 ちなみにダメでした。


汚染モードで実行されて、$user_nameのところで、
汚染チェックされ、プログラムが終了してしまっている。

ということでしょうか?

>>588 ちなみに、.qmailでなくても、通常のファイルでもダメですが、

4755 root:root の CGI ってまさしく >>587 の通りだし。

これはセキュリティー上のことですか?
それとも汚染モードってことですか?
0594デフォルトの名無しさんNGNG
俺>>584見て一発で分かったぜ。
ヒントは3つ。

> 現在、PerlにてCGIを作成しているのですが、

> ここで、$dot_qmail_path に "/home/$user_name/.qmail" を代入するとNGで
> $dot_qmail_path に 直接 "/home/hogehoge/.qmail" と変数を利用しないパスだときちんと
> 該当ファイルに追記してくれるのです。

> print "$dot_qmail_path";
> とするときちんとパスは"/home/hogehoge/.qmail"と表示されるんですがね。。。


if ($user_name eq 'hogehoge') {
  print '合ってる';
} else {
  print '間違ってる';
}

これやってみ。
あと、print "$dot_qmail_path";をログファイルに書き出すようにしてみ。
0595584NGNG
さっそくやってみますた。

$dot_qmail_path = "/home/$user_name/.qmail";
print "$dot_qmail_path" . "<BR>";
if ($user_name eq 'hogehoge') {
print '合ってる<BR>';
} else {
print '間違ってる<BR>';
}
if ( -r "$dot_qmail_path" && -w "$dot_qmail_path" ) {
open( QMAIL , ">>$dot_qmail_path" ) || &Error_Print('09',$!);
print QMAIL "aaaaaaaaaa\n";
close(QMAIL);
print 'ここまできてる?<BR>';
}

と、してみたところ、

ブラウザには
/home/hogehoge/.qmail
合ってる

と出たので、ユーザー名、パスに誤りはないと思います。

さいごのprint文の「ここまできてる?」
はブラウザに表示されませんでした。

ちなみに、このcgiのパーミッションを4755としているのには、/etc/shadowファイルを
オープンさせるために、「とりあえず」、このようにしています。

あと、変数名にセンスが感じられないのはご愛嬌でお願いします。
0596デフォルトの名無しさんNGNG
>>595
ありゃ?俺はてっきり$user_nameの頭か尻に空白類文字が入ってんのかと思った。
「合ってる」が出るってことは合ってんだろうな。
本当に
$dot_qmail_path = "/home/$user_name/.qmail";
を
$dot_qmail_path = "/home/hogehoge/.qmail";
に変えたらうまく行くんだろうな?
0597デフォルトの名無しさんNGNG
if ( -r "home/$user_name/.qmail" && -w "home/$user_name/.qmail" ) {
  print "ok";
}
if ( -r "home/hogehoge/.qmail" && -w "home/hogehoge/.qmail" ) {
  print "ok";
}
これを
if ( -r "$dot_qmail_path" && -w "$dot_qmail_path" ) {
の前に入れてみろ。okが2つでなかったらアウトだ。
0598デフォルトの名無しさんNGNG
間違いないね。
それで俺もこまってるんだもの。

一応、$user_nameはなんちゃって正規表現で、チェックはしているつもり、
コレでも汚染は取れきれないのかな?
ドットとスラッシュ許可してるからな・・・


sub Address_Check {
@addresss = ("$user_name" , "$tenso_address_1" , "$tenso_address_2");
foreach $buf (@addresss) {
if ( $buf =~ /[^\w.\-\/\@]/ ) {
&Error_Print('00',$buf);
} elsif ( $buf eq "" ) {
&Error_Print('01',$buf);
}
}
}

はたして、この正規表現であってるかはわからんが・・・・

要はやりたいことは
CGIフォームで転送アドレスを受け取って、それを.qmailに追記したいのよ。
ユーザーの認証は、すでに持っているアドレス(@より前の部分)とメールパスワード
で認証させる。ってことで、

全部のソース載せてもいいんだけど、載せきれないしね。
0599デフォルトの名無しさんNGNG
>>598
違うだろ。
同じ(はずの)文字列に対して同じ(はずの)処理をしているのに違う結果になるのが問題であって、
汚染とか全然関係ない。

ちなみに汚染をtaint mode(-T)のこととして言ってるなら、
> コレでも汚染は取れきれないのかな?
> ドットとスラッシュ許可してるからな・・・
taint modeはそういうものじゃない。
0600デフォルトの名無しさんNGNG
>>597

非常に残念な結果が出てしまいました。

$dot_qmail_path = "/home/$user_name/.qmail";
print "$dot_qmail_path" . "<BR>";
if ($user_name eq 'hogehoge') {
print '合ってる<BR>';
} else {
print '間違ってる<BR>';
}
if ( -r "/home/$user_name/\.qmail" && -w "/home/$user_name/\.qmail" ) {
print "ok";
}
if ( -r "/home/hogehoge/\.qmail" && -w "/home/hogehoge/\.qmail" ) {
print "ok";
}
if ( -r "$dot_qmail_path" && -w "$dot_qmail_path" ) {
open( QMAIL , ">>$dot_qmail_path" ) || &Error_Print('09',$!);
print QMAIL "aaaaaaaaaa\n";
close(QMAIL);
print 'ここまできてる?<BR>';
}

え〜っと、いちおうhome/$user_name/.qmailとあったので、念のため/home/$user_name/\.qmailと変更しました。

結果、
/home/hogehoge/aaaaa
合ってる
okok

このブラウザだけ見ると、やけにうまくいってそうなメッセージだな。でもね、でもね、「ここまできてる」の文が出ないのが、俺にはどうにも不思議で不思議で・・・
0601600NGNG
ふと、気づいたんだが、
確かに /usr/bin/perl -Tで汚染モードに入るのはわかる。

でも、setuidにしているので、自動的に汚染モードで動きません?
0602デフォルトの名無しさんNGNG
何かもうわけわからんな。
1.
print "/home/$user_name/\.qmail";
print "/home/hogehoge/\.qmail";
print "$dot_qmail_path";
をして、3つの出力をブラウザのソース表示で全て同じであることを確認

2.
A. if ( -r "$dot_qmail_path" && -w "$dot_qmail_path" ) {
B. if ( -r "/home/$user_name/.qmail" && -w "/home/$user_name/.qmail" ) {
C. if ( -r "/home/hogehoge/.qmail" && -w "/home/hogehoge/.qmail" ) {

の3種類を試してみて、本当に「C.だけが成功する」のかどうか確かめる。

3.
「実はうまくいってるのに、うまくいってないと勘違いしてるのでは?」等を疑う。
0603デフォルトの名無しさんNGNG
エラーログを見るべきだと思うね。
0604600NGNG
>>602

わけわからなくなるでしょ?

ちなみにね、
1.だけど、
やっぱりブラウザのソース見たけど一緒だし、
2.も
ABはだめ、Cはイケルって結果だね。
3.は2.のCがうまくいっているのを確認したし、2.のA,Bが失敗しているのは完全によくわかる。

全ソースさらけだすか?

ちなみに自分が作ったスクリプトって見られるの恥ずかしくネ?
0605デフォルトの名無しさんNGNG
気になって眠れないから見たい。
0606デフォルトの名無しさんNGNG
>>598
汚染はマッチしただけじゃ取れないよ。
(...)を含んだ正規表現とマッチさせて
$1, $2, ...で部分文字列として
取り出さないとだめ。perlsecをよく
読め。
0607デフォルトの名無しさんNGNG
>>603

あ!!ゴメン。エラーログになんか出てた。

Insecure dependency in open while running setuid at /var/www/cgi-bin/trans.cgi line 60.

だって、ちょっと手元にあるプログラミングPerl VOLUME2で調べたら、

Insecure dependency in %s
(%sは安全でないものに依存している)

(F)汚染チェック機能が嫌うようなことを行おうとした。汚染チェック機能は、setuidや
setgidで実行した場合、および-Tスイッチによって陽に設定した場合に有効になる。汚染
チェック機能は、ユーザーを信頼できない人物とみなして、直接または間接的にユーザーから
与えられたすべてのデータに印をつける。もしそのようなデータが「危険性のある」走査
で使われると、このエラーが発生する。

だって。
ちょっと見えてきたわ。。。
0608デフォルトの名無しさんNGNG
ちなみに

line 60はやっぱり、

open( QMAIL , ">>$dot_qmail_path" ) || &Error_Print('09',$!);

だったよ。
0609デフォルトの名無しさんNGNG
>>607
いやだから最初から585がそう言ってるだろ...
0610デフォルトの名無しさんNGNG
Perlってホント汚いソースになるなぁ
0611600NGNG
>>609
そうねそうだよね。

>>610
俺が汚いだけだよ。
perlは汚くないよ
0612 ◆6o5lxU9TxQ NGNG
回答頂ければ幸いです。

ttp://www.saitaniya.jp/hide/perl06.html
のようにエラーが出てしまい、此処での対策はjperlで回避していますが
それ以外の方法ありましたらご教授下さい。
0613デフォルトの名無しさんNGNG
ソースやデータの文字コードは?
ActivePerlで正常に動作する組み合わせもあると思う。
0614デフォルトの名無しさんNGNG
5.8以降使えよ
0615デフォルトの名無しさんNGNG
5.8って
/あ[いう]/
なんて正規表現もOK?
0616デフォルトの名無しさんNGNG
5.8以降使えよ

と俺も思うが。

サブルーチンを一個作って解決する方法もある。
引数に$str1とかを取って、1バイトずつスキャンして
[の前に\を挿入するサブルーチン。

正規表現のパターンに変数を突っ込む前にそのサブルーチンで変換する。

$a =~ /&hoge($str1)/; とかできたっけ?

$a =~ s/(...)/&hoge($1)/; はできたような記憶がかすかにあるが。
0617デフォルトの名無しさんNGNG
UTF-8で書けばOKなんじゃないの?
0618デフォルトの名無しさんNGNG
>>615
それがUNICODEなら当然出来るでしょ。
0619デフォルトの名無しさんNGNG
UTF-8で書いて
先頭でuse utf8;すればできるよ
0620デフォルトの名無しさんNGNG
>>612
my $str1 = "サービス";
my $str2 = "サービス期間";
print "match\n" if( $str2 =~ /\Q$str1\E/);
0621デフォルトの名無しさんNGNG
perl6になったら正規表現もperl5から変化するんですか?
0622デフォルトの名無しさんNGNG
Shift-JISテキストを正しく扱う
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm

まあここでも最初に5.8以降使えよと書いてるわけだが
0623デフォルトの名無しさんNGNG
>>616
> サブルーチンを一個作って解決する方法もある。
sub quotemetaのことだね:-)
0624デフォルトの名無しさんNGNG
>>592
本自体は古いけど、内容は今でも余裕で使えるから買って良し。
0625 ◆6o5lxU9TxQ NGNG
回答して頂いた方々、ありがとうございました。
参考にして問題を回避してみます。

ソースはttp://www.saitaniya.jp/hide/perl06.htmlの問題と同じです。
文字コードはシフトJIS、Perl 5.8.*は 自分のサーバーなら出来ますが
無料スペースとなると難しいと思われます。
0626デフォルトの名無しさんNGNG
ども、明日あたり書店で目を通してきます。
文体とかが気に入るといいな。
0627デフォルトの名無しさんNGNG
jperlは入れられるのにPerl 5.8以降はだめってワケワカンネ
0628デフォルトの名無しさんNGNG
ワケワカンネ
のはおめーだよ
0629デフォルトの名無しさんNGNG
あっそ
0630デフォルトの名無しさんNGNG
>>625
>>620
0631デフォルトの名無しさんNGNG
5.8以前のPerlなんてまともにつかったことないんだけど、
変な作法覚える価値ある?use encodingがもう当たり前な
感じなんだけど。
0632デフォルトの名無しさんNGNG
むしろ5.8のユニコードまわりをおぼえる価値が
あるかどうか知りたい。ライブラリの対応状況も
いまいち見えないし、なんかめんどくさいだけ
のようにも見えるのだが(笑)
0633デフォルトの名無しさんNGNG
つーか動けばどっちでもいいよ
0634デフォルトの名無しさんNGNG
>>631
ほぼない。使うならjperl。
ただし、jperlのバグにはまるとけっこう困る。
0635デフォルトの名無しさんNGNG
5.8より前のバージョンしかインストールしていない奴はさっさとバージョンアップしろ。
0636デフォルトの名無しさんNGNG
5.8重い
0637デフォルトの名無しさんNGNG
3で充分
0638デフォルトの名無しさんNGNG
>>637
神(w
0639デフォルトの名無しさんNGNG
perlで
置換したい文字列「aaaaaa」
置換後の文字列「bbbbbb」
として、このとき偶数回目にマッチした文字列のみ
文字置換を行いたい場合どう書いたらいいですか?
0640黒死犬 ◆EgxBlf8nvc NGNG
my $match = "unko"; # 痴漢したい文字列

s/($match.*?)$match/${1}manko/go;
とか、

my $i = 0;
s/$match/($i++ % 2)? $match: "manko"/oge;
0641デフォルトの名無しさんNGNG
#!/usr/bin/perl
$|=1;
&abone;
sub abone {
print $$,"(oya)\n";
if( fork() ){}
else{print $$,"(child)\n";}
}
exit;

を実行するとPerlインタプリタが落ちて

#!/usr/bin/perl
$|=1;
print $$,"(oya)\n";
if( fork() ){}
else{print $$,"(child)\n";}
exit;

だと落ちないのは何でですか?

WinXP Pro SP1,ActivePerl 5.8.4
0642641NGNG
友人のMacOSXではエラーが出ませんでした。
ActivePerl特有の問題なのでしょうか
0643デフォルトの名無しさんNGNG
>>641
問題なし。

$ perl -v

This is perl, v5.8.5 built for cygwin-thread-multi-64int
0644641NGNG
もう一人の友人も同じ様な環境(Windows)なんですが、やはりエラーが出て強制終了されたと言ってました。

>perl -v

This is perl, v5.8.3 built for MSWin32-x86-multi-thread
(with 8 registered patches, see perl -V for more detail)
0645デフォルトの名無しさんNGNG
>>641
うちも一つ目は落ちる。
環境は WinXP Home + ActivePerl  v5.8.3
0646デフォルトの名無しさんNGNG
This is perl, v5.8.5 built for MSWin32-x86-multi-thread

うちのこれでエラーになるね。
Access ViolationだからPerlのバグだな。
0647641NGNG
これ、ActiveStateに報告した方が良いんでしょうか…
自分もサブルーチン内で子プロセスが作成できなくなると、不便ですし…
0648デフォルトの名無しさんNGNG
ActivePerlじゃなくてもエラーになるよ。
自分でビルドしたものでも。
0649641NGNG
#!/usr/bin/perl
$|=1;
&abone(); ←*
sub abone {
print $$,"(oya)\n";
if( fork() ){}
else{print $$,"(child)\n";}
}
exit;

としたら動きました
0650デフォルトの名無しさんNGNG
完全にバグだな。
0651デフォルトの名無しさんNGNG
/■\
( ´∀`)バグワショーイ
0652デフォルトの名無しさんNGNG
うちはバグらないですけど。
v5.8.5 built for i386-freebsd-64int
0653デフォルトの名無しさんNGNG
これってバッファオーバーフローじゃないよね?
0654デフォルトの名無しさんNGNG
ですが、なにか?
0655デフォルトの名無しさんNGNG
とほほのperl入門より
> ◆ fork()
> 子プロセスを生成し、親プロセスと子プロセスに分岐する。親プロセスの場合 $pid には子プロセスのIDが、
> 子プロセスの場合、$pid には 0 が返る。fork() をサポートしていないシステムもあり、
> 無理に使用すると perl が異常終了する。
0656デフォルトの名無しさんNGNG
サブルーチン内に含むか含まないかで、
バッファオーバーフローが発生するって問題じゃないのk
0657デフォルトの名無しさんNGNG
これを利用したセキュホまだ?
0658デフォルトの名無しさんNGNG
exploitまだー?チンチン
0659デフォルトの名無しさんNGNG
exploitってなにー?チンチン
0660デフォルトの名無しさんNGNG
書き込みがないので捕手
0661デフォルトの名無しさんNGNG
CGIでMDBから日付型のデータを拾うと
Win32::OLE::Variant=SCALAR(0x1d551dc)
と表示されます。これを日付として表示させるにはどうしたらいいでしょうか?

$conn = 'Provider=Microsoft.Jet.OLEDB.4.0;';
$conn .= 'Data Source=test.mdb';
$db = Win32::OLE->New('ADODB.Connection');
$db->Open($conn);
$rs = $db->Execute("SELECT * FROM AAA ;");
while (!$rs->EOF) {
print $rs->Fields('日付')->Value;
print $rs->Fields('名前')->Value;
$rs->MoveNext;
}
$rs->Close();
$db->Close();
exit;

-結果-
Win32::OLE::Variant=SCALAR(0x1d551dc)テスト君

Win2K,ActivePerl5.8.4,Access2000
0662デフォルトの名無しさんNGNG
>>661
黙ってCGI板いけ池沼
0663デフォルトの名無しさんNGNG
>>661
print ${ $rs->Fields('日付')->Value };

http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlref.html#Using_References

my $foo = 'foo';
$foo = bless \$foo, 'Foo';
print $foo; # Foo=SCALAR(0x10c5f50)
0664デフォルトの名無しさんNGNG
>>662
何言ってるんだ?
0665デフォルトの名無しさんNGNG
呼ばれたサブルーチンが自分自身の名前を得るにはどうすればよろしい?
0666デフォルトの名無しさんNGNG
>>665
$this_function = (caller(0))[3];

と、クックブックのP348に書いてあった。
0667デフォルトの名無しさんNGNG
0668デフォルトの名無しさんNGNG
>>666
ありがたう
0669661NGNG
663さん、レスありです。

use Win32::OLE::Variant;

上行のVariantを追加したらちゃんと表示できました。
0670デフォルトの名無しさんNGNG
すいません。

$pid = open(SAFR_WRITER, "|-"))

if($pid) {
  なんとか
} else {
  なんとか
}

でコレでfork出来ているんでしょうか?

よく
$pid = fork();
if( $pid ) {
  なんとか
} else {
  なんとか
}

はほとんど同じなんでしょうか?

forkの使用例ページでは後者がよく載っているのですが、
前者だとあまり解説がなくて・・・
0671670NGNG
すんません。

もうお分かりかもしれませんが、

defined ($pid = open(SAFE_WRITER, "-|")) or die "Can't fork: $!";
if($pid) {
  なんとか;
} else {
  なんとか;
}

でした。
0672デフォルトの名無しさんNGNG
forkよりthread使うのが正しいんじゃないの
0673デフォルトの名無しさんNGNG
fork は間違いなの?
0674デフォルトの名無しさんNGNG
Windowsで動かないじゃん
0675デフォルトの名無しさんNGNG
forkは一応ー動くよ。
シグナルがほとんどきかんし、いろいろと使いづらいが。
0676デフォルトの名無しさんNGNG
WIN32::APIを使ってC++で書いたDLLの読み込みをしたいのですが、
Perlの小技に載ってる例を見てもわかりませんでした。
hoge.dll:
...
class HOGEAPI Hhoge{
public:
Hhoge(void);
~Hhoge(void);
char* bumo;
HWND hwnd;
Ppiyo* piyo;
...
}

class HOGEAPI Ppiyo{
public:
Ppiyo(long aa, BYTE* bb);
~Ppiyo(void);
float piyoA(void);
float piyoB(void);
LPCTSTR piyoC(void);
...
}
例えばこういうDLLの場合、piyoA()等を使うにはどのようにしたらよろしいのでしょうか?
0677デフォルトの名無しさんNGNG
そのDLLにコア吐かせて、それをPerlで読み込んでゴニョゴニョ
でもいい?
0678デフォルトの名無しさんNGNG
>>677
レスありがとうございます。
その方法でできるようでしたら是非教えて頂きたいです。
ですがかなり頻繁に呼び出すので(秒間100回以上)
コアダンプを拾って・・・というのは処理的に厳しくはないでしょうか?
0679デフォルトの名無しさんNGNG
そんなコア産んだ覚えありません。
0680デフォルトの名無しさんNGNG
>>678
ネタにマジレスカコワルイ
0681デフォルトの名無しさんNGNG
Windows-ActivePerlでとBorland C++ Compiler 5.5を利用し、
Perlモジュールをインストールしようと考えています。

BC++は正しくインストールしました (念のためHelloWorldをコンパイルして実行した)
dmakeも正しくインストールしました
comfig.pmのnmakeをdmakeに書き換えました

しかし、perl Makefile.PL 〜 dmake を実行すると以下のようになって止まりました
ちなみに、Time-HiRes1.52をdmakeしたときの出力です。

C:\temp\Time-HiRes-1.52>dmake
cp HiRes.pm blib\lib\Time\HiRes.pm
C:\Perl\bin\perl.exe C:\Perl\lib\ExtUtils/xsubpp -typemap C:\Perl\lib\ExtUtils\
typemap -typemap typemap HiRes.xs > HiRes.xsc && C:\Perl\bin\perl.exe -MExtUtil
s::Command -e mv HiRes.xsc HiRes.c
bcc32 -c -nologo -Gf -W3 -MD -Zi -DNDEBUG -O1 -DWIN32 -D_CONSOLE -DNO_STR
ICT -DHAVE_DES_FCRYPT -DNO_HASH_SEED -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS
-DUSE_PERLIO -DPERL_MSVCRT_READFIX -MD -Zi -DNDEBUG -O1 -DVERSION=\"1.
52\" -DXS_VERSION=\"1.52\" "-IC:\Perl\lib\CORE" -DSELECT_IS_BROKEN -DATLEAS
TFIVEOHOHFIVE HiRes.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
エラー E2075: コマンドライン オプションの間違い : -Gf
dmake.exe: Error code 1, while making 'HiRes.obj'

bcc32に渡す引数が間違っているのはもちろん分かりますが、
Perl側設定のどこをどう直せばうまくいくのか見当がつきません。

設定すべき箇所について教えて頂けませんでしょうか?
後網一歩だと思うのですが......
0682デフォルトの名無しさんNGNG
>>681
OSを変える
0683デフォルトの名無しさんNGNG
Config.pmを書き換えることを知っているのに、そのファイルの中から-Gfを探そうとは思わないんだな。
0684デフォルトの名無しさんNGNG
ActivePerlってBCC++でモジュール作れたっけ?
どーせならBCC++でPerlを作ったら? それなら確実。
0685デフォルトの名無しさんNGNG
>>681
perl Makefile.PL で作られた Makefile を書き換える。
0686デフォルトの名無しさんNGNG
>>684
Cがひとつ余計
0687デフォルトの名無しさんNGNG
それはそれでええやん
0688デフォルトの名無しさんNGNG
CSVファイルの解析について質問があります。

今まで use Text::ParseWords を使ってましたが、
これでは解析出来ないデータが出てきまして、、
自分の頭では出来ませんでしたので、知恵をお借り出来ますでしょうか。

データの内容は以下の通りです。

- データはasciiのみ
- デリミタは , (カンマ)
- 数値以外のデータは " (ダブルクォーテーション)で挟まれる
- データ内に " ' , が含まれる、そして "" \" のようにエスケープされている訳ではない

# 自分で書いてみたモノの一部

push(@arr, $+) while $line =~ m{
&nbsp;&nbsp;"([^\"]+)",?
&nbsp;&nbsp;|([^,]+),?
&nbsp;&nbsp;|,
}gx;

自分で書いてみたものの、
上記のコードだと " が含まれるデータは解析出来ず、、orz
0689688NGNG
いつから & は & に変換されるようになったんだ、、、orz

push(@arr, $+) while $line =~ m{
 "([^\"]+)",?
 |([^,]+),?
 |,
}gx;
0690688NGNG
あぁぁぁああああ、、、、_| ̄|○変換の基準がワカラネー、、、

> いつから & は & amp; に変換されるようになったんだ、、、orz
0691デフォルトの名無しさんNGNG
インデントは全角スペースにしとけって
0692デフォルトの名無しさんNGNG
厨房板とかで試してから投稿しような
0693デフォルトの名無しさんNGNG
>>688
下の文字列はその仕様を満たすが、これを
どこで区切るのがお望みの挙動だい?

1,",",",",",2,",",",",",3

解析方法で悩むよりデータ構造を見直す事を勧める。
0694デフォルトの名無しさんNGNG
メタ文字自身のエスケープが仕様に盛り込まれてないデータ表現形式は糞。
0695ヽ(´ー`)ノ ◆.ogCuANUcE NGNG
> CSVファイルの解析について質問があります。
大人しく Text::CSV 使えよ(笑)。
0696デフォルトの名無しさんNGNG
>>692 ほんとごめんなさい。

>>693-694 仰る通り過ぎて返す言葉がございませぬ。
自分でやる時はもう絶対そうするんですけど、
今回は、、もうデータがあるんですよ、そこで困っている訳でございます。

中身を見た瞬間ガックリですよ、ハイ。

>>693
数値以外のデータは全て "(ダブルクォート)で挟まれるので、
そのデータだと↓ようになりますです。

1,""",""",""",""",""",2,""",""",""",""",""",3

で、こんな風に自分のコード改造してみました。
一応、手持ちのデータは解析出来るようになったので解決と言っても良いのですが、
折角なのでもっと良い方法があれば教えて下さいませ。

push(@arr, $+) while $line =~ m{
 "(.+?)",
 |"([^\"]+)",?
 |([^,]+),?
 |,
}gx;
0697688NGNG
>>696 は私です。

>>695 シマッタ、、それ知りませんでした、、orz、、使ってみます。
0698688NGNG
Text::CSV 使ってみました。
結果は Text::ParseWords と殆ど同じです。

やぱーり自分で書かないとダメみたいす(つд`;)
0699デフォルトの名無しさんNGNG
>>696
いや、違うって。
1,",",",",",2,",",",",",3 は >>688 の仕様を満たし、且つ
1 , ",",",",",2,",",","," , 3 とも、
1 , "," , "," , ",2," , "," , "," , 3 とも、
1 , ","," , ",",2," , ",","," , 3 とも、
如何様にでも解釈できる文字列だって事。君が挙げた以外にまだ
何らかのルールが存在していないとこれを機械的に切り分ける事は
不可能で、故にそれを説明してもらわなければ誰もコードに落とせ
ない。

>>696 のコードは、文字列中に " も , も含まれ *ない* という条件の
下でなら意図通り動くだろう。しかしそれは君の示した仕様とは異なり、
仕様を違えた回答は君の手元のデータを上手に切り分けられる確証
が無い。故に「もっと良く」と言われても答えようが無い。
0700デフォルトの名無しさんNGNG
でも、お客さんがつくったデータってこういうの多いんだよね。
よっぽどデータ量が多くなければ、editor上でinteractiveに
正規表現置換かけるやり方も検討したほうがいい。
0701デフォルトの名無しさんNGNG
それはメモ帳でできますか?
0702デフォルトの名無しさんNGNG
まず、

@a = split /,/, $hoge;

する。 validなデリミタで区切られたところならば、
たとえば、 $a[0]の末尾は 「"」 or [0-9]で、なおかつ、
$a[1]の先頭も同様。それ以外なら $a[0]と$a[1]を連結すると。

でも、セル(?) の中身が 「"...",1,2,3,"hogehoge"」だったら
原理的にどうやっても破綻するんだから、これはPerlの問題じゃなくて
そのヘッポコ元データを出してきた奴(客?)との交渉術の問題だろう。

理屈で攻めて飯でもおごらせろよって感じだなあ。
0703デフォルトの名無しさんNGNG
>>688
悲惨だなとしか言いようがない。
う〜ん、だるいけどとりあえず各行のカンマ区切りの配列を生成して
その中で要素数が最小のものを参考に他の列の配列を再定義するのはどうだろうか。
基本方針は>>702の方法で。

これなら>>702の言う 「"...",1,2,3,"hogehoge"」で分割される問題も
他の行も同様に分割されるか最小要素数にあわせて分割されないに違いない(と信じたい)。

まあこの方法の最大の問題は各行でもともと要素数が違う場合だな。

交渉がんがれw
0704デフォルトの名無しさんNGNG
まぁ、もう十分わかりやすいけど、もう一度書いておくと、

"...",1,2,3,"hogehoge"

というデータがあった場合、最初の要素は、

"..."

とも、

"...\",1,2,3,\"hogehoge"

とも解釈できてしまう、ということだね。これはプログラム側で
一意に解釈することは「不可能」。で、
>>703 のように無理やりルールを決めて処理するしかない。

それでも破綻するなら、一度元データから
きちんとしたデータを作るとよいかも。
(""中の"をエスケープして)
それだと既存のモジュールで処理できるので。
0705デフォルトの名無しさんNGNG
追記。データ変換は手作業になるけど。
0706688NGNG
>>699
あ、そう言う事でしたか。(読解力無くて申し訳ない..)

> 如何様にでも解釈できる文字列だって事。

いや、仰る通り、それなんですよ。
「如何様にでも解釈出来る文字列」が含まれるCSV(モドキ)データなので、
激しく困っているのでございます。
# これは拡張子がcsvなだけだ、絶対そうだ、中身は単なるtextだ、違うとは言わせない

> 何らかのルールが存在していないとこれを機械的に切り分ける事は不可能

やっぱそうですよね、、と言う事で考えを改めまして、
「万能」な全てにマッチする正規表現は不可能、ならば、
全fields数 x になるように split すりゃいいのだ(半壊

と言う事で、
1. Text::ParseWords で解読
2. 正規表現其の壱で解読
3. 正規表現其の弐で解読
4. 正規表現其の参で解読
5. split m#,#, $line して変な所は合体(壊

としてみました。
んで、どーにもならないデータは手動で置換してみた。
したらこんなの見つけた。

0,1,****"ab"cde,fgh"ijk,lmn"op",2,3

どうやってマッチさせろと、、
つか文字列は " で囲まれてるんじゃないのかよ、、orz
# これバグ、絶対そう、違うとは言わせない
0707688NGNG
皆様、本当にありがとうございます。沢山参考にさせて頂きました。

>>700 ちょと泪出てきました(つд`;)ワカッテクレテアリガトー
>>701 メモ帳以外をお勧めしまつ。# 個人的にはvi(ry
>>702 最終的にはソレ使わせて頂きました。ありがとうございます。

> でも、セル(?) の中身が 「"...",1,2,3,"hogehoge"」だったら

そーいう解読不能データ、約9000(全数は2マソホド)あったんです、、
文句言った時に1万ないから楽勝じゃん、なんてヌカしやがった上司にちょと殺意が、、

そしてこのデータ出してきた奴には、
- CSVデータならちゃんと , で区切れ
- データに , が含まれるなら " で囲め、なんでもかんでも囲むなゴルァ
- " で囲んだデータに " が含まれるなら "" or \" でエスケープしてコイ
- エスケープしたり " で囲むのメンドーとか抜かすなら \t で区切ってコイ、勿論データ内の \t は消せ
- 兎に角、定義を破るな、死んでも破るな、破るなら氏ね
と、和菓子で包んで突っ込んでみました。んで返事は「善処する」だそうです。
# あー多分私、どこかの政治屋さんに間違えてメールしたんですね
0708688NGNG
あ、最後に一つだけ質問です。
困ったと言うほどの事でもないのですが、

.(ピリオド)は \x2E
'(シングルクォート)は \x27
と記憶していたのですが、
. だと思われる所に \x85
' だと思われる所に \x92

と言う文字が入っているデータがあったのです。
こんな文字コードが含まれる事なんてあるのですか?
# asciiと呼ばれる文字にも二種類ある?!

少し調べてみたら usコード?の \x85 は ... <-コレで一文字
\x92 は '(シングルクォート)そのものを指し示しているコード表があったのですが、
どうも納得できるものではありませんでした。

何かご存知の方いらっしゃいましたら教えて下さい。
0709デフォルトの名無しさんNGNG
Excelに流しこんで、テキスト(タブ区切り)で吐き出すのは?
0710デフォルトの名無しさんNGNG
>>708
Perl と関係無いし。
http://pc5.2ch.net/test/read.cgi/tech/1092665695/
0711688NGNG
>>709
> Excelに流しこんで、テキスト(タブ区切り)で吐き出すのは?

Excelに読み込む時点でズレまくります。
そもそもfieldが256以上使えない時点で選択肢に挙がりませぬ。

>>710
あ、そうでした、申し訳ない。行って来ます。
0712デフォルトの名無しさんNGNG
<FORM method="POST" action="hogehoge">
<INPUT type="submit" name="Reload" value="再読込">
</FORM>
こんな感じでホームページに設置されているボタンを押すPerlスクリプトって作れないでしょうか。
0713デフォルトの名無しさんNGNG
>>712
>>1 板違い
0714デフォルトの名無しさんNGNG
すみません。移動します。
0715デフォルトの名無しさんNGNG
perl初心者です。

>dnaK
atgacgtgggttacgaccccatttagtagtcaaccgcagtga
atgaaattgggcagttga
>dnaJ
>gef
atgaagagataa
atgcgaggcgtcttccggattagaatcgataaaacagaatgggttaaagagagcgatataatagcggcgggtgcttga
atgggttaa
>nhaA
atgattatcagggcttag
atggcgcaaattcttctatag
atgattcgtgcggggtaa
>nhaR
というような出力結果から、
0716デフォルトの名無しさんNGNG
715の続きです
>dnaK
2
>dnaJ
0
>gef
3
>nhaA
3
>nhaR
0
という結果( つまり、「>名前」に対応させた、塩基配列の行の数)を出力し
たいのですが、プログラムがわかりません。どなたか教えてくださるかたがい
らっしゃるとうれいしです。よろしくお願いします。
0717デフォルトの名無しさんNGNG
>>715
マルチになってますがどうなさいますか?
0718デフォルトの名無しさんNGNG
返答ありがとうございます。マルチのままでなくて結構です。できれば
名前 数 の形がいいです。ほんとすみません。
0719デフォルトの名無しさんNGNG
>>715-716
http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9D%E3%82%B9%E3%83%88

#!/usr/bin/perl -- sum.p
my $i;
/^>(\w+)/ ? (print("$i\n$1 "), $i = 0) : $i++ while <>;
print $i;
__END__

prompt> cat ./data.txt | ./sum.p
0720デフォルトの名無しさんNGNG
Perl初心者です。
質問があります。

ある特定の文字■を文字列としての<\n>に置き換えようと、
s/■/\Q<\n>\E/g;
というタグで処理しようとしたんですが、
すべて
>
<
という二行に変わってしまいます。
アウトプットを<\n>にしたいのに…
どうしても\nとして処理されてしまうようで頭を抱えています。
なにかいい方法をご存じないでしょうか?
0721デフォルトの名無しさんNGNG
>>720
>なにかいい方法をご存じないでしょうか
perlの本を一冊読む
0722デフォルトの名無しさんNGNG
>>720
s/■/<\\n>/g;
0723デフォルトの名無しさんNGNG
>>719
マルチポストのことでしたか。すみませんでした。以後気をつけます。

簡潔なプログラムをありがとうございます。
本当に助かりました。
ありがとうございました。
0724720NGNG
>722

ありがとうございました!
\Q...\Eがきかなくてテンパってました。
本当に助かりました。
0725デフォルトの名無しさんNGNG
ちょっと質問です。
x.plというPerlプログラムを使って
a.txtをb.txtに変換するとき
必ずc.txtの内容をb.txtの冒頭に含めることってできますか?
できればx.plひとつかますだけでできるようにしたいんですけど。
よろしくお願いします。
0726デフォルトの名無しさんNGNG
1. b.txtを書き込みで開く。
2. c.txtを読み込みで開く。
3. c.txtのファイルハンドルから読んでb.txtへのファイルハンドルに書き出す。
(c.txtへのファイルハンドルはそのまま閉じずに)
4. a.txtを読み込みで開く。
5. a.txtから読んでは処理してb.txtに書き出す。

でいいんでわ?
0727726NGNG
誤: (c.txtへのファイルハンドルはそのまま閉じずに)
正: (b.txtへのファイルハンドルはそのまま閉じずに)
0728725NGNG
質問内容が曖昧ですいません。
% perl x.pl < a.txt > b.txt
とやって、b.txtをアウトプットするとき、
自動的にc.txtがb.txtの冒頭に含まれるようにするための
x.plに記述するタグを知りたいんです。
0729デフォルトの名無しさんNGNG
perl初心者です。

>dnaK
atgacgtgggttacgaccccatttagtagtcaaccgcagtgaatgaaattgggcagttga

>gef
atgaagagataaatgcgaggcgtcttccggattagaatcgataaaacagaatgggttaaagagagcgatataatagcggcgggtgcttgaatgggttaa

>nhaA
atgattatcagggcttagatggcgcaaattcttctatagatgattcgtgcggggtaa
という出力を、

0730デフォルトの名無しさんNGNG
>>729続きです。

>dnaK
atgacgtgggttacgaccccatttagtagtcaaccgcagtga
atgaaattgggcagttga

>gef
atgaagagataa
atgcgaggcgtcttccggattagaatcgataaaacagaatgggttaaagagagcgatataatagcggcgggtgcttga
atgggttaa

>nhaA
atgattatcagggcttag
atggcgcaaattcttctatag
atgattcgtgcggggtaa

のように開始コドンatg〜終止コドンtaa tag tgaまでで区切りたいのですが、
プログラムがわかりません。どなたか教えていただけるとうれしいです。
0731デフォルトの名無しさんNGNG
>>730続きです。
のように開始コドンatg〜終止コドンtaa tag tgaまでで区切りたいのですが、
プログラムがわかりません。どなたか教えていただけるとうれしいです。
よろしくお願いします。
0732デフォルトの名無しさんNGNG
>>729
マルチになってますがどうなさいますか?
0733ゆうき ◆MU2000.LWc NGNG
$keysin = "asdf1234";
if( $in_params[5] eq $keysin ){
  ・・・・
}else{
  ・・・・
}

どこかオカシイですか?(泣)
助けてクダサイ。。
0734デフォルトの名無しさんNGNG
>>733
asdf1234 じゃなくて asdf0123 じゃないの?
0735ゆうき ◆MU2000.LWc NGNG
ただゲームのネットランキング作りたいためにやってるヘタレです。
CGIは板違いでした。ごめんなさい。
>>734
いや、そこは何でもいいのです。
ソフト名とバージョンが入る変数?
もっと別のところかも。出直してきます。
0736デフォルトの名無しさんNGNG
>>728
タグってなんだ?新たな釣り?
0737ゆうき ◆MU2000.LWc NGNG
自己解決しました。
$in_paramsに改行コードが orz...
スレ汚してすんませんでした。
0738デフォルトの名無しさんNGNG
>>737
別に改行コードが入ってても問題ないだろ?>733は
「Perlで配列の要素数を取り出すにはどうすればいいですか?」
という質問だと思ったんだが。
質問書いてないってことは 貴様らが質問を予想しろ ってことだろ。
0739デフォルトの名無しさんNGNG
>>730
$enki = q/atgattatcagggcttagatggcgcaaattcttctatagatgattcgtgcggggtaa/;
@part = $enki =~ /((?:atg)(?:\w{3})*?(?:taa|tag|tga)(?=atg|$))/g;
print $_, qq/\n/ for @part;

ほれ。
Perlに感謝してこれからはPerlerになりたまへ
0740デフォルトの名無しさんNGNG
最後の (?=atg|$) は冗長だった予感
0741デフォルトの名無しさんNGNG
DESの仕様が載っているサイト教えて下さい
0742デフォルトの名無しさんNGNG
>>741
ググりゃすぐ出てくるだろ
http://www.itl.nist.gov/fipspubs/fip46-2.htm 
0743デフォルトの名無しさんNGNG
DEATHの仕様が載っているサイト教えて下さい
0744デフォルトの名無しさんNGNG
>>741
wikipediaりゃすぐ出てくるだろ
http://en.wikipedia.org/wiki/Death
0745デフォルトの名無しさんNGNG
>>744
英語読めないので・・・・・
オンドゥル語に訳してもらえませんか?
0746デフォルトの名無しさんNGNG
>>745
そのレスをオンドゥル語で書いてください。
0747デフォルトの名無しさんNGNG
>>744
エイゴヨベナイドディ・・・・・
オンドゥヅゴルャグジデボラエバゼンカ?

これでどうでしょうか?
0748725NGNG
>726

解決しました。
x.plの冒頭部分に、

open(IN, "c.txt");
print while (<IN>);
close(IN);
print "\n";

これで問題なくb.txtの冒頭にc.txtの内容を含めることができました。
示唆していただきありがとうございました。
0749デフォルトの名無しさんNGNG
>>747
http://users72.psychedance.com/ondul/?url=http%3A%2F%2Fwww.excite.co.jp%2Fworld%2Fenglish%2Fweb%2Fbody%2F%3Fwb_url%3Dhttp%253A%252F%252Fen.wikipedia.org%252Fwiki%252FDeath&z2h=1

0750デフォルトの名無しさんNGNG
>>744
つまらん
0751デフォルトの名無しさんNGNG
Visual Perl 使っている人いますか?
使ってみようと思ってるけど情報が少なすぎ。。
具具っても英語わからんし。
ttp://www.activestate.com/Products/Visual_Perl/
0752デフォルトの名無しさんNGNG
俺が今から入れてみるよ。
0753デフォルトの名無しさんNGNG
>>256のような事を、連想配列のキーと値ではなく、二つの配列を用意して行いたい
のですが、良い記述が思い当たりません。それぞれの値を連想配列に代入する
以外に良い方法は無いものでしょうか・・・?
0754デフォルトの名無しさんNGNG
>>753
my @key = sort { $hoge{$b} <=> $hoge{$a} } (keys %hoge);
my @value = @hoge{@key};
0755デフォルトの名無しさんNGNG
>>753
したい事がよく分からんがこういう事?

my @value = qw(blue green indigo orange red vioret yellow);
my @order = (2, 3, 1, 5, 6, 0, 4);
print join ', ', @value[ sort { $order[$a] <=> $order[$b] } 0..$#value ];
0756デフォルトの名無しさんNGNG
>>751
とりあえず、新規プロジェクトのテンプレートとして用意されているもの
・Simple Project
・Empty Project
・Control Library
・Managed Dll Library
・Executable
・Managed Exe
・Tray Application
・Windows Service
0757デフォルトの名無しさんNGNG
CGI Projectとか無いのか
0758デフォルトの名無しさんNGNG
ActivePerl 5.8.4ではUnicode独自文字を含むファイル名は開けないのでしょうか。
5.8.1までは${^WIDE_SYSTEM_CALLS}とか-Cオプションがあったのですが…
0759デフォルトの名無しさんNGNG
どなたか教えてください。
perl 5.6 で動いていたperlのスクリプトが5.8で動かなくなってしまいました。

my %$test = {};

という宣言がエラーになってしまうのです。
これを5.8で動くようにすればどのような宣言にすればいいのでしょうか。


書いたプログラマがいなくなってしまい、自力でリファレンスのことを
一応調べてみましたが、日頃php使いのためよく理解できず困っています。

識者の方どうか力をお貸しください
0760デフォルトの名無しさんNGNG
>>759
my $test;
%$test = {};

でいいと思われ。
0761デフォルトの名無しさんNGNG
でも、%$testに空の無名ハッシュを代入するのって意味があんのかな?
エラーにはならんけどさ。
0762デフォルトの名無しさんNGNG
my %$test = {};
↑ハッシュにスカラー代入してる時点でなんか変じゃない??

my $test = {};
の間違いでは??
0763デフォルトの名無しさんNGNG
%$test = ({}=>undef);

と同じことではある。こんなことがしたいのか?
%$testを空のハッシュにするつもりで間違えてる
ような気はするが、keys %$testとかとらなきゃ
それなりに動くから気がつかないこともあるかな。
0764759NGNG
ありがとうございます。

>> 760さん
my $test;
%$test = {};

>> 763さん
my %$test = ({}=>undef);

ではそれぞれエラーがとまりましたが、プログラムは正常に動きませんでした。

この変数は宣言された後、
my %$test = {};
$test = ("hoge"=>"aaa");
のような使われ方をしていて、 %$ という表現は
変数宣言のところにしか出てこないようです。

0765デフォルトの名無しさんNGNG
>$test = ("hoge"=>"aaa");
多分、文法ミスじゃないかと。

$test = { hoge => 'aaa' } とか。。。
0766759NGNG
すいません。

$test = {__TEST__ => "test"};
のような書き方です。
上記の変数宣言をコメントアウトすると正常に動かなくなってしまいます。
0767デフォルトの名無しさんNGNG
perl初心者です。どなたか教えていただけるとうれしいです。
ファイル1            ファイル2
a 1              b 3 
b 3 c 5
c 4 d 7
f 2 g 1
g 0 h 5
h 6 i 3
(下に続く) (下に続く)
という二つのファイルがあるのですが、これら二つのファイルを参照させて、

出力ファイル            
b 3  3
c 4 5
g 0 1
h 6 5
(下に続く)
のように、その二つのファイルで名前(この場合アルファベット)が一致する
ものの数字を並べて表示するというようなプログラムがわかりません。
どなたかよろしくお願いします。
0768デフォルトの名無しさんNGNG
うまくでなかったのでもう一度貼ります。
perl初心者です。どなたか教えていただけるとうれしいです。
ファイル1          
a 1               
b 3              
c 4              
f 2              
g 0
h 6
(下に続く)
ファイル2
b 3 
c 5
d 7
g 1
h 5
i 3
下に続く

という二つのファイルがあるのですが、これら二つのファイルを参照させて、

出力ファイル            
b 3 3
c 4 5
g 0 1
h 6 5
(下に続く)
のように、その二つのファイルで名前(この場合アルファベット)が一致する
ものの数字を並べて表示するというようなプログラムがわかりません。
どなたかよろしくお願いします。
0769デフォルトの名無しさんNGNG
データ構造つくることかね。。。
{
  a => [ 3, 2],
  b => [ 1 ],
  c => [ 4, 5 ],
}
のような・・・
0770デフォルトの名無しさんNGNG
use Data::Dumper;
my %alpha;
while(<>){
s/ / /g;#全角スペース区切り対策
my %list = split;
my ($key, $value);
while(($key, $value) = each %list){
push @{ $alpha{ $key }}, $value;
}
}

print Dumper(\%alpha);
0771デフォルトの名無しさんNGNG
入力ファイル形式変わってたのか。。。
じゃ、こっちと
use Data::Dumper;
my %alpha;
while(<>){
  s/ / /g;#全角スペース区切り対策
  my ($key, $value) = split;
  push @{$alpha{ $key }}, $value;
}

print Dumper(\%alpha);
0772デフォルトの名無しさんNGNG
ttp://www11.tok2.com/home2/whitedragon01/upload/up.htm

粗大ごみ不法投棄させてもらいますね
0773デフォルトの名無しさんNGNG
>>765
>$test = { hoge => 'aaa' } とか。。。
これだけなら
my $test = {};
でOKだと思うけど・・・

これでも動かないんじゃ↑の代入文以外で$testが使われてる部分晒してもらえないと分からんね
0774デフォルトの名無しさんNGNG
>>768

>>771 の出力を >>768 のようにしたいなら、最後の行を

print map { "$_ ".join(' ', @{$alpha{$_}})."\n" } sort grep { @{$alpha{$_}}>=2 } keys %alpha;

>>771 の使い方は、コマンドラインで

perl 771.pl ファイル1 ファイル2
0775デフォルトの名無しさんNGNG
>>774
本当に丁寧にありがとうございました。
なかなかできないでいたのを、出力の形式まで
そろえていただいて感動しました。


0776デフォルトの名無しさんNGNG
perl初心者です。
いつもこの板の方々には大変感謝しています。
またわからないところがあったので質問します。

>fixA
atggacgcgttaatggctaactcataa
atgggtattcaataa
atgttatgttatgttgcgagtaaaaaaatagcatctgactttcaatattggtga
atgttatgttgcgagtaa
atgttgcgagtaaaaaaatag
>yabH
atgacaggtatgataatgcaaattataggcgatgtcccacaattgaccgcagccggaaaacggtaa
atgtcccacaattga
>imp
atgccgtgcctaacaccactgacgctattcggacaggattaa
atgacgagtacgttagtctctgaccgtttgtcacgcgcaacgttaccgatgatggaacaataa
>araC
atggacaattggtttcttctctga
atggcgggagtatga
というファイルを

0777デフォルトの名無しさんNGNG
>araC
atggacaattggtttcttctctga
atggcgggagtatga
というファイルを
>fixA_1
atggacgcgttaatggctaactcataa
>fixA_2
atgggtattcaataa
>fixA_3
atgttatgttatgttgcgagtaaaaaaatagcatctgactttcaatattggtga
>fixA_4
atgttatgttgcgagtaa
>fixA_5
atgttgcgagtaaaaaaatag
>yabH_1
atgacaggtatgataatgcaaattataggcgatgtcccacaattgaccgcagccggaaaacggtaa
>yabH_2
atgtcccacaattga
>imp_1
atgccgtgcctaacaccactgacgctattcggacaggattaa
>imp_2
atgacgagtacgttagtctctgaccgtttgtcacgcgcaacgttaccgatgatggaacaataa
>araC_1
atggacaattggtttcttctctga
>araC_2
atggcgggagtatga

というように同じ名前のものでも、行ごとに名前を変えて
(1〜順に名前をつけていく)表示するにはどうしたらいいのでしょうか。
0778デフォルトの名無しさんNGNG
>yabH_2
atgtcccacaattga
>imp_1
atgccgtgcctaacaccactgacgctattcggacaggattaa
>imp_2
atgacgagtacgttagtctctgaccgtttgtcacgcgcaacgttaccgatgatggaacaataa
>araC_1
atggacaattggtttcttctctga
>araC_2
atggcgggagtatga
というように同じ名前のものでも、行ごとに名前を変えて
(1〜順に名前をつけていく)表示するにはどうしたらいいのでしょうか。
0779デフォルトの名無しさんNGNG
>>776
>>778
>>779です。
見にくいと思ったので続けて貼りました。
0780758NGNG
orz
やっぱり-Cが"リサイクル"されてしまうほど
誰も使ってなかった機能なんでしょうか
0781デフォルトの名無しさんNGNG
my ($pre, $num);
while(<>){
  if(m/^>(\w+)/){
    $pre = $1;
    $num = 1;
  } else {
    print ">${pre}_$num\n";
    print ;
    $num++;
  }
}
0782デフォルトの名無しさんNGNG
>>779
本買って自分でやれ
0783779NGNG
チッ
0784デフォルトの名無しさんNGNG
実践 バイオインフォマティクス -ゲノム研究のためのコンピュータスキル
http://www.amazon.co.jp/exec/obidos/ASIN/4873110688

こういう本買うとやりかた載ってンのかなあ?
本屋で見かけたことあるけど、立ち読みすらしたことないんで俺はわからんが。
0785デフォルトの名無しさんNGNG
>>781
ありがとうございました。
本当に勉強になります。
>>782
はい、勉強します。
0786779NGNG
783は自分ではありません。
プログラムを教えてくださる方々には本当に感謝しています。
でもあまり聞きすぎるのもあれなので、しばらく自分で勉強します。
また今度よろしくお願いします。
0787デフォルトの名無しさんNGNG
>>786
夏休みの宿題が間に合わないと諦めたらしい。

とかいう煽りでOK?
0788デフォルトの名無しさんNGNG
print <<"END";
...
END

と終端文字列を記述すると何も表示されないのに、

print "...";
print <<"END";
...
END

とすると表示されます。(print"...";の内容は表示されません)
これは何故なんでしょうか??
0789デフォルトの名無しさんNGNG
[ test.pl ]
#!perl
print <<"END";
...
END
---------------------------------------
>test.pl
...


>perl -v

This is perl, v5.8.4 built for MSWin32-x86-multi-thread
0790789NGNG
思いっきり的外してたorz..

確かにエラーになるね

Can't find string terminator "END" anywhere before EOF at D:\Lab\27\test.pl line3.
0791デフォルトの名無しさんNGNG
ENDという名前がまずいんだろうか・・・。
0792デフォルトの名無しさんNGNG
わからん。
0793デフォルトの名無しさんNGNG
BEGINとENDはawkエミュやら-n/-pオプションなんかでも
使われる特殊な語なのでいかんのかも。
0794デフォルトの名無しさんNGNG
Perlにも BEGINブロックやらENDブロックやらがあるわけだが...

おまいら適当な事言い過ぎ
0795デフォルトの名無しさんNGNG
質問があります。

s/([^:])“/<k-70>$1<k\$>“/g;

s/”([^\n])/<k-70>”<k\$>$1/g;

というように後方参照させた場合、
日本語をマッチするときに文字化けします。
これはJPerlやJcodeなどを使わないといけないんでしょうか。
0796デフォルトの名無しさんNGNG
>>788-791
END の後に余分なスペースが入ってる。

ただしく実行できるよ。
0797デフォルトの名無しさんNGNG
>>795
うん、文字化けするね・・・。
Perl 5.8 なら、use utf8; で OK なんだけど。
0798デフォルトの名無しさんNGNG
>>795
文字の正規表現
http://www.din.or.jp/~ohzaki/perl.htm#Character

ここを見れ。日本語1文字ずつにマッチさせることも可能。
0799デフォルトの名無しさんNGNG
>>796
        ( ゚д゚)
        (| y |)

        (∩д∩)ゴシゴシ
         | y |

        (;゚д゚)
        (| y |)

        (∩д∩)ゴシゴシ
         | y |
          _, ._
        (;゚ Д゚) …?!
        (| y |)
0800デフォルトの名無しさんNGNG
>>799
どした? Perl 5.6 でも 5.8 でも正しく実行されますが。

a.pl
---
print <<"END";
...
END

perl a.pl
...

perl -cw a.pl
a.pl syntax OK

perl -v
This is perl, v5.6.1 built for i386-linux
perl -v
This is perl, v5.8.4 built for MSWin32-x86-multi-thread
0801デフォルトの名無しさんNGNG
どこに空白が入っているというのか小一時間問いつめたい。
0802デフォルトの名無しさんNGNG
> 0 23:31<dd>print <<"END";<br>...<br>END<br><br>と終端文字列を記述す

空白なんかない
0803799NGNG
#!perl
print "...";
print <<"END";
...
END
↑ここに改行入れるとうまく動いた
0804デフォルトの名無しさんNGNG
>>801-802
書き方がまずかったようで。スマソ。

2ch に貼り付けられたコードじゃなくて、貼り付ける前の
コードのことです。
>>790 のようなエラーになるのは、
END
という行が見つからないということだから、ソース中に
そういう行がないという意味。

コードを見てみると正しく書かれているので、
質問者の環境でエラーが起こるということは、
空白文字(改行等)の関係では、と思ったわけです。
0805デフォルトの名無しさんNGNG
漏れは vi 使いで Emacs でも (setq require-final-newline t) してるので、
こりゃ絶対気づけないエラーだな。
0806デフォルトの名無しさんNGNG
行頭の空白を除去する処理が必要なのですが、具体例として

while(<ARGV>) {
 s/^[\t\s]+//;
 print;
}

このようなスクリプトを想定した場合、
空行 (改行だけの行) を処理すると、改行コード(\n)まで消えてしまいます。
いちおう今は応急措置として、
s/^[\t\s]+(.*)\n/$1\n/;
のようにしていますが、なぜ改行まで消えてしまうのでしょうか?
0807デフォルトの名無しさんNGNG
>>806
\sは、改行にもマッチするから
0808デフォルトの名無しさんNGNG
>>806
短く書くなら、\s をスペースにかえて、

s/^[\t ]+//;

でOKかな。
0809デフォルトの名無しさんNGNG
ちなみに、\s がマッチするのは、スペース、\t、\n の3つね。
0810デフォルトの名無しさんNGNG
ヒアドキュメントを使って次の用に記述したいのですがうまく出来ません。

if($flag==1){
 $text = <<"TEXT";
  XXXXXXXXXX
  YYYYYYYYYY
 TEXT
}else{
 $text = <<"TEXT";
  AAAAAAAA
  BBBBBBBBB
 TEXT
}
print $text;

諦めて次のようにすると実行できるのですが出力結果にタブが付加されてしまいます。

if($flag==1){
 $text = <<"TEXT";
  XXXXXXXXXX
  YYYYYYYYYY
TEXT
}else{
 $text = <<"TEXT";
  AAAAAAAA
  BBBBBBBBB
TEXT
}
print $text;

ソースコード内での可読性を維持しつつ出力に余分なタブを付けないようにすることはできないでしょうか?
できれば、ヒアドキュメントの終端にタブを使う方法はないでしょうか?
0811デフォルトの名無しさんNGNG
open(IN,"<$datafile");
@lines = <IN>;
close(IN);
↓
@linesをデータ加工
↓
ファイルロック
ファイルの書き込み
ファイルロック解除っていうやり方はどこか問題ありますか?
0812デフォルトの名無しさんNGNG
ある
0813デフォルトの名無しさんNGNG
>>810
それ、ラクダ本やクックブックに載ってたな。。
0814デフォルトの名無しさんNGNG
>>811
1行目の $datafile と ファイル書き込みのファイルが同一ファイルなら、
最初の読み込みのところでもファイルロックしておくべし。
0815デフォルトの名無しさんNGNG
>>813
ラクダに載ってたっけ?どのあたりかな?
ちなみに俺はそんな場所でヒアドキュメント使うな派
0816デフォルトの名無しさんNGNG
>>809
\f もマッチするよ。
0817デフォルトの名無しさんNGNG
>>813
ラクダ本とクック本に載ってるんですね、情報ありがとうございます。調べてみます。

>>815
それはそうなんですけど、サブルーチンの中とかループの中に記述したくなるときとか多々あるんですよ、これが。
0818デフォルトの名無しさんNGNG
MySQL + Perl
use DBI な状況で、

例えば
$sth = $dbh->prepare(
"INSERT INTO `sample1`(t1,t2,t3,t4,t5,t6,t7,t8,t9,t10) VALUES (?,?,?,?,?,?,?,?,?,?)"
);
で、row(s)の数は変化します。
(動的に prepare 内の command を生成しています)

$sth->execute
で配列を insert したいのですが、可能でしょうか?
0819デフォルトの名無しさんNGNG
Visual Perlの情報追加。
エディタ上で間違いを指摘してくれます。

$a = "abcdefg";
$a =~ s/a/A/;
$a ~= s/b/B/;
~~~~~~~~~~~~~~
print $a;

こんな感じに赤の波線で。
0820デフォルトの名無しさんNGNG
それDBの設計が間違ってますよ。
0821デフォルトの名無しさんNGNG
>>820
いえいえ、動的にrow(s)が変化するのはデータによって、入力テーブルも変化するためです。
0822デフォルトの名無しさんNGNG
>>810
ち、すでに終わってたか。
出所はクックブック。

sub hd($){
 my $text = shift;
 my($tab) = $text =~ /^(\t+)/;
 $text =~ s/^$tab//gm;
 $text;
}

if($flag==1){
 $text = hd<<" TEXT";
  XXXXXXXXXX
  YYYYYYYYYY
 TEXT
}else{
 $text = hd<<" TEXT";
  AAAAAAAAA
  BBBBBBBBB
 TEXT
}
print $text;
0823818NGNG
>>818
ただいま本を買って読みました。bind_paramを誤解してました。簡単にできました。
0824デフォルトの名無しさんNGNG
>>809
\r もマッチするよ。
0825デフォルトの名無しさんNGNG
>>816 >>824
ハァ?
0826デフォルトの名無しさんNGNG
略記号  文字クラス    意味
\w     [a-zA-Z0-9_]   小文字、大文字のアルファベット、数字、下線
\W    [^a-zA-Z0-9_]   小文字、大文字のアルファベット、数字、下線以外
\s     [\r\t\n\f]     空白文字(復帰、タブ、改行、フォームフィールド)
\S     [^\r\t\n\f]     空白文字(復帰、タブ、改行、フォームフィールド)以外
\d     [0-9]         数字
\D     [^0-9]        数字以外

=糸冬=
0827デフォルトの名無しさんNGNG
http://www.kent-web.com/perl/chap7.html
\s スペース。[ \r\t\n\f] に同じ。
0828デフォルトの名無しさんNGNG
>>813 です。
s/ラクダ本や/ラクダ本か/
でした。。
0829デフォルトの名無しさんNGNG
>>822 の、サブルーチンでないやつもやったよね。
ヒアドキュメントの後に置換を書く方法の。
下は、今適当に考えたもの。

$_ = <<" END", s/^\t//gm;
 aa
 bb
 END
print $_;

結果:
aa
bb
0830デフォルトの名無しさんNGNG
>>825
0831デフォルトの名無しさんNGNG
>>829
こうすると$_に依存しなくなるね。

($doc = <<" END")=~s/^\t//gm;
 aa
 bb
 END
print $doc;
0832デフォルトの名無しさんNGNG
なんとなく、そこまでしてインデントしたいか?という気もしてこなくはなかったり。
0833デフォルトの名無しさんNGNG
ヒアドキュメントなんか面倒だからqq使ってるんだけど、
qqの場合はインデントはどうにかできないの?

if(1)
{
 print qq
 (
  あいうえお
  かきくけこ
  さしすせそ
 );
}
0834デフォルトの名無しさんNGNG
>>825
0835デフォルトの名無しさんNGNG
>>797
>>798

ありがとうございます。
早速試してみたいと思います。
0836デフォルトの名無しさんNGNG
>>833
>>822のサブルーチンを使えばいいんじゃないの。
その場合、"(" と ")" に続く空白と改行はいらないだろうから
こうすればいいんじゃない。

sub hd($){
 my $text = shift;
 $text =~ s/^[ \t]*\n//;
 $text =~ s/[ \t]+$//;
 my($tab) = $text =~ /^(\t+)/;
 $text =~ s/^$tab//gm;
 $text;
}

if(1)
{
 print hd qq
 (
  あいうえお
  かきくけこ
  さしすせそ
 );
}

0837デフォルトの名無しさんNGNG
PARで、複数のモジュールを含むには、どんな指定したらいいの?
0838デフォルトの名無しさんNGNG
>>837
You may specify -M multiple times.

とあるから、-M ... を必要な回数書けばOKかも。
0839837NGNG
>>838
激しくありがとう
0840デフォルトの名無しさんNGNG
>>831
おお、なるほど。カンマも使用しないし、こっちの方がいいね。
0841デフォルトの名無しさんNGNG
"漏れってバカ" =~ /バカ/;
はどうやったらマッチするの?
0842デフォルトの名無しさんNGNG
>>795, >>835

>>797 >>798 です。
せっかくなんで、もう少し詳しく書きます。

Perl で日本語を1文字ずつ処理するのは、ちょっとテクニックが
必要なんだよね。
自分が用いた方法は、

1. 文字コードを euc-jp に変換
2. euc の文字コードにマッチする正規表現を使って、1文字ずつ切り出し

というもの。(Shift_JIS でもできるかも)。

次の例では、$name に入っている文字列を、半角換算で30文字
(全部全角だと15文字)に切り詰めています。

# EUCの文字
my $c = "([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE])";

Jcode::convert(\$name, 'euc', 'sjis');
@_ = $name =~ /$c/g;   # 1文字ずつに分割
$name = join('', @_[0..14 + (join('', @_[0..14]) =~ tr/[\x00-\x7F]//)/2]);
Jcode::convert(\$name, 'sjis', 'euc');
0843デフォルトの名無しさんNGNG
続き

$name = の行が、1行に詰め込みすぎて見にくいんですけど、
全角・半角関係なく15文字に切り詰める処理なら

$name = join('', @_[0..14]);

で OK です。

日本語を正しく切り出すには、このように EUC 文字コードにマッチする
正規表現(ここでは $c に代入)を使って、. (ドット)等の代わりに
使うとよいですよ。


---
ちなみに自分のオリジナルのコードでは、上のコードの
@_ = $name ... の行は

@_ = $name =~ /([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE])/g;

となっていて、変数 $c を使わずにすませています。
0844デフォルトの名無しさんNGNG
>>841
それでマッチしてますよ。(マジレス。。)

print "漏れってバカ" =~ /バカ/;

結果:
1
0845デフォルトの名無しさんNGNG
if ("漏れってバカ" =~ /バカ/) {
  print "バカで悪かったナ(`ω´)";
}
0846デフォルトの名無しさんNGNG
>>814
読み込みから書き出しまでを1つのロックの中で実行しないと

Aが読み出し
Bが読み出し
Aが更新して書き込み
Bが更新して書き込み

という順序で実行される可能性があって、このときAが行った
更新が失われてしまう。
0847デフォルトの名無しさんNGNG
flockを使ってファイルロックをする場合はファイルを読み出す前にファイルロックはできないんですか?

open(OUT,"+<test.dat");
@lines=<OUT>;#データの取り出し
flock(OUT,2);#ファイルロック
truncate(OUT,0);
seek(OUT,0,0);
push(@lines,"aaa\n");
print OUT "@lines";
close(OUT);

このようにファイルロックをするまえにopenしているんですけど
普通はファイルロックしてからopenするんじゃないんですか?
0848デフォルトの名無しさんNGNG
>>847
できるできないの前に意味あんの?
つーかflockのタイミングおかしいですよ!
0849デフォルトの名無しさんNGNG
flockはopenされた状態のファイルハンドルにしかできない。
openされていれば読み出す前にやるのは何の問題もない。

もっともロックするファイルと実際に読み書きを行う
ファイルが同じでなければならないということもない。

何のためにロックするのか、flockで何ができるのかと
いったことをもう一度勉強し直した方がいい気がする。
0850デフォルトの名無しさんNGNG
実際にデータを読み書きするファイルとは別に、
トランザクションロックするためだけのファイルを用意しといてそっちを flock する、
ってのはよくある手な気がするんですが、どうなんでしょうねえ。
0851デフォルトの名無しさんNGNG
じゃあflock以外のファイルロック方法は普通はopenするまえにファイルロックするんですか?
初心者なんでスマソ
0852デフォルトの名無しさんNGNG
>>851
なにが普通かはつくりによるとしかいいようがない。

1つのファイルの内容を直接書き換えて更新し、ロックファイルを
別に用意しないで同じファイルですまそうとすれば、openした直後
にflockして読み出して更新という手順になるだろう。

ファイル更新中にシステムが落っこちると消えてしまうのを嫌って
新しい内容のファイルを別につくってできてから置き換えるという
ような構造だと、古い内容のファイル開く前に別にロックファイル
用意してそっちをflockしてからはじめるのが普通かな。

0853デフォルトの名無しさんNGNG
あるひとつのプロセスだけが、そのファイルを操作できるようにするという手もあるわな。
0854デフォルトの名無しさんNGNG
ひとはそれを「データベース」とよぶ・・・
0855デフォルトの名無しさんNGNG
排他処理
0856デフォルトの名無しさんNGNG
排他処理にはいろいろ方法があるからね。
0857デフォルトの名無しさんNGNG
正露丸でも詰めとけ>歯痛処理
0858デフォルトの名無しさんNGNG
今は糖衣錠ばっかじゃねーの
0859851NGNG
すいません
排泄処理ってなんですか?
ふざけないんできちんと教えてください
0860デフォルトの名無しさんNGNG
>>859
>> 排泄
痔を間違えてるよ。俺もだけど。
0861デフォルトの名無しさんNGNG
【Perl】ファイルロック(排他処理)について語ろう
http://pc5.2ch.net/test/read.cgi/php/1024795138/
0862デフォルトの名無しさんNGNG
システムに頼む普通のflockが一番信頼性が高いのは言うまでも無いんですけどね
それでも怖いならDB使えや
0863デフォルトの名無しさんNGNG
【Perl】アァナルロック(排泄処理)について語ろう
0864デフォルトの名無しさんNGNG
>>860
読みも間違えてる気が…。釣り?
×ハイセツ → ○ハイタ
0865デフォルトの名無しさんNGNG
字が違えば読みも違うのはあたりまえじゃん・・・
0866795NGNG
>>797 >>798

>>842 >>843で教えていただいた方法だと、
僕の環境ではエラーが出てしまいます。
幸い開発・実行ともにPerl5.8が使用出来るので、
>>797で示唆していただいたようにUTF-8を使ってみました。

#! /usr/local/bin/perl
use utf8;
use Encode;
binmode STDIN, ':encoding(shiftjis)';
my $buffer;
read STDIN, $buffer, $content_length;

while (<STDIN>) {

s/([^:])“/<k-70>$1<k\$>“/g;

s/”([^\n])/<k-70>”<k\$>$1/g;

binmode STDOUT, ":encoding(shiftjis)";

print;

}

これで問題なく処理できました。
ありがとうございました。
0867753NGNG
>>754
>>755
遅レスですみません。どうもありがとうございます。短く書こうと思えば
ちゃんと書けるのですね・・・精進しますorz
0868デフォルトの名無しさんNGNG
Perl.NETについて語りませんか?
つーか、誰か使ってる人いない?
0869デフォルトの名無しさんNGNG
under construction, please check back soon.
0870デフォルトの名無しさんNGNG
>>868
語ってよ。
あんたのレスで使えそうだったら入れてみる。
0871デフォルトの名無しさんNGNG
>>868
どこで配ってるの?
0872デフォルトの名無しさんNGNG
>>871
ActiveState
0873デフォルトの名無しさんNGNG
>>868にPerl.NETのうんちくを書くコトを許可する!


ちなみに870じゃない>俺
0874デフォルトの名無しさんNGNG
【Perl.NETのウンチク】
Perl.NETはPerlのコードをC#のコードに変換するだけらしい。
0875デフォルトの名無しさんNGNG
C#もJavaも書けるからいいや
0876デフォルトの名無しさんNGNG
>>874
MSILじゃなくてC#のソースコード?
0877デフォルトの名無しさんNGNG
MSILに決まってんじゃんか
あんたアフォでつか?
0878デフォルトの名無しさんNGNG
で?ってゆう
0879デフォルトの名無しさんNGNG
MSILに変換するんだったらPerl.NETに限った話じゃないじゃん
0880デフォルトの名無しさんNGNG
CGI::Session3.95をCPANからダウンロードしてきて、
スクリプトに組み込んだのですが、下の様なエラーがでます。

Can't locate auto/CGI/Session/File/expire.al in @INC (@INC contains: ./lib c:/usr/lib c:/usr/site/lib .) at lib/CGI/Session.pm line 258

クッキーに保存したセッションIDをCGI::Sessionのnewメソッドに与えた時のみ起こります。
セッション生成時(第二引数がundefの時)には起こりません。

対処法ご存じの方、おられましたらアドバイスをお願いします。<(_ _)>
0881880NGNG
>>1さんの書き込みも読まずに、CGIの質問をしてしまいました。
ご迷惑をおかけしました。
Webプログラミング板にいってきます。
0882デフォルトの名無しさんNGNG
realplayer 向けの *.lst file を作成するスクリプトを書いています。
下記の二行目において @music_file をファイルが作成された順に
sort したいのですが、何かよい方法はありますでしょうか?
( file がおいてある dir でsystem ( ls -l ) を実行してファイルと
日付のhash を作成し、日付から sort することを考えています。)

****************************************************************
opendir ( DIR, $Source_DIR ) || die "failed open dir";
@music_file = sort grep { -f "$Source_DIR/$_" } readdir( DIR );
closedir( DIR );

open( FILE, ">./$LIST_FILE" ) || die "failed open file";
foreach $music ( @music_file ) {
if ( $music =~ m/mp3$/ ) {
printf ( FILE "file://$Source_DIR/$music\n" );
}
}
close ( FILE );
****************************************************************
0883デフォルトの名無しさんNGNG
ttp://www2u.biglobe.ne.jp/~MAS/perl/waza/index.html
0884デフォルトの名無しさんNGNG
ttp://perl.misty.ne.jp/function02/stat.html
0885882NGNG
>>883
>>884
超速攻レスありがとうございます。
勉強不足で申し訳ありません。
参考にさせて頂きます。
0886デフォルトの名無しさんNGNG
>>882
@music_file = sort { (stat($b))[9] <=> (stat($a))[9] } grep { -f "$Source_DIR/$_" } readdir( DIR );

若い順(昇順)なら、$b と $a を入れ替えればOK。
0887デフォルトの名無しさんNGNG
修正

@music_file = sort { (stat("$Source_DIR/$b"))[9] <=> (stat("$Source_DIR/$a"))[9] } grep { -f "$Source_DIR/$_" } readdir( DIR );

でした。
0888デフォルトの名無しさんNGNG
statの結果をキャッシュしてませんね
-10点
0889886NGNG
はいよ・・・(-"-)

@music_file = map { $_->[1] } sort { $b->[0] <=> $a->[0] } map { [ (stat("$Source_DIR/$_"))[9], $_ ] } grep { -f "$Source_DIR/$_" } readdir( DIR );

こっちも、昇順なら $a, $b を入れ替えればOK。
0890デフォルトの名無しさんNGNG
ある配列をランダムに並べ替える上手い方法ないですかね
0891デフォルトの名無しさんNGNG
>>890
ttp://www.din.or.jp/~ohzaki/perl.htm#ArrayRandom
0892デフォルトの名無しさんNGNG
>>891勉強になりました
0893デフォルトの名無しさんNGNG
http://www.din.or.jp/~ohzaki/perl.htm#ArrayRandom
0894デフォルトの名無しさんNGNG
ActivePerl-5.8.4.810-MSWin32-x86.msi を C\Perl にいれてみたのですが、
ppm install win32-api とコマンドプロンプトで打ってみても特に何か起こったような気配がありません。
'install' は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
とでてしまいます。
PathはC:\Perl\binに設定しているのですが、これがおかしいのでしょうか?
お願いします。
0895882NGNG
>>886-889
大感謝です。ありがとうございます。
889 の記述の a と b を入れ換える事によって、作成日時の
古い順に sort できております。
今まさに、完成したスクリプトが出力したリストファイル
で、音楽を聞いております。
0896デフォルトの名無しさんNGNG
>>894
---^
dir c:\Perl >tmp.txt
dir c:\Perl\bin\ppm*.bat >>tmp.txt
path >>tmp.txt
---$
というバッチファイルをコピペでつくってコマンドプロンプトで
実行して結果tmp.txtの中身をここに晒してみ
まさか、msiファイルをC:\Perlにぶちこんだだけってのが
落ちじゃないだろな
0897894NGNG
晒してみます。

ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は ******* です

c:\Perl のディレクトリ

2004/09/05 02:47 <DIR> .
2004/09/05 02:47 <DIR> ..
2004/09/05 02:50 <DIR> bin
2004/09/05 02:47 <DIR> eg
2004/09/05 02:47 <DIR> html
2004/09/05 02:50 <DIR> lib
2004/09/04 00:28 37,368 pod2htmd.tmp
2004/09/04 00:28 16,951 pod2htmi.tmp
2004/09/04 00:27 <DIR> site
2 個のファイル 54,319 バイト
7 個のディレクトリ 17,141,141,504 バイトの空き領域
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は ***** です

c:\Perl\bin のディレクトリ

2004/06/01 12:23 46,401 ppm.bat
2004/06/01 12:23 146,840 ppm3-bin.bat
2004/06/01 12:23 46,401 ppm3.bat
3 個のファイル 239,642 バイト
0 個のディレクトリ 17,142,194,176 バイトの空き領域
PATH=C:\Perl\bin\;C:\cygwin;C:\config.sys
0898894NGNG
追記
ttp://www.ddsystems.info/ex/ex_cgi/1002.html
によると、ppmと打てば、
PPM interactive shell (2.2.0) - type \’help\’ for available commands.
PPM>
と出るようですが、自分の場合は、C:\Perl\bin で ppm とうっても何の反応もないです。
ppm install aaaa とか適当に打っても何にも返ってきません。
ppm がおかしいのでしょうか?
perl -v で確認したところ、一応Perlは正しくインストールされているみたいですが・・
0899896NGNG
>>898
OSは?
コマンドプロントでsetを実行したときのcomspec(ComSpec)の値は?

Pathの中にC:\Cygwinが入ってるのが気になるね。俺はCygwinを
まともにいじったことが無いのでよう分からんけど(^^;
cygwinを入れていてシェルの設定が中途半端?
0900894NGNG
OSは2000です。

cygwinのPathを消して、再起動してみました。

ComSpec=C:\WINNT\system32\cmd.exe とでました。

たびたびすいません。
よろしくお願いします。
0901デフォルトの名無しさんNGNG
>>900
インストールしたときにppm外してたりしないよな
0902894NGNG
>>901
多分いれてるとおもうのですが。
ttp://www.dream-seed.com/server/perl.html
のとおりにやっています。

ppm.bat はあるのですが、どうも正しく動いてくれないみたいです。

もうだめかなぁ。
0903デフォルトの名無しさんNGNG
>>902
>もうだめかなぁ。
泣きつけば助けてもらえると思ってる時点で助ける気無くすよ。
他は普通にできてるんだから、自分が何か間違ってる可能性が高いわけだ。
だったらもっと前向きに解決しようとするのが普通だろ。
多分じゃなくて、ちゃんと確認した結果を伝えてください。
0904デフォルトの名無しさんNGNG
最悪の一行だよね。ぶっちゃけ。
0905894NGNG
>>902
はい、申し訳ないです。
アンインストールして入れてみたのですが、標準どおり入れています。
でもやっぱり動かないみたいです。。
0906896NGNG
>>900
PATHにC:\WINNT\system32を追加しろや。
cmd.exeのあるディレクトリがPATHにないとststem()が動かないから。
て優香、なんでPATHにC:\WINNT\system32が入ってないんだ?
0907894NGNG
>>906
すいません、おかげさまで解決できました。
そのPathが要ったようです。
長々と申し訳ありませんでした
ありがとうございました。
0908デフォルトの名無しさんNGNG
>>906
> て優香、なんでPATHにC:\WINNT\system32が入ってないんだ?
俺も気になる。これ入ってるのはシステム環境変数の方だろ。わざわざ消してんのか?
0909デフォルトの名無しさんNGNG
バイナリファイルを生成したくて昨日からperl勉強してるんですが、
perlってバイナリデータを書き込みできるんですか?

例えばバイナリエディタで開いたときに 20 20 20 00 00 20 と表示されるように
ファイル書き込みしたいんですが、どうやっても 202020000020 という文字列
が出力されてしまいます。

binmode は、読み込みには関係あっても書き込みには関係なさそうです。
pack と uppack という関数もありましたが、これはプログラム内部での
変換に過ぎず、書き込み時に print を使うと結局は文字として出力されて
しまうようです。
0910デフォルトの名無しさんNGNG
>>909
printfで書き込んだら?
0911909NGNG
>>910
printf も print と同じく文字列として書き込みが行われてしまいます。
例えば以下のようなプログラムを実行したときファイルに書き込まれるのは、
0x20 という1byteのバイナリデータではなく、20という2byteの文字列です。

open (OUT, "> test");
$a = 20;
printf OUT $a;
close (OUT);
0912デフォルトの名無しさんNGNG
syswriteでやるのはダメですか?
0913デフォルトの名無しさんNGNG
>>910
まず$aが16進のx20なら、$a=x20;だし、
printfは、フォーマットを指定しなきゃ意味ない。
0914デフォルトの名無しさんNGNG
Perl初心者ですがこんなの重いつきました。どうでしょうか。
vec関数については自分で調べてください。よく分らないので。
open(FH,">aaa.txt");
vec($a,0,8)=0x20;
syswrite(FH,$a);
close(FH);
0915909NGNG
>>912>>914
おお、できました。vecとsyswriteを組み合わせるといいんですね。
ありがとうございました。

>>913
フォーマットを指定すると明示的に文字列変換が行われてしまうので、
よけい都合が悪いと思ったんです。0x20についてはその通りでした。
0916デフォルトの名無しさんNGNG
>>915
変換なしなら、\x20じゃなきゃ…。
0917886NGNG
まあたしかに、Perlはバイナリの扱いはちょい苦手だね。
その分、テキスト処理でめっぽう強いのだけど。
0918デフォルトの名無しさんNGNG
名前残ってた。スマソ。
0919デフォルトの名無しさんNGNG
>>917
ぜんぜん苦手じゃないよ。おまいの技量が足りないだけ。
0920デフォルトの名無しさんNGNG
>>915
vecはちょっと用途が違うし、syswriteにいたっては無関係もいいとこだぞ。
普通はpackしてprintする。perl packでぐぐれ。

syswriteはいわばprintのバッファリングなし版。意味もわからず使うべきものではない。
0921デフォルトの名無しさんNGNG
>>917
Perlがバイナリの扱いが苦手だと思う点を述べよ

>>919
Perlがバイナリの扱いが苦手では無いと思う点を述べよ
0922デフォルトの名無しさんNGNG
>>921
>>920も出た時点で、
>Perlがバイナリの扱いが苦手では無いと思う点を述べよ
などとほざく理由を述べよ。前晒し:ぼくpack使えない。
0923デフォルトの名無しさんNGNG
>>920
packとprintを使ったサンプルきぼん
0924デフォルトの名無しさんNGNG
>>920
syswriteを使う場合は、アプリ側でバッファリングして、
書き出しのタイミングを自前で操作。
printの場合はseekでファイルポインタを移動させて書きこみ、
フラッシュのタイミングはPerl(Libc?)次第。

ということですよね。syswriteのようにファイルの任意のポイントを
指定して書き込む関数はprint系の関数にはないんでしょうか?
0925デフォルトの名無しさんNGNG
>>923
こんなんでどうでしょ
perl -e 'open(OUT,">tmp.txt");print OUT pack CCCC,0x50,0x65,0x72,0x7C'
0926デフォルトの名無しさんNGNG
>vecはちょっと用途が違うし

それではvecというのはどういう用途が正しいのでしょうか?
0927デフォルトの名無しさんNGNG
$a="abc";substr($a,1,1)="B";print$a
$a="abc";vec($a,1,8)=0x42;print$a
substrもvecも結局同じというみたいですね。
0928デフォルトの名無しさんNGNG
正規表現の練習の為に、簡単なコードを書いているのですが

$test = "プリンター";
$mach = "プリンター";
if($test =~ /$mach/){
print"あたり\n";
}else{
print"はずれ\n";
}

と書くと、エラーがでてしまいました。
if($test =~ /$mach/){
でエラーです。

どうしてだろうかと、いろいろやってみた結果、$machがプリンタだと
エラーが起きないのに対し、プリンターだとエラーになってしまうようです。

正規表現のトラブルとして検索したのですが"ー"ではヒットせずに
困っております。
この場合、どうすればよいのでしょうか?
アドバイスいただければ幸いです。
0929デフォルトの名無しさんNGNG
最新のperlをインスコしてうにこーど使う。きっとこれ1番。
0930デフォルトの名無しさんNGNG
>>911
バイナリ変換はココでもよめ。

ttp://www.mikeneko.ne.jp/~lab/perl/numerical_transform/
>>928
メタ文字が原因 /\Q$mach\E/ にしたらうごかねぇ?
0931928NGNG
>>929
>>930

レスありがとうございます。
/\Q$mach\E/
これでいけました。
リンクさきも拝見させていただきます。
どうもありがとうございました。
0932928NGNG
ぁぅ、違った。
リンク先は911さんへのレスでしたか。
0933デフォルトの名無しさんNGNG
「mach」のことは聞かないほうがいいのだろうか・・・
0934927NGNG
substrの引数が「EXPRのOffsetバイト目から何バイトとnバイトの領域を指定」
という意味なのに対して、
vecの引数は「EXPRのビット長をアライメントとしたOffset番目」
という意味ですね。
似てるようでいてちょっと違いましたね。スマソ

>>933 こちらへどうぞ
http://pc5.2ch.net/test/read.cgi/unix/1005039977/
0935デフォルトの名無しさんNGNG
マッハジェットプリンタ
0936デフォルトの名無しさんNGNG
>>911
1byte のバイナリを出力するときは、chr でもOK。

print OUT chr($a);

1byte バイナリ→アスキー変換は ord 。
0937デフォルトの名無しさんNGNG
教えてください。2日悩みましたが分かりませんでした。
POPでCGIにクエリを投げて、responseを取得したいのですが、
下記のように書くと、$answer1、$answer2が全く同じものが返ってくるんです。
デバッガで見ると&POPに渡した変数は、ちゃんと$issnに入ってるのに、パケットを
拾って見たところ、全く同じrequestしてるんです。
$answer1 = POP("1234-5678");
$answer2 = POP("5678-1234");
この順番を逆にするとanswer2は上手くいって、answer1に2と同じものが入ります。
根本的なミスだろうとは思うんですが・・。

↓スクリプト
0938デフォルトの名無しさんNGNG
#!/usr/bin/perl
use LWP 5.64;
use URI;
use encoding 'utf8';
binmode(STDERR, ':raw :encoding(utf8)');
use Encode;

$answer1 = POP("1234-5678");
$answer2 = POP("5678-1234");

sub POP {
my $issn = @_[0];
my $browser = LWP::UserAgent -> new;
my $url = URI -> new('http://www-lib.ac.jp/Search');
my $response = $browser->post( $url,
[
db => "all",
isbn_issn => $issn,
submit => "Search",
],
);
$response = decode('shiftjis',$response->content);
return $response;
}
0939デフォルトの名無しさんNGNG
Perlのバージョンは?
0940デフォルトの名無しさんNGNG
>>939 5.81です。すいません。
0941デフォルトの名無しさんNGNG
そのモジュール使ったことないからよくわからんけど、
ちょっと思ったのは

\%hogehogeってのと\@hogehogeってのは等価なのかね? 一般論として。

つまり、 ['hoge', 'hoge', 'hoge', 'hoge']と
{'hoge' => 'hoge', 'hoge' => 'hoge'}は書き方は違うけど中身は一緒?

今日まで、んなこと気にしたことなかったケド。
0942942NGNG
んなわけないか。

[ ... ]のとこを{ ... }にしたら動いたりしないかな。しないか。
0943942NGNG
いまperldoc見たら [ ... ]でも{ ... }でもどっちでもいいって書いてあるね。
だからそれは関係ないな。
0944デフォルトの名無しさんNGNG
>>938
答えではないけど、、

use LWP 5.64;
を
use LWP::UserAgent;

],
を
]

にしてみたらどうでしょう? 関係ないかな。。
0945937NGNG
>>937
文書中 POP -> POSTの間違えです。恥

>>941-944
レスありがとうございます。>>938は元のスクリプトが長いもんで、
適当に縮めて書き直しました。今風呂に入って見直してみたら、細かい
間違いがいっぱいありました。疲れ果ててました。すいません。
ただ気を取り直して、別のスクリプトを新しく書いてみたら、上手く逝ってしまいました。
元がどうして上手く逝かないかはまだわかりませんが・・。

↓一応実働します
0946937NGNG
#!/usr/bin/perl
use LWP 5.64;
use URI;
use encoding 'utf8';
binmode(STDERR, ':raw :encoding(utf8)');
use Encode;

$answer1 = POST("200-0000"); #郵便番号を入れる
$answer2 = POST("100-0000"); #郵便番号を入れる

print $answer1."\n".$answer2;

sub POST {
my $zip = $_[0];
my $browser = LWP::UserAgent -> new;
my $url = URI -> new('http://search.post.japanpost.jp/7zip/zip2.cgi');
my $response = $browser->post( $url,
[
mode => "search",
start => "0",
end => "400",
keyword => $zip,
],
);
$response = decode('shiftjis',$response->content);
return $response;
}
0947デフォルトの名無しさんNGNG
>>941
全然別物ですから・・・

>今日まで、んなこと気にしたことなかったケド。
大丈夫かお前さん
0948デフォルトの名無しさんNGNG
きちんと症状が出てることを確認したプログラムを
打ち直さずにコピペしろってことで。
0949デフォルトの名無しさんNGNG
>>947
>>941 じゃないが、>>942 ですぐに気付いてるよ。
マターリいきましょ。

[...] は配列へのリファレンス、{...} はハッシュへの
リファレンスね。
0950デフォルトの名無しさんNGNG
リファレンスというか、無名配列と無名ハッシュでした。。
0951デフォルトの名無しさんNGNG
>>941
[]と{}は別物なんだけど、LWP::UserAgentのpostはどっちも
食えるように作ってあるという話ですな。普通は混同しては
いけない。

0952ぬるぽ ◆GmgU93SCyE NGNG
名前の「GmgU93SCyE」は、どういうプログラム文で決めたものでつか?
0953デフォルトの名無しさんNGNG
次の質問をどうぞ
0954デフォルトの名無しさんNGNG
>>952
おそらく、DES暗号あたりかな
0955デフォルトの名無しさんNGNG
>>952
「2ch」「トリップ」あたりでぐぐればいろいろでてくるよ。
perlならこのへんかな?

ttp://multix.jp/html/memo/030525.html#0002
0956デフォルトの名無しさんNGNG
>>952
DESてのが元々あり
平分←(鍵)→暗号文
と行き来できるもので(以下略
(XOR演算とかbitのローテーションとか)
Cryptは最初に固定の平分を暗号文にし、
その暗号文を繰り返し(以下略
(salt、patternとか)
トリップはそのcryptを利用しており
キーの2,3文字目をsaltと固定し、cryptの戻り値の末尾10文字を(以下略
($trip = substr(crypt($key, (substr($key."H.", 1, 2))), -10);とか)

適当、半分くらいは当たってるはずだ。ガッはしてあげません。
0957ぬるぽ ◆GmgU93SCyE NGNG
ありがと
PHPでオナジことできればいいのになぁ・・・
0958デフォルトの名無しさんNGNG
できるだろ・・・。
0959ぬるぽ ◆GmgU93SCyE NGNG
2chとまったくオナジ変換ね
0960デフォルトの名無しさんNGNG
>>959
スレタイ読め
もしくはphp cryptで検索くらいしろ。
0961デフォルトの名無しさんNGNG
質問です。
perlの処理で、”Enterキーを押す”っていう操作は
perlでは、どう記述するのでしょうか?
ご存知の方是非教えて頂きたいのですが?
0962デフォルトの名無しさんNGNG
〜

$key = <STDIN>;
if($key eq "\r\n" or $key eq "\n" or $key eq "\r"){print 'Enterキター';}

〜
0963デフォルトの名無しさんNGNG
print "\n"
とか
0964デフォルトの名無しさんNGNG
>>961
EnterキーとReturnキーは区別するの?
0965デフォルトの名無しさんNGNG
961です。
>>962さん
ありがとうございます!
この処理で2日間悩んでました。
助かりました。
ちなみに、>>963の改行はやったんですが、うまくいかなくて・・・
0966937NGNG
スレ汚しすいません。
昨日上手く逝ったはずのスクリプトですが、実際動かすとやっぱダメでした。

http://www.perldoc.com/perl5.8.0/lib/LWP/UserAgent.html
によると$ua->post($url, \%formref, Header => Value,...);とあり
>>951さんの言う通りLWP::UserAgentのpostはどっちも食えるようです。

んで、分かりにくかったので、ハッシュに代入、ハッシュのリファレンスを入れました。
コレでも駄目だったんですが、>>946の郵便局のURLと郵便局のフォームのペアを入れ
ると上手く逝きます。じゃあ、CGIが駄目なのかと思い、Etherealでパケットをみると
同じパケットを送っています。元は、図書館のCGIから論文を探してくるスクリプトです。
わけわからんです。

↓スクリプト
0967937NGNG
#!/usr/bin/perl
use LWP 5.64;
use URI;
use encoding 'utf8';
binmode(STDERR, ':raw :encoding(utf8)');
use Encode;

Tosho("issncode1");
Tosho("issncode2");
sub Tosho {
%form = (
db => "all",
wa => "w",
yo => "y",
lib_cd => "00",
isbn_issn => $_[0],
search_type => "Detail",
);
print $_[0];#変数も渡っていて
print $form{isbn_issn};#ちゃんとハッシュにも入っている
print "\n\n";
my $browser = LWP::UserAgent -> new;
my $url = URI -> new('http://www.lib.ac.jp/Scripts/WebOpac.dll/Search');
my $response = $browser->post( $url,\%form);
my $response = decode('shiftjis',$response->content);
print $response;#なのにresponseが同じ・・
print "\n";
}
0968デフォルトの名無しさんNGNG
情けない質問で申し訳ないですが…。
不特定の変数名などに「なんたらかんたら」とか
「ほにゃらら」みたいな感じで'foo'と'hoge'が使われますよね?
あれの意味とか起源って、なんですか?
hogeは、日本限定とか?知ってる方、教えて下さい。
0969デフォルトの名無しさんNGNG
>>968
http://kmaebashi.com/programmer/hoge.html
0970968NGNG
>>969
大変勉強になりました。ありがとうございます。

上記HPでは、否定されてますが、fooは「ほげ」の英語版って
ことで大雑把にはokですか?
0971デフォルトの名無しさんNGNG
>>970
まあ ok かと。
http://www.ietf.org/rfc/rfc3092.txt
0972デフォルトの名無しさんNGNG
>>967

「\」を「\」に置換した上で
URLを差し替えて試してみたら正常に動きましたけど。
(Redhat上のPerl5.8.0)

そこ以外のどこかがおかしいんじゃないの
0973デフォルトの名無しさんNGNG
>>959
DES はアルゴリズムが公開されているので、
どの言語でも実装できますよ。

--
次スレよろです
0974デフォルトの名無しさんNGNG
クソわがままな話ですが任意の特定のスコープ内だけブールの定義を変える方法存在しますか?
たとえば負の数値は全て偽、みたいな?

こーゆーのがあると記述がサッパリして見やすいなとか思っただけなんで、
ないんならそれでおkです。
0975デフォルトの名無しさんNGNG
>>974
演算子のオーバーライド
0976デフォルトの名無しさんNGNG
976
0977デフォルトの名無しさんNGNG
>>975 arigeter
0978デフォルトの名無しさんNGNG
>>966
>同じパケットを送っています
つーのはリクエストが同じってこと?
同じリクエストならこの場合は同じレスポンスが返るだろうけど
リクエストが同じなのかレスポンスが同じなのかはっきりしてちょんまげ

あとここではバックスラッシュを \ で書いても無問題だと思うよ
0979デフォルトの名無しさんNGNG
>>977
arigatorだろ。正しい英語を使いませう
0980デフォルトの名無しさんNGNG
それを言うならalligator(自己レスorz)
0981デフォルトの名無しさんNGNG
お、次スレ
Perlについての質問箱 12箱目
http://pc5.2ch.net/test/read.cgi/tech/1094579428/

おつんつん
0982937NGNG
次スレたってますが、コソーリ原因分かりました。POSTのrequestに日本語入っている場合のため
のエスケープを助けるサブルーチンの配列のmy忘れでした。
レスくれた皆さん、ありがとうございました。なんかのために貼っておきます。
sub URI::query_form {
my $self = shift;
my $old = $self->query;
if (@_) {
# Try to set query string
my @query;
while (my($key,$vals) = splice(@_, 0, 2)) {
$key = '' unless defined $key;
$key =〜 s/([;\/?:@&=+,\$\[\]%])/$URI::Escape::escapes{$1}/g;
$key =〜 s/ /+/g;
$vals = [ref($vals) ? @$vals : $vals];
for my $val (@$vals) {
$val = '' unless defined $val;
#################### ここから日本語化パッチ部分 ####################
my @work = unpack('C*', $val);
$val = '';

0983937NGNG
foreach my $c (@work) {
if ((($c >= 0x30) && ($c <= 0x39)) || # 数値はそのまま
(($c >= 0x41) && ($c <= 0x5A)) || # アルファベット(大文字)もそのまま
(($c >= 0x61) && ($c <= 0x7A))) { # アルファベット(小文字)もそのまま
$val .= chr($c);
} elsif ($c == 0x20) { # 空白は'+'に
$val .= '+';
} else { # それ以外は%XX形式に変換する。
$val .= sprintf("%%%02X", $c);
}
}
#################### 日本語化パッチ部分ここまで ####################
#この行は削除 $val =〜 s/([;\/?:@&=+,\$\[\]%])/$URI::Escape::escapes{$1}/g;
# この行は削除 $val =〜 s/ /+/g;
push(@query, "$key=$val");
}
}
$self->query(join('&', @query));
}
return if !defined($old) || !length($old) || !defined(wantarray);
return unless $old =〜 /=/; # not a form
map { s/\+/ /g; uri_unescape($_) }
map { /=/ ? split(/=/, $_, 2) : ($_ => '')} split(/&/, $old);
}
0984937NGNG
6行目のmyを忘れただけなのに、物凄い苦労しました。
もとはo'reillyの本にあった、サブルーチンです。日本語POSTには必須だと思われ。

0985デフォルトの名無しさんNGNG
どうしたら、perlで日本語使えるの?
0986デフォルトの名無しさんNGNG
>>984
use strict;してないの?
0987デフォルトの名無しさんNGNG
>>974
無理。if(is_positive($number)){ ... } とでもするしかないな。

特定のスコープだけリテラルの意味を変えることなら出来る(perldoc overload)が、
あくまでもリテラルの意味を変えるだけだからな。
0988デフォルトの名無しさんNGNG
>>937
君はもう質問するのやめなさい
0989デフォルトの名無しさんNGNG
埋めていこう!
0990デフォルトの名無しさんNGNG
なんかよくわからんけど
「日本語化パッチ部分ここまで」の直後の
削除された正規表現を工夫すると、パッチ全体が
いらなくなるように見えるのは俺だけだろうか。

あと、今回の教訓としては、泥縄式にデバッグするときは、
「切り分け」が重要。(こっからここまでは正常、とか確認して
怪しいエリアを絞ってく) なんだけど、そこがうまくいかなかった
という感じだね。

ふつうだったら >>967 が絞り込まれた結果のはずだとみんな思うだろうし。

0991デフォルトの名無しさんNGNG
ていうかなんの断りもなしに一般的なモジュール使ってたら
普通改造してるなんて思わないよな...
0992デフォルトの名無しさんNGNG
991に同意しつつ埋めてみる。
0993デフォルトの名無しさんNGNG
Perlについての質問箱 12箱目
http://pc5.2ch.net/test/read.cgi/tech/1094579428/
0994デフォルトの名無しさんNGNG
終了促進
0995デフォルトの名無しさんNGNG
995
0996デフォルトの名無しさんNGNG
記念カキコ v(^-^*)
0997デフォルトの名無しさんNGNG
委員長死ね
0998デフォルトの名無しさんNGNG
998
0999デフォルトの名無しさんNGNG
ゴダイゴ
1000デフォルトの名無しさんNGNG
1000ならPerl6明日リリース
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。