トップページphp
1001コメント318KB

Perlコーディング初心者質問スレ Part 55

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2007/05/30(水) 11:34:01ID:???
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >>2-10

前スレ http://pc11.2ch.net/test/read.cgi/php/1171102883/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0002nobodyさん2007/05/30(水) 11:34:51ID:???
ム板Perlスレより 1 of 2

[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: ttp://www.site-cooler.com/kwl/perl/

[本]
リャマ: ttp://www.oreilly.co.jp/books/4873111269/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: ttp://www.oreilly.co.jp/books/4873112028/

[オンラインマニュアル] (追加)
最新のドキュメント: ttp://search.cpan.org/dist/perl-5.8.8/
perl5.8.xのドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi
perldoc.jp: ttp://www.perldoc.jp/
Perldoc.com: ttp://www.perldoc.com/
0003nobodyさん2007/05/30(水) 11:35:17ID:???
ム板Perlスレより 2 of 2

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

[テクニック]
Perlメモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perlの小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm

[Perl5.8Unicodeメモ]
ttp://www.pure.ne.jp/~learner/program/Perl_unicode.html
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0004nobodyさん2007/05/30(水) 14:47:32ID:???
質問です。
web(charset=euc-jp)から入力された内容を送信し、Jcodeを通して、utf8でテキストファイルを
作成しています。
入力時に、例えば「りゅうべい(立方メートルの記号)」などを登録すると、㎥のような
記号でデータが送信されます。
この文字列(𘚟)から、Jcodeを通してutf8の文字列を取得するには、どうすればいいでしょう?

my $result = Jcode->new(■)->utf8;

■の部分をどうにかすれば可能かと思うのですが、どうすればよろしいでしょうか?
0005 ◆TWARamEjuA 2007/05/30(水) 19:15:21ID:????2BP(6824)
(´-`).。oO(実体化すればよいだけのような。。。)
0006nobodyさん2007/05/30(水) 21:42:29ID:???
こっちがホントの次スレか。
言われるまで気付かなかったよ。
0007nobodyさん2007/05/31(木) 02:45:33ID:???
>>4
use CGI;
use Jcode;

my $q = CGI->new;
my $result = Jcode->new($q->param('hoge'), 'euc')->utf8;
0008nobodyさん2007/05/31(木) 04:54:07ID:???
use Unicode::String qw(utf8 ucs2);
...
$result =~ s/?(\d+);/ucs2(pack('n', $1))->utf8/eg;

こういうことかしらん。
000942007/05/31(木) 12:37:01ID:???
>>5-8
レスありがとうございます。>>8さんの方法でうまくいきました。
有難うございました。
0010nobodyさん2007/05/31(木) 18:33:42ID:5ZmU8rMz
1:CGIでフォルダの中のものすべてのコピーをしたい。
#!/usr/bin/perl
print "Content-type: text/html", "\n\n";
$folda = 5555;
opendir(DIR , '.');
@view = readdir(DIR);
$xx = pop @view;
until ($xx eq ()) {
$xx = pop @view;
if ($xx == $id) {
print "elrr end2";
exit;
}
open(IN,"./$xx");
while(<IN>){
$aaa .= $_;}
close(IN);
open(OUT,"> ./$folda/$xx");
print OUT $aaa;
close(OUT);
$xx = pop @view;
}
print "elrr end";
このようにやってみましたが、ファイルは出来てもフォルダができません。
0011nobodyさん2007/05/31(木) 18:35:50ID:F65+C5fx
そりゃできんだろ・・・
0012nobodyさん2007/05/31(木) 19:29:38ID:???
>>10
再帰的にコピーするPerlモジュールがあった気がするが、Googleで
30秒探して見付からなかったので諦めた。邪道も道。

#! /bin/bash
mkdir 5555;
cp -fR ./* 5555/;
echo "Content-Type: text/html";
echo "";
echo "mission complete.";
0013nobodyさん2007/05/31(木) 19:53:59ID:???
>>12
スレタイ半分読んで100年ROMってろ
0014nobodyさん2007/05/31(木) 20:08:01ID:???
2chなんてROMってもアホになるだけだがGoogleは偉大だった。
----
#! /usr/bin/env perl
use File::Copy::Recursive qw(dircopy);
dircopy(".", "5555/");
print "Content-Type: text/html\n\n";
print "mission complete.";
----
うちのActivePerlにはモジュールが入ってないので入れた。
ppm install File-Copy-Recursive
0015nobodyさん2007/05/31(木) 21:38:40ID:???
ム板にスレ立てたキチガイが暴れてるのかw
0016nobodyさん2007/05/31(木) 22:06:41ID:oHHUgLPV
掲示板へのポストをサーバサイドでRSAの公開鍵で暗号化して保存し、
秘密鍵を入力したユーザだけが参照可能にしたいのですが、
何か良い方法はありますでしょうか?
0017nobodyさん2007/05/31(木) 23:17:43ID:???
そこまで流れ分かってるなら分かりそうだが…
0018nobodyさん2007/06/01(金) 12:46:18ID:nf+wPUUR
$str = 'AAACCBBBBBAEDAACCCCB';
という文字列(最大5種の半角英文字の羅列で最長50バイト)を
「A3コ、C2コ、B5コ、A1コ、E1コ、D1コ、A2コ、C4コ、B1コ」
というように、文字列の先頭から連続している部分を一区切りとして取り出したいんですが
何か良い方法はないでしょうか?
正規表現で可能かとも思って、チャレンジしてみたんですが頭が足りずできませんでした・・・。
答えに直結するレスがもらえれば最高ですが、
答えに近づくアドバイス(参考書籍・サイト等)でも構いませんのでよろしくお願いします。
0019nobodyさん2007/06/01(金) 13:00:54ID:???
$hoge =~ s/((.)\2*)/$1\n/g;
print $hoge;
0020182007/06/01(金) 13:17:33ID:???
>>19
ありがとうございます!希望通りできました。
こういうのは、センスなんでしょうか、慣れなんでしょうか。
単に私の努力と勉強がまだまだ足りないだけかもしれませんが・・・。
本当にありがとうございました。
0021nobodyさん2007/06/01(金) 13:32:29ID:???
my @r = $str =~ /((.)\2*)/g;
print join ',', @r[map $_*2,(0..$#r/2)];
>>19のほうがいいな。
0022nobodyさん2007/06/01(金) 18:28:10ID:???
質問させていただきたいのですが、
コマンドラインから引数を渡してPHPファイルに生成されるprint文(HTMLタグ含む)を
また別のperlファイルで読み込んで使用したいのですが、
HTMLに表示させるところまではうまくいくのですが、
表示させる場所を思い通りの場所に配置することができません。
というか、<html>〜</html>の外(直前)に出力されてしまいます。

perlファイルのソースは、
$i = 引数
open(FP,"| /hoge/file.php $i");
while(<FP>){ $s .= $_; }
close(FP);
return $s;
としています。

http://flex.ee.uec.ac.jp/texi/perl/perl_86.html
こちらのページで、別プロセスに〜と書いてありますが
何かいい方法はありますでしょうか。
0023nobodyさん2007/06/01(金) 18:37:34ID:???
俺はニュータイプになれそうにもないな
0024nobodyさん2007/06/01(金) 18:43:46ID:???
>>23
う・・・・

ちなみに上で長々と書きましたが、
open(|FILEHANDLE,EXPR)としたときの返り値はサブプロセスの pid になるので
うまくperlファイルで扱えないのですが、
対応方法を教えていただきたく書き込みました・・・。

またエスパーですね・・・
0025nobodyさん2007/06/01(金) 18:55:51ID:???
ファイルから読み込んで要素数が1000個の配列(1要素は1KBもありません)を作るのと、
必要になるたび(といっても3回程度ですが)ファイルを読み込むのとどっちがいいですかね?
0026nobodyさん2007/06/01(金) 19:13:11ID:???
>>22
> open(FP,"| /hoge/file.php $i");
|を置く場所が違う。それじゃデータの流れがperlからサブプロセス。
その結果、出力をperlが受け取ることなくその場で表示される。
正しくはこの位置
open(FP,"/hoge/file.php $i |");
# ちなみに、openじゃ入力と出力両方を接続することは出来ない。
# そういう用途ではIPC::Open2とかが必要
0027nobodyさん2007/06/02(土) 06:39:37ID:L1OVX2UL
フラッシュ(swf)から変数を受け取って、HTMLのフォームからデータを送ったときに、
POSTの中身って自分で調べることが出来るんでしょうか?
cgiのURLはソースを見れば、バレバレなんですが、変数の中身はswfから受け取ってるので、
htmlのソースには書かれてないんです。

フラッシュ内にパスワードとかを書いておきたいのですが、見られると意味ないので…。
0028nobodyさん2007/06/02(土) 06:45:27ID:???
ちなみに個人的に調べたところでは、

ttp://www1.mahoroba.ne.jp/~mitt/itmemo/webappsecurity/02.htm

 見られて困るデータの場合は GET でなく POST を使いましょう。
 そのまんまですがこれしか思い浮かばないです)
 一般にサーバ側の履歴はアクセス要求があった URL などは保持しますが、
 POST されたデータの中身まで1つ1つ保持することはほとんどありません。
 ブラウザの履歴にも URL しか残らないので、他人にパソコンを触られても
 どんなデータを送信したかまでは見られる心配はないです。


とは、書かれてあったのですが、心配なもので…。
0029nobodyさん2007/06/02(土) 07:11:54ID:???
パケットキャプチャーすれば楽勝で見ることができる。
0030nobodyさん2007/06/02(土) 07:53:56ID:???
swfファイルにパスワードを書くとな?おそロシア
0031nobodyさん2007/06/02(土) 08:02:12ID:???
Sothink SWF Decompiler
ttp://www.sothink.com/product/flashdecompiler/
0032272007/06/02(土) 08:41:15ID:???
>>31の存在は知っていたのですが、パケットキャプチャーなるものは
知りませんでした。とにかくどういう手法を使っても、
「自分のブラウザから」送信するデータを見えなくするって無理ってことですよね。

ありがとうございました。
0033nobodyさん2007/06/02(土) 08:57:40ID:???
キャプチャだけの問題ならワンタイムパスワードなりSSLなり
方法は無数にあるけどPerl関係無いからね
0034nobodyさん2007/06/02(土) 11:27:15ID:???
一般的にPOST+SSLのサイトがほとんだしね
それでいいんじゃないの
0035nobodyさん2007/06/02(土) 18:23:49ID:???
パッケージHageにTuruturuサブルーチンがあるかどうかチェックする方法はありますか?
0036nobodyさん2007/06/02(土) 18:26:37ID:???
Hage->can("Turuturu")
0037352007/06/02(土) 20:47:47ID:???
>>36
ありがとう!
0038nobodyさん2007/06/02(土) 22:23:08ID:???
UNIVERSAL の can かあ。勉強になった。
pod のディレクトリで grep してやっと所在が分ったよorz...
0039nobodyさん2007/06/03(日) 00:18:54ID:???
exists &Hage::Turuturu;

こういうのもあり。
0040nobodyさん2007/06/03(日) 12:18:02ID:???
ImageMagicに関しての質問です。

画像に文字を入れようと思って、
ttp://www.ss.iij4u.or.jp/~somali/web/im_example/character.html
こちらのサイトを参考にやってるのですが、
どうしても、styleやstretchが上手くいきません。

style=>'Italic',
stretch=>'SemiExpanded';

と入れると上手く画像は生成されるのですが、肝心の
styleとstretchの効果が見られません。
何が原因になってるかお分りになる方教えてください。

PerlはActivePerlの最新版を使ってます。
0041nobodyさん2007/06/03(日) 13:52:19ID:???
サブルーチンのプロトタイプ宣言って、みんな書いてますか?
Cとかだと当たり前だけど…
0042nobodyさん2007/06/03(日) 13:57:30ID:???
よっぽどクリティカルな場合以外書かないなあ
0043nobodyさん2007/06/03(日) 14:26:20ID:???
Perlのアレはな。値渡しする気満々にしか見えない。
0044nobodyさん2007/06/03(日) 14:37:50ID:???
Perl5 のプロトタイプはサブルーチンのインタフェース、具体的には引数リスト要素の各コンテキストを強制的に変更します。呼出しが不自由になるだけで特にコードが分かりやすくなったりしないので、ぼくは使いません。
以前にはサブルーチンによる定数定義に "()"(引数なし) を使っていたくらいかな。今は更に特別な目的がないと使わないと思います。
0045nobodyさん2007/06/03(日) 15:18:04ID:???
>>40
氏ね。

>>41
モジュールから引っ張って来れないことがわかってから使わなくなったな。
呼び出し側にプロトタイプ書かなきゃ使えないなんて無意味すぎ。
0046nobodyさん2007/06/03(日) 16:04:05ID:???
>>40 = http://pc11.2ch.net/test/read.cgi/tech/1180492034/11,21,24
なので放置推奨。
0047nobodyさん2007/06/03(日) 21:19:35ID:???
useとuse baseは継承と多重継承だそうですが、違いはなんでしょうか?
親を一つ持つか複数持つか、の違いだとは分かるんですが、継承を繰り返す=多重継承ではないんですか?
0048nobodyさん2007/06/03(日) 21:42:25ID:???
MySQL+DBIモジュールを使って、郵便番号→住所取り出したいのですが、
CGIでSELECT文を実行すると上手くいきません。

環境はwindowsXP,MySQL5.0,文字コードはsjisです。型はtextです。
--------------------------------------------------------------------------
$db = DBI->connect('DBI:mysql:zipcode:localhost', $user, $passwd);
$sth = $db->prepare("SELECT pref, area, addr FROM zipcode where post=3240021");
$sth->execute;
$num_rows = $sth->rows;
print "該当 $num_rows 件\n";
for ($i=0; $i<$num_rows; $i++) {
@a = $sth->fetchrow_array;
print "$a[0] $a[1] $a[2] \n";
}
$sth->finish;
$db->disconnect;
---------------------------------------------------------------------------
この結果は、
---------------
該当 1 件
??? ???? ??
---------------
と表示されます。マルチバイト文字が文字化けというか、
?としか表示されません。(?一つが一文字に対応しているようです。)
コマンドプロンプトからは正常に表示されました。

一つ指南のほうをよろしくお願いします。m(_ _)m
0049nobodyさん2007/06/03(日) 21:43:46ID:???
>>47
> useとuse baseは継承と多重継承だそうですが、違いはなんでしょうか?

use はコンパイル時にモジュールをロードする構文であり、use base は「所定の場所から base.pm を探してきてロードしなさいよ」といった意味です。
この場合、たまたま base プラグマが継承に関する機能を持っているというだけで、use 自体は継承とは何の関係もありません。

> 親を一つ持つか複数持つか、の違いだとは分かるんですが、継承を繰り返す=多重継承ではないんですか?

親を複数持つのが多重継承です。継承を繰り返すのが多重継承であれば、少なくとも Perl ではほとんどの明示的な継承は暗黙の多重継承となります。そうだとしたら呼び分ける必要がありませんね。

皮肉ではなく純粋に心配なので、こういうでまかせをどこから仕入れてくるのか、参考までにお教え願えませんか。
0050472007/06/03(日) 22:23:03ID:???
>>49
本やネットから正しい知識を得てきても出来の悪い頭がこんな解釈をしたようです。
回答ありがとうございました。
0051nobodyさん2007/06/03(日) 22:27:09ID:???
>>48
Perlの質問と言うかMySQLの質問に近いが…
MySQL上のどこかの文字セット設定がまずいな。多分スクリプト側だと思うが。
$db->do('SET CHARACTER SET sjis');
接続直後にやって見れ。

後、本当にsjisでいいのか?
Windowsお得意の機種依存文字を受け入れたいならcp932使っとけ。
いや、解ってて確固たる信念を持って受け入れないならそれはそれでいいんだが。
0052nobodyさん2007/06/03(日) 22:31:12ID:???
>>48
my.cnf (Windows XP ということなので my.ini とかになるのかな?) の調整で解決しないかな。
いかにも自動変換が悪さをしている気配よ。
0053nobodyさん2007/06/03(日) 23:30:46ID:???
あぁそれか。それmy.cnfにありえない一行が必要です。
0054nobodyさん2007/06/05(火) 03:15:21ID:???
ディレクトリの読み込みについて質問があります。

my $dir_name = "test";
opendir(DIR,"$dir_name");
closedir(DIR);

として、変数dir_nameに直接ディレクトリ名を入れると読み込めるのですが、

my @dir_list = (test,test2);
opendir(DIR,"$dir_list[0]");
closedir(DIR);

とすると読み込めないのは何故でしょうか?

my @dir_list = (test,test2);
my $dir_name = $dir_list[0];
opendir(DIR,"$dir_name");
closedir(DIR);

とした場合でも同様に読み込めず、原因が何なのかもわからず困っています…。
何か基礎的な部分で間違っているのかもしれませんが、教えて頂けると助かります。
宜しくお願い致します。
0055nobodyさん2007/06/05(火) 04:59:46ID:???
>>54
> my @dir_list = (test,test2);
ソースそのまま実行したのなら。
my @dir_list = ('test','test2');

opendir DIR, $dir_list[0] or die ;
する事もお勧め。
0056nobodyさん2007/06/05(火) 13:41:17ID:???
>>55
回答ありがとうございます。
こちらに書き込みをする時に""を付け忘れていました…;
実際のソースは↓の通りです。(サブルーチンの内容は省略)

my ($error,$th_max);
my (@thread,@response,@th_list);

unless(opendir(DIR,"testdir")){$error .= "魚";&error();}
@thread = readdir(DIR);
closedir(DIR);
splice(@thread,0,2);
pop @thread;
$th_max = @thread;

unless(open(FILE,"<testdir/list.dat")){$error = ."魚"; &error();}
@th_list = <FILE>;
close(FILE);

chdir("testdir");

unless(opendir(DIR,"$th_list[0]")){$error .= "魚"; &error();}
closedir(DIR);

最後の2行を消した状態では問題なく動作したので、最後のopendirの
ディレクトリ指定が間違っていると思うのですが…。
0057nobodyさん2007/06/05(火) 13:57:55ID:???
<>演算子で@th_listに代入したということは、@th_listの要素の尻に
改行が残っているということではないか
0058nobodyさん2007/06/05(火) 14:01:14ID:???
> unless(open(FILE,"<testdir/list.dat")){$error = ."魚"; &error();}

$error = ."魚"
ここで死んでるだけだと思われ

use strict;
use warnings;
くらい付けましょう
0059542007/06/05(火) 15:06:29ID:???
>>57
@th_listは
1行目:001
2行目:002
3行目:
となっています。$th_list[0]には1行目の「001」が入っています。
opendir(DIR,"001")  とした時は動作するのですが、
opendir(DIR,"$th_list[0]") とした時は動作しません…。

>>58
またまた下記間違えです…すみません;
>>56でも書きましたが、最後の2行を消した状態では問題無く動作しているので、
最後の2行に問題があると思うのですが…。
0060542007/06/05(火) 15:10:42ID:???
書き忘れましたが、動作しないというのは500エラーが出るという事ではなく、
サブルーチン&errorに飛んでしまうという事です。

>>56の最後の2行目を除いた状態では、&errorに飛ばずそのまま次の処理へ映るのですが、
unless(opendir(DIR,"$th_list[0]")){$error .= "魚"; &error();}
closedir(DIR);
という記述をすると、$th_list[0]に入っている「001」というディレクトリが開く筈のところ、
何故かディレクトリを開けずに&errorに飛んでしまうのです。
0061542007/06/05(火) 15:25:19ID:???
>>57
勘違いしていました…各行に改行が入っているという事だったんですね;
chopを使って@th_listの各行の改行を削除したところ、解決しました。

長々とすみませんでした;
ありがとうございました。
0062nobodyさん2007/06/05(火) 15:25:28ID:???
書き間違い、書き忘れ多すぎ。
自分の書き込みのチェックぐらいしろ。
てか、後出し情報多すぎ。
>>54のときと>>56のときと問題が微妙に変わってるし。
お前の書き込みを真に受けて付き合ってる方の身にもなれ。

結論は>>57が正解。
chomp使え。
0063622007/06/05(火) 15:26:20ID:???
orz.
0064nobodyさん2007/06/05(火) 17:36:05ID:???
54氏
老婆心ながら。
本当に「001」って名前のディレクトリを使ってないと思うが、
もし使ってるのなら用心した方がいいよ。ls を取りながら実際に
以下のワンライナーを実行してみると良い。
% perl -le 'mkdir 0101'
% perl -le 'mkdir q{0101}'
% touch 0101/foo
% perl -Mstrict -w -le 'opendir DIR, 0101 ; print readdir DIR '
0065nobodyさん2007/06/07(木) 10:44:45ID:???
携帯電話でアクセスしたとき、携帯電話用のページ表示したいのですが、
どういう方法がよいのでしょうか?
よろしくお願いします。
0066nobodyさん2007/06/07(木) 11:08:49ID:???
ご自分の環境に適した方法が良いでしょう。
詳しくはGoogle参照。
0067nobodyさん2007/06/07(木) 11:34:41ID:???
>>65
PHPでヘッダ分岐とか。
0068nobodyさん2007/06/07(木) 11:37:26ID:???
>>66-67
レスどもです。
ブラウザで、条件分岐させる方法があるみたいですね。
0069nobodyさん2007/06/07(木) 11:51:14ID:???
つ Net::CIDR::MobileJP
0070nobodyさん2007/06/08(金) 04:08:09ID:???
>>69
たぶんそれじゃなくて、スレタイと無関係に SetEnvIf とか RewriteCond なんだと思う。
0071nobodyさん2007/06/08(金) 12:26:55ID:???
Perlスレの正しい答えだろ
0072nobodyさん2007/06/09(土) 23:19:25ID:???
>>51
>>52
ありがとうございます。
管理ソフトでも入れて my.ini変えてみます。
0073nobodyさん2007/06/10(日) 03:46:48ID:???
それらでは解決しないけど少し苦しめ
0074nobodyさん2007/06/10(日) 15:23:21ID:m8gOFHaO
CPANを使いたいんですが、makeでコケてしまいます。
nmakeもnmake15もmingw32-makeを使ってもダメなんですが、
WindowsでCPANを使う時には何が主流ですか?
0075nobodyさん2007/06/10(日) 21:30:37ID:c+ghO5Jd
>>64の、
>本当に「001」って名前のディレクトリを使ってないと思うが、
>もし使ってるのなら用心した方がいいよ。
というのはどういう事でしょうか?

ディレクトリ名に番号を使用するとエラーになる(?)可能性があるとかでしょうか?

>>54じゃないですが、ちょっと気になったもので…
0076nobodyさん2007/06/10(日) 22:59:35ID:???
>75
ヒント: Perl的には0で始まる"数字"は8進数
0077nobodyさん2007/06/10(日) 23:23:38ID:???
>>76
ヒントというか半分答えですね。
すっきりしました!ありがとうございます。
0078nobodyさん2007/06/11(月) 17:47:01ID:???
perlの質問なのかわからないのですが、お尋ねします。

今レンタル鯖でLWP::Simpleを使って、cronを仕組んで、100以上のurlを早朝にgetしてパースしています。
uptimeの値を見ても、全くといっていいほど、負荷はかかっていないように思えるのですが、getするのに一番時間が
かかっているためなのか、スクリプトの実行から終了まで2分程度掛かっているようです。

一般論として、レンタル鯖でやってはいけない負荷の高いスクリプトの使用とは、何をもって判断すべきでしょうか?
また、LWPで100以上のurlを一気に取得することは非常識なのでしょうか?
0079nobodyさん2007/06/11(月) 18:26:54ID:???
鯖に聞け
0080nobodyさん2007/06/11(月) 19:52:40ID:???
>>79
個々については鯖に聞かないといけないのはわかるけど、このスレには自分で書いたスクリプトを
走らせてる人も多いと思うんだけど、これはヤバいかな?みたいな定性的な判断ってどうしてるのかな。
0081nobodyさん2007/06/11(月) 20:01:33ID:???
自鯖だから気にせん
0082nobodyさん2007/06/11(月) 20:46:11ID:???
Socket : 微妙
GD : 大変微妙
fork ; sine

こんな感じ
0083nobodyさん2007/06/11(月) 22:01:55ID:???
100文字程度の任意の文字列をPerlのみで縦書きに書き換えるにあたり、
当方何も思いつきませんので、何か思いついた方がいらしたら教えて下さい。

【入力例】
前走の大敗がよく分からないが、引き続き毛ヅヤや馬体の
張り等は際立って良く見える。

【出力例】
見際体きいよ前
え立の毛がく走
るっ張ヅ、分の
。てりヤ引か大
 良等やきら敗
 くは馬続なが
  、

実際は縦書き用の等幅フォントを使用します。
0084nobodyさん2007/06/11(月) 22:57:17ID:???
日本語の方は encode の勉強をしてくれ。
my $str = 'hogehoge,fugafuga,piyopiyo,barbar'x3 ;
my @word ;
my $cnt = 0 ;
for ( split //, $str ){
if ( $cnt == 10 and ! /^,$/ ){
push @{$word[10]}, q{ } ;
push @{$word[0] }, $_ ;
$cnt = 1;
next ;
}
push @{$word[ $cnt]}, $_ ;
$cnt == 10 ? $cnt = 0 : $cnt ++ ;
}

my $len = @{ $word[0] } ;
for my $line ( @word ){
push @{ $line }, q{ } if $len != @{ $line } ;
print join q{}, ( reverse @{ $line }) , "\n" ;
}
0085nobodyさん2007/06/11(月) 23:01:51ID:???
use strict;
use warnings;
use utf8;
binmode STDOUT, ":utf8";
my $text = '前走の大敗がよく分からないが、引き続き毛ヅヤや馬体の張り等は際立って良く見える。';
my $wrap = 6;
my ($i, @cols);
for my $str (split //, $text ) {
unshift @{$cols[$i++]}, $str;
$i=0 unless $i % $wrap;
}
my $len = @{$cols[0]};
for my $col (@cols) {
if (my $space = $len - @$col) {
unshift @$col, (" " x $space);
}
print join("", @$col), "\n"
}


俺の無い知恵を絞った力作
0086nobodyさん2007/06/11(月) 23:21:40ID:???
禁則処理まで要求すんのかあ…ガンガレ!
0087nobodyさん2007/06/11(月) 23:37:43ID:LQaHOZkB
Perl初心者です。
よろしくおねがいします。

メールフォームで添付ファイルをつけて送信されるようにしたいと
思っているのですが、添付されたファイルが全て1バイトになっていまいます。

考えられる原因は何でしょうか?
サーバーの一時フォルダ(temp)にアップロードされているファイルは0バイト
になっています。

どうぞよろしくおねがいします。
0088nobodyさん2007/06/11(月) 23:38:11ID:???
>>84-85
ありがとうございます。恐縮です。
後で試してみます。
>>86
もしかして禁則無いですか?
まぁアイデアは貰えたのでそのへんは己で何とかします。
0089nobodyさん2007/06/11(月) 23:42:23ID:???
>>88
84 には振り下げが含んである(一応)。後は自分で頑張れ。
0090nobodyさん2007/06/11(月) 23:45:39ID:???
マルチパートになってる?
0091nobodyさん2007/06/11(月) 23:52:48ID:LQaHOZkB
届いたメールは

Subject: $B%5%$%H$NEPO?(B
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="abcdefghijklmnopqrstu"

--abcdefghijklmnopqrstu
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encording: 7bit

こんな感じになっています。

これはマルチパートになっているということでいいんでしょうか?
0092nobodyさん2007/06/11(月) 23:54:50ID:LQaHOZkB
open(MAIL,"|$SENDMAIL -t");
print MAIL "To: $mailAdd\n";
print MAIL "From: $custAdd\n";
print MAIL "Reply-To: $custAdd\n";
print MAIL "$mailTitle\n";
print MAIL "Mime-Version: 1.0\n";
if($filename){
print MAIL "Content-Type: multipart/mixed; boundary=\"abcdefghijklmnopqrstu\"\n\n";
print MAIL "--abcdefghijklmnopqrstu\n";
print MAIL "Content-Type: text/plain; charset=ISO-2022-JP\n";
print MAIL "Content-Transfer-Encording: 7bit\n\n";
} else{
print MAIL "Content-Type: text/plain; charset=ISO-2022-JP\n";
print MAIL "Content-Transfer-Encording: 7bit\n\n";
}
print MAIL "$body";
if($filename){
print MAIL "--abcdefghijklmnopqrstu\n";
print MAIL "Content-type:";
print MAIL &filetype($filename2);
print MAIL "Content-Disposition: attachment; filename=\"$filename2\"\n";
print MAIL "Content-Transfer-Encoding: base64\n\n";
print MAIL "$encodetenp\n\n";
print MAIL "--abcdefghijklmnopqrstu--\n";
}

close (MAIL);

ソースの方はこんな感じにしています。
ファイル名は正しく添付されているのですが、なにせ中身がありません・・・
よろしくおねがいします。
0093nobodyさん2007/06/12(火) 09:41:54ID:???
BBS等で使われるオートリンクについて質問です。
あんまり長いURLの場合は、URLを省略して表示させたいのですが、
どうすればいいのでしょうか?
例えば30文字以上のURLだったら、後半を省略してリンクさせる。

【例】ttp://www.yahoo.co.jp/ex…


-----------------------------
sub auto_link {
$_[0] =~ s/([^=^\"]|^)(https?\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)/$1<a href=\"$2\">$2<\/a>/g;
}
-----------------------------
0094nobodyさん2007/06/12(火) 10:01:51ID:???
>>92
その部分だけではなんともいえない。Perlプログラムがどうこうより、まずは
生成されたメールのソースをよく見て関連するRFCに照らし合わせて正しいか
どうか確認したほうがいいと思われる。
0095nobodyさん2007/06/12(火) 10:07:52ID:???
>>93
s///のeオプション使って好きに加工すればOK
0096nobodyさん2007/06/12(火) 10:28:43ID:???
>>93
もとのURLの後半をcutしてから『…』くっつけて、
html出力するときにリンクタグではさめばいいだけじゃん
何を悩む必要があるのかわからないんですけど
0097nobodyさん2007/06/12(火) 11:51:51ID:???
>>96
俺は君の回答がさっぱりわからない。
cutしてからリンクタグだと、リンクの飛び先も…になるじゃない。
しかも>>93が言っている変換対象の変数にはURLがひとつというわけでもなさそうだし。
0098nobodyさん2007/06/12(火) 12:40:01ID:???
表示するURLと、アンカーに含めるURLを別々に保持してっていう考えすら浮かべられないの?
初心者にも程があるだろ
0099nobodyさん2007/06/12(火) 12:43:17ID:???
>>93=>>97
氏ね
$_[0] =~ s/([^=^\"]|^)(https?\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)/$1 . '<a href="' . $2 . '">' . (length $2 > 30 ? substr($2, 0, 30) . '…' : $2 ) . '<\/a>'/egx;
0100nobodyさん2007/06/12(火) 12:44:13ID:???
キチガイの相手なぞしてやるな。
0101972007/06/12(火) 12:56:27ID:???
>>98
申し訳ない。
少し有名なもんで天狗になっていた。
ソースを提示してもらえないでしょうか。
0102nobodyさん2007/06/12(火) 13:12:38ID:???
>>83
use String::Multibyte;

my $mcbs = String::Multibyte->new('shiftjis');

(my $str = <<"EOF") =~ tr/\r\n//d;
前走の大敗がよく分からないが、引き続き毛ヅヤや馬体の
張り等は際立って良く、見える。
EOF

my $length = 6;

my @array;
my @str = $mcbs->strsplit('', $str);
while(@str){
foreach(0..$length-1){
unshift(@{$array[$_]}, shift(@str) || ' ');
}
unshift(@{$array[$length]}, ($mcbs->strspn($str[0], '、。') ? shift(@str) : ' '));
}

foreach(@array){
print @{$_}, "\n";
}

# つか、乗り遅れた感。

>>92
一度、MIME::LiteやMIME::toolsとかモジュール使ってみて比較してみれば。
0103nobodyさん2007/06/12(火) 13:25:10ID:???
有名ってなんだよwwww
ふつーに変数2つとか配列とかハッシュとかに突っ込んで片方cutすりゃいいだけだろ
ソースもクソもねえよ
0104nobodyさん2007/06/12(火) 13:25:13ID:???
文字列を禁則を考慮しつつ行に分けるのとそれを縦書きに組み替えるのは
一度にやらない方が見通しがよいんじゃないか? 前半はJcodeのjfoldとか
使えばいいわけだし。
0105nobodyさん2007/06/12(火) 13:43:40ID:???
愚直に作るとこんな感じだけど、ちょいと微妙。
文字の切り分けは、どこかで一文字単位にしないといけないので、一度にsplitした方がいいように思う。

my @str = $mcbs->strsplit('', $str);
my @array;
# 一定の長さで区切って配列を作る
while(@str){
my $l = [map{shift(@str) || ' '}(1..$length)];
push(@{$l}, ($mcbs->strspn($str[0], '、。') ? shift(@str) : ' '));
push(@array, $l);
}
# 縦横を変える
my @array2;
for my $i (0..$length){
push(@array2, [reverse map{$array[$_]->[$i]}(0..$#array)]);
}

foreach(@array2){
print @{$_}, "\n";
}
0106nobodyさん2007/06/12(火) 13:47:43ID:???
>>102
mcbsとヒアドキュメントのダブルクォートと\rに突っ込んどくw

>>103
だから相手にするなって。
0107nobodyさん2007/06/12(火) 13:51:06ID:???
おまえも文章の誤解をしている時点で初心者以下の糞レベルであることには変わらんよ
0108nobodyさん2007/06/12(火) 13:54:55ID:???
はいはいおもしろいおもしろい
0109nobodyさん2007/06/12(火) 14:02:36ID:???
>>106
mcbsは… orz
脳内 =~ s/mcbs/mbcs/g;
0110nobodyさん2007/06/13(水) 07:53:10ID:???
聞く方も答える方も初心者かよ
0111nobodyさん2007/06/13(水) 09:14:14ID:???
はいはいおもしろいおもしろい
0112nobodyさん2007/06/13(水) 18:24:42ID:???
変数に代入できる値の制限はあるのでしょうか?
文字列だと1000文字まで、数値だと100桁まで...等
検索してもそれらしい情報が見つかりません…。
0113nobodyさん2007/06/13(水) 18:59:02ID:???
数値はあったが忘れた。Math::BigIntで検索すれば何か出る。
0114nobodyさん2007/06/14(木) 19:22:36ID:???
CGIで質問フォームを作ってそれが完了したと同時にメールが送られるようにしてるんだけど、
一定文字数を越えると文字化けしてしまう。。
誰かこの文字化けが何系の文字コードか分かる方います??

$"$($($($($($($($($($($($($($($($($($($($($($($($($($($($($($($($($($($($3$3$G2~9T$*$*$*$*$*$*$*$*$*$*$*$*$
0115nobodyさん2007/06/14(木) 19:39:52ID:???
普通に考えりゃ7bitJISだよね
そんな風に出るわけねーと思うけど
0116nobodyさん2007/06/14(木) 19:52:43ID:???
ありがとうございます。
ヘッダに
Content-Transfer-Encoding: 7bit
を付加してみましたが結果変わらず。。
途中までは普通に文字が表示されてるんだけど途中から急に上みたいな文字列になってしまう。
メール分を生成してるところで本文が入っている変数をDumpしてみたけど
そこは特に文字化けも無く全ての文字が正常に格納されている状態。。。
メールのヘッダとかその辺の設定しか考えられる余地が無いのだけど、うーん。。。
0117nobodyさん2007/06/14(木) 19:55:49ID:???
>>114
見るからにJISのひらがなあたりだろ。EUCのMSB落ちかもしれない。
とりあえず頭にESC-$-B補ってnkfに食わせたら

あえええええええええええええええええええええええええええええええええええここで改行おおおおおおおおおおおお

と出ました。
0118nobodyさん2007/06/14(木) 20:01:39ID:???
すごい!そう打ちましたw

>頭にESC-$-B補ってnkfに食わせたら
この部分がさっぱりですがググリながら実装方法を調べてます。
感動しましたw
0119nobodyさん2007/06/14(木) 20:07:49ID:???
$B$J$K$2$J$/BG$C$?J*$,;/$5$l$A$c$&$N$O0U30$HCQ$:$+$7$$$+$b$J!D#w
0120nobodyさん2007/06/14(木) 20:10:02ID:???
実装というか欠落したメールを復元するだけなのか(´・ω・`)
0121nobodyさん2007/06/14(木) 20:11:35ID:???
>あえええええええええええええええええええええええええええええええええええここで改行おおおおおおおおおおおお

わらたw
0122nobodyさん2007/06/15(金) 09:18:42ID:???
まあ、テスト時に特に意味の無い文字列を送るのはEメールの伝統ではあるが。
0123nobodyさん2007/06/15(金) 10:00:59ID:???
open(FH, 'test.txt');
$content = <FH>;
$content or die;
close(FH);

みたいに、closeする前に終了する(可能性がある)のはあまりよろしくないでしょうか?
0124nobodyさん2007/06/15(金) 10:09:53ID:???
終了する時にはcloseするので何の問題もない。
01251232007/06/15(金) 10:12:39ID:???
>>124
即レスthx
0126nobodyさん2007/06/15(金) 23:57:47ID:???
個人的にはちゃんと閉じたいけどね
0127nobodyさん2007/06/16(土) 02:33:58ID:???
そんなことを気にしているくらいならopen文のエラーも気にしろよ
0128nobodyさん2007/06/16(土) 03:01:26ID:???
俺はかならずifの中でopenしてる
0129nobodyさん2007/06/16(土) 03:12:20ID:???
unlessじゃ駄目?
0130nobodyさん2007/06/16(土) 04:00:22ID:???
>>128
Cから来た奴は必ずそうするがorが最もスマートだ
0131nobodyさん2007/06/16(土) 04:25:42ID:???
> Cから来た奴は必ずそうするがorが最もスマートだ

or のあとにブロック書ける?
0132nobodyさん2007/06/16(土) 05:43:36ID:???
... or do{ ... };
0133nobodyさん2007/06/16(土) 05:46:41ID:???
え?
こんな高い位置にブロック書くの?
ちょっと書いてみて。

sub error
{
    my($str) = @_;
    print $str;
    exit;
}
sub main
{
    open(FILE, "< uso.txt") or &error("そんなファイルないよ");
    my @lines = <FILE>;
    close(FILE);
    $#lines < 0 and &error("中身ないよ");
    # 以下略
}

はースッキリ快適。
0134nobodyさん2007/06/16(土) 09:51:02ID:???
>>133
「 can か cannot」かって聞かれて(と判断して) can と答えたんじゃね?
実際やるか とは別でしょ。
01351322007/06/16(土) 12:14:24ID:???
>>133
>>131
> or のあとにブロック書ける?
を質問と捕らえて回答したまで。
0136nobodyさん2007/06/16(土) 12:43:25ID:???
2引数openとか古臭い書き方だなあ
0137nobodyさん2007/06/16(土) 13:49:35ID:???
批判はするが例を示さない
この板らしいっちゃらしいな
0138nobodyさん2007/06/16(土) 17:06:40ID:???
示すまでもなくperldocに書いてあります
0139nobodyさん2007/06/16(土) 17:39:20ID:???
今後当スレはPerlDocに統合します。
長らくの御愛顧ありがとうございました。
ttp://www.ayni.com/perldoc/

--完--
0140nobodyさん2007/06/16(土) 17:51:06ID:???
確かにこの低レベルなスレはperldocと統合しても何ら差支えはないだろう
あ、ム板の方は高レベルなので残して置いて下さいね^^
0141nobodyさん2007/06/16(土) 17:53:36ID:???
ム板ならともかくこっちなら2引数で正解だな。
どこにでも5.6以上のPerlが置いてあるなんて考えるのは甘い。
0142nobodyさん2007/06/16(土) 18:25:16ID:???
顔赤すぎ
0143nobodyさん2007/06/16(土) 18:25:26ID:???
まあ現代の大抵のレン鯖は5.8なのが事実ですけどね
0144nobodyさん2007/06/16(土) 18:36:36ID:???
ム板って何?
前スレの終わり辺りから何かあると盛んに出てくるけど
0145nobodyさん2007/06/16(土) 18:50:25ID:???
OS再インストールしたら自己解決しました。
ttp://pc11.2ch.net/test/read.cgi/tech/1173880452/
2chか。レベル高いってネタだよね?

105 デフォルトの名無しさん [sage] Date:2007/03/22(木) 22:45:19  ID: Be:
    HTTP 500 - 内部サーバー エラー です
106 デフォルトの名無しさん [sage] Date:2007/03/22(木) 22:48:42  ID: Be:
    なんでブラウザにエラーが出るわけ?

いやApacheの設定なんですけどね…
前スレの終わりでuse Benchmark;使ったら全員で猿のようにベンチマーク。
未だに。2chばかり見てるとますますバカになるよ。
0146nobodyさん2007/06/16(土) 20:33:02ID:???
>>141
粘着君の相手するなよ。
0147nobodyさん2007/06/16(土) 21:07:50ID:???
>>141
FileHandleやIO::Fileモジュールを使おうよ。
0148nobodyさん2007/06/16(土) 21:08:54ID:???
だって遅いしー
0149nobodyさん2007/06/17(日) 00:01:52ID:???
PerlモジュールのEmbed::Persistentはどこにありますか?
Win (no cygwin) + lighttpd + FastCGIでPerl 5.8を動かしたいのですが、ppmで引っかかりませんでした
0150nobodyさん2007/06/17(日) 10:35:59ID:???
普通にいつものページで検索すればありましたが

Win32 PPM packages for "ExtUtils-Embed"
trouchelle.com Perl 5.8 repository [ v 1.14 ]
0151nobodyさん2007/06/18(月) 00:25:21ID:k4WptDOc
メールで送信した内容をCGIで処理するには、
どうしたらよいでしょうか?
MovableTypeやWordPressのメール投稿のようなイメージです。
mail@hoge.comに送信して、www.hoge.comのCGIで
その投稿内容を読むといった感じです。

PerlでPOPクライアントを書いて、内容を取得して、
それをcronで回すくらいしか思いつかないのですが、
cronを回せるレンタルサーバも少ないですし、
回せても1時間毎くらいがせいぜいだったりしますし。
0152nobodyさん2007/06/18(月) 00:46:35ID:???
ログイン時に受信すればいい
0153nobodyさん2007/06/18(月) 05:55:05ID:???
151 さんは、メールを送った直後に自動更新されることを期待していると思うんだ。
152 みたいなバカは死ぬとよい。
0154nobodyさん2007/06/18(月) 06:31:20ID:???
>>151 = >>153
バカな153のせいで、151の質問に答える奴はいなくなりましたとさ(終)
0155nobodyさん2007/06/18(月) 06:32:06ID:???
>>152 == >>154 ?
0156nobodyさん2007/06/18(月) 06:45:55ID:???
ここまで俺の
01571542007/06/18(月) 07:36:43ID:???
>>155
まぁ、そうくるだろうと思ったよ。マジレスすると152は漏れじゃない。
信じなくても良いけど、>>153を援護すればする程、>>151の質問に
答える奴はいなくなるよ?(w
0158nobodyさん2007/06/18(月) 07:57:34ID:???
ここまで俺の
0159nobodyさん2007/06/18(月) 08:46:27ID:???
神経戦乙
0160nobodyさん2007/06/18(月) 09:05:53ID:???
> 答える奴はいなくなるよ?(w

答える能力はないが煽っていますということ?
0161nobodyさん2007/06/18(月) 09:30:18ID:???
qmailならhomeディレクトリにメール受信時にスクリプトを動作させることはできるが、
他のメールサーバーでも同じことはできるかと思う
0162nobodyさん2007/06/18(月) 13:27:43ID:???
答える答えない以前に、Perlの質問じゃないから。
0163nobodyさん2007/06/18(月) 13:29:32ID:???
> 答える答えない以前に、Perlの質問じゃないから。

それがどうしたの?
0164nobodyさん2007/06/18(月) 13:59:19ID:???

それがどうしたの、と言われましても…
ここはPerl"コーディング"質問スレな訳ですし。
ロジック的なことを聞きたいのならば、
この板にも適切なスレッドがありますし、
更に深い内容ならUNIX板とかに行けば良いでしょう。
しかし、そのロジックを理解した上でのコーディングに関する
質問はスレ違いではありませんが、レベル的に
"自分で考えれば分かる"程度なので、処理をアシストする
モジュールくらいしか案内出来ないでしょう。
少なくとも 151 の書き込みを読む限りでは。
0165nobodyさん2007/06/18(月) 14:18:33ID:???
>>153>>152 を煽る理由がわからん
152 が質問者なのか
違うのなら質問に答えると思うが
0166nobodyさん2007/06/18(月) 14:47:39ID:???
上島竜平は まで読んだ。
0167542007/06/18(月) 15:51:47ID:???
>>152-155まで皆氏ねば済む話じゃないか
0168nobodyさん2007/06/18(月) 15:52:52ID:???
名前欄誤爆った…54ってorz
0169nobodyさん2007/06/18(月) 16:14:07ID:???
情けない質問するやつも氏ねば済むんじゃね?
0170nobodyさん2007/06/18(月) 16:21:21ID:???
メール着信でスクリプトをキックする方法は、管理者に訊いた方がいい。
システム構成によって方法が違うから。
禁止されてるかも知れないし、maildropが使われてるかも知れない。

ここからPerlコーディングについての質問。
0171nobodyさん2007/06/18(月) 18:46:23ID:???
もうバレバレじゃん(w
>>153を援護する奴が>>151(質問者)だろ?
大体、質問した奴がこの流れで16時間も静観してる訳無いだろ?
しかも口調が一緒だし(w

>>151 = >>153 = >>155 = >>160 = >>163

質問に答えてもらおうと必死。
0172nobodyさん2007/06/18(月) 19:28:33ID:???
>>171
スレ違い
0173nobodyさん2007/06/18(月) 19:32:33ID:???
+= >>172
0174nobodyさん2007/06/18(月) 19:39:27ID:???
my $intAnchor = 1;

while( $intAnchor < 1001 ) {
>>172 += $intAnchor;
$intAnchor++;
}
0175nobodyさん2007/06/18(月) 19:57:19ID:???
0176nobodyさん2007/06/18(月) 20:07:15ID:???
いや>>151 = >>153 = >>155 = >>160 = >>163も十分見苦しいけど、
>>152 = >>154 = >>157 = >>165 = >>171もなんか必死すぎて嫌いだ
お前ら皆どっかいっちゃえ!!!11
0177nobodyさん2007/06/18(月) 21:04:16ID:???
>>151
CGIで読むってことは、CGIがメーラー(POPクライアント)の役割をするわけだから、
CGI起動時にメールボックスから届いたメールを読み出せばいいのでは。
Net::POP3でも使ったらどうですか? 読み出したらサーバから削除するなどの
処理はすべて自分で書く必要があります。GUIのないメーラーを作るようなもんです。
…ていうことではなくて、届いたタイミングで、届いたメールデータを処理したい
ってことかしら。であれば、perlというよりは、.forwardまたはdot-qmailファイル
にでもプログラムにパイプで渡す設定をしておけば、プログラムから標準入力
を読んで処理すれば済む。MIME::Parserを使うと便利。
まずはコードを書いてみることです。
0178nobodyさん2007/06/18(月) 21:31:22ID:???
素朴な疑問。
CGIで、場合によってLocationヘッダを返した場合、
ユーザからみると、即座にページを飛ばされるんですが、
そのCGIはLocationヘッダを返したあともexitしない限り、
以後の処理をし続けるんでしょうか。
0179nobodyさん2007/06/18(月) 21:41:57ID:???
#!/usr/bin/perl

use strict;
print "Location: http://www.yahoo.co.jp/\n\n";
sleep(10);
exit;
0180nobodyさん2007/06/18(月) 21:45:01ID:???
どうも。確かめる方法がわかりました。つまらん質問すみません。
飛ばした後にファイル出力できたので、ちゃんと最後まで処理しますね。
てことは飛ばした場合もちゃんとexitしたほうが無駄が少ないということ
ですよね??
0181nobodyさん2007/06/18(月) 21:57:32ID:???
きみの言う無駄とは?
0182nobodyさん2007/06/18(月) 22:27:24ID:???
ああ、そういう突っ込みになりますよね。無駄があるのは僕だけの事情でした。
例えば、通常、ウェブページをきちんと出力するルーチンの途中で例外的に
飛ばした場合の、その後のページ出力処理、とか。
0183nobodyさん2007/06/18(月) 23:07:27ID:???
179さんの言ってる意味がいま解りました。最後まで処理しないと
飛ばないんですね。面目ない。
0184nobodyさん2007/06/18(月) 23:15:58ID:???
そりゃ単にバッファをフラッシュしてないだけだろ
01851512007/06/18(月) 23:52:23ID:k4WptDOc
質問の仕方等々で至らぬ点があり、なんだか揉めてしまったようで申し訳ないです。
普通に帰るのが遅い人間&出先から書きにくい状態でした。

意図としては>>177さんが書いてくださったような、
「届いたタイミングで、届いたメールデータを処理したい」、
つまり、メールを受けたことをトリガとしてバックエンドの処理を動かすという
というものでした。
例えば、メールで「1+1」と送ると、バックエンドで計算処理をして、
答えを「2」で返す、というような。

ご指摘いただいたように、Perlコーディングという内容ではないので、
いただいたお答えを元に、うちの環境で確かめることにしてみます。

ほんとうにありがとうございました。
0186nobodyさん2007/06/20(水) 13:54:26ID:???
改行を含む文字列の中の一部分を取りたいときに、直近の改行コードまでという指定は出来ないものでしょうか?

kani
kanimiso@
kanikama

上のような文字列(@部分がいろいろ変わる)からmiso@を抜き出したいんだけど

s/.*kani(.*)\n/$1/;

みたいにするとmiso@\nkanikama\nまでが取れてしまいます。
0187nobodyさん2007/06/20(水) 14:25:25ID:???
最短マッチとかs修飾子とか
0188nobodyさん2007/06/20(水) 14:53:02ID:???
最短マッチで出来ました。ありがとうございました。
0189nobodyさん2007/06/20(水) 18:37:42ID:???
中身が空っぽもしくは
<html>
<head></head>
<body>
</body>
</html>
になってるファイルに<p>hogehoge</p>を書き込んで
<html>
<head></head>
<body>
<p>hogehoge</p>
</body>
</html>
にしたいのですがどうしたらよいでしょうか。
0190nobodyさん2007/06/20(水) 18:40:27ID:???
>>1
0191nobodyさん2007/06/20(水) 18:40:41ID:???
質問ってレベルじゃねえぞ…
0192nobodyさん2007/06/20(水) 18:40:54ID:???
>>189
それだけの条件なら何も考えずに最終結果を固定で上書きするだけでいいんじゃねーの?
0193nobodyさん2007/06/20(水) 18:43:32ID:???
すみません>>189に追加させてください

<body>〜</body>に<p>hogehoge</p>以外に既に何か文字が入っていても
それを消さずにその下に追記するようにしたいのです。
<body>
<p>fugafuga</p>
</body>

<body>
<p>fugafuga</p>
<p>hogehoge</p>
</body>
こんな感じです
0194nobodyさん2007/06/20(水) 19:04:32ID:???
HTML::Templateでも使っとけよ・・・
0195nobodyさん2007/06/20(水) 20:24:57ID:???
open(FILE,"<index.html");
my $html = <FILE>;
close(FILE);
$html =~ /<\/body>/;
my $top = $`;
my $bottom = $';

$top .= "<p>追加する文字列</p>\n";
$top .= $bottom;

open(FILE,">index.html");
print <FILE> $top;
close(FILE);

exit;

This is not confident.
Please point it out when the mistake is found.
0196nobodyさん2007/06/20(水) 21:07:55ID:???
perl -MIO::All -e '($tmp = ${io("index.html")}) =~ s{(</body>)}{<p>hogehoge</p>$1}, $tmp > io("index.html")';
0197nobodyさん2007/06/20(水) 21:32:55ID:???
perl -0777 -i.bak -pe 's{(</body>)}{<p>hogehoge</p>\n$1}' index.html
0198nobodyさん2007/06/20(水) 22:14:26ID:???
>>189です。みなさんありがとうございます。
ご飯食べてお風呂入ってるあいだ自分でもこんなの思いついたんですけど
>>195さんのとかのほうがスマートでしたね

if (-e $xmlfile && -s $xmlfile) {

open (FILE, "<test.htm") or die "$!";
@file = <FILE>;
close (FILE);

foreach $line (@file){
if($line =~ /<\/body>/){
$line =~ s/$追加する文字列\n$&/;
}
}

open (FILE,">test.htm");
print FILE @file;
close(FILE);

} else {

open (FILE, ">test.htm") or die "$!";
print FILE "<html>\n<head>\n</head>\n<body>\n$追加する文字列</body>\n</html>\n";
close (FILE);

}

0199nobodyさん2007/06/20(水) 22:45:40ID:???
/<\/body>/ こんな書き方する馬鹿は氏ねばいいのに!
0200nobodyさん2007/06/20(水) 23:06:37ID:???
>>199
だめなの?
0201nobodyさん2007/06/20(水) 23:09:39ID:???
>>199
そこまでは思わんが、実行するまでもなくグダグダな195に
195を実行せずにレスする質問者を見るとなあ。
0202nobodyさん2007/06/21(木) 00:03:24ID:???
>200
if ($line =~ m{</body>})
こんな感じにしたほうが読みやすいだろ、ってこと
0203nobodyさん2007/06/21(木) 00:04:59ID:???
いや
別にいいだろwww
0204nobodyさん2007/06/21(木) 00:15:52ID:???
それだけで氏ねとか言われたならなんだかちょっぴりかわいそすwww
0205nobodyさん2007/06/21(木) 00:35:30ID:???
基本だろ。大丈夫か?
ってまた彼が言ってるだけか。
0206nobodyさん2007/06/21(木) 01:03:59ID:???
>>189へのレスのシカトっぷりと、結局自分で書けた(=質問する意味ね
えじゃん)って事と、>>195のふざけた態度みて(なにが添削しろだよ、
せめてsyntax errorなくしてからレスれ)寛大で居られるおまえらは凄い。

氏ねとは思わんが消えろとは思うぞ、心の底から。
0207nobodyさん2007/06/21(木) 01:06:53ID:???
Template
0208nobodyさん2007/06/21(木) 01:09:30ID:???
>>206のキレっぷりも凄いがなw
>>195の最後の2行は「これ自信無い。間違ってたら指摘して」って事じゃねぇの?
0209nobodyさん2007/06/21(木) 01:15:30ID:???
>>189は釣りだったってことで
0210nobodyさん2007/06/21(木) 01:17:03ID:???
>>195は回答者としては初心者(良回答とは言えない)だろうが、
一応>>193の答えにはなってるからいいんじゃないのか?
自分で書けた〜のくだりは同感だが、そんなのにいちいち目くじら立ててもな。
ついでに言うと、>>206は海外に行かない方が良さそうだな。
0211nobodyさん2007/06/21(木) 01:20:11ID:???
>>210
syntax error出るのが答えなの?
要件にも沿ってないよ。実行してみ?
0212nobodyさん2007/06/21(木) 01:25:23ID:???
>>208
正確な和訳は出来てたが、つい勢いで。
>>210
どっちかってーと質問者よりも195の方が消えて欲しい。
一回くらいは実行してから、レスするのが礼儀じゃないか?
特に自信ないならなおさら。

最後の一行は同意。
0213nobodyさん2007/06/21(木) 01:27:55ID:???
>>208
そう書いたつもりなんだろうけど「俺じゃなくてこのコードさんが、自信がない、と」に
なってたりでいろいろアレなことになってる。

>>206
俺は寛大じゃないけどめんどくさいので>>195はほったらかしてた。

>>210
辞書で confident 引いて用例眺めろ、ってあんたに言えば>>195に伝わりそうな気がする。
0214nobodyさん2007/06/21(木) 01:53:11ID:???
質問者が自己解決するまでに
ろくな回答もできない低脳どもの集まるスレはここですか?
0215nobodyさん2007/06/21(木) 10:11:00ID:???
違う。
お前が一人で荒らしてるスレ。
0216nobodyさん2007/06/21(木) 10:22:50ID:???
これだからPerlはwww
tp://0-9.sblo.jp/article/4439458.html
0217nobodyさん2007/06/21(木) 10:28:38ID:???
>>194
0218nobodyさん2007/06/21(木) 13:21:32ID:???
"1,21,10,100,1"のようにランダムに数字が入った文字列の中で
「1」という要素が含まれているかどうかを知りたいのですが、
splitで配列化してハッシュに入れる方法以外には無いでしょうか?

最短マッチで

$data = '1,21,10,100,1';
if ($word =~ /(1?,)/) { print "存在します¥n"; }

とやったら最後にある「1」がチェックできませんでした。
0219nobodyさん2007/06/21(木) 13:47:27ID:???
色々勘違いしてそうだから「最短マッチ」でググるといいよ
それと$dataと$wordのtypo
0220nobodyさん2007/06/21(木) 13:53:22ID:???
おまえら魚でも食って落ち着けよ
0221nobodyさん2007/06/21(木) 14:35:54ID:???
if (grep { $_ eq '1' } split(/\,/, $data)) { print "存在します\n"; }
0222nobodyさん2007/06/21(木) 14:51:26ID:???
/1(,$)/じゃダメ?
02232182007/06/21(木) 14:57:47ID:???
>>219
ググって勉強し直しました。typo_| ̄|○
文字列なのだからわざわざ分割せずに正規表現を使って調べる方法は無いかと
思ったのですが、素直に分割した方が早そうですね。
221さんもありがとうございました。
0224nobodyさん2007/06/21(木) 16:08:32ID:???
if($data =~ m/1/g){print"存在します\n"}
0225nobodyさん2007/06/21(木) 16:14:09ID:???
/\b1\b/
0226nobodyさん2007/06/21(木) 16:22:39ID:???
print "存在します\n" while($data =~ m/\b1\b/g);
0227nobodyさん2007/06/21(木) 16:28:11ID:???
if($data =~ /^1,|,1,|,1$/){ print "true \n"; }
0228nobodyさん2007/06/21(木) 16:52:54ID:???
>>216
>CGI.pmをラップしてMyCGI.pmを作った。
>CGI::Varsを上書きして定義し、最後に「return $this->SUPER::Vars()」とかした。
>帰ってきたのはhashに見える別物。参照を突っ込むと「'ARRAY(nnnn)'」って文字列で保存しやがる。
>保存できねぇなら半端にやらずにいっそ死んでくれ。。。

ってどういうこと?
0229nobodyさん2007/06/21(木) 17:06:27ID:???
質問です。
CGIの処理で、別のCGIを呼び出すにはどうしたらいいのでしょうか?
例えばセッションを確認して、有効じゃなかったので、ログインページを表示するCGIに
飛ばす場合などです。
現状ではレスポンスヘッダーのlocationに、呼び出したいCGIのパスを指定して渡していますが、
そうするとサーバはperlの起動を2回してることになって負荷的にスマートじゃない気がします。
何か定番のやり方があれば教えてください。
0230nobodyさん2007/06/21(木) 17:22:50ID:???
>>229
俺はlocationにしてるな。
locationをブラウザに渡してからリクエストを受けるから2回起動してるわけじゃないぞ。
0231nobodyさん2007/06/21(木) 17:33:17ID:???
うちもlocationだなー。
で、飛ばす先(CGI)へのパラメータとして、元のページのURLを渡す。
0232nobodyさん2007/06/21(木) 17:40:38ID:???
>>228
「ぼくは頭が悪すぎるから死にたい」ってことじゃね?
0233nobodyさん2007/06/21(木) 17:41:43ID:???
>>228
ログインページ表示を切り出しておいて呼び出すとか。
02342332007/06/21(木) 17:43:15ID:???
×>>228
>>229
0235nobodyさん2007/06/21(木) 18:33:45ID:e31j4SZZ
use strict;
の必要性について教えて下さい。
色んなサイトを見てみても、書いてあることがまちまちで混乱しています。
要はグローバル変数を認めないということだと理解しているのですが、
それは変数名をタイプミスすることによるエラーの回避や
可読性を考慮してのことなのでしょうか?
それともその他に重要な部分があるのでしょうか?
例えば、
$hoge = '2ch';
print $hoge;
という内容で、どこからも呼び出されないfuga.cgiがあった場合、
use strict;
my $hoge = '2ch';
print $hoge;
とする必要性はあるのでしょうか?
0236nobodyさん2007/06/21(木) 18:42:32ID:???
2行なら一目でわかるのでいらないという考え方もあるし、普段から
習慣をつけておくという意味ではやっといたほうがいいという人も
いる。好きにしろ。
0237nobodyさん2007/06/21(木) 18:43:32ID:???
つーかどこからも呼び出されないCGIならそもそも存在する必要ないっしょ
0238nobodyさん2007/06/21(木) 18:43:38ID:???
それは変数名をタイプミスすることによるエラーの回避や
可読性を考慮してのことなのでしょうか?

↑で9割正解かと
0239nobodyさん2007/06/21(木) 18:53:29ID:???

Template Toolkit で EVAL_PERL オプションを付け、
テンプレートの中にPERLのコードが書けるようにしました。
で、下記のように書いてテンプレートフォルダ内の count.txt を読み込むよう記述したのですが
その内容が全く出力されませんでした。
Template Toolkitではパールのコードは書けるけどファイルハンドルは扱えない等、
そういう制限があったりするのでしょうか?

[% PERL %]
open FH,"count.txt";
my @count = <FH>;
print @count;
close FH;
[% END %]
02402352007/06/21(木) 18:59:48ID:???
>>236
これから新たに書く場合は心掛けた方が良いけど
既に書き上げてしまったものの中で、自分でコードを全て把握しており
第三者に読ませることがないものについては放置でも良い
という方針でいこうと思います。

>>237
「そのCGIだけで完結していて、他のCGIから呼び出されない」という意味です。

>>238
ありがとうございます。
「とりあえずuse strict;は必須!」と書いてあるところは多いのですが
そのメリットやデメリットについてまで詳しく書かれているところは少なく
自分の理解が合っているのか不安だったので助かりました。
0241nobodyさん2007/06/21(木) 19:05:29ID:???
>>239
そんな制限はきいたこともないな。よくわからんがファイル開けて
ないんじゃねーの?

printやcloseのエラーまで厳密にチェックしろとまではいわないが、
openのエラーチェックだけは省略しないほうがいいよ。
0242nobodyさん2007/06/21(木) 19:18:14ID:???
>>239
ありがとうございます。
エラーチェックしてみたところ、openの段階でファイルが開けていませんでした。
しかしパスも間違えていないのに何故に開けないんだか。。
原因不明です(´・ω・`)
0243nobodyさん2007/06/21(木) 19:19:16ID:???
すいませんアンカ間違えました。
>>241さんです。
0244nobodyさん2007/06/21(木) 19:52:32ID:???
>>239
ちょこっと検証したけど挙動が変だわw
何れも当環境下なので、あなたの所で上手く行くかどうかは保証外。
以下、成功例
#!/usr/bin/env perl -w
use strict ;
use Template ;
my $tt = Template->new({ EVAL_PERL => 1}) ;
$tt->process(\*DATA, ) ;
__DATA__
[% PERL %]
open FH , 'hoge.pl' or die ;
my @line = <FH> ;
close FH ;
print @line ;
[%- END -%]

'hoge.pl' という名前で保存。これは上手く動いた。ちなみに $/ が undef されてるっぽいので、
@line を $line に変更しても動く。最終改行の制御がどうしても一個多かった。
02452442007/06/21(木) 19:54:53ID:???
失敗例。

my $tt = Template->new({ EVAL_PERL => 1}) ;
$tt->process(\<<"EOF", ) ;
[% PERL %]
open FH , 'hoge.pl' or die ;
my @line = <FH> ;
close FH ;
print @line ;
[% END %]
EOF

Possible unintended interpolation of @line in string at hoge.pl line 9.と
Global symbol "@line" requires explicit package name at hoge.pl line 9.が出る。
かといって my @line を普通に先に宣言しても上手く動かない。
0246nobodyさん2007/06/21(木) 20:22:49ID:???
事故レス。'EOF' にしたら動いた、、、、orz...
0247nobodyさん2007/06/21(木) 20:24:59ID:???
>>245
それはttが動く以前の話だろ。

use strict;
print <<"EOF";
@line
EOF

と同じこと。
0248nobodyさん2007/06/21(木) 20:35:19ID:???
>>244さん
わざわざ検証して下さってありがとうございます!
環境の違いがありますが試してみます!
大変参考になりました、感謝です!
0249nobodyさん2007/06/21(木) 21:06:24ID:???
>>247
> かといって my @line を普通に先に宣言しても上手く動かない。
ってこっちの例を出すべきでしたね。失礼。
02502442007/06/21(木) 22:19:28ID:???
ああ、復活した!
アホでした。245以降の私の戯言は消去してください。バルス!!
ああああああ、穴があったら入りたい。ったらありゃしない。
0251nobodyさん2007/06/21(木) 23:04:05ID:???
unless(open(FILE,"<test.dat")){&error();}
flock(FILE,2);
my @test = <FILE>;
flock(FILE,8);
close(FILE);

として、test.dat(↓)を読み込み、
テスト1
テスト2
テスト3


unshift(@test,"テスト\n");

と先頭に文字列を追加して

unless(open(FILE,">test.dat")){&error();}
flock(FILE,2);
print FILE @test;
flock(FILE,8);
close(FILE);

という様に書き込んだのですが、見てみると

テスト4 テスト1
テスト2
テスト3

の様に改行されず出力されている様ですが、これは何故でしょうか?
02522512007/06/21(木) 23:24:48ID:???
すみません、自己解決しました;
\nではなく\r\nとしたら、理想どおりの結果になりました。
スレ汚しすみませんでした…。
0253nobodyさん2007/06/23(土) 11:05:34ID:???
TT で EVAL_PERL とかするくらいなら php 使ったほうがよくね?
0254nobodyさん2007/06/23(土) 16:43:39ID:???
1: うんこがしたい
2: トイレに行って踏ん張ってみたが
3: うんこがでない
0255nobodyさん2007/06/23(土) 20:09:32ID:???
一つのファイルに以下のように書きます。

use strict;
my $a = 1;
print "$a\n";

これは正しいのに

# b.pl
my $a = 1;
1;


#a.pl

use strict;
require "b.pl";
print "$a\n";

これは正しくないのは何故ですか?
b.plで変数を宣言し、a.plでb.plをrequireしたら、b.plで宣言した変数が使えるのではないですか?
0256nobodyさん2007/06/23(土) 20:13:58ID:???
ファイルスコープ
0257nobodyさん2007/06/23(土) 23:12:26ID:???
そんなこと出来たらいろんなファイルをrequireしたら好きな変数名使えませんね


ちったぁ考えろヴァカが!!!!!
0258nobodyさん2007/06/24(日) 00:04:21ID:???
> ちったぁ考えろヴァカが!!!!!

オマエモナー
以下無限ループ
0259nobodyさん2007/06/24(日) 03:10:40ID:???
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsub.html#Persistent_Private_Variables
> 最も外側のスコープであるファイルスコープで宣言されたのであれば、
> レキシカル変数はCのファイルにstaticなものと同じように振る舞います。
> 同じファイルの、宣言の後にある全ての関数から参照可能でありますが、
> そのファイルの外側から参照することはできません。これはモジュールの中で
> モジュールにプライベートな変数を作るために使われます。
0260nobodyさん2007/06/24(日) 03:11:31ID:???
> ちったぁ考えろヴァカが!!!!!

いつからここは初心者罵倒スレにかわったの?
質問に答える気ないなら繰るなよ
0261nobodyさん2007/06/24(日) 03:13:38ID:???
1行目で答えてるのにそれが目に入らないらしい
眼科池よ
0262nobodyさん2007/06/24(日) 03:23:31ID:???
3行目が目に入らないらしい
眼科池よ
0263nobodyさん2007/06/24(日) 06:49:32ID:???
ん… >>255 = >>258 = >>260 = >>262 なのか?
なんか最近こういうの多くないか…意図的な偽者な気もするけど。
普通に別ファイルでmy付で宣言したら参照出来ないのは当たり前な気がするが
0264nobodyさん2007/06/24(日) 08:29:54ID:???
どーでもいいけど特殊変数の$a, $bでテストするの止めろ。
普通の変数で実行したら、きちんとエラーメッセージが出る
(compilation errors)し、そしたらここで質問せずに済む。
0265nobodyさん2007/06/24(日) 16:08:49ID:???
>>263
>>262だが、>>260の3行目は確かにおかしいが、それに対する>>261
「回答してるからいいじゃん」的な発言もどうかと思うのでレスしただけ。
ここは初心者質問スレなわけで、当たり前の事でもわからない人が来る訳で。
それに対していちいち馬鹿だのなんだのと余計な一言つけないと回答できない
>>257 = >>261 = 263 は来なくていいと思う。
0266nobodyさん2007/06/24(日) 16:35:34ID:???
質問回答じゃない、つまらない煽りが多すぎw
0267nobodyさん2007/06/24(日) 17:01:06ID:???
>>266
オマエモナー
0268nobodyさん2007/06/24(日) 17:18:27ID:???
最近暑いからなぁ
0269nobodyさん2007/06/24(日) 18:02:44ID:???
>>263 だけど同一人物と見なせる >>265 の脳味噌を疑う…
暴言が嫌ならmixiとかでやれよ。ここはそこまで平和な掲示板じゃないっての。
わたくすは普段は回答に罵倒なんか付けない善良な回答者ですが、何か。
0270nobodyさん2007/06/24(日) 18:10:57ID:???

馬鹿扱いされた質問者が
必死になってるとしか思えないww
0271nobodyさん2007/06/24(日) 18:27:57ID:???
0272nobodyさん2007/06/24(日) 19:03:18ID:???
>>269
自分の事を棚に上げる>>269の脳味噌はさぞ凄いんだろうな。

暴言が嫌とか、そもそも俺は質問者じゃないからどうでもいい。
ただ単に>>261が、>>260のレスに対してあほなレスして、
それに俺があほなレスを返したところで善良な(笑)>>263様が登場したわけさ。

>>270みたいな安直な考えしか浮かばないなら、勝手にそう思っとけ^^
0273nobodyさん2007/06/24(日) 19:30:15ID:???
お前ら暇すぎ
0274nobodyさん2007/06/24(日) 19:35:46ID:???
>>272
どこが自分のことを棚に上げてるの?
もしかして>>263の1行目のこと? "なのか?"って読める?
しかもまた>>270と同一人物だと認定するの? どこまで自己中なの?
0275nobodyさん2007/06/24(日) 19:37:42ID:???
どこか他所でやれよ荒らしども
0276nobodyさん2007/06/24(日) 19:59:40ID:???
>>274
ゆとりでしたか^^;
0277nobodyさん2007/06/24(日) 20:21:05ID:???
言い返せなくなったら
ゆとり〜童貞〜中卒〜在日〜部落〜
もうこの手のレッテル貼りは飽きたわ…
0278nobodyさん2007/06/24(日) 20:40:42ID:???
>>274
>>258,260,262は特に質問者を擁護している訳でもないのだが、
>>263は根拠もなく自演を思わせるレスをしている。
なのか?が該当者或いは他の閲覧者に対する疑問文なら相当な池沼。

>>261,263は>>257を擁護しており、
>わたくすは普段は回答に罵倒なんか付けない善良な〜
が「罵倒したのは257の時だけ」とも取れる内容なので、自演と疑われる要素はある。

そして、>>272の末行の内容は269のみに宛てたレスではなく、
270と同様の考えをしている者に向けられたものである。
よって自演を指摘するものではないが、>>274は自己な解釈のみで
自演を指摘するものと判断し、それを根拠に自己中呼ばわりしている。

また、「同一人物だと認定」発言や、それらしい発言が無いにも関わらず「自己中」等という
レスを返す>>274は「ゆとり」或いはそれと同程度の知的レベルであると推測される。

さらに、>>277が269や274と同一人物であるかは定かではないが、
>>276が272であると、やはり自己の解釈のみで判断し、レスをしている。

思考に似た点が多い為、恐らくは同一人物であると推測されるが、いずれにせよ
「自分を非難する者を同一人物とし、レスを勝手に解釈し批判する」という
自分の自己中心的思考に気付かずにレスを繰り返す理解し難い有機生命体には
何を言おうが無駄だと推測できるので、これにて閉店とさせて頂きます。

またのご来店をお待ちしております^−^
0279nobodyさん2007/06/24(日) 21:06:02ID:???
line
[1~] 2chに限らず周りに意見を求めるのを知的障害者と認定するなんて、
   余程あなたは世間知らずなのですね。社会に出ましょう。
[6~] 罵倒自演云々はあなたの勘違いですね。反省して下さい。
[10~] 何度も言いますが、日本語読めますか。私は疑問系で書いてるのに、
    君は265で断定して書いてる訳で。一緒にしないで下さい。
[15~] 自分のレスを読み返せばあなたが自己中なのは明瞭です。
[18~] 自己矛盾してますね。自分で妄想で語ってるのに気付きませんか。
[21~] 同一人物化云々も君の妄想の域を出ませんね。何を言おうが無駄なら
    これ以上私にレスしないで下さいね。閉店とか言って顔文字使ってるのから
    必死さが伝わってきて、個人的に気持ち悪いです。初心者みたいで。
0280nobodyさん2007/06/24(日) 21:11:20ID:???
テンプレもム板からのパクリだしホントこのスレには低脳しかいないな( ´,_ゝ`)プッ
0281nobodyさん2007/06/24(日) 21:25:13ID:???

余程自身が自己中扱いされるのを嫌ってる様だけど、事実なんだよね。
>>265を自分で読み返せば分かると思うけど、一応書いて置くね。
罵倒が嫌なら温いコミュニティに行けば良い訳。それで、自分の掲示板でもないのに

『いちいち馬鹿だのなんだのと余計な一言
つけないと回答できないxxxは来なくていいと思う。』

これは、誰がどう見ても自己中心的な考えだよね、回答者を排除する。
2chは自由な掲示板なんだよ。質問者も自由、回答者も自由。
もちろん、君も意見を言うことは自由だよ。しかし、それによって
住人に叩かれたら、それは事実として認めないといけない訳。
0282nobodyさん2007/06/24(日) 21:30:30ID:???
>>281
基地外乙。
0283nobodyさん2007/06/24(日) 21:35:43ID:???

つまり、何を言いたいかと言うと、君は2ちゃんねるには不向きなんだよ。
こんな些細な「馬鹿」とか「阿呆」に反応してる様ではまだまだ未熟な訳ですよ。
いわゆる半年ROMれっていう。適当な板で経験積んでからお越し下さい。
それでも君がこんな2chの体質は異常だと主張するなら、批判要望板にでも行って下さい。
板違いです。 [2ch批判要望] http://ex21.2ch.net/accuse/
0284nobodyさん2007/06/24(日) 21:44:36ID:???
>>280
ほんとその通り。てか最近ム板にも変な奴が
湧いてるんだよな。お前が主導で捕獲してこっちに連れて来い。
0285nobodyさん2007/06/24(日) 21:49:30ID:???
論破したつもりで長文書いて、
文脈から低脳さが滲み出てる奴多いよね〜
0286nobodyさん2007/06/24(日) 22:16:25ID:???
>>278
なにこの馬鹿
0287nobodyさん2007/06/24(日) 22:22:04ID:???
夏っすね
0288nobodyさん2007/06/24(日) 22:31:22ID:???
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
Perlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろPerlコーディングの話をしろ
0289nobodyさん2007/06/24(日) 22:47:38ID:???
>>288
perlのコーディングの話したら
延々と質問→>>257の流れになるだけだけどな
0290nobodyさん2007/06/25(月) 02:13:52ID:???
>>275に同意。
0291nobodyさん2007/06/25(月) 11:35:07ID:???
かにでも食って落ち着けよ
0292nobodyさん2007/06/25(月) 13:12:47ID:???
いやカニは落ち着けないだろ
0293nobodyさん2007/06/26(火) 07:28:23ID:QSRpPplO
1:CGIでCGIファイルを生成したい。
2:以下のようにやってみました。
open(OUT,"> ./$id/g4.cgi");
print OUT $Buf4;
close(OUT);
chmod 0775,'./$id/g4.cgi';
3:エラー表示発生せず、なぜか属性644で作成される。
以前もどこかのスレに相談させていただいたのですが、
chmod 0775,'./$id/g4.cgi';
↑これでいけるとの事でしたが動きません><
サーバーはジオプラス→ロリポップ→さくらインターネットと乗り換えてみました
いずれも動きません。


0294nobodyさん2007/06/26(火) 08:31:12ID:???
>>293
chmod 0775,'./$id/g4.cgi';

''

""
の違いについて調べれ。

chmod 0775,"./$id/g4.cgi";

これなら動く。
0295nobodyさん2007/06/26(火) 08:31:38ID:???
ときどきCGIを動作させてるとエラーでもなく、正しい表示結果が出るでもなく、



って出るんですが、これはどういうことでしょうか?
0296nobodyさん2007/06/26(火) 10:20:52ID:???
貴方が1と出力するように組んだから。
ソースも無く、再現する状況を並べるでもなく、どうすればいいのか。
0297nobodyさん2007/06/26(火) 10:25:23ID:???
DBIの質問です。

use DBI;
$sth = $db->prepare("SELECT seller, Sum(price) FROM hogehoge GROUP BY seller");
$sth->execute;
while (my $hash_ref = $sth->fetchrow_hashref) {
print "$hash_ref->{seller}  $hash_ref->{Sum(price)}<br>\n";
}

fetchrow_hashrefで、Sum(price)の値を見たいのですが、$hash_ref->{ } の { }中にはどう書けばいいのでしょうか?
0298nobodyさん2007/06/26(火) 10:31:16ID:???
そこでエスパー初心者が登場ですよ

require するファイルの末端に 1; って書くけど、もしかして
実行させる CGI 本体のファイル末端にも 1; を書いていませんか?
0299nobodyさん2007/06/26(火) 10:32:57ID:???
>>297
俺もよく知らんがkeys使うとかして調べればわかるんじゃない?
0300nobodyさん2007/06/26(火) 10:40:05ID:???
>>299
foreach (keys %$hash_ref) { print; } で見てみると、sellerとSum(price)っぽいんだけど、
$hash_ref->{Sum(price)} って書くとエラーになります…
0301nobodyさん2007/06/26(火) 10:47:43ID:???
$hash_ref->{'Sum(price)'} だろ
0302nobodyさん2007/06/26(火) 10:55:12ID:???
>>301
でもだめなようです。スレ違いですが、SQL文を工夫して

use DBI;
$sth = $db->prepare("SELECT seller, Sum(price) AS sumprice FROM hogehoge GROUP BY seller");
$sth->execute;
while (my $hash_ref = $sth->fetchrow_hashref) {
print "$hash_ref->{seller}  $hash_ref->{sumprice}<br>\n";
}

とすることで一応の解決はみたのですが、直接参照する方法はないのでしょうか?
03032962007/06/26(火) 11:13:42ID:???
>>298
書いてません。__END__はありますが・・・
外部ファイルはuseで読み込んでます。
そっちには1;って書いてます。
一体どうしたらいいのか・・・出るのは毎回じゃなくて時々です。
0304nobodyさん2007/06/26(火) 12:42:27ID:QSRpPplO
>>294

ありがとうございました
自作に行き詰まって業者に制作依頼の見積もりしたら40万だったので諦めて
いたのですが、0円ですみましたほんとうにありがとぉ。
0305nobodyさん2007/06/26(火) 13:58:53ID:???
>>302
これでどう?
$hash_ref->{'Sum (price)'},

# 一度、use Data::Dumper; して print Dumper($hash_ref); してみるといいかも。
0306nobodyさん2007/06/26(火) 14:45:38ID:VwPHcZDu
perlを実行すると↓のsftpのコマンドが実行されるようにしたいのですが、
どのように組めばよいですか?
---------------------------
sftp hogehoge
get /home/member/110
bye
-------------------------
0307nobodyさん2007/06/26(火) 14:49:59ID:???
>>306
いくつか方法はあるがどうせそのうちいろんなことしたくなるんだから
Expectモジュール使っとけ。
0308nobodyさん2007/06/26(火) 14:50:33ID:???
そろそろ夏休みですし、夏休み中に色々勉強することをお奨めします
0309nobodyさん2007/06/26(火) 23:20:42ID:???
>>302
普通、お前がやったように
Sum(price) AS sumprice
こうする。これが「直接」でないというお前の感覚が腐っている。
0310nobodyさん2007/06/28(木) 11:56:41ID:YXGDvJmi
今までモジュールを使ったことがなかったのですが、
HTML::Template.pm を使うようになって便利さを感じています。

そこで、フォームの入力の取得も cgi-lib.pl から CGI.pm に変更しようと思い

&ReadParse;
## タグ処理
foreach (keys %in) {
$in{$_} =~ s/</</g;
(略)
}

としているのを、

my $q = new CGI;
my $in = $q->Vars;
foreach (keys %$in) {
$in->{$_} =~ s/</</g;
(略)
}

としてみたのですが、変わった気がしません。

これくらいなら、CGI.pm に変更するメリットはないのでしょうか?

03113102007/06/28(木) 11:59:09ID:YXGDvJmi
s/</&lt;/g;
です。
0312nobodyさん2007/06/28(木) 12:00:42ID:???
変わったところ:標準モジュールになった
これはこれで大きいんじゃないの?
0313nobodyさん2007/06/28(木) 13:46:44ID:5j7nThKQ
cgi-libを利用してアップローダー作りました。
wavファイルをアップしようとしたらこのようなエラー表示が出てアップできません
Short Read: wanted 194, got 0
これがなんなのか教えてください。
0314nobodyさん2007/06/28(木) 14:05:04ID:???
CGI.pmを使ってるのにcgi-libも使ってたりしません?
0315nobodyさん2007/06/28(木) 16:29:12ID:???
オブジェクトを持ちまわせよ
何のためにOOインタフェースも用意してあんだよ
0316nobodyさん2007/06/29(金) 13:30:50ID:FzkfeL60
Shift_JISで出力する場合、全半角の変換を確実に行う方法は
今でもやはりjcode.plが一番なんでしょうか?
Jcode.pmだとEUCを通してから変換を行っているせいか
一部文字化けが避けられませんよね。
何かおすすめの方法とかモジュールとかあれば是非教えて下さい。
Perlは5.8.6です。
よろしくお願いします。
0317nobodyさん2007/06/29(金) 13:55:16ID:???
>>316
jcode.pl使ってるけど、文字コードをEUCに揃えておいて、出力するときにShift_JISじゃだめかな。

ついでに、俺も似たような質問。
文字列に全角ひらがな [ぁ-ん]以外が含まれていないことをチェックしたくなりました。
文字コードはEUC-JPです。
あまりいい方法が思いつかないので、下記のページを参考にして、文字を1文字ずつ分割して
チェックしようかなと思うのですが、他にエレガントな方法はないでしょうか?

Perlメモ
ttp://www.din.or.jp/~ohzaki/perl.htm

# 全角ひらがな [ぁ-ん] # EUC-JP
$Zhiragana = '(?:\xA4[\xA1-\xF3])';

# $str を文字単位に分割して配列 @chars に代入する
$ascii = '[\x00-\x7F]';
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
@chars = $str =~ /$ascii|$twoBytes|$threeBytes/og;

if ((grep { $_ =~ /$Zhiragana|\s/ } @chars) != ($#chars + 1)) {
 print "全角ひらがな以外がある!";
} else {
 print "全角ひらがなしかない!";
}
0318nobodyさん2007/06/29(金) 13:57:36ID:???
>>317を撤回して再掲

>>316
jcode.pl使ってるけど、文字コードは全てEUCに揃えておいて、出力するときにShift_JIS変換じゃだめかな。

ついでに、俺も似たような質問。
文字列に全角ひらがな [ぁ-ん]以外が含まれていないことをチェックしたくなりました。
文字コードはEUC-JPです。
あまりいい方法が思いつかないので、下記のページを参考にして、文字を1文字ずつ分割して
チェックしようかなと思うのですが、他にエレガントな方法はないでしょうか?

Perlメモ
ttp://www.din.or.jp/~ohzaki/perl.htm

# 全角ひらがな [ぁ-ん] # EUC-JP
$Zhiragana = '(?:\xA4[\xA1-\xF3])';

# $str を文字単位に分割して配列 @chars に代入する
$ascii = '[\x00-\x7F]';
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
@chars = $str =~ /$ascii|$twoBytes|$threeBytes/og;

if ((grep { $_ =~ /$Zhiragana/ } @chars) != ($#chars + 1)) {
 print "全角ひらがな以外がある!";
} else {
 print "全角ひらがなしかない!";
}
03193162007/06/29(金) 14:10:58ID:???
>>317-318
>jcode.pl使ってるけど、文字コードをEUCに揃えておいて、出力するときにShift_JISじゃだめかな。
全く問題ないと思います。
質問の趣旨としてはjcode.plに代わる新たなモジュールとか方法とかが
出てきてないかな、ということだったんですが分かりにくかったらすみませんでした。
できたら標準モジュールで済ませたいという思いがあって
Jcode.pmを見てみたんですが、ちょっと問題ありだったのでそのことについても
対策があるのか聞いてみました。

やはりjcode.plは今でも全半角変換の定番なんでしょうか?
0320nobodyさん2007/06/29(金) 14:25:23ID:???
unicodeにして\p{Hiragana}使ったほうが楽だと思うのだが

decode('euc-jp', $s) =~ /[^\p{Hiragana}]/
0321nobodyさん2007/06/29(金) 15:31:43ID:???
>>320
シンプルでいいですね。ありがとうございました。
やっぱjcode.plは卒業した方がいいんだろうか…
0322nobodyさん2007/06/29(金) 16:09:18ID:???
Perl5.8ならEncode.pmだろ
0323nobodyさん2007/06/30(土) 14:49:08ID:taxZDsiL
掲示板のエラーファイルの容量が一定値を超えたら新しいファイル名にリネーム(一定ファイル数になったら圧縮)して、
元のファイルを空にしようと思うんだけど、どの程度の容量を超えた場合にリネームするのが適切?
0324nobodyさん2007/06/30(土) 15:37:16ID:???
1 日とか 1 週間単位でやればいいんじゃないの?
0325nobodyさん2007/06/30(土) 17:34:51ID:???
ファイルシステムの中の人と相談した方が良いんでないすか
0326nobodyさん2007/07/03(火) 14:19:01ID:8gn4hJb2
$a>0 and $a<=1;
常に判定式が真になるという条件付きで$aに乱数をセットしたいです。
my $a = rand 1;
これでは0が入る可能性がありますのでアウトということです。

unless($a>0 and $a<=1){ $a+0.000001 }
などのように乱数の公平性を崩しかねない方法は避けたいです。

unless($a>0 and $a<=1){ $a = rand 1 }
これをループ処理でやっても多分公平性を損ないますよね。

(最低でも小数点第9位までと考えていますが、多くても困らないので*1億→int→/1億などはしていません。)

賢い方どうぞよろしくおねがいします。
0327nobodyさん2007/07/03(火) 14:22:12ID:???
my $a = rand 1;

$a>=0 and $a<1;
0328nobodyさん2007/07/03(火) 14:29:13ID:???
>>326
rand(-1) + 1
例示でも sort と無関係に $a が出てくると何だか落ち着かない。
03293262007/07/03(火) 14:32:53ID:8gn4hJb2
>>327
???
http://perl.misty.ne.jp/function02/rand.html
ここを見る限りでは0~1ということなので0も1も出てくるみたいですが。
解釈が間違ってるでしょか?
0330nobodyさん2007/07/03(火) 14:35:08ID:???
1-rand(1)
0331nobodyさん2007/07/03(火) 14:38:20ID:???
>>329
rand(1) だと0以上1未満が返ってくる
0332nobodyさん2007/07/03(火) 14:38:23ID:???
>>329
そのページの記述はいい加減なのでちゃんと付属のマニュアル嫁

rand EXPR
rand Returns a random fractional number greater than or equal to 0
and less than the value of EXPR. (以下略)
0333nobodyさん2007/07/03(火) 14:42:29ID:???
>>328
EXPR should be positive.
03343262007/07/03(火) 14:43:10ID:8gn4hJb2
>>330
つまりrand 1の返り血が1であることは100%ないということですか?

なるほど。0~1というのは自分の勘違いですね。

>>328
これはどうなるんですか?
-1から始まって0までが選択される?
つまり -1<rand(-1) and 0<=rand(-1) ということですか?
なんかこんがらがりそうorz
03353262007/07/03(火) 14:45:30ID:8gn4hJb2
とりあえず解決していただきましてありがとうございました。
0以上1未満ということで。感謝ですm(__)m
03363282007/07/03(火) 15:51:45ID:???
>>333
そうなの?

use strict;
use warnings;
print rand(-1); # -0.689697265625 が出た。strict も warnings も何も言わない。

>>334
rand(1) が返すのは0以上1未満の値。なので>>330へのお返事についてはそのとおり。
>>328は、上で負数を食わすな的に言われてるから忘れてください。
03373282007/07/03(火) 15:53:35ID:???
連投ごめん。自分で調べろ、と。

perldoc -f rand
> Returns a random fractional number greater than or equal to 0
> and less than the value of EXPR. (EXPR should be positive.)

知らなんだ。>>333ありがとう。
0338nobodyさん2007/07/03(火) 16:08:03ID:???
>>336
望ましい(should be)だから絶対だめというわけではない
ねばならない(must be)ならだめだけど
0339nobodyさん2007/07/03(火) 18:04:35ID:???
ソース見たけど ([0,1)の乱数) * (第一引数) で計算してるので
今の実装なら負でも特に問題なさそう。
03403262007/07/03(火) 22:37:20ID:8gn4hJb2
すいませんおかしなことになりました。多分自分のコーディングにミスがあるはずですが。

# 設定
my $set = 0;

# 各役確率設定別
my @rep = 1/7.29, 1/7.29, 1/7.29, 1/7.29, 1/7.29, 1/7.29;
my @che = 1/39.20, 1/39.15, 1/39.10, 1/39.03, 1/38.99, 1/38.92;
my @mus = 1/5.26, 1/5.22, 1/5.18, 1/5.14, 1/4.95, 1/4.88;
my @zou = 1/168.0, 1/166.3, 1/165.0, 1/162.6, 1/160.6, 1/159.0;
my @bel = 1/291.2, 1/286.1, 1/282.4, 1/275.3, 1/269.7, 1/265.3;
my @big = 1/1598.4, 1/1560.3, 1/1489.4, 1/1424.7, 1/1337.4, 1/1260.3;
my @reg = 1/2259.8, 1/2114.0, 1/1872.4, 1/1771.2, 1/1598.4, 1/1489.4;

# 決定各役確率
my $rep = $rep[$set];
my $che = $che[$set];
my $mus = $mus[$set];
my $zou = $zou[$set];
my $bel = $bel[$set];
my $big = $big[$set];
my $reg = $reg[$set];


# 各初期値
my $medal = 0;
my $in = 0;
my $out = 0;
my $game = 10000;
03413262007/07/03(火) 22:41:20ID:8gn4hJb2
for(my$i=1;$i<=$game;$i++){

# 乱数取得
my $a = 1 - rand(1);

# コインを入れた
$in += 3;

# 取得乱数に応じた挙動
if($a>0 and $a<=$rep){
$out += 3;
}elsif($a>$rep and $a<=$rep+$che){
$out += 4;
}elsif($a>$rep+$che and $a<=$rep+$che+$mus){
$out += 7;
}elsif($a>$rep+$che+$mus and $a<=$rep+$che+$mus+$zou){
$out += 10;
}elsif($a>$rep+$che+$mus+$zou and $a<=$rep+$che+$mus+$zou+$bel){
$out += 15;
}elsif($a>$rep+$che+$mus+$zou+$bel and $a<=$rep+$che+$mus+$zou+$bel+$big){
$out += 350;
}elsif($a>$rep+$che+$mus+$zou+$bel+$big and $a<=$rep+$che+$mus+$zou+$bel+$reg){
$out += 104;
}elsif($a>$rep+$che+$mus+$zou+$bel+$big+$reg and $a<=1){
# ハズレなので何もない
}else{
print "error";
}
}

これを実行したところerrorがprintされてしまうのです。
03423262007/07/03(火) 22:42:43ID:8gn4hJb2
つまり先ほど教えてもらった
my $a = 1 - rand(1);
この方法での乱数取得が
$a>0 and $a<=1;
を満たせない時が存在してることになってしまいます。
単純にそのほかの部分の自分のミスだと思うのですが見つけられません。

アドバイスお願いできますでしょうか?
もしよろしければ上記のコードを数度実行してみて確認もしてみてください。
03433262007/07/03(火) 23:34:12ID:8gn4hJb2
どう思われますか?
activeperl 5.8.1
windowsXP
遅ればせながらこちらの実行環境になります。
0344nobodyさん2007/07/03(火) 23:45:02ID:???
>>342
my @rep = 1/7.29, 1/7.29, 1/7.29, 1/7.29, 1/7.29, 1/7.29;
これは
my @rep = 1/7.29;
に等しいって気付いているか?
0345nobodyさん2007/07/03(火) 23:55:10ID:???
関数のリファレンスから関数名やパッケージ名を取得するにはどうすればいいですか?
0346nobodyさん2007/07/03(火) 23:58:23ID:???
とりあえずerrorになったときは$aの値も表示しろよ
0347nobodyさん2007/07/04(水) 00:07:43ID:???
何やってるコードか全く理解してないうえで、
とりあえず、変数の並びが法則に反してるとこ一か所あるけど、
それで正しいの?
0348nobodyさん2007/07/04(水) 00:11:21ID:???
>>345
そもそも、その関数に名前がついてるとは限らないので不可能。
0349nobodyさん2007/07/04(水) 00:21:06ID:???
なるほどです。
名前がないものは当然取得できないですが、
名前のあるものも取得する手段はないということでしょうか。
03503262007/07/04(水) 00:36:21ID:GRubSazo
>>346
なるほど。確認したところ、0.342-0.343あたりの時にerrorになってるようです。
$musのあたりになるはずですが・・・なんでこんなことになるのでしょう。
>>344
すいません、たまにしか触らないのでどうしても細かい部分は忘れて無難な方法を取りガチです。
>>347
ぜひどこなのか教えてください。
03513262007/07/04(水) 00:41:01ID:GRubSazo
すいません。

}elsif($a>$rep+$che+$mus+$zou+$bel+$big and $a<=$rep+$che+$mus+$zou+$bel+$reg){

ここでしたorz
03523262007/07/04(水) 00:52:15ID:GRubSazo
本当メチャクチャすいませんm(__)m
0353nobodyさん2007/07/04(水) 01:54:39ID:1Rhv3smG
ブログCGIで、削除された記事をパラメータ指定されたときに
404を返したいんですが、その後の表示(ErrorDocument)を
htaccessなどの指定に従う方法はあるでしょうか。
CGIにエラーページを持たせたくないという理由です。
apacheに丸投げできればいいんですが、何らかの方法で
htaccessに指定されたパスを取得して自分で出力してもいいです。
よろしくお願いします。
0354nobodyさん2007/07/04(水) 02:00:20ID:???
リダイレクトするか、読み込んで垂れ流したらいいじゃん。
それ見た10人が10人ともCGIスクリプトが存在しないと思うだろうけど。
0355nobodyさん2007/07/04(水) 02:22:20ID:???
あれ、やっぱりそういうことになります?
例えば、検索ロボットがblog.cgi?a=1を見に行って、404だったら、
blog.cgiが消えたものとしてblog.cgi?a=2もDBから削除するでしょうか。
実際はそんなことしないとは思いますが、
世の中のルール的には、そうされてもやむなしでしょうか。
0356nobodyさん2007/07/04(水) 02:30:20ID:???
400が正しいですね。たぶん。では、400を返すとして。

リダイレクトだと301を返すことにならないでしょうか。
読み込む場合、パスをハードコーディングしたくないのです。
0357nobodyさん2007/07/04(水) 02:41:56ID:???
検索ロボがどれくらい融通をきかせてくれるのかとか
世の中のルール的になんちゃらとかもよくわかんないけど、
とりあえず400は違うだろうし(410のこと?)、301だけがリダイレクトじゃないと思うよ。

つーか、Perlはあまり関係なさそうですよ。

CGI: Common Gateway Interface part 13
http://pc11.2ch.net/test/read.cgi/php/1126436361/
△▲ WebProg 初心者の質問 Part15 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1169725490/
0358nobodyさん2007/07/04(水) 02:53:29ID:???
あれ、すいません。400は確かに違いました。
404でよかったみたいですね。
やっぱり、blog.cgiの設定項目として
ErrorDocumentを指定させるような仕様に
してみようと思います。ありがとうございました。
0359nobodyさん2007/07/04(水) 02:58:38ID:???
print "Status: 404\n\n";
0360nobodyさん2007/07/04(水) 04:31:59ID:???
ごめん、寝ぼけてた。
0361nobodyさん2007/07/04(水) 17:36:06ID:???
サブルーチンの戻り値についての質問です。配列とスカラー変数を戻り値にしたいのですが、
@hogeは値が帰ってくるものの、末尾に2つ空の要素が入り、$hoge1と$hoge2に値を返すことが出来ていません。
このような場合どう記述するのでしょうか?

sub main {
 my (@hoge, $hoge1, $hoge2) = &hogehoge();
}

sub hogehoge {
 return (@ho, $ho1, $ho2);
}
0362nobodyさん2007/07/04(水) 17:41:24ID:???
($ho1, $ho2, @ho)
0363nobodyさん2007/07/04(水) 17:46:44ID:???
>>362
つまり、(@hoge, $hoge1, $hoge2)っていう書き方だと、配列の末尾に値を追加するという意味になってしまうのでダメ
ということでしょうか。

# でも、配列が2つ以上だったらどうするんでしょう…
0364nobodyさん2007/07/04(水) 17:49:00ID:???
リファレンスを返す
0365nobodyさん2007/07/04(水) 17:59:20ID:???
>>364
リファレンスはよくわかってないですが、そういう時に使うんですか。ありがとうございました。

# と、今回は配列1個だけだから、>>362の方法で乗り切りましたw
0366nobodyさん2007/07/04(水) 18:40:00ID:???
リファレンスを返すか、配列を戻り値のケツに持ってくるか。
見た目ならリファレンスのが綺麗かなぁ
0367nobodyさん2007/07/04(水) 19:19:57ID:???
配列が1つとは限らないからリファレンス覚えたほうがいい
0368nobodyさん2007/07/05(木) 04:46:34ID:Ees4tlLi
特定の処理のみでモジュールやライブラリが必要な場合、

1.ソースの冒頭の方で呼び出す
2.その特定の処理の中で呼び出す

どちらが一般的なんでしょうか?
0369nobodyさん2007/07/05(木) 04:55:41ID:???
アマグラマの意見で申し訳ないが、その辺に落ちてるソースだと冒頭以外は見た記憶が無い。
03703682007/07/05(木) 05:16:30ID:???
>>369
配布前提の場合は、ライブラリのパスを設定したり、どのモジュールを使用するかを
利用者に分かりやすく書く必要があるのでまた特別かなと思ったりもするんですが
やはり冒頭にまとめて書くのが普通なんですかね。

めったに使われない処理のためだけにモジュールを毎回呼び出すのって
何か妙に無駄な気がしてしまうんですが、どうなんでしょうか。
0371nobodyさん2007/07/05(木) 05:58:33ID:???
配布目的ならPODやマニュアルを用意するんでしょ?
そこで必要なモジュールや処理の補則をすれば問題ないじゃない
0372nobodyさん2007/07/05(木) 06:25:44ID:???
つかuseはどこに書いてもプログラム実行前に必ず実行されるわけで
03733682007/07/05(木) 06:46:04ID:???
>>372
し・・・知らなかった・・・
は、恥ずかしー
出直してきます。
0374nobodyさん2007/07/05(木) 10:45:56ID:???
処理で分けて読み込むかどうか決めたいなら require でできるけど、
プラグインみたいな使い方じゃない限り素直に読み込ませた方がいいんじゃないかな
0375nobodyさん2007/07/05(木) 11:06:56ID:???
そういうときはrequireを使うんだ!

ってバニング大尉が言ってた
0376nobodyさん2007/07/05(木) 11:33:04ID:???
今更ながらuse strict;の存在に気付いて書き直そうとしてるんだけど、
使ってる変数全部まとめて最初にmy宣言、ってのはアリ?
例えば

$title = 'タイトル';
$hoge01 = '値1';
$hoge02 = '値2';
.......

ってのを
my $title = 'タイトル';
my $hoge01 = '値1';
my $hoge02 = '値2';

とせずに
my ($title,$hoge01,$hoge02);
$title = 'タイトル';
$hoge01 = '値1';
$hoge02 = '値2';

ってやると、何かマズイとこありますか?
あまり美しくない程度ですか?
0377nobodyさん2007/07/05(木) 11:45:14ID:???
俺は趣味の範疇だと思うけど、頭にmyつけるだけのほうがいちいち
変数名しらべて書き並べるより楽じゃない?
0378nobodyさん2007/07/05(木) 11:46:32ID:???
どうせなら
my ($title,$hoge01,$hoge02) = qw(タイトル 値01 値02);
0379nobodyさん2007/07/05(木) 11:52:22ID:???
書き方としては
my ($title,$hoge01,$hoge02);
で問題無し

書き直すなら>>377に同意
03803762007/07/05(木) 12:03:58ID:???
>>377>>379
どっちでも良いと分かって一安心。
前半同じ名前で後半の数字が違うだけ、って変数名が多いんで
調べる手間はそんなかなぁ、と思ってたけど、結局全部網羅するとなると
大して作業量は変わらないかな・・・。

>>378
それはムチャクチャ長くなりそうなんで、ちょっと勘弁w


アドバイス感謝!
03813782007/07/05(木) 12:15:33ID:???
なにも使うのを1つの my で済ませろって意味ではなくて、
my ($authID, $authPASS, $authEXP) = qw(〜); # 認証関連
my ($htmlTITLE, $htmlSUBTITLE, $htmlCSS) = qw(〜);
のように似てるもの同士でまとめて書くのよ
0382nobodyさん2007/07/05(木) 13:21:28ID:rw6MBlh9
Perl上級者です。すいませんラリって幻覚が見えてるので教えてください。
65,536byteは60KB以上で間違いありませんか?
0383nobodyさん2007/07/05(木) 13:23:29ID:???
しゅくだいはじぶんでやろう!
0384nobodyさん2007/07/05(木) 13:49:32ID:rw6MBlh9
またか。このスレで答えてもらったことねーや( ´ ー ` )
答えたことはあるけどな。>>19>>362の二回だけ。

もういいや。ありがとうございます。たしかGNOME電卓にそんな機能が・・・
0385nobodyさん2007/07/05(木) 13:58:27ID:???
use vars
our
0386nobodyさん2007/07/05(木) 14:05:14ID:???
>>384
スレタイ100回音読して半年ラリってろ
0387nobodyさん2007/07/05(木) 14:06:19ID:???
なんだこいつwwwww
0388nobodyさん2007/07/05(木) 14:08:13ID:???
60KB=61440B
0389nobodyさん2007/07/05(木) 14:10:35ID:???
>>380
>前半同じ名前で後半の数字が違うだけ、って変数名が多いんで
俺も変数名で悩んで、そういう名前をつけてしまうことがたまにあるけど、それはやめたほうがいい。
自分の頭の中でも整理がつかなくなってしまうから。

俺は実は、use strict;してないんだけど、変数名を整理して、局在化して書くことだけ気をつけていれば、
仕様書を書かなければ整理がつかないような大きなスクリプトを書くのならともかく、そんなに問題はないと思うけどね。
03903782007/07/05(木) 14:43:43ID:???
割れば分かるだろ割れば・・・
と釣られてみる
0391nobodyさん2007/07/05(木) 17:42:15ID:/MBCt40Z
benchmarkモジュールがうまく動きません。
use Benchmark;
sub test{ 色々 }
timethis(1,&test);

というplファイルをwinのcmdから実行させると、ちゃんとtest内に掛かれてる処理はされてるようなのですが、

timethis 1: 0 wallclock 〜
なんてことになってしまいます。timetheseでやるとちゃんと秒数が出てくるのに。thisだと出ない。
countを10回にしても実際には一杯時間掛かってるのに1分くらい待って出てくる表示は
timethis 10: 0 wallclock 〜

使い方間違ってますか?お助けくださいませ。
0392nobodyさん2007/07/05(木) 22:09:43ID:???
Benchmarkの各関数に渡せるのは
サブルーチンのリファレンスか
evalして実行できる文字列だけだにょ
03933912007/07/05(木) 22:56:26ID:/MBCt40Z
my $csv = Text::CSV_XS->new({ binary => 1 , "always_quote" => 1});
open FH,"bench.txt";
my @line = <FH>;
close FH;

sub test1{
my %get;
while (@line){
$csv->parse($_);my @fields = $csv->fields();
for (my$i=0 ; $i<=1 ; $i++){
$get{$fields[0]}->[$i] = $fields[$i];
}
}
}

sub test2{
my %get0;
my %get1;
while (@line){
$csv->parse($_);my @fields = $csv->fields();
$get0{$_} = $fields[1];
$get1{$_} = $fields[2];
}
}

timethese(100,{ PatternFast => 'test1', PatternSlow => 'test2',});

おかしいんです。今度はこれまでも0.00秒になってしまう。
どこをどう直せばいいのですか?
0394nobodyさん2007/07/05(木) 23:33:45ID:???
> while (@line){

0.00秒になるのは分からんけど
無限ループだにょ
03953912007/07/06(金) 10:06:20ID:oyGEvxOp
>>394
foreachと間違えました。すいません。危うく死亡するところでした。
benchの中で大助かりです。
ところで無限ループが始まった時って賢い対処法はありますか?
いつもはwindowsの終了をやってますが、タスクマネージャあけてアプリケーションの終了させればいいだけなのですか?

とりあえず問題は解決しました。benhの花井で卯s。
なんか数がすくないよってことだったらしいです。50000000とかにしたらようやく比較できました。
0396nobodyさん2007/07/06(金) 18:49:11ID:???
半角全角スペースのみの投稿を拒否したいと思ってます。
if($name eq ""){&er_("名前が未記入");}
if($name eq " "){&er_("名前が未記入");}
if($name eq " "){&er_("名前が未記入!");}


if($name eq "連続する半角全角スペースいっぱい"){&er_("名前が未記入!");}
とやっていくとキリがないです。

そこでパターンマッチ演算子というのを使ってみたのですが↓のであってますでしょうか?
if($name=~ /^ /){&er_("名前が未記入");}#半角スペースが先頭の時
if($name=~ /^ /){&er_("名前が未記入");}#全角スペースが先頭の時

とりあえず判定できてるっぽいですが
もっとスマートな方法があれば教えてください。
0397nobodyさん2007/07/06(金) 19:01:01ID:???
if($name =~ /^( | )*$/){&er_('名前が未記入');}

正規表現ド素人なんであんまり自信ない。
0398nobodyさん2007/07/06(金) 19:03:58ID:???
>>396
フォームに入力される文字がどういう文字なのか(2バイト文字とかを含むのか)とか、
スクリプト中での文字コードの扱いにもよると思うけど、古典的には以下の内容がかなり役立つかと。

http://www.din.or.jp/~ohzaki/perl.htm#JP_RmSpace

# 半角スペース
$space = '\x20';

# 全角スペース
$Zspace = '(?:\xA1\xA1)'; # EUC-JP
$Zspace_sjis = '(?:\x81\x40)'; # SJIS
0399nobodyさん2007/07/06(金) 19:04:41ID:???
>>397
それは2バイト文字の開始位置を誤った場合に誤作動しそう。

連投ごめ
04003962007/07/06(金) 19:07:34ID:???
>>397-399
ありがとうございました。
文字コードについて考えてませんでした。
もう一度見直してみます。
0401nobodyさん2007/07/06(金) 21:30:46ID:???
サブルーチンの質問です。

&hoge($bar);
&hoge($bar{'id'});
&hoge($bar[0]);

sub hoge {
 return $_[0];
}

真ん中の例のように、ハッシュを入れると値が帰ってきません。このような場合に、値を返すようにするには、どう記述するのが
一般的なのでしょうか?(試していませんが、一番下の配列の1要素を入れてもダメかもしれない?)
0402nobodyさん2007/07/06(金) 21:36:05ID:???
shiftしてください
0403nobodyさん2007/07/06(金) 21:46:38ID:???
>>402
&hoge('hoge','hoge');
みたいに呼び出したときに、@_をshiftして呼び出すのはわかるのですが、同じ$_[0]で何故、$barの値は渡るのに、
$bar{'id'}の値は渡らないのでしょうか、という疑問です。
0404401=4032007/07/06(金) 22:04:57ID:???
ごめんなさい。別の部分でポカやってました。
問題は解決しましたが、>>401は依然疑問かも。恐らく
&hoge($bar{'id'});
でも
&hoge($bar[0]);
でも$_[0]に値は入ると思う(思いたい)という、もやもやは残りましたがw
0405nobodyさん2007/07/06(金) 22:20:23ID:???
> ところで無限ループが始まった時って賢い対処法はありますか?
> いつもはwindowsの終了をやってますが、タスクマネージャあけてアプリケーションの終了させればいいだけなのですか?

そんな面倒なことやってるんですか?
パソコンのコンセントを抜くだけですよ!
0406nobodyさん2007/07/06(金) 22:36:49ID:???
レン鯖で今日もまた無限ループやってしまった俺様がきましたよ。
0407nobodyさん2007/07/07(土) 00:38:24ID:???
質問。入力フォームを作っているのですが、postされたデータに対して入力チェックを行い、エラーがある場合は
入力フォームを再度表示して、エラーのある箇所に赤文字でエラーメッセージを出力する。

この板的にはそういうスクリプト書くことが多いと思いますが、そういう場合に便利なモジュールなどはあるのでしょうか?
0408nobodyさん2007/07/07(土) 00:41:55ID:???
>>407
つ rails
0409nobodyさん2007/07/07(土) 08:39:47ID:???
>>399
頭から見て行って、別の文字が混じった時点で失敗するから問題無いのでは?
0410nobodyさん2007/07/07(土) 09:38:06ID:???
ひらがなを半角カタカナに変換する方法はどうしたらいいんでしょうか?
hiraZ2H(STRING)
hiraZ2H(SCALAR REF)
というのが出てきたんですけど使い方がわからないです
0411nobodyさん2007/07/07(土) 10:04:34ID:???
そこまで出て何故悩むんだ…… サブルーチンの使い方が分かんないとか?
0412nobodyさん2007/07/07(土) 10:33:19ID:???
>>411
&jcode'z2h_sjis(\$foo);
で全角の$fooを半角にできました
でもひらがなをカタカナにしないと使えないです
0413nobodyさん2007/07/07(土) 10:53:15ID:???
>>401-404
print qq{$bar \n $bar{id} \n $bar[0]};
sakini kore yatte atai ga tyanto haitteruka checksitemite gomen ime okasiikara konnna kannji dakedo
0414nobodyさん2007/07/08(日) 08:31:07ID:???
>>412
print hira2kata_sjis("あめんぼ赤いなあいうえお");
exit;

BEGIN {
require 'jcode.pl';
my $from_code = 'sjis';
my $kata = 'ァ-ン';
my $hira = 'ぁ-ん';
jcode::convert(\$hira, 'euc', $from_code);
jcode::convert(\$kata, 'euc', $from_code);

sub hira2kata_sjis
{
my $str = shift;

jcode::convert(\$str, 'euc', $from_code);
jcode::tr(\$str, $hira, $kata);
jcode::z2h_euc(\$str);
jcode::convert(\$str, $from_code, 'euc');

return $str;
}
}
0415nobodyさん2007/07/08(日) 11:06:02ID:???
半角カナとダメ文字の扱いに嫌気がさして
shift_jisで書かれたperlスクリプトをeucに変えてるのだけど、
文字コードをeucに変更して保存とjcode.plでshift_jisにしてる部分をeucに変更で
とりあえずは表面的には問題なさそうに見えるのだけど、ちょっと不安。

で、ここから質問なんだけど、他にやっておいた方がいい事とか注意する点とかってあるかな。
0416nobodyさん2007/07/08(日) 11:22:52ID:???
utf8 で書く
化石のようなライブラリを使わない
0417nobodyさん2007/07/08(日) 11:31:27ID:???
charsetの指定ぐらいか。
ぶっちゃけ、どんなスクリプトなのか、どういう人のアクセスを想定しているのか、
ぐらいの情報すら書かずに、ちょこちょこ後出しの駄レスが続くことに嫌気がさしてきた。

不特定多数の携帯からのアクセスがあるならUTF-8はまだダメだろうな。
まぁ、4、5年以上前の携帯だとそもそもEUCもダメなのあるけど。
0418nobodyさん2007/07/08(日) 12:17:04ID:???
???
utf8で書いてshiftjisで吐けばいいじゃん
0419nobodyさん2007/07/08(日) 20:22:14ID:???
レスさんくす。
utf-8はファイルサイズが増えるから・・・って思い込んでたけど思ったより増えないんだね。
これならそっちでも問題ないな。

どんなスクリプトとかアクセス方法によってそんなに変わるもの?
基本抑えておけば色々な場合に対応できると思ってたんだけど、
やっぱノウハウに違いが出てくるのかな。
ちなみにちょっとした掲示板系スクリプトとゲーム系スクリプト混ぜた感じの自作だったり。
アクセス数少ないし多分携帯も問題ない筈。
04204142007/07/09(月) 05:26:23ID:???
>>419
utf8+encodingはバッドノウハウてんこ盛りなので、
もうjcode.pl+EUCで書いててください。
0421nobodyさん2007/07/09(月) 06:10:18ID:???
>>420
jcode.pl+EUCで書いてますがw
perlがいいのは、web上に情報が多いことで、さらに、ある程度化石級の書き方のほうが、
情報量が多くて便利なこともあるような。
0422nobodyさん2007/07/09(月) 10:47:47ID:???
無駄に中途半端な情報も多いけどね。
古いライブラリだと新しい規格に対応してないなど不都合もある。
とりあえずjcode.pl+EUCでいいよ
0423nobodyさん2007/07/12(木) 01:50:40ID:???
speedycgiというのを試してみたのですが、どうしてもrequireしたものが
2度目以降に動作しません。テスト用のpmファイルでは変数は一切使っておらず、
ただprint "test2"としているだけですが、最初の1回だけ出力されます。
main側もただtest1とだけ出力していますが、こちらは毎回出力します。
どのような原因が考えられましょうか。
0424nobodyさん2007/07/12(木) 01:56:28ID:???
サーバ上に置いたファイルをCGIから改名(拡張子含み)させたいのですが、perl関連のページを漁っても
見つかりませんでした…
どうかよろしくお願いしますm(_ _)m
04254232007/07/12(木) 02:01:32ID:???
speedycgiの件、下記のようなコードです。なお、-r1オプションでは正しく動きます。
よろしくお願いします。
#!/usr/bin/speedy -w

use strict;
use warnings;
print "Content-type: text/plain; charset=utf-8\n\ntest";
require './lib/test.pm';

# test.pm
package test; print 'test2'; 1;
04264232007/07/12(木) 02:04:16ID:???
>>424
http://72.14.235.104/search?q=cache:7-pqqTdFRYgJ:www.kent-web.com/perl/chap6.html+perl+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%82%92%E5%A4%89%E6%9B%B4&hl=ja&ct=clnk&cd=1&gl=jp
0427nobodyさん2007/07/12(木) 02:39:07ID:???
>>425
キャッシュされてるだけのような。
関数で呼び出すようにしたら、どうなん?
0428nobodyさん2007/07/12(木) 02:42:41ID:???
>>426
rename関数を使うのですね。ありがとうございました!
04294232007/07/12(木) 03:13:50ID:???
>>427
関数だとちゃんと出力されました。
グローバル変数の初期化から前述のコードに迷い込んだのですが、
要するに初期化もパッケージの直下にour $a = 0なんて書くのではなく、
INITとか初期化用関数とかを用意しないとならないのですね。
グローバルという言葉をよく理解できてないようです。勉強します。
ありがとうございました。
0430nobodyさん2007/07/12(木) 15:38:50ID:???
携帯電話向けの物なのですが、formで値(例えばapple)を送信すると
http://www.au.kddi.com/test.cgi?atai=apple
のように、受け取った値を利用したURLにアクセスさせたいのですが、

今はやり方が分からずアンカータグを返して1クッション置いているのですが、ダイレクトで表示させるにはどのようにすれば良いのでしょうか?

よろしくお願いします。
0431nobodyさん2007/07/12(木) 16:13:05ID:???
例の通りで良いなら普通にGETじゃだめなの
それでダメならLocationなりで飛ばせばいいじゃない
0432nobodyさん2007/07/12(木) 18:46:36ID:???
jcode.pl関連で質問します。
文字コードをEUC-JPに変換して半角文字を全角文字に変換する場合、

&jcode::convert(\$value,"euc","","z");

これと

&jcode::convert(\$value,'euc');
&jcode::h2z_euc(\$value);

これは、
同じなんですか?
後者のはよく見かけるんですが、
前者のはあまり見かけないような印象があるんですが
何か理由があるのでしょうか?
04334322007/07/12(木) 18:51:01ID:qGszHv4Y
連投すみません。
質問なのにsageてしまったのでage直します。
0434nobodyさん2007/07/12(木) 19:02:56ID:???
ttp://www.srekcah.org/jcode/
もうね・・・
04354322007/07/12(木) 19:23:06ID:???
>>434
&jcode::convert(\$value,'euc');

&jcode::convert(\$line, $ocode [, $icode [, $option]])
の第三と第四の引数(?)を省略した形ということですよね?
だとすると、なぜわざわざ省略したのに
&jcode::h2z_euc(\$value);
とするのかが理解できません。
最初から
&jcode::convert(\$value,"euc","","z");
で良いのでは?と思ってしまうんですが・・・。
0436nobodyさん2007/07/12(木) 19:28:52ID:???
いいから全部読め
0437nobodyさん2007/07/12(木) 20:15:35ID:???
>>431
ありがとうございます。
LocationはJavaScriptのことですよね?携帯端末向けなのでスクリプトは使用できませんm(_ _)m

GETで値を受け取って変数に入れて、それをアンカーで排出することまでは出来たのですが、
ダイレクトでの飛ばし方が分かりません…
0438nobodyさん2007/07/12(木) 20:37:59ID:???
HTTPのLocation
0439nobodyさん2007/07/12(木) 21:49:17ID:???
質問です。
複数あるダウンロード対象を複数選択し、
ダウンロードボタンを押したら順次ダウンロードできるようなものを作りたいんだが
1ファイルダウンロードするのは

print "Content-Disposition: attachment; filename=\"hige\.tar\.gz\"\n";
print "Content-type: application/octet-stream\n\n";

open(FILE, "hige.tar.gz");
binmode(FILE);

while(<FILE>){
print "$_";
}
close(FILE);

でいけるんだけど、複数ファイルとかどうやるか知ってる方いませんか?
0440nobodyさん2007/07/12(木) 22:38:50ID:???
>>439
複数のファイルをサーバで固めてから1回で落とすとか。順次というのは無理っぽい。
まあ、ふつう落とすファイルのリンクを並べたページをまず出力して、クライアント側で1つずつ
クリックして落としてもらうのが妥当なのでは?
それから、
while(<FILE>){
print "$_";
}

print <FILE>;
で済むよ。
0441nobodyさん2007/07/12(木) 22:59:03ID:???
軽いファイルならいいけど、重いファイルはシンボリックリンクを作った方がいいんじゃないかな
0442nobodyさん2007/07/12(木) 23:22:07ID:???
やっぱり無理か・・・
ありがとうございます

固めるのも考えたんですが、素のtar.gzですでに1G超えファイルがあるので
別々にダウンロードしたかったんですね
#サーバが32bitなので最大6Gのファイルしか生成出来ない

そして、現状ひとつずつぽちぽち押してダウンロードする仕様なんですが
それがめんどくさいからまとめようぜ?見たいな乗りになった末での質問でした(_O_)
0443nobodyさん2007/07/13(金) 00:21:04ID:???
STDINからフォームデータを読む場合に、
sysreadを使うのとreadを使うのでは、
一見、同じように見えますが、どういうときに違いますか?
お願いします。
04444432007/07/13(金) 00:34:18ID:???
スレ汚し申し訳ないですが、答えらしきものを見つけたのでクローズします。
ttp://www.tohoho-web.com/lng/199907/99070330.htm
0445nobodyさん2007/07/13(金) 02:24:03ID:???
完全に内部専用なら、tarでまとめてしまうとか…… 無理か。
0446nobodyさん2007/07/13(金) 04:18:38ID:???
32bitだから6GBてどんなシステムだろう…
0447nobodyさん2007/07/13(金) 07:42:31ID:???
どーでもいいけど、そのファイルを読み込んでアウトプットするルーチン
君が言う様な1GBのファイルを読み込んだらメモリが物凄いことになりそうだけどね
バッファを用意してsysreadとかsyswriteでチョコチョコ出す方が良いと思うのだけど
0448nobodyさん2007/07/13(金) 19:25:41ID:rAe1S2vb
mod_perlにトライしています
モジュールとクラスの違いがよく分かりません。
クラスだとnewするので、その分メモリが多く使われるなど
メリット、デメリットってありますか?
0449nobodyさん2007/07/13(金) 19:54:44ID:???
もうね
0450nobodyさん2007/07/13(金) 20:34:44ID:???
大雑把に書くと、
モジュールは外部ファイルを読み込んで実行する機構の、外部ファイル。
クラスはオブジェクト指向プログラミングで使われる、データと操作手順をまとめて雛形にしたもの。
よって比較できない。
0451nobodyさん2007/07/13(金) 20:53:17ID:rAe1S2vb
>>450
共通部分はモジュールかクラスかにするんだな。と単純に考えていて
どっちがいいのかな?と思っていたのですが考え方が違うと。

クラスのほうがスッキリしそうですけど、遅いとかメモリ食うとか
あるのかなと思いました。
0452nobodyさん2007/07/13(金) 20:55:36ID:???
ソースの共有化においてって話し?
0453nobodyさん2007/07/13(金) 22:55:16ID:???
>>451
藻前が言ってるモジュールって言うのは、Perlのモジュールなの?それともApacheのモジュールなの?
0454nobodyさん2007/07/13(金) 22:59:52ID:???
スクリプトの話なんだからApacheじゃないだろう
0455nobodyさん2007/07/13(金) 23:02:35ID:???
>>454
ApacheのモジュールもPerlで書けるとオライリー(Apache拡張ガイド 上)に書いてあったよ。
mod_perl云々言ってるんで、Apache解説本でも読んでるのかと思ったんで一応聞いてみたんだが。
0456nobodyさん2007/07/14(土) 02:19:51ID:???
>>451
たとえを出すと、自動車とタイヤキ型を比べてるようなものだから、
比較が出来ないという話。

それで、オブジェクト指向と非オブジェクト指向のどちらがいいかという質問か?
0457nobodyさん2007/07/14(土) 07:44:47ID:???
>>456
それって例えがちょっと違わね?
クラスの方は型っていうのはほぼ良いとしても、
モジュールは、部品の切り分け方(取り付け方)だから、例えで言えばネジ止めみたいな事じゃね?

つまり、
「鋳造型とネジ止めを比較するようなもので、鋳造された部品だってネジ止めする事はあるから比較できない。」
って感じじゃね?
0458nobodyさん2007/07/14(土) 08:17:22ID:???
うかつにたとえ話をすると
こうやってぐだぐだになるんだよな
0459nobodyさん2007/07/14(土) 13:05:26ID:???
実行効率でクラスにするかモジュールにするか選ぶのはやめとけ。
どうせ違うとしても大した差じゃない。見通しよく書けるかどうか
のほうが重要だよ。
0460nobodyさん2007/07/14(土) 13:23:11ID:XODLozhP
popメールをソケット通信で取ってくるperlスクリプトをサーバ移行しています。
旧サーバでは動いているのが、新サーバでは以下のようなSocket接続でこけています。
$remote = IO::Socket::INET->new(Proto => "tcp",
PeerAddr => $server,
PeerPort => $port,
) || &error("error");

IO:Socket:INETD.pmを1行ずつ進捗printしてみたところ、コンストラクタ(sub new)の
「return $class->SUPER::new(@_);」で止まってしまいます(長い時間かかったあと"error"が帰ってくる)。
この$class->SUPER::new(@_);って親クラスのコンストラクタを
呼び出していると思うんですが、INETD.pmの親クラスって何になるんでしょうか?

perl初心者につき変なこと言ってるかもしれませんが、
よろしくご教授ください。。。
0461nobodyさん2007/07/14(土) 13:40:14ID:???
>>460
ソースを読んでuse baseか@ISAをいじってるところをさがす

or

そのパッケージの@ISA配列の値を調べる
0462nobodyさん2007/07/14(土) 13:50:10ID:???
すでに初心者じゃない件
0463nobodyさん2007/07/14(土) 15:18:54ID:???
>>458
>>451がどれだけドンチキな話をしてるのか理解してもらえればそれでいいのよ。

>>460
IO::Socketが親で、さらに上をたどるとIO::Handle。
04644602007/07/14(土) 15:20:34ID:XODLozhP
>>461
ありがとうございました。親クラスはIO:Socketでした。
今のところ、IO:Socket:connect()まで入ってきているのを確認できたので、
connect()の中を色々探ってみたいと思います。
(connectのどこかで止まっている状態)
04654602007/07/14(土) 15:24:56ID:???
ああ、書き込むの久しぶりだからageちゃった。すみません。
>>464
Hanndleとか行ったりきたりして、今のところ463のような状態なので
引き続き調べます。ありがとうございます。
0466nobodyさん2007/07/14(土) 15:55:23ID:???
die $!とかやらずに&error("error")とかやってんのマゾとしか思えない。
0467トラハムちゃん2007/07/14(土) 16:32:18ID:M6VlwpzH
すいません、ちょっと教えていただきたいのですが、
ユーザーエージェントに「AAA」または「BBB」という文字が
含まれていなかったらエラーを表示したいと思っています。

if(not $ENV{'HTTP_USER_AGENT'} =~ /AAA/) {
&error("エラーです");
}

「AAA」だけでしたら作れたのですが、うまく「BBB」が追加できなくて困っています。
初心者なりにor等を使ってみても、入れ方が悪いのかうまくいきませんでした。
どなたかご教授いただければと思います。
よろしくお願いします。。
0468nobodyさん2007/07/14(土) 16:35:18ID:???
!~ /AAA|BBB/
0469トラハムちゃん2007/07/14(土) 17:14:18ID:M6VlwpzH
>468
できました!
ありがとうございました!!
助かりました!!
0470nobodyさん2007/07/14(土) 17:54:00ID:???
>>466
慣れないうちは、&errorとかサブルーチン作った方が、本人の!可読性がいいと思うし、
webprog的には、エラーが発生したときにブラウザに表示させることも多いので、別に構わないというか
俺はそうしてる。

特殊変数なんかも同じで、慣れないうちは使ってなかった。
foreach my $str (@hoge) { print $str; } みたいに。
04714602007/07/14(土) 18:53:18ID:???
>>460,464の続きです

IO:Socket:connect()の↓のconnect関数から反応が返ってこないということが
分かりました。
if (!connect($sock, $addr)) { }
connect()関数を使うにあたって、
サーバ側で何か設定が必要だったりするでしょうか?
今回自宅サーバのため、同じcgiが動いているレン鯖と何か設定が
違うのかもしれないと思いまして。
もしくは、ポート開放関係?一応メールの110ポートはあけているんですが。。。

すみませんが、よろしくお願いします。
0472nobodyさん2007/07/14(土) 19:05:47ID:???
>>471
「ソケット叩いちゃダメ」のサーバかどうかを確認する必要が
あったりするかもしれません。
04734482007/07/14(土) 19:25:34ID:ybwwq6ev
>>459
その点が気になってたとこです。
実行効率か、可読性かみたいな。
ただ、どっちがどうかは良く分かってませんが。
すんません。
0474nobodyさん2007/07/14(土) 23:24:23ID:???
標準モジュールのNet::POP3使って幸せになろうよ、ねえ
0475nobodyさん2007/07/15(日) 00:16:49ID:tgDYqhX7
ファイルを操作するライブラリを作っているのですが、
普通にやるとアクセス元のcgiのあるフォルダにファイルが作られてしまいます。
ライブラリであるplのあるフォルダにファイルを作りたいのですが、
どのようにすればいいのでしょうか?
0476nobodyさん2007/07/15(日) 00:32:58ID:???
知らんがなw
0477nobodyさん2007/07/15(日) 00:50:43ID:???
馬鹿には聞いてません
0478nobodyさん2007/07/15(日) 02:37:03ID:???
@array = caller 0;
0479nobodyさん2007/07/15(日) 08:06:39ID:???
>475
アマグラマの回答でよければ。

library.pl 側で、自分の位置を変数に保持するか、それを調べて返すサブルーチンを用意してはどうでしょう。
私も初学者ゆえ、パスの調べ方については分からんのですが、たぶんやり方はあると思います。

で、そうやって取得したlibrary.plのフルパスを、ファイル操作ルーチンに突っ込む。
04804792007/07/15(日) 08:08:13ID:???
ごめん訂正。最後の行。

× そうやって取得したlibrary.plのフルパスを、〜
○ そうやって取得したlibrary.plが存在するディレクトリのフルパスを、
0481nobodyさん2007/07/15(日) 09:19:49ID:???
>>475 >>479
http://search.cpan.org/~nwclark/perl-5.8.8/pod/perlvar.pod#%25INC

しかし普通はそんな変な仕様にせず、内容が変化するファイルのパス
なり親ディレクトリなりをスクリプト内や設定ファイルで明示的に指定
できるようにするべきだろう。
0482nobodyさん2007/07/15(日) 14:45:19ID:???
>>480
ありがとうございます。
その方法を参照させていただきます。
0483nobodyさん2007/07/15(日) 15:40:47ID:???
>>482
そんなことに時間を浪費してないで481の言う事に耳を傾けといた
方がいいと思うけどな。

04844602007/07/15(日) 18:30:54ID:???
>>471
PerlのSocket:connect()を使えるかどうかは
自宅サーバなので自分で設定できるんですが、
設定する箇所がわからない・・・。
httpdのconfigにもそれらしき箇所はないし、
perlってconfigファイル的なものがなさそうなんですが、
設定とかってどこでするんでしょうか?
0485nobodyさん2007/07/15(日) 19:30:10ID:???
単にネットワークの問題じゃないかという気がするのだが。
etherealかなんかでやり取り眺めて切り分けしろ。
0486nobodyさん2007/07/18(水) 19:25:52ID:???
すいません質問です。

アップローダでアップされたファイルなど、CGIを使ってバイナリ単位で編集したいのですが、どのように行えばよいのでしょうか?
0487nobodyさん2007/07/18(水) 19:42:48ID:???
その前に質問の仕方を学んだらどうだ
0488nobodyさん2007/07/18(水) 19:44:38ID:U8dvSnpW
mod_perl2 + Apache2.2でセッション管理したい場合、
CGI::Session、Apache::Session(mod_perl2に対応していない?)
以外の方法ってありますか?
自前で実装になる?
0489nobodyさん2007/07/18(水) 19:45:15ID:???
perlとかプログラミングをもっと基礎から勉強してレベル上げてから来い。
0490nobodyさん2007/07/18(水) 20:22:03ID:???
>>486
なんでいきなり謝ってんの?
perlは日本語の勉強してからにしたほうがよいよ
0491nobodyさん2007/07/18(水) 20:23:17ID:???
>>489
初心者スレってスレタイが良くないよな

プログラミングは初心者がやるものではない
0492nobodyさん2007/07/18(水) 20:38:08ID:???
>486
C、C+、tcl、lisp、sh、perl、PHP、java、ruby、ほか好きな言語、スクリプトで
open か fopen でもしていじってくださいな
04934862007/07/18(水) 20:45:04ID:???
>>487,>>489,>>490
血ヘド吐いて死にさらせ

>>492
ありがとうございましたm(_ _)m
0494nobodyさん2007/07/18(水) 21:10:34ID:???
open関数も知らない馬鹿だったのか
0495nobodyさん2007/07/18(水) 21:21:38ID:???
>perlは日本語の勉強してからにしたほうがよいよ
ワロスww
0496nobodyさん2007/07/18(水) 21:33:02ID:???
はいはい自演乙
0497nobodyさん2007/07/18(水) 22:11:24ID:???

> 1: 自分はこういう事がしたい。
> 2: それでこんな風にやってみたが・・・
> 3: こんなエラーが出て上手く行かなかった。
0498nobodyさん2007/07/18(水) 22:21:31ID:???
>>497
結局open関数が知りたかっただけかw
0499nobodyさん2007/07/19(木) 02:03:02ID:???
( ゚д゚)…

>>495は、>>490が日本語云々言ってるのに「よいよ」って書いてるのにつっこんでんのに、
自演とか言ってる>>496は何だ?

>>497は質問者に>>1嫁と言っているだけだと思うのだが、>>498のつっこみは何だ?

何だ( ゚д゚)何だ(゚д゚ )何なんだ(゚д゚)???
0500nobodyさん2007/07/19(木) 02:27:41ID:???
この板も強制ID欲しいよ。
0501nobodyさん2007/07/19(木) 13:11:12ID:???
>>500
Andy使えば?
0502nobodyさん2007/07/19(木) 13:16:44ID:???
>>501
Auの携帯ブラウザのこと?
それを使うと任意IDのこの板が強制IDで見れるの?

なんじゃそりゃ。
0503nobodyさん2007/07/19(木) 16:53:55ID:???
>>502
dat読み込みの仕様ががまだ不十分だから、今なら見れるよ
0504nobodyさん2007/07/19(木) 17:23:44ID:???
そもそもdatにIDは書かれていないわけだが。
http://pc11.2ch.net/php/dat/1180492441.dat
0505nobodyさん2007/07/19(木) 20:27:45ID:???
正規表現で、対象変数の中の値が「ひらがなだけ」なら真とする if 文は
どのような表記になるのでしょうか?
この場合「ー」や「〜」も含めたいです。
0506nobodyさん2007/07/19(木) 20:29:49ID:???
文字コードで範囲指定すりゃいいだけですね
で使うのは !~ を使ってください
0507nobodyさん2007/07/19(木) 20:38:30ID:???
こうかな?

if( $test !~ '^[\82\9e-\82\ef]+$' )
{
//ひらがなの場合
}
0508nobodyさん2007/07/19(木) 20:41:15ID:???
!~使うなら^[]は要らないんじゃない?
わからん
0509nobodyさん2007/07/20(金) 01:10:35ID:???
// (笑)
0510nobodyさん2007/07/20(金) 10:31:22ID:???
あるあるwww
0511nobodyさん2007/07/20(金) 17:57:06ID:???
>>505
つ ttp://www.din.or.jp/~ohzaki/perl.htm#Character
EUCかSJISの場合
05125052007/07/20(金) 21:55:38ID:???
>>511
ネ申降臨!
一発で性交だったよありがとう!!
0513nobodyさん2007/07/20(金) 22:12:15ID:???
困ったときにそのサイト見るのは常識だろ。
0514nobodyさん2007/07/21(土) 20:05:13ID:???
どこの国の常識だよww
0515nobodyさん2007/07/22(日) 02:05:22ID:???
テンプレにあるぐらいなんだから、こことム板のスレでは常識に近いんじゃないか。
0516nobodyさん2007/07/22(日) 10:54:01ID:???
質問

サーバーで実行されることを想定して
作られているCGIゲームを、自分の
windowsのパソコン上で一人で実行したいのですが、
perl+アパッチ+アクtィブパール
という構成になるのでしょうか?
アパッチは必須ですか?
0517nobodyさん2007/07/22(日) 11:16:44ID:???
AN HTTPDでも使っとれ
0518nobodyさん2007/07/22(日) 11:21:20ID:???
PerlとActivePerlの両方って何?
0519nobodyさん2007/07/22(日) 11:32:45ID:???
>>518
もし言ってることが変だなーと思ったら
遠慮なくいってくれたほうが早いです
0520nobodyさん2007/07/22(日) 11:32:56ID:???
きっと使い分けたいぐらいの凄腕なんだろ
0521nobodyさん2007/07/22(日) 12:30:49ID:???
perlで、静止画を少しずつ(ドット単位orピクセル単位で)左右上下に動かしたりできますか?
特に、ImageMagickとかでそういう機能ありますか?
0522nobodyさん2007/07/22(日) 13:28:00ID:???
ここはエスパーの集う場所ではありませんよ?
0523nobodyさん2007/07/22(日) 14:12:18ID:???
超ヤサシイ俺が。
初心者はAN HTTPDとActive Perlでいいだろ
つーかぐぐれ
0524nobodyさん2007/07/22(日) 14:27:23ID:???
あまりの優しさに全米が感動した
0525nobodyさん2007/07/22(日) 15:17:51ID:???
>>521
超ヤサシイ俺が。
左右上下に動かすって、ボタンを押すたびに動かす事は出来るかもな。
基本的にPerlが動くのはボタン押したりアドレス開いたりした直後だけ。
つーかCGIの入門書でも嫁。
0526nobodyさん2007/07/22(日) 16:26:43ID:???
>>525
いや、それでもいい。
フォームでボタン押してパラメタ送信、受け取ったら画像が右に少し移動してるって状態で十分。
空白文字分を入れて右にずらしたりはできるけど、上下左右に細かく描画位置を変えれる方法が知りたす。
0527nobodyさん2007/07/22(日) 16:46:42ID:???
>>526
超ヤサシイ俺が。
テーブルで囲んで上下左右にセルを用意して透明画像(幅、高さ指定して)を挿入すりゃいいんじゃね?
それか、GD使って元画像を編集するか・・・。マンドクサイな。

ってかなんでCSS+JavaScriptでやらねえのか、かなり疑問。
CGIの出力なんてHTMLなんだから、そこをDynamicHTMLにしちゃいけないって決まりはないんだし。
05285182007/07/22(日) 16:52:24ID:JZmpPZ9R
ActivePerlはPerlインタプリタの1つであって、
ActivePerlと別途にPerlが必要、ってのは何かおかしくないか?

と思ってたのだけど、俺が勘違いしてたかもしんない。
0529nobodyさん2007/07/22(日) 16:56:58ID:RK22sjeK
配列の全ての要素に対して一定の処理をしたい場合、例えば要素の全てを2倍したいときなんかに、
foreachを使わない方法があったと思うのですが、忘れてしまいました。
foreach(@list){$_*=2;}
以外の、foreachを使わない、全ての要素にアクセスする関数か何かあったと思うのですが・・・教えてエロイ人。お願いいたします。
0530nobodyさん2007/07/22(日) 17:13:41ID:???
map
05315292007/07/22(日) 17:20:08ID:???
>>530
ありがとうございました〜!!!!
0532nobodyさん2007/07/22(日) 18:24:04ID:???
>>527
CSSとJavaScriptもいいんだけど、俺の知り合いが携帯しか持ってない奴ばっかりで。
携帯じゃCSSもJavaScriptも無理だから。

つーか超ヤサシイもまいは超ヤサシイ俺という名前なのか気になた
0533nobodyさん2007/07/22(日) 18:42:34ID:???
超ヤサシイ俺が。は1人じゃないよ。
中野一人が言うんだから間違いない。
0534nobodyさん2007/07/22(日) 19:39:53ID:???
うん、超ヤサシイ俺のひとりだけど別人だよ。
0535nobodyさん2007/07/22(日) 22:18:20ID:???
俺も、超ヤサイ俺のひとりだけど別人だ
0536nobodyさん2007/07/23(月) 15:42:25ID:???
cryptに関する質問というか、えらいコーディングミスが見つかったので…

パスワードをcryptで暗号化して、ファイルに保存しておいたものを、$CRYPTとして読み出して、
フォームから入力された$form{'pass'}と一致するかをチェックしようとしたところ、
$CRYPTが空だと、$form{'pass'}がどんな値でも通ってしまう。

if (crypt($form{'pass'}, $CRYPT) eq $CRYPT) {
 # $CRYPTが空だと、$form{'pass'}がどんな値でも通ってしまう。
}

こういうのは

if (crypt($form{'pass'}, $CRYPT) eq $CRYPT) && ($CRYPT)) {
 # $CRYPTが空だと、$form{'pass'}がどんな値でも通ってしまう。
}
0537途中で書き込んじゃったスマソ2007/07/23(月) 15:43:52ID:???
cryptに関する質問というか、えらいコーディングミスが見つかったので…

パスワードをcryptで暗号化して、ファイルに保存しておいたものを、$CRYPTとして読み出して、
フォームから入力された$form{'pass'}と一致するかをチェックしようとしたところ、
$CRYPTが空だと、$form{'pass'}がどんな値でも通ってしまう。

if (crypt($form{'pass'}, $CRYPT) eq $CRYPT) {
 # $CRYPTが空だと、$form{'pass'}がどんな値でも通ってしまう。
}

こういうのは、以下のような対策でいいと思いますか?

if ((crypt($form{'pass'}, $CRYPT) eq $CRYPT) && ($CRYPT)) {
 # $CRYPTが空だと、通らないはず。
}
0538nobodyさん2007/07/23(月) 15:55:07ID:???
>>537
その対策だとパスワードに「0」を設定されると問答無用でfalseになりますね。
$CRYPT eq "" のほうがいいかも?

というかそれ以前にif( crypt($form{'pass'}, $CRYPT) eq $CRYPT )で常にtrueになるのが変です。
本当にやってることはそれだけ?
0539nobodyさん2007/07/23(月) 16:29:20ID:???
>>538
cryptを通した後の暗号化された文字列$CRYPTが、一文字の"0"になるってことはあるんでしょうかね。

if (($form{'id'} eq $ID) && (crypt($form{'pass'}, $CRYPT) eq $PASS)) { }
みたいにIDも照合してます。
0540nobodyさん2007/07/23(月) 16:29:38ID:???
環境によってはcryptにおかしな値を食わせると空文字列が返ってくる
それともundefだったかな?
0541nobodyさん2007/07/23(月) 16:37:49ID:???
0になりませんね。
蛇足は間違えてるし本題はなんの役にも立たないしで恥ずかしいので無視してください。
0542537=5392007/07/23(月) 16:41:51ID:???
>>540でFAだとすると、結構怖いですね…ありがとうございました。
ちゃんと、値のチェックを行っていなかった自分に反省…
0543nobodyさん2007/07/24(火) 09:20:42ID:???
はじめまして。

my %file = map { chomp; $_ } <f>;###こんな感じで一旦chompして改行取っ払って、、、
delete $file{'$blogFileName'};###こんな処理をしたあと、、


また改行をくっつけてもどしたいのですが、どうすればいいか教えていただけませんか。
0544nobodyさん2007/07/24(火) 09:53:00ID:???
join
0545nobodyさん2007/07/24(火) 09:58:11ID:???
>>544
ありがとうございます
言葉足らずですいません

一番最後の要素にも改行コード付けて戻したいんですが、どうすればいいでしょうか…
0546nobodyさん2007/07/24(火) 10:26:09ID:???
文字列連結演算子
0547nobodyさん2007/07/24(火) 10:30:34ID:???
てかデータ構造を示せ
あと連想はやめろ
0548nobodyさん2007/07/24(火) 11:26:52ID:???
map { print f "$_$/" } %file;
0549nobodyさん2007/07/24(火) 11:28:33ID:???
map { print f $_,$/ } %file;
0550nobodyさん2007/07/24(火) 12:03:01ID:???
map { print f $_,$/ } %file;
0551nobodyさん2007/07/24(火) 18:09:32ID:???
smaf { print f $_,$/ } %file;

とかじゃダメ?
0552nobodyさん2007/07/24(火) 18:56:17ID:???
while(my ($name, $value) = each %file){
print f $name, "\n", $value, "\n";
}
0553nobodyさん2007/07/24(火) 20:59:43ID:???
DBI->connect を使ってポスグレにアクセスしています。
正しくないIDやDB名を入れた場合はきちんと
DBI::errstr にそのエラー文言が入るのですが、
正しくないパスワードを入れた時は何故かそのまま通っちゃいます。
帰ってきた中身を見ても、パスを入れた時、入れない時でどちらもハッシュが入っています。
これは不可思議な事に何故か両方繋がってしまっていると見た方がいいですよね??
0554nobodyさん2007/07/24(火) 21:48:16ID:???
>>553
ポスグレの設定で、Perl動かしてるマシンをポスグレ鯖が無条件でトラストしてるんジャネ?
0555nobodyさん2007/07/24(火) 22:06:21ID:???
>>554
ありがとうございます。
セキュリティをかなりガチガチにしているところなのでちょっと考えにくいような。。。
パスワードの値を変更したらハッシュの値も微妙に変わりますがこれは仕様でしょうか?
何にも入れない時と入れた場合で±8くらい差があります。
文字数でハッシュも変わる!?
0556nobodyさん2007/07/24(火) 22:35:34ID:???
>>555
DBI->connectの復帰値はデータベースへの接続ハンドル(接続者の識別コードみたいなもの)なので、
接続毎に違う値になる事もあるし、disconnect → 再connect で同じ番号が割り当てられないとは限らない。
ってか、値自体に意味はない。(0ならエラーって意味以外は人間様が解析するべき内容じゃない。)

レン鯖でも、ポスグレがlocalhostを無条件トラストしてる事は十分考えられる。
コンソール前に座って、コンソールの管理者ログインパスワード知ってても
DBパスワード知らなきゃメンテナンス出来ないんじゃ、管理コスト高くつくからな。

その状態で、ポスグレ鯖とHTTP(CGI)鯖が同じマシンだったら、
localhost(=HTTP(CGI)鯖)は無条件トラストされてるから、ユーザー名さえあってりゃコネクトできる。

試しにテーブル作ってダミーデータぶち込んで、それを表示するプログラムを
パスワードありなし両方で動かしてみれば良いんジャマイカ?

それでパスワードなしで繋がっちゃったら鯖缶に問い合わせれば良いと思われ。
0557nobodyさん2007/07/24(火) 22:44:50ID:???
とても参考になる詳細なご説明ありがとうございます!
ポスグレ鯖とWeb鯖は同一PCです!
さっそく今からためしにテーブル作ってデータぶちこんで表示させてみます!
0558554=5562007/07/24(火) 22:51:24ID:???
>>557
役に立ててよかった。

漏れ、ポスグレ+アパッチの鯖缶兼CGI開発やってるから多少は分かるが、
鯖缶としてはシロウトに近いんで(テスト用2台、本番用1台しかやってない)
切り分けぐらいまでしか役に立てない。スマソ。

もし設定やらについて必要ならポスグレスレででも聞いてみてくれ。
0559nobodyさん2007/07/24(火) 23:13:21ID:???
>>558
試してみたところ、仰せの通りパス無条件設定でした。
原因が分かってすごく安心してます。
ポスグレスレの方にもこれから常駐させて頂きます!
テスト用2台と本番用1台って十分すごいですw
助かりましたありがとうございます!
05605432007/07/25(水) 21:31:06ID:???
>>546-552
遅くなりましたがありがとうございました
0561nobodyさん2007/07/26(木) 10:17:46ID:6zNTEP+l
複数の人間でカレンダーにスケジュールを書き込めるcgiを作りたいのですが、、
それぞれがラジオボタンで○・×などを選択して、一つのページに結果を表示させたいです。
初心者なので調べても、文字の表示程度の簡単なことしかできなくて困っています。。
どなたか土台になるものを作って頂けませんか。
工程をご教授していただけるだけでもあり難いです。よろしくお願いします。
0562nobodyさん2007/07/26(木) 11:32:11ID:???
ググれ
0563nobodyさん2007/07/26(木) 11:47:35ID:???
例えば、エラー個所にあたると
エラーメッセージ at ./test.pl line 123
とか出ますが、どこから呼ばれてエラーが出てるのか
(サブルーチン又はrequireのスタック?)わかる方法はありますか?

例えば
hoge.pl line 234 で呼ばれて
fuga.pl line 564 で呼ばれて
test.pl line 123 でエラー
…みたいな
0564nobodyさん2007/07/26(木) 11:53:05ID:???
>561
予算を述べよ
0565nobodyさん2007/07/26(木) 12:06:15ID:???
>>561
スレ違い
http://pc11.2ch.net/test/read.cgi/php/1157787046/
0566nobodyさん2007/07/26(木) 13:14:45ID:???
__LINE__
__FILE__
0567 ◆lVJAPUTeX. 2007/07/26(木) 18:48:35ID:???
ハニャーン

>>563
コード:
use Carp qw[confess];
foo();
sub foo { bar() }
sub bar { baz() }
sub baz { confess "moemoe" }

実行結果:
moemoe at - line 5
main::baz() called at - line 4
main::bar() called at - line 3
main::foo() called at - line 2

参考サイト:
http://perldoc.perl.org/Carp.html
0568nobodyさん2007/07/26(木) 20:22:43ID:???
KCatch
0569nobodyさん2007/07/26(木) 20:56:44ID:Im3nlar7
CGIで入力された内容を,ユーザ個人のファイルを書き込む処理でちょっと悩んでいます.

WWWサーバはwww-dataユーザ権限で動いているのですが,パスワードなどの認証を行った上で,
そのCGIを呼び出したユーザ個人の持っているファイルに中身を書き込みたいのです.

su などを呼び出してなんとかするという方法は思い付くのですが,なんかもっと簡単にする方法はないでしょうか?

; というか,以前どこかでそういう目的のモジュールを見掛けた気がするのですが,思い出せなくて困っているのが真相なんですけど.
0570 ◆lVJAPUTeX. 2007/07/27(金) 00:05:00ID:???
うぐぅ。

>>569

作戦1.
ファイルを書き込む wrapper を作成して、setuid root する。
(この wrapper はその中で対象のユーザに setuid する。
十分注意して作成しないとセキュリティホールになる。)
CGIプログラムからはwrapperを呼び出す。

作戦2.
FTPサーバが動いていれば、入力されたIDとパスワードを使って接続する。

作戦3.
CGIプログラムでは一時ファイルを作成するまで。
定期的にroot権限で動作するプログラムで各ユーザごとにコピーする。

作戦4.
ウェブサーバとして動作するプログラムを作成し、rootで動作させる。
これも十分に注意しないと危険。
0571nobodyさん2007/07/27(金) 22:07:36ID:???
>>569
そのファイルのモードを666にしておく。
おまえさんが提示した制約は逸脱していない。
0572nobodyさん2007/07/28(土) 00:47:16ID:AqKfoxxh
test.cgiにperlのバージョンを表示するコードを書きました。
しかし、これをブラウザからアクセスしてもInternal Server Errorになります。

#!C:/perl/bin/perl

$ perl -v


kentwebの掲示板は正常に動きますので、perlのインストール事態には問題ありません。
どこを手直ししたらブラウザにperlのバージョンを表示できるでしょうか?
0573nobodyさん2007/07/28(土) 00:56:28ID:???
>>572
ちょっと吹いた
0574nobodyさん2007/07/28(土) 02:26:06ID:???
どこから突っ込んでいいかってレベルじゃねえぞ
0575nobodyさん2007/07/28(土) 02:49:38ID:???
プロンプトが一番ツボに来た。
0576nobodyさん2007/07/28(土) 03:09:03ID:???
>>572
Perlで実行すると決めたからには、
スクリプトはperlの言語に従って書かなければいけない。

print `perl -v`;

と書けば表示できると思う。

その前にちょっと訊きたいけど、コマンドプロンプトを知っているかい?
ちょっと古めかしいけど、perlと付き合うには、もってこいの奴なんだ。
知らなかったら、ぜひ、このサイトを見て欲しい。

http://cmd-pro.com/

そして、コマンドプロンプトで

perl -v[ENTER]

([ENTER]はエンターキーを表す。)
を入力すれば、バージョンを知ることができる。
どうだいイカしてるだろ?
0577nobodyさん2007/07/28(土) 04:09:46ID:AqKfoxxh
ありがとうございます。
おかげさまで無事バージョンをしることができました。

PHPからはじめて、今日からPERLの勉強をはじめたばかりですが、
このスレのお世話になります。
0578nobodyさん2007/07/28(土) 04:51:04ID:???

    ___
   /     \
 / ⌒  ⌒ ヽ       _________
/  (●)  (●) |     /
| ::: ⌒(__人__)⌒:: |   <   ま、お断りしますけどね
|      |r┬|   i     \_________
\    ー―' _/.   | |            |
  ⌒ヽ ヽノ ヽ     | |            |
/   ノ::::::::::::::::::l\.   | |            |
ヽ  `ー― ⌒、ヽ    |_|______|
  ー――、_ヾ⌒ヽ〜== | |  |
0579nobodyさん2007/07/28(土) 16:42:17ID:bc1YYpxV
>>570

FTPサーバ経由は目から鱗でした.LWPとの組合せで簡単に実現できそうですね.もう少し考えてみます.
0580nobodyさん2007/07/28(土) 17:13:28ID:FChki3sW
PHPからPerlに移行してくる奴が出てくるって、
また時代が変わってきたな
0581nobodyさん2007/07/28(土) 18:50:02ID:AqKfoxxh
いまだにperlでcgi組んでくれって人がいるんですよ。
なのでperlはじめてみました。
0582nobodyさん2007/07/28(土) 20:18:21ID:???
> いまだにperlで
失礼な!プンスコ!
0583nobodyさん2007/07/28(土) 20:51:25ID:FChki3sW
PHPがファイナルファンタジーなら
Perlはドラクエみたいな感じだな。なかなか次期バージョンが出ない。
Rubyは

板違いスマソ
0584nobodyさん2007/07/28(土) 21:06:05ID:???
数字が書かれているファイルを開いて、その数字をインクリメントして上書きしたいと思います。

open FH, "count.txt";
$count = <FH>;
close FH;

open FH, "+>$ct";
print FH ++$count;
close FH;

こんな感じなのですが、2回openせずにできますか?
0585nobodyさん2007/07/28(土) 21:23:42ID:???
perl -i
0586nobodyさん2007/07/28(土) 21:38:15ID:???
>>584
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq5.html#i_still_don_t_get_locking__i_just_want_to_increment_the_number_in_the_file__how_can_i_do_this
0587nobodyさん2007/07/28(土) 21:42:09ID:FChki3sW
>>584

open(FH, "+< $datafile");
$count = <FH>;

seek(FH, 0, 0); # ファイルポインタを先頭にセット
print FH $count++; # 書き込む
truncate(FH, tell(FH)); # ファイルサイズを書き込んだサイズにする
close(FH);
0588名無しさん@そうだ選挙に行こう2007/07/29(日) 00:40:21ID:???
test
0589名無しさん@そうだ選挙に行こう2007/07/29(日) 17:41:22ID:4RCBobOY
perlをちょっとかじっただけの素人ですが教えて下さい。
PostgresqlとPerlの組み合わせってあんまり良くないんですか?
参考書とかもあまり深く説明が無いのですが。。
今更PHPを覚えなおすのも厳しいかなと思ってます。
0590 ◆TWARamEjuA 2007/07/29(日) 17:46:43ID:????2BP(6824)
ttp://search.cpan.org/~dbdpg/DBD-Pg-1.49/Pg.pm
この辺りとかとか♪
0591名無しさん@そうだ選挙に行こう2007/07/29(日) 18:46:31ID:???
>>589
DBIで接続して、SQL投げるだけでしょ?
SQL内容はPostgresを解説してるサイトがあるので、
そこを見ればいいんじゃないか。
0592名無しさん@そうだ選挙に行こう2007/07/29(日) 19:28:58ID:???
DBI使えばインターフェースどれも一緒じゃん
それSQL使いこなせてないってレベルなんじゃ?
0593名無しさん@そうだ選挙に行こう2007/07/29(日) 19:48:26ID:???
perlでDBつかえないやつがPHPなんてできるわけねええだろタコ
0594nobodyさん2007/07/29(日) 21:08:12ID:???
PHPのほうが簡単だろハゲww
0595nobodyさん2007/07/29(日) 21:10:01ID:???
>>589
超ヤサシイ俺が。
Perl好きは重いのキライが多いから話題にのぼりにくいだけで、組み合わせが悪いとかは全くない。
で、もし藻前が重いDBがキライならMySQLを使えばいい。
今となってはPgもMySQLもそれほど変わらんと俺は思うけどね。

あと、せっかくDB使うならビジネスロジック(データの処理)はストアードプロシージャに任せて
Perlはフロントエンド(入力チェックや画面遷移など)に徹した方が、
例えば帳票用にMS-ACCESSからもデータを見たい・いじりたいって時に便利だ。
0596nobodyさん2007/07/29(日) 21:40:07ID:???
$2ch

print <<tekitou;

aaaaaaaaaaa
$2chaaaaaaaaaaa
aaaaaaaaaaa

tekitou

printの中で$2chを表示させるのってどうすればいいんですか??
aaaaaaaが続くからこれだと表示されないTT
0597nobodyさん2007/07/29(日) 21:53:33ID:???
>>595
日記ならテメーのブログに書けよ。
0598nobodyさん2007/07/29(日) 22:07:48ID:???
>>596
${2ch}aaaaaaaaaaa

そもそも $2ch なんて変数名使えんがな
0599nobodyさん2007/07/29(日) 22:11:15ID:???
>>598さん
できました!ありがとうございます!!
0600nobodyさん2007/07/30(月) 04:51:28ID:???
質問です。perlの質問ではなさそうですけど、詳しそうな人が多そうなので…

フォームに入力されたメールアドレス宛てに、sendmailで送信しているのですが、
例えば、hogehoge@yahoo.co.jpと入力しようとして、誤ってhogehoge@yahooと入力すると、
hogehoge@yahoo.sakura.ne.jpのように、レン鯖のホスト名が補完されるのは仕様なのでしょうか。(レン鯖はさくらです。)
0601nobodyさん2007/07/30(月) 04:55:48ID:???
市ね、板違い
0602nobodyさん2007/07/30(月) 09:53:03ID:???
送る前にドメインチェックぐらいしろよカス
0603nobodyさん2007/07/30(月) 16:13:02ID:9vd3BgBN
質問です。

Class::DBI で Postgres にアクセスしているのですが、
任意のデータの "stat" というカラムのデータを書き換えるために
$self->stat("now()::text || ',$stat'");
としたところ、書き換え後のデータ内容は
now()::text || ',00000001'
となってしまいました。

2007-07-30 16:09:47+09,00000001
↑こうしたいのですが、どうすればいいでしょうか?

SQL の UPDATE文でないとだめですか?

0604nobodyさん2007/07/31(火) 11:45:26ID:???
何でPerlの日付関数を使わないの?
特に理由があるならSQL文発行すればいいんじゃないの
0605nobodyさん2007/07/31(火) 15:58:20ID:???
類推してこんなんか。

now()::text.','.$stat
06066032007/07/31(火) 17:21:44ID:???
レスありがとうございます。

>604
1行で書ければラクかなと思ったのですが・・・
Perl の localtime で文字列 $new_stat を生成してから、
$self->_stat($new_stat);
とすることにしました。

>605
syntax error って怒られました。
0607nobodyさん2007/07/31(火) 17:40:25ID:???
$self->stat("now()::text || ',$stat'");
$self->stat(now()::text || $stat);
0608nobodyさん2007/07/31(火) 18:19:29ID:???
1行ね〜、無理やり書くとこんな感じか。$selfてのが謎だが
$self->sql_stat(do{ref($self)->set_sql('stat',q{UPDATE __TABLE__ SET stat = now()::text||%s});",$stat"})->execute;
0609nobodyさん2007/08/01(水) 11:03:14ID:cHuXo2mz
Aサーバ
/home/mydirectory/

Bサーバ
/var/saitama.txt


Bサーバの/var/saitama.txtを
Aサーバの/home/mydirectory/以下にコピーした後に
/var/saitama.txtを削除する
と言う動作を1つのスクリプトを作りたいと思います。
サーバ間のファイルの転送はSFTPです。
どのようにしたらよいでしょか?

perlのバージョンは5.8 RedHatです。
0610nobodyさん2007/08/01(水) 11:07:27ID:???
>>609
>>1
> 1: 自分はこういう事がしたい。
> 2: それでこんな風にやってみたが・・・
> 3: こんなエラーが出て上手く行かなかった。
>
> 最低でも1と3が無いと誰も答えられないよ。
1はわかったので、2と3を書いてくれ
0611nobodyさん2007/08/01(水) 11:17:25ID:???
Net::SFTP でも使ってあとは素直に書けばOK
0612nobodyさん2007/08/01(水) 17:34:49ID:???
sftpって第3者サーバ間転送もサポートしてたの?
ftpだけかと思ってた。
0613nobodyさん2007/08/01(水) 21:53:07ID:EB3VEkPE
すいません、ホントにド素人で始めてDBへ接続しようとしています。
一応PostgresqlとDBIモジュールをインストールし、localhostでテストを行ってます。
sampleというDBを作成してperlから以下のように接続しようとしていますが、
うまく行きません。

use DBI;
$dbh = DBI->connect("dbi:Pg:dbname=sample");

エラーログをみると、
install_driver(Pg) failed: Can't locate DBD/Pg.pm in @INC (@INC contains: C:/usr/local/lib C:/usr/local/site/lib .) at (eval 7) line 3.
Perhaps the DBD::Pg perl module hasn't been fully installed,
or perhaps the capitalisation of 'Pg' isn't right.
Available drivers: DBM, ExampleP, File, Gofer, Proxy, Sponge, mysql.
at C:/Apache2/htdocs/testdb.cgi line 24

となっています。
これって、DBIモジュールのインストールがうまく行っていないのでしょうか?
ちなみにDBIモジュールはhttp://www.jisaba.net/xp/mt3/05.htmから行いました。

なんか質問自体も正しいのか分からない状態ですが、よろしくお願いします。
0614nobodyさん2007/08/01(水) 22:34:28ID:???
>>613
エラーメッセージよく読め。

Perhaps the DBD::Pg perl module hasn't been fully installed,

と親切に指摘してくれてるじゃないか。
0615nobodyさん2007/08/02(木) 00:15:05ID:???
分からんことをすぐ人に聞く奴は伸びない
0616nobodyさん2007/08/02(木) 01:27:36ID:???
ぼくは困るとすぐ人に聞いていますが、チンコの皮は、伸びやすいです。
0617nobodyさん2007/08/02(木) 04:14:18ID:???
この包茎野朗が
0618nobodyさん2007/08/02(木) 07:34:23ID:???

夏夏夏夏
0619nobodyさん2007/08/02(木) 10:13:28ID:???
ココナツ
0620nobodyさん2007/08/02(木) 13:13:49ID:???

愛愛愛愛
0621nobodyさん2007/08/02(木) 13:14:46ID:???
アイランド
0622nobodyさん2007/08/02(木) 13:24:37ID:???
なんそかそれ(笑)
0623nobodyさん2007/08/02(木) 13:29:13ID:???
ジェネレーションギャップを感じたw
0624nobodyさん2007/08/03(金) 01:21:20ID:HqqiKgbo
フリーのCGIを改造しているのですが下記のものを付け足すと500エラーがでてしまいます。
print "<br><br><br><br>\n";
print "<form>\n";
print "<input type=\"button\" value=\"戻る\" onClick=\"javascript:history.back()\">\n";
print "</form>\n;

どこが間違っているのかご指摘お願いできないでしょうか?
よろしくお願いします。
0625nobodyさん2007/08/03(金) 01:30:15ID:???
print "<input type=\"button\" value=\"戻る\" onClick=\"javascript:history.back()\">\n";

"" で囲まれた中で " を使う場合は \" のようにエスケープしてね♪
0626nobodyさん2007/08/03(金) 01:34:14ID:???
>>624
バックスラッシュが全角なのはわざと置き換えていて本物はちゃんとしてる
んだろうけど、どうみても最後の行の「"」が閉じていない
06276242007/08/03(金) 01:34:55ID:HqqiKgbo
>>625
ありがとうございます。
上記はエスケープしきれてないのでしょうか?
06286242007/08/03(金) 01:37:08ID:HqqiKgbo
>>626
おはずかしい…
できました。ありがとうございました。
0629nobodyさん2007/08/03(金) 01:37:12ID:???
この際
print '<br><br><br><br>'."\n";
みたくするか、ヒアドキュメントを使ってみては?
0630nobodyさん2007/08/03(金) 01:37:25ID:???
>>625
その人はたぶん \ を勝手に\に変換してしまうあのブラウザを使ってるんでしょう。

>>624
> print "</form>\n;
ここ。何かが足りない。

「500エラーが出ます」じゃなくて、せめて use CGI::Carp qw(fatalsToBrowser); してほしい。
もっと言えばコマンドラインでチェックして syntax OK. が出てから CGI として動かしてほしい。
06316302007/08/03(金) 01:38:06ID:???
リロード…orz
06326292007/08/03(金) 01:45:51ID:???
>>630
氏ねって書かれるんだろうけど、ローカルでテストできる環境を整えたり、
telnetでperl -cできる環境を持てる初心者って、あまりいなそうな気がするけどね。
この人だって、エスケープしたり、"を閉じ忘れるくらいの初心者なわけだし。

俺は未だにローカルでテストできる環境を持ってなかったりするし、排他処理にflockを使ってたりするから、
windowsで書いてて、なかなか満足するテスト環境にも恵まれてない。

今はようやくtelnetが使える外部鯖が手に入ったから、コマンドラインでチェックできるけど、
何がいいたいかというと、文法をチェックできる環境を整えるのって、cgiをいじったりするより、
案外難しいんだってこと。
0633nobodyさん2007/08/03(金) 01:57:50ID:???
>>632
えと、いちおうその辺も想定しまくったうえで

せめて use CGI::Carp qw(fatalsToBrowser); でも入れてね
「500エラーです」では何もわからないけど、まともなエラーメッセージ出るようになるよ

という気持ちで書いたわけですよ。
「氏ね」と思う人も当然いるだろうし、「環境構築とかわかんねーよ」な人もいるんだろうけど
それについてあーだこーだ言うつもりはないんです。少なくとも「氏ね」とは思ってません。
06346292007/08/03(金) 02:06:36ID:???
>>633
いや、別に俺もそんなに反論的な意見でもなかったです^^

use CGI::Carp qw(fatalsToBrowser);
は俺も使ってますが、結構ダメなこともあるんで、正直微妙ですw
0635nobodyさん2007/08/03(金) 02:11:08ID:???
>>639
勉強の為に
> use CGI::Carp qw(fatalsToBrowser);
のダメなところを教えていただけませんか?
0636nobodyさん2007/08/03(金) 02:15:29ID:???
>>635
俺も初心者だから、よくわかんないけど、
> use CGI::Carp qw(fatalsToBrowser);
って書いてても、500が出るときは出るってこと。

perl -wcより、出てくるメッセージは親切だと思う。使って損はない。
0637nobodyさん2007/08/03(金) 07:59:24ID:???

>>636

それマジで言ったん? ソースあんならすぐ出せ。

マジなら2ちゃんねら総力を挙げて潰すが。
0638nobodyさん2007/08/03(金) 08:20:11ID:???
> 2ちゃんねら総力
できもしないこといわないでくださいw
0639nobodyさん2007/08/03(金) 08:49:48ID:???
これ同一人物?
流行ってんの?
http://pc11.2ch.net/test/read.cgi/tech/1150900544/78n
http://pc11.2ch.net/test/read.cgi/tech/1181500187/757n
0640nobodyさん2007/08/03(金) 08:57:50ID:???
たった2つ3つで「流行ってんの?」はないだろ〜
0641nobodyさん2007/08/03(金) 09:47:07ID:???
>>637
俺のバックには○○がついてるんだぜ!みたいな…

ねらー気取ってんじゃねぇよカス厨
自分で何もできないくせに虚勢張ってんじゃねぇよばーか^^
0642nobodyさん2007/08/03(金) 09:54:48ID:???
二行目に
> use CGI::Carp qw(fatalsToBrowser);
を入れて500が出るなんて、シェバング間違えてるぐらいじゃないか。
0643nobodyさん2007/08/03(金) 10:26:00ID:???
流行らせるんだよ!!
2ちゃんねら総力を挙げて。
0644nobodyさん2007/08/03(金) 11:22:32ID:???
2ちゃんねら総力を挙げてオナニー
0645nobodyさん2007/08/03(金) 14:56:52ID:???
>>637 はたまに見かけるコピペだよ。
ニュー速とかにもある。
0646nobodyさん2007/08/03(金) 15:05:53ID:???
ただのVIP用語らしい。
0647nobodyさん2007/08/03(金) 16:08:03ID:???
このコピペはニュー速で流行り出したらしい
0648nobodyさん2007/08/03(金) 17:19:15ID:???
『VIP用語』って
どんなけ長い用語だよ
0649nobodyさん2007/08/03(金) 22:35:25ID:oY004xfP
CGIからplの関数を呼び出して、
さらにplがあるところからDBにアクセスする
ということをしたいのですが、うまくいきません。

手法としては、plから相対でDBにアクセスするか、
plの絶対アドレスからアクセスしたいと思っているのですが、
どのようにすれば可能でしょうか?
0650nobodyさん2007/08/03(金) 22:53:25ID:???
日本語でやれ
0651nobodyさん2007/08/03(金) 22:56:09ID:???
>649
おまえは文章もまともに書けないのか?
0652nobodyさん2007/08/03(金) 23:21:30ID:oY004xfP
>>650,651
ライブラリ自身の絶対パスを取得する方法はありませんか?
0653nobodyさん2007/08/04(土) 00:01:01ID:???
DBって何。バークレーなんとか?SQLiteとか?DBI?
0654nobodyさん2007/08/04(土) 00:21:38ID:???

use File::Spec;
use Cwd;

print File::Spec->catfile(getcwd, __FILE__);
0655nobodyさん2007/08/04(土) 00:33:18ID:TU5rHtE+
>>654
ありがとうございます。問題解決しました
0656nobodyさん2007/08/04(土) 16:32:08ID:???
はじめまして。

bbbb
aaaa ←ここをggggにしたい
dddd
eeee
cccc
aaaa
ffff
って感じで改行(\n)で区切られたデータファイルがあって、
そこに新データggggを書き込みたいのですが、
その際にaaaaが存在すれば一番最初にあらわれるaaaaのところに
ggggを上書きしたいんですが、どうすればよいでしょうか。

・aaaaが存在しなければ通常通りにデータ末尾にggggを
・二番目以降のaaaaはそのまま置き換えない
を実現したいのです。

下だと失敗してしまいます。
よい方法をお願いできませんでしょうか。
open(f,"+<hoge.dat");
flock(f,2);
$data = <f>;
if($data =~ m/aaaa/){$data =~ s/aaaa/gggg/;}
else{$data .= "gggg\n";}
seek(f,0,0);
truncate(f,0);
print f $data;
flock(f,8);
close(f);
exit;
0657nobodyさん2007/08/04(土) 17:05:20ID:???
$hoge_of{$data}++して、
$hoge_of{aaaa} == 1のとき $data = 'gggg'
$hoge_of{aaaa} != 1のとき $data .='gggg'
0658nobodyさん2007/08/04(土) 17:13:18ID:???
$data =~ s/aaaa/ggggg/is;
で終わり
0659nobodyさん2007/08/04(土) 17:16:52ID:+PxwZdc+
open(FILE, "+< hoge.dat");
flock(FILE, 2);
my @dat = <FILE>;
my $hit;
foreach(@dat){
if(/^aaaa$/){
$_ = 'gggg';
$hit = 1;
last;
}
}
push @dat, "gggg\n" if !$hit;
seek(FILE, 0, 0);
print FILE @dat;
truncate(FILE, tell(FILE));
close(FILE);
0660nobodyさん2007/08/04(土) 17:30:25ID:RQKCxjR+
perlをインストールする時、Freeはどれを選択すればいいんですか?
(Windows使用)


ttp://www.activestate.com/downloads/
0661nobodyさん2007/08/04(土) 17:36:26ID:+PxwZdc+
ActivePerl 5.8.8.822 and ActivePerl 5.6.1.638
http://www.activestate.com/store/download.aspx?prdGUID=81fbce82-6bd5-49bc-a915-08d58c2648ca
0662nobodyさん2007/08/04(土) 17:43:21ID:RQKCxjR+
>>661 もう一つ教えてください。下記の2種類あるんでが
どれを選択すればいいんですか?

Windows (x86)
AS package
MSI

Windows 64-bit (x64 AMD64)
AS package
MSI
0663nobodyさん2007/08/04(土) 18:25:57ID:???
>>662
http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-5.8.8.822-MSWin32-x86-280952.msi
0664nobodyさん2007/08/04(土) 18:30:12ID:???
msi のがいい
64bit は OS が 64bit である場合のみ
既に開発してて過去の古いソースが有りソレを何が何でも生かしたいのであれば 5.6 系がいいかもしれないけど
そうでなければ Perl は Ver 5.8 系をオススメ
06656562007/08/04(土) 19:43:16ID:???
>>657->>659

有難うございます。
さっそく試してみます。
0666nobodyさん2007/08/04(土) 19:53:57ID:???
build818以降PPM4になってアレだから5.8.8build817が個人的にはよい。
build815もいいけど、816はバイナリ互換がないから死ぬ。
0667nobodyさん2007/08/04(土) 20:01:14ID:???
>>666
アレって何だよ! 具体的に言えよ!
0668nobodyさん2007/08/05(日) 04:19:15ID:???
>>667
GUIバージョンになったのがイヤとかいう話じゃね?
それでも ppm3 で以前のを使えると思うが。
0669nobodyさん2007/08/05(日) 05:40:21ID:ZbLLWuy9
perlをこれから学びたいと思っているのですが
jcode.plって必ずつかわなければいけないのでしょうか?

文字コードはeucで作る予定です。
0670nobodyさん2007/08/05(日) 06:34:40ID:???
>>669
やめた方がいいと言われそうだけど、俺は好きだw
0671nobodyさん2007/08/05(日) 09:31:45ID:???
jcode.plはできる限り使わないほうがいい。
0672nobodyさん2007/08/05(日) 10:59:54ID:???
今からやるならせめてJcode.pm、できればEncode.pmがよさげ。
# 新しいJcodeはEncodeのラッパーだったっけ?
0673nobodyさん2007/08/05(日) 11:07:42ID:???
>672
です
Encode.pm が全部やってるはず
0674nobodyさん2007/08/05(日) 20:17:05ID:???
>>669
use Encode;

文字コードはUTF-8でやった方がいいよ。
0675nobodyさん2007/08/06(月) 17:56:09ID:???
在庫管理の機能をつけたいのですが
入荷毎の履歴から古いものから順番に在庫を減らす工程がわかりません。

$num='30';
---log
1<>29<>
2<>4<>
3<>16<>

---
というログをwhileで読み込んで行き、
$readline_num-$num がマイナスになるようなら
差分数値を次のreadline_numに…
という流れだと思うのですが
どうにもこうにも形にできません。

結果的には最初のlogが
---log
1<>0<>
2<>3<>
3<>16<>

---
という風になり、最終的に全部が0になるようならエラーを返したいのです。

アドバイスよろしくお願いいたしますm(_ _)m
0676nobodyさん2007/08/06(月) 18:03:22ID:???
エスパー頼む
0677nobodyさん2007/08/06(月) 18:06:59ID:???
というか素朴な疑問。
テキスト系DB作ってる人って、区切り文字は何にしてる?
俺はタブなんだけど、<>って良く見るけど、どういう意味があるんだろう。
データに<>を含まないからっていうのは、もちろんだけど。
0678nobodyさん2007/08/06(月) 18:18:04ID:???
>>677
KENT流れ
0679nobodyさん2007/08/06(月) 18:32:44ID:???
漏れ的にはデータ内にHTMLタグが含まれてたときには
全部排除する前提だから<>という入力は
100%ありえないという前提で<>にしている、と思う
0680nobodyさん2007/08/06(月) 18:37:53ID:???
でも、セコイこと言うと、<>の方が1バイト多くね?
フィールドが数十個あって、レコードが1000以上とかあると、バカに出来ないような気がする。


まあ、大量のデータ扱うなら、DB使えっていうことでFAなんだろうけどw
0681nobodyさん2007/08/06(月) 18:43:51ID:???
俺の場合は毎度車輪の再発明してもしょうがないので、csvにするかStorableにするか
DB使うかといったあたりで場合に応じて使い分けだな。独自形式でテキストに保存って
いうのは基本的にやらない。
0682nobodyさん2007/08/06(月) 18:56:30ID:???
>>681
でも、csvって"の扱いがいやらしくない?そういう車輪は発明されてるんだろうけどw
0683nobodyさん2007/08/06(月) 18:59:48ID:???
>>675
whileでループ作って1行ずつマイナス処理してマイナスなら数値を0に置き換えて次の行、
プラスならその数値に置き換えてループ脱出して終了
ファイル(または配列)の終端に達したら、エラー送出してループ終了
でいいんじゃないの?

とりあえずなんかコード書いてみれば?
0684nobodyさん2007/08/06(月) 19:06:10ID:???
>>675
俺的には、何でもforeachとsplit
perl書くようになって、この2つは一番汎用してるかも。
0685nobodyさん2007/08/07(火) 02:30:26ID:???
今はData::Dumperは流行らないか。
06866692007/08/07(火) 02:43:38ID:???
遅くなりました。
たくさん回答頂いてしまい恐縮です。
Encode.pmを使ってみることにします。
ありがとうございました。
0687nobodyさん2007/08/07(火) 09:10:50ID:???
最近はaudreyのYAML::Syckをよく使う
0688nobodyさん2007/08/07(火) 10:41:18ID:???
Encode.pmって半角カナに完全対応してたっけ?
日本語入力がある場合は結局jcode.plが最適だったのでは。
0689nobodyさん2007/08/07(火) 10:50:16ID:???
あの手軽さを考えたら未だにjcode.plから抜け出せない。
0690nobodyさん2007/08/08(水) 08:23:14ID:???
>>688-689
何をもって「完全」かは知らんけど、Encode::JP::H2Z のような実装は
用意されている。jcode.pl は UTF-8 扱えない時点で選択肢外なので、
1. Encode + 自前の補助コード
2. Jcode Ver 0.88
3. Unicode::Japanese
の優先順位で使ってるかな。
0691nobodyさん2007/08/08(水) 10:53:06ID:???
半角カナより機種依存とか拡張外字とかの扱いに困ってるんですが
みなさんどうしてますか?
0692nobodyさん2007/08/08(水) 21:52:51ID:???
もう大分定着してきたと思うが、shiftjis使ってるやつは
cp932にしたら大分マシになると思う。
0693nobodyさん2007/08/08(水) 23:28:38ID:???
教科書立ち読みしてたら
シフトJIS使うときは、
2バイト文字の後半部分がC5のもの、
たとえば表とかつかうときは
表¥
ってしないと文字化けするから!
とかって書いてあって、はぁ?とおもった
これってperlでなくてもwebアプリつくるひとは
全員必須の知識なの?
0694nobodyさん2007/08/08(水) 23:34:32ID:???
知ってて損は無いけど、古すぎな知識。
0695nobodyさん2007/08/09(木) 00:51:15ID:???
正確に言えば、Webアプリ限定ですらないよな。
0696nobodyさん2007/08/09(木) 00:55:40ID:???
unicode万歳やで〜
0697nobodyさん2007/08/09(木) 01:01:57ID:???
utf-8がいちばん扱いやすい。
0698nobodyさん2007/08/09(木) 01:22:31ID:???
Unicodeキライ
0699nobodyさん2007/08/09(木) 01:59:23ID:???
結局DBも使わず、jcode.pl、eucでショッピングカート作った。
0700nobodyさん2007/08/09(木) 03:02:11ID:???
>>699
設置サーバや運用者の技術レベルによってはありかもね。
「文字コードって何?」ってレベルだと Shift_JIS で問題が
出ないよう作った方が後々面倒が無くていいけど。
0701nobodyさん2007/08/09(木) 08:19:14ID:???
文字を変更したのに
表示される文字が変更されない

my $msg="abcdefg ".$DT->{unkoname}."あいうえお".$count."かきくけこ";

このあいうえおの部分を
test
に変更して
my $msg="abcdefg ".$DT->{unkoname}."test".$count."かきくけこ";
にしたのに、表示されるのはあいかわらずあいうえおのまま。なんで?
0702nobodyさん2007/08/09(木) 09:15:01ID:4ANcM0VH
windowsにperlの5.6と5.8を共存させたいのですが
どのようにしたらいいのでしょうか?
0703nobodyさん2007/08/09(木) 09:24:55ID:???
>>702
つ[ VMwarePlayer ][ Linux ]
0704nobodyさん2007/08/09(木) 09:47:24ID:???
ひょっとしたら管理モードにしないで
スクリプト更新したからデーターが壊れたかも
「スクリプトをいじるときには
必ず管理モードにしてください、そうでないと
最悪、データーが壊れます」
って説明書読んだら書いてあった
0705nobodyさん2007/08/09(木) 10:14:54ID:???
>>702
仮想化なしでそのままふたつインストールする技はないのでしょうか?
0706nobodyさん2007/08/09(木) 11:14:03ID:???
入れてみろ
0707nobodyさん2007/08/09(木) 11:17:39ID:???
片方入れると片方アンインストールされてしまうんですよ
0708nobodyさん2007/08/09(木) 12:15:41ID:???
>>705
つ[Partition Logic][デュアルブート]
0709nobodyさん2007/08/09(木) 12:31:51ID:UyK8ofDd
ビスタならできるんじゃない?いや、分からんけど。
0710nobodyさん2007/08/09(木) 13:28:54ID:???
つ[ ttp://sakaguch.com/PastBBS/0030/B0015057.html ]
0711nobodyさん2007/08/09(木) 13:57:44ID:???
ActivePerl の 5.005 と 5.8 なら Win98SE上に両方インスールしてる。
インストール先を別ディレクトリにして、環境変数PATHの設定や
PPMの設定ファイルをちょこちょこ変更するだけで普通に使えている。
0712nobodyさん2007/08/09(木) 18:13:34ID:???
まあ、今時 Win98SE なんかつかってるばかは氏ねばいいと思うんだけど。
0713nobodyさん2007/08/09(木) 19:18:02ID:???
再起動の時に必ずフリーズした98SE
0714nobodyさん2007/08/09(木) 20:28:15ID:qod+hj3t
sleep関数は3日(259200秒)とか指定して実際3日待機して
くれるものなのでしょうか。

ご教示いただけますと幸いです。
0715nobodyさん2007/08/09(木) 20:33:12ID:???
…やってみれば?
0716nobodyさん2007/08/09(木) 20:33:24ID:???
サーバーのCGI実行制限時間に達するとKILLされます
0717nobodyさん2007/08/09(木) 20:42:53ID:???
>>715
今からでは試すのにちと間に合わなかったので(あさって納品)
質問させていただきました。

>>716
なるほど。
危なそうなので別の方式をとります。
有難うございました。
0718nobodyさん2007/08/09(木) 20:44:14ID:???
定期実行させたいならcronで回してくださいな
0719 ◆lVJAPUTeX. 2007/08/10(金) 03:28:51ID:???
>>677
タブ区切りにしている。
タブは空白文字に置換しても差し支えない場合が多いことと、CSV程ではないけどExcelで読み込みやすいため。

>>680
せこいこと言うと、Perlなんて遅いから全部アセンブラで書くべき。:-p

>>702
Cygwin入れて、片方は
/usr/local/perl5.6
みたいなディレクトリにインストールする作戦も。
0720nobodyさん2007/08/10(金) 03:31:07ID:???
>>717
おまえプロじゃないだろ
学校の宿題は友達にうつさせてもらえよ
0721 ◆lVJAPUTeX. 2007/08/10(金) 03:36:03ID:???
>>675
エスパーになって考えてみた。(在庫減らすところだけ。)
@zaiko = ({id => 1, num => 29}, {id => 2, num => 4}, {id => 3, num => 16})
という配列に読み込んだと想定。

my $i = 0;
while($herasu and $i < @zaiko and $zaiko[-1]{num}) {
my $s = min($zaiko[$i]{num}, $herasu);
$zaiko[$i]{num} -= $s;
$herasu -= $s;
$i++;
}
0722nobodyさん2007/08/10(金) 10:42:02ID:???
>>721さん
本当にありがとうございますm(_ _)m
0723nobodyさん2007/08/10(金) 11:00:12ID:???
でも在庫管理で難しいのは、排他処理がなってなかったり、どの段階で在庫を減らすかとか、
実物の在庫管理をどうするか、という問題の方が大きいような希ガス。perlの話と離れてスマソ
0724nobodyさん2007/08/10(金) 12:55:11ID:???
>>723さん
そうですね、排他処理は色んな方のスクリプトを参考にしていきます。
どの段階、実在庫管理、というのは永遠の課題です。アドバイス感謝です。
0725nobodyさん2007/08/10(金) 18:54:38ID:???
そんなのが永遠の課題ってすごいなwww
廃業するべき。
0726nobodyさん2007/08/10(金) 19:01:05ID:???
在庫管理で失敗するのは在庫があるかないかのフラグだけにするからだ。
0727nobodyさん2007/08/10(金) 23:52:43ID:???
在庫を管理しようとするから難しくなる。
発想を逆転させるんだ。
0728nobodyさん2007/08/11(土) 03:10:13ID:???
管理を在庫にするんだ。
0729nobodyさん2007/08/12(日) 12:56:10ID:???
在庫にたんぽぽを載せるようにするんだ。
0730nobodyさん2007/08/12(日) 21:21:39ID:sl0Dt6RW
UTF8フラグのついた文字(char)のバイト数を知りたいのですが
$byte = length($char)とすると当然ながら答えはどれも1になります。
現在は
utf8::encode($char);
$byte = length($char);
urf8::decode($char);
として凌いでいますが、もう少しスマートなというか、
違う書き方できますか?
0731nobodyさん2007/08/12(日) 21:38:11ID:???
length文をブロックで囲って中にuse bytes;って書いてみそ
0732nobodyさん2007/08/12(日) 21:41:18ID:???
みそwwwwwwww
07337302007/08/12(日) 22:01:23ID:sl0Dt6RW
>>731
ありがとうございます!
そんなuse文があったとは知りませんでした。
パッケージ内のサブルーチンでの扱いでしたので、
サブルーチン(ブロック)の先頭にuseを置いてみましたm(_ _)m
0734nobodyさん2007/08/14(火) 17:47:49ID:???
ひらがなのみを受け付けるフォームを作成しています。
正規表現で

($prm !~ /(?:\x82[\x9F-\xF1]|\x81[\x4A\x4B\x54\x55])/)

と書くことによって一応ひらがなを識別できるようにはなったんですが、
他の文字も混ざってしまうと判定ができなくなります。
例えば「aaaaaaあaaaa」のように一文字だけひらがなが入っていた場合エラーにする事ができないのです。
全て英字なら問題はないのですが。。。

ひらがなのみを受け付けるようにするにはここからどう改造すればよろしいのでしょう?
0735nobodyさん2007/08/14(火) 17:56:04ID:???
($prm !~ /(?:\x82[\x9F-\xF1]|\x81[\x4A\x4B\x54\x55])+/)
0736nobodyさん2007/08/14(火) 18:09:03ID:???
>>735
す、すみません。。
やってみましたけど結果変わらずでした。。。
?:のせいなのかなぁ。。。
0737nobodyさん2007/08/14(火) 18:38:42ID:???
自己解決しました
0738nobodyさん2007/08/14(火) 20:44:26ID:5P93CXGl
Perlerのみなさんこんにちは。質問です。

#!/usr/bin/perl -w
use strict;

my $a="Hello, world.";

my $s=substr($a, 0, 5, "Goodbye");
print $s;
を実行したところ、
Hello
と出力されました。
『初めてのPerl』第3版254ページによると、
Goodbye,world
になるはずなのですが、そうなりませんでした。
Perl 5.8.8を使っていますが、これはどういうわけなのでしょうか?
部分文字列を指定した文字列で置換して代入することをやるにはどうすればいいのでしょう?

宜しくお願い致します。
0739nobodyさん2007/08/14(火) 20:51:37ID:???
パチンコ屋かと思いました

戻りは置換された文字列
$a を出力してください

ついでに書くと $a と $b は使用しないように
0740nobodyさん2007/08/14(火) 20:56:14ID:5P93CXGl
>739さん

ありがとうございます。
教えてくださったようにやると、うまくいきました。

$a,$bの件、気をつけます。

ありがとうございました。
0741nobodyさん2007/08/16(木) 01:34:19ID:???
perlでCGIで
実体参照を出力するんだけど
&アンパサンドと
;セミコロンを含んじゃうので、
この場合、”ダブルクオーテーションで囲むのと、
’シングルクオーテーションで囲むのと、
どちらがより適切ですか?
ページの閲覧者はアメリカ人で
文字コードのデフォルト設定はたぶんUS-asciiとかで、
ソースファイル自体の文字コードはシフトJISです。
0742nobodyさん2007/08/16(木) 01:38:20ID:???
文字列に”ダブルクオーテーションか’シングルクオーテーションが含まれるなら、悩む意味があるけど、
;セミコロンだったらどっちでもいい。

個人的には変数展開しない’シングルクオーテーションの方が軽くていいかなと思うけど、

$hoge = 'ぬるぽ';
print 'ぬるぽ'.$hoge;
print "ぬるぽ$hoge";

ってどっちが軽いんだろう。
0743nobodyさん2007/08/16(木) 01:52:58ID:???
;セミコロンを打ったとたんに、
perlが、
「ああ、、、ここでこの行は終わりなんだな(ニヤリ」
とかって解釈して、勝手に行が終わるかと思ったんですよ。
0744nobodyさん2007/08/16(木) 01:56:19ID:???
あと&アンパサンドはつかっていいんですか?
エスケープしたりとか、
&アンパサンド自体を実体参照にしたりとか、
なにか特別な処理をしなくてもいいんですか?
0745nobodyさん2007/08/16(木) 05:28:27ID:???
\でエスケープすれば?
0746nobodyさん2007/08/16(木) 09:58:58ID:???

>>741-744

Perlについての質問箱 32箱目
http://pc11.2ch.net/test/read.cgi/tech/1186995713/

プログラム板の上記のスレで暴れてる

1. 読まない
2. 調べない
3. 試さない
4. 理解力が足りない
5. 人を利用することしか頭にない

クンなので、ここの住人の皆さんも華麗にスルーする事をオススメします。
もしくは、このスレの低レベルさを証明する為答えてやっても結構です。
何卒、ご協力宜しくお願いします。
0747nobodyさん2007/08/16(木) 11:47:46ID:???
>>743
ねーよwwww

>>744
はあ?
なんで必要なんだ?
0748nobodyさん2007/08/16(木) 11:58:57ID:???
無限ループかw
0749nobodyさん2007/08/16(木) 21:38:37ID:IWfAsW1M
一度
print "Content-Type: text/html\n\n";
と出力してしまったHTTPヘッダを次の行で削除することは
できないものでしょうか。

もし方法があればどうかご教示ください。
0750nobodyさん2007/08/16(木) 21:46:32ID:???
時空間を移動できる能力が身に付けば可能です
0751nobodyさん2007/08/16(木) 21:51:41ID:???
>>749
というより、どうしてそういうことがしたいのかという方が気になる…
0752nobodyさん2007/08/16(木) 21:54:51ID:???
>>749
無理

>>751
禿同
0753nobodyさん2007/08/16(木) 21:57:42ID:???
まあ、2回出力させちゃって、ページの上に Content-Type: text/html って表示させたことの
ある奴は俺だけじゃないはずw
0754nobodyさん2007/08/16(木) 22:42:00ID:???
皆様ご返答有難うございました。

事情は、>>753のとおりです。
一番先頭に出力させてしまい、500行目くらいでlocation使わなけれ
ばならなくなってしまい、どうにかできないものかと思った次第です。

できないとわかっただけで収穫です。
感謝です。
0755nobodyさん2007/08/16(木) 22:52:41ID:???
>>753
あるあrw

>>754
そういう場合は先に条件判定させて、真偽によってサブルーチン使ったりして別々にすればおkかと。
0756nobodyさん2007/08/17(金) 00:55:10ID:NJG0WVbr
すいません、たぶんアホな質問してるんだろうと思いますが思い切って聞いてみます。
perlからpostgresqlを利用したいと思いpostgresqlを調べ始め、なんとかローカル上
ではサンプルDBとか作成できたんですが、DBって1つのファイルじゃないんですか?
perlのcgiファイルみたいにサーバへアップロードするにはどうすればいいんでしょうか?

それと、ローカル上で作成したDBにperlから接続しようとしてるのですが、
Perhaps the DBD::Pg perl module hasn't been fully installed
というエラーが出てしまいます。

DBIモジュールはppmからインストールしいて、再インストールしようとしても
Package 'DBI' is already installed となっています。
DBIモジュール以外に何か足りないのでしょうか?
0757nobodyさん2007/08/17(金) 01:14:19ID:???
ポカーン・・・
0758nobodyさん2007/08/17(金) 02:05:15ID:???
>>756
ひとつのファイルとしてDBを組んで、
アップロードしたいならSQLiteでも使いなさい。
DBIだけでなくDBDのインストールも必須。
0759nobodyさん2007/08/17(金) 02:15:56ID:???
>754
こっちの方がスマートじゃない? そうでもないかな?

 (1) 変数 $output を用意する
 (2) ソースの途中でprintは使わず、代わりに $output へ文字列を追加するようにする
 (3) 最後に$outputを出力

変数に代入するだけなら、幾らでもやり直しができる。
0760nobodyさん2007/08/17(金) 02:38:15ID:???
スマートさを追求するならテンプレート使えよ
0761nobodyさん2007/08/17(金) 10:52:09ID:???
>>756
pg_dumpして、ファイルをアップロードが一番安全だろうけど、権限が必要。
専用鯖なら問題なしだけどね。

DBD::Pgは、theoryx5をリポジトリに追加で行けると思う。
追加方法については、ぐぐってくれ。
0762nobodyさん2007/08/17(金) 12:05:57ID:kNB1PTWd
すごく初心者な質問で申し訳ないです

http://aaa.com/
というURLに
http://aaa.com/aaa/aaa.cgi
とくっ付けたいのです。

$url ="http://aaa.com/";;
$url = $url."aaa/aaa.cgi";

とやっても
2行に表示されてしまいます。
http://aaa.com/
aaa/aaa.cgi
こんな感じになってどうすればいいのやら・・・
0763nobodyさん2007/08/17(金) 12:17:14ID:???
>>762
$url ="http://aaa.com/";;
の一番最後に改行コードが混じってないか調べる。
0764nobodyさん2007/08/17(金) 12:22:20ID:???
>>763
改行コードが混じっていました。
ありがとうございました。
0765nobodyさん2007/08/17(金) 19:23:59ID:5ZhoqBhg
KDDIのサーバを使っているのですが、インストール済みのモジュールしか使えないと書いてありました。
ピュアパールのモジュールを使いたいのですがどのようにしたら良いでしょうか?
07667652007/08/17(金) 19:30:54ID:???
すみません、インストール済みのモジュールしか使えないと言うより、useが使えません。
0767nobodyさん2007/08/17(金) 19:43:10ID:???
pure perl なら
use lib qw(./path);


そんなの糞環境にしかならないですし use が使えないわけ無いのでは?
0768nobodyさん2007/08/17(金) 20:07:18ID:???
useって書いてあるところに差し掛かった瞬間、エラーで終了する
って設定のサーバーが結構あるよ。
0769nobodyさん2007/08/17(金) 20:44:42ID:???
useはコンパイル時に解釈されるから差し掛かった瞬間にエラーで終了というのは・・

Perlインストール時にuse使えないようにコンパイルした可能性がないとも言えない
0770nobodyさん2007/08/17(金) 20:51:26ID:???
コンパイル時にどういうオプションつけたらそうなるの?
0771nobodyさん2007/08/17(金) 22:20:54ID:???
use使えないのは不便極まりないな。
0772nobodyさん2007/08/18(土) 00:34:04ID:???
Bフレッツひけばすべて解決だろ。
0773nobodyさん2007/08/18(土) 12:44:15ID:???
そこそこの来訪数を期待してる鯖を開けるプロバイダってどのぐらいあるんだ?
0774nobodyさん2007/08/18(土) 12:47:38ID:???
というか、ここの住人が使ってる鯖ってどれくらい?○つけてよ。

・専鯖、ハウジング系 
・自宅鯖(Windows系) 
・自宅鯖(UNIX系) 
・レンタル鯖(月5000円以上) 
・レンタル鯖(月1000円以上) ○
・レンタル鯖(月500円以上) 
・レンタル鯖(月500円未満) 
・無料のレンタル鯖 
・プロバイダーの無料スペース 
0775nobodyさん2007/08/18(土) 12:53:27ID:???
友達のところに間借り
0776nobodyさん2007/08/18(土) 14:09:22ID:???
プロックスの何とかアドバンスってやつ
サーバー管理は出来ない知り合いに管理するの約束でただで使わせてもらってる
知り合いはつてで小さい会社のホームページ(静的なページのみ)とメール預かって金作ってるみたい
0777nobodyさん2007/08/18(土) 17:19:19ID:???
・専鯖、ハウジング系 
・レンタル鯖(月1000円以上)

この2つかなー。片方は仕事だが。
0778nobodyさん2007/08/19(日) 15:53:31ID:t6VsRWnY
ソースがutf8で出力がshiftjisの掲示板作ってるんですが、
@ABCD等の数字を対応出来なくて困ってます。

utf8のままで解決出来るんでしょうか?
0779nobodyさん2007/08/19(日) 16:42:09ID:???
Shift JISには@なんて文字はありません
0780nobodyさん2007/08/19(日) 17:04:05ID:pOFLTECe
しばらくPerlってなかったので質問なんですが
今でもフォームからの受け取りは CGI.pm 等がデファクトスタンダードでしょうか?
cgi-lib.pl とか古い知識しかないので、CPANなどで最新の方法など御教示ください。
0781nobodyさん2007/08/19(日) 17:44:44ID:???
Catalyst でも使うといいよ。
0782nobodyさん2007/08/19(日) 19:03:51ID:???
>>778
Windowsの文字コードを使うならcp932へ変換する必要がある。
0783nobodyさん2007/08/20(月) 01:16:07ID:???
>>781
catalystって今後生き延びそうですか?
0784nobodyさん2007/08/20(月) 03:04:12ID:???
>>783
Perlハカーをヲチしてください
0785nobodyさん2007/08/20(月) 11:49:55ID:O2ADjgGz
しょぼい質問ですがお願いします・・・
Search::Namazuを使用して得たNamazuの検索結果(オブジェクトの配列)をダンプしました。
ですが、このダンプしたデータの呼び戻し方がどうしてもわからないです・・。
検索結果(@result)内のデータは例えば以下のとおりです。
$VAR1 = bless( { 'name' => 'hoge', 'score' => '82' }, 'Search::Namazu::Result' );
$VAR2 = ・・・

次のようにすると上記したような文字列としては読み込めますが、できたのはそこまで。
for (@result) { print $_, "\n"; } # => $VAR1 = ・・・

ダンプせず直接書き出す場合は$_->nameでhogeが出力されるんですが・・・
07867852007/08/20(月) 11:52:52ID:O2ADjgGz
※訂正※真ん中の段
×文字列としては読み込めますが
○文字列としては書き出せますが
07877652007/08/20(月) 18:34:36ID:U/5QePTj
>>767-768
ありがとうございます。また、すみません。
useが使えないというのは勘違いで、@INCに何も入っていないだけでした;

けれど、BEGIN { unshift(@INC, 'hogehoge'); }してもコンパイル時の
モジュール見つかりませんエラーに表示される
@INCの中にはhogehogeは入りませんでした。
スクリプトの中で@INCを(printなどして)参照すると確かにhogehogeは@INCに入っているのですが。。
どうにかしてモジュールを使う方法は無いでしょうか?
07887852007/08/21(火) 10:37:32ID:???
>>787
案外ちょっとしたコーディングのミスだったりしない?
例えばModule名と中のPackage名が違ってて、use Package名にしてるとか・・・

あとは指定したパスが地味に間違ってるとか。
use FindBin qw($Bin);
use lib "$Bin";
とすると@INCの先頭にカレントディレクトリのパスが入るから確認してみては。
例えばuse lib "$Bin/../hogehoge"とすると、相対パスでひとつ上にあるhogehogeが指定される。

>>785で質問させてもらったんですが、解決しました。
Storableでファイルへの保存、呼び出しをしてたのですが、
表示する際にData::Dumperで整形してたのです。(バカな話だけど)
それで当然、もとのオブジェクトとしては扱えなくて。
Storableで戻した配列に対してそのままアクセスしたら復元できましたm(_ _)m

ファイルから呼び出したオブジェクトの配列リファレンス($result)に対して
for my $i (0..$#{$$result}) { printf "%s : %s\n", $$result[$i]->name, $$result[$i]->score; }
みたいな感じで。
というか質問自体がわかりにくかったですね。スマソ
0789nobodyさん2007/08/22(水) 02:37:38ID:pj3xRAc/
次のページにrefreshを使わずに瞬時にリンクしたいのですが
どうすればいいのでしょうか?
0790nobodyさん2007/08/22(水) 02:39:50ID:???
>>789
何故ここで聞く…スレ違いじゃね?
CGIならLocationでおk
07917892007/08/22(水) 02:44:24ID:???
質問の内容が漠然としてるみたいなので変えます
次のページに瞬時でリンクした時、次のページに
データを渡したいのですがどうすればいいのでしょうか。
07927892007/08/22(水) 02:45:28ID:???
>>790
即レスありがとうございます
Locationを検索してみます
0793nobodyさん2007/08/22(水) 10:48:13ID:???
リンクしなきゃいいんじゃね?
0794nobodyさん2007/08/22(水) 10:50:22ID:???
二行目を詳しく
0795nobodyさん2007/08/22(水) 12:11:37ID:???
>>794
まさかLocationがわからないとか…ないよな?
0796nobodyさん2007/08/22(水) 12:16:22ID:???
>>795
>>791の2行目の事じゃね?

>>791
「次のページ」が2つ出てきているが、それらは何なのか。またリンク元から見てどこに位置するのか。
「瞬時でリンク」とは何か。
これがわからないと答えようが無い。
07977892007/08/22(水) 12:19:59ID:???
自分が探してたのLocationみたいだったので解決しました
レスありがとうございました
0798nobodyさん2007/08/22(水) 22:14:48ID:sWD+Yq++
ユニコードだとlength($x)で日本語も一文字扱いになるけど、
日本語のバイト数拾うのはどうすると良い?
0799nobodyさん2007/08/22(水) 23:19:26ID:???
どの文字コードにするかでバイト数は異なるから、
お望みのコードにencodeしてlengthとるのが正攻法。

perlの内部表現(utf8)のバイト数でよければbytes::length
0800nobodyさん2007/08/23(木) 00:35:43ID:???
>731
0801nobodyさん2007/08/23(木) 07:54:48ID:uXF+dyLC
>>799
なるほど。ありがとうございました。
0802nobodyさん2007/08/23(木) 18:57:09ID:uXF+dyLC
>>800
うほ!
0803nobodyさん2007/08/24(金) 18:26:53ID:rvbxrzrr
質問させてください
移動平均原価法で原価計算をしたいと思ってます
@COST=(
'2000','3','6000',
'3000','4','12000',
'1000','5','5000',
'4000','3','12000'
);
左から単価、個数、合計という@COSTの配列を作りました
ここからがわかりません。。foreachでまわしてはみたものの、
最初は2行で区切り計算をしてその結果を次の行と計算・・・という流れが作れません
どなたかヒントくださいますでしょうかm(_ _)m
0804nobodyさん2007/08/24(金) 18:34:52ID:???
>>803
移動平均原価法じゃ何も分からん。スレ違い。
せめてもっとソースを示して、こうやりたいと書くべき。
0805nobodyさん2007/08/24(金) 18:47:18ID:???
すみません、ソースを晒したいのは山々なのですがforeach内が全てわからなく、、。
上の例から行くと
1| (6000+12000)/7=2572
2| 2572*7=18004
3| 1000*5=5000
4| (18004+5000)/12=1917
5| 1917*12=23004
6| 4000*3=12000
7| (23004+12000)/15=2334
という順番に計算していき結果的に2334と出したい状況です。
0806nobodyさん2007/08/24(金) 19:04:13ID:???
汎用的に書いて
0807nobodyさん2007/08/24(金) 19:09:19ID:???
> 移動平均原価法じゃ何も分からん。スレ違い。
> せめてもっとソースを示して、こうやりたいと書くべき。

坊やはつまんないKENT CGIでも改造してオレすごいぜーとか思いつつ引きこもっておけばいいじゃん。www
人様に迷惑かけんなよ。wwww
0808nobodyさん2007/08/24(金) 19:18:28ID:???
よくわからん計算法だな。全部足して割り算したほうが

(2000*3+3000*4+1000*5+4000*3)/(3+4+5+3)

わかりやすいような気がするのだが。

各ステップで小数点以下を丸めてわざと誤差を余計に
蓄積させるのが肝??
0809nobodyさん2007/08/24(金) 19:20:09ID:???
#!/usr/bin/perl
use strict;

my @COST = (
['2000','3','6000'],
['3000','4','12000'],
['1000','5','5000'],
['4000','3','12000'],
);

use Data::Dumper;
my ($avarage_cost, $total_pieces, $total_price);
for my $param (@COST) {
my ($unit_cost, $pieces, $price) = @$param;
$total_pieces += $pieces;
$total_price += $price;
$avarage_cost = $total_price / $total_pieces;
print "$avarage_cost\n";
}
0810nobodyさん2007/08/24(金) 19:20:53ID:???
>>808
移動平均法と簿記知らない人は黙っててください。
0811nobodyさん2007/08/24(金) 19:26:14ID:???
#!/usr/bin/perl
use strict;
use POSIX;

my @COST = (
['2000','3','6000'],
['3000','4','12000'],
['1000','5','5000'],
['4000','3','12000'],
);

my ($avarage_cost, $total_pieces, $total_price);
for my $param (@COST) {
 my ($unit_cost, $pieces, $price) = @$param;
 $total_pieces += $pieces;
 $total_price += $price;
 $avarage_cost = $total_price / $total_pieces;
 $avarage_cost = ceil($avarage_cost);
 $total_price = $total_pieces * $avarage_cost;
 print "$avarage_cost\n";
}
0812nobodyさん2007/08/24(金) 19:35:19ID:???
Moving Average Method perl pm
でぐぐれ
0813nobodyさん2007/08/24(金) 19:38:00ID:???
>>812
どのページ?
0814nobodyさん2007/08/24(金) 19:44:36ID:???
それは探せよwww
0815nobodyさん2007/08/24(金) 19:52:53ID:???
それって、結局何も示してないのと同じだよね。
0816nobodyさん2007/08/24(金) 20:47:14ID:???
質問者回答者共々に
馬鹿なのは珍しいな
見物させて貰うよ
0817nobodyさん2007/08/24(金) 20:50:44ID:???
> 質問者回答者共々に
> 馬鹿なのは珍しいな
> 見物させて貰うよ

馬鹿であると認識しつつ見物するというのは何らかの精神障害でもお持ちですか?
0818nobodyさん2007/08/24(金) 21:55:07ID:???
簿記も移動平均法もよく分からんが書いて見る。

use POSIX qw(ceil);

my @cost = ([2000,3],[3000,4],[1000,5],[4000,3]);

my ($avg, $num) = @{$cost[0]};
foreach(1..$#cost){
$avg = ceil(($avg*$num+$cost[$_]->[0]*$cost[$_]->[1])/($num+$cost[$_]->[1]));
$num += $cost[$_]->[1];
}
print $avg, "\n";
0819nobodyさん2007/08/24(金) 22:07:07ID:???
動物園で猿を眺める感覚なんじゃない?
0820nobodyさん2007/08/25(土) 00:34:26ID:???
どうして猿?
0821nobodyさん2007/08/25(土) 10:30:06ID:???
>>809 >>811 >>818
ヒントというかコピペで使える答えを有難う御座います!!
全て試しましたところ3つとも希望通りの動きをしてくれました。
すごくわかりやすくて綺麗なソースです。感謝です
0822nobodyさん2007/08/26(日) 13:21:03ID:???
$obj = new Pkg();

はエラーになるけれど、

$obj = Pkg->new();

または

$obj = Pkg::new('Pkg');

はエラーにならない原因は何が考えられるでしょうか。
0823nobodyさん2007/08/26(日) 14:14:37ID:???
カレントパッケージにnewやPkgというサブルーチンがある場合いくない時がある

package main;
sub new { print "main::new\n" }

Pkg->new();
new Pkg();

package Pkg;
sub new { print "Pkg::new\n" }
08248222007/08/26(日) 16:43:34ID:???
>>823
ビンゴでした!
ほんとありがとうございます!
0825nobodyさん2007/08/27(月) 01:16:35ID:/FKQmVjf
一般的な質問になりますが、
掲示板をPerlで作るとき、データは皆さんどのようにして保存しますか?

私が考えたのは

・連番テキストファイル
・連番XMLファイル
・一つのXMLファイル

ぐらいですが、他にもいい方法などありますか?
0826nobodyさん2007/08/27(月) 01:17:26ID:???
db
0827nobodyさん2007/08/27(月) 01:35:16ID:???
DB
0828nobodyさん2007/08/27(月) 01:43:22ID:/FKQmVjf
あ、スミマセン。
外部からも、元データを簡単に参照できるようにしたいので、SQLなどは除外して考えています
0829nobodyさん2007/08/27(月) 01:51:46ID:???
データベース
0830nobodyさん2007/08/27(月) 01:57:04ID:???
db
0831nobodyさん2007/08/27(月) 01:57:55ID:???
db
外部からの参照時は1枚被せる
0832nobodyさん2007/08/27(月) 02:10:27ID:/FKQmVjf
やっぱり、データベースが良いですか
では、これを機にSQlite+Perlでも勉強してみます
0833nobodyさん2007/08/27(月) 03:13:28ID:???
別に無理して RDBMS 使わなくてもいいんじゃない?
どうせいっぱいいっぱいになって途中で投げ出すよw
0834nobodyさん2007/08/27(月) 07:19:52ID:???
テキスト保存だろうが何だろうが、DBを名乗っても別に問題は……。

まあ、冗談は別として。
なんで連番ファイルにしようと思ったん?
0835nobodyさん2007/08/27(月) 12:21:06ID:???
フォームからCSVファイルのPOSTで、処理の機能ごとにsubでまとめ、
DB入力だけ別鯖へ投げようと思ってます。
(そのDB鯖は外部からのDB接続は許可してない)

それでLWP::UserAgentで外部鯖へPOSTさせた場合の動作で、
CSVが100行あった場合、ループ内で100回のPOSTになりますが
その時に外部鯖の処理速度もループに影響しますよね?
0836nobodyさん2007/08/27(月) 12:25:46ID:???
ファイルごと投げないのは何故?
0837nobodyさん2007/08/27(月) 12:54:31ID:???
ファイルをアップロードしてそのままインポートさせりゃいいのでは?
08388352007/08/27(月) 12:57:01ID:???
DB鯖はFTPアカウント貰えないのですよ・・・

ループ内に処理は書いてなく、LWP::UserAgentでPOSTしてるだけですが、
結局DB鯖での処理が終わってreturn受けてから次のループ というフローでOKでしょうか?
0839nobodyさん2007/08/27(月) 13:31:30ID:???
そう思うならそうしろよ
フォームでどうやって投げてると思ってんだろうね
0840nobodyさん2007/08/27(月) 13:50:36ID:/hovVpUg
外部のHTMLソースを表示するってことperlで可能でしょうか?
0841nobodyさん2007/08/27(月) 13:51:18ID:???
LWP
0842nobodyさん2007/08/27(月) 14:09:38ID:???
そんな糞スクリプトでやるんじゃなくて、ふつーに外注すればいいのに。
0843nobodyさん2007/08/27(月) 14:23:42ID:???
>>838
HTTPでファイルをアップロードすれば?
08448352007/08/27(月) 15:03:22ID:???
いくつもレス頂きありがとうございます。

ただDB鯖の方は全く操作できない(させてもらえない)環境なので、
CSV処理のCGIを1つかまして、そこから個別に1件ずつPOSTするフローにしました。

こういった場合、何かこうしろみたいな方法はありましたら御教示よろしくお願いします。
※外部DB鯖の管理元に解決のお願いをするのは無しの方向でw
0845nobodyさん2007/08/27(月) 15:23:24ID:???
全部いっぺんに送ればよくない?
08468352007/08/27(月) 15:55:05ID:???
>>845
未熟すぎで申し訳ないです。全部いっぺんにというのはLWP::UserAgentの処理方法でしょうか?
それとも全く別の方法でしょうか?今現在はこういった感じになってます。

# リクエスト生成
my $url = 'http://example.com/index.cgi';
my %formdata = ('Name'=>$Name[0], 'Age'=>$Age[0]);
my $request = POST($url, [%formdata]);
# UserAgent生成処理
my $ua = LWP::UserAgent->new;
my $res = $ua->request($request);
print $res->as_string;
0847nobodyさん2007/08/27(月) 16:00:44ID:???
フォームからCSVアップロードしてるのにそれをなぜ1行ずつ転送するんだ
0848ミューズイングリッシュ2007/08/27(月) 16:21:52ID:???
みなさんこんにちは
小さな英会話教室をしていて、ホームページを作っています。
そこでスケジュールカレンダーをphpで、できるとのことだったので、
友人からもらったプログラムをリンクさせましたが、
ログインすると、
Parse error: parse error, unexpected T_STRING in /www/a-mail/muse-eng.jp/public_html/schedule/Calendar.class.php on line 85

と、このようにでます。
ド素人なのでプログラムの書き換えもわかりません。
デザインは出来ていています。
phpプログラムを見て適正に修正して頂ける方探しています。
もちろん謝礼贈呈します。予算がないので10,000円で考えていますが、
お力添えいただける方、宜しくお願いいたします。
対象のホームページ www.muse-eng.jp
ご連絡先メールアドレス aimaniajp@yahoo.co.jp
宜しくお願いいたします。
0849nobodyさん2007/08/27(月) 16:52:11ID:???
ここに田代しろっていうフリだよね?
08508402007/08/27(月) 16:55:57ID:/hovVpUg
LWP::UserAgent;
use HTTP::Request::Common qw(POST);

my $url = 'http://yyyyyy';
my %formdata = ('uuu' => 'uuuuuuuu', 'iiiii' => 'iiiiiii');
my $request = POST($url, [%formdata]);

my $ua = LWP::UserAgent->new;
my $res = $ua->request($request);
print $res->as_string;

my $ua = LWP::UserAgent->new;の記述でscriptエラーでるのですが
これはサーバーの不備でしょうか?
0851nobodyさん2007/08/27(月) 17:02:57ID:???
>>835
もしかして、そのDB鯖って、インターフェイスがフォームしかない(笑)とか?
08528352007/08/27(月) 17:21:20ID:???
>>851
通常の入力フォームはありますが、1件ずつが大変だしデータフォーマットを合わせるために、
CSVのデータからCGIで各値の変換(英数字を半角など)をしてからPOSTする予定です。
0853nobodyさん2007/08/27(月) 17:32:31ID:???
こういうのを社畜って言うのか。
上から言われたら反抗もせずに無駄な労力を費やすと。www
0854nobodyさん2007/08/27(月) 17:35:01ID:???
なんで一々POSTでおくらなきゃいけないのかと
普通にDBに接続しろってw
0855nobodyさん2007/08/27(月) 17:35:48ID:???
>>850
use してなければいろいろエラーは出ると思う。
08568402007/08/27(月) 18:50:06ID:/hovVpUg
エラーは出なくなりましたが
目的の外部HTMLはいろいろ処理(タイトルが変化や色が変わる)していて
表示処理が完全に終わったソースを
perl側から見ることはできないでしょうか?
0857nobodyさん2007/08/27(月) 18:51:22ID:???
もう少しHTMLの勉強をした方がいいと思うな、うん
0858nobodyさん2007/08/27(月) 20:37:22ID:???
背伸びする必要ないと思うなぁ。うん。
それにしても、未だに CGI なんか作ってる人たちっているのかぁ。
0859nobodyさん2007/08/27(月) 21:09:29ID:???
単体なら需要あるしね
0860nobodyさん2007/08/27(月) 22:15:58ID:???
それどんなひねくれた需要?
0861nobodyさん2007/08/27(月) 22:56:41ID:???
本当にわからないならただの無知だな
あとスレ違いだからこの辺にしとこうぜ
0862nobodyさん2007/08/28(火) 03:36:17ID:???
> 本当にわからないならただの無知だな
> あとスレ違いだからこの辺にしとこうぜ

答えれなくなるとそうやって逃げるんだよな。www
0863nobodyさん2007/08/28(火) 08:26:21ID:???
webprog板の55まであるcgi(&初心者)スレで858みたいな事書くのが
信じられん、、、
0864nobodyさん2007/08/28(火) 11:02:31ID:???
Web2.0(笑)
0865nobodyさん2007/08/28(火) 11:45:37ID:???
>>856
もしかしてPOSTじゃなくGETしたいんじゃないの?
0866nobodyさん2007/08/28(火) 12:13:31ID:???
(; ^ω^)・・・?
0867nobodyさん2007/08/28(火) 13:59:00ID:???
うおっ! このスレレベル高っ!
0868nobodyさん2007/08/28(火) 17:03:57ID:???
perlコーディングに関する質問が来ない罠。
0869nobodyさん2007/08/29(水) 01:05:13ID:???
Perlでさ、ブラウザからサーバーのファイルを管理できるソフトを作ってる途中なんだけど、こんなCGI作ってる人って他にもいるかな?
0870nobodyさん2007/08/29(水) 01:11:29ID:???
いますね。そういうのは既にあります
0871nobodyさん2007/08/29(水) 06:39:40ID:XYYl0jHZ
質問です。

コマンドプロンプトからActivePerlを使っていますが、
perldoc Jcode::Nihongo
とした時に文字化けします。
どうしたら正常に表示されますか?

それから、CygwinからもPerlを使ってますが、
$ perldoc
Segmentation fault (core dumped)
$ perl -V
Segmentation fault (core dumped)
$ cpan
Segmentation fault (core dumped)

といった表示が多発しています。
これはどうしたら直りますか?

0872nobodyさん2007/08/29(水) 10:44:32ID:???
perlコーディングに関する質問が来ない罠。
0873nobodyさん2007/08/29(水) 12:32:27ID:???
>>871
perldoc -T Jcode::Nihongo | perl -MJcode -p -e "$_ = Jcode->new($_, q(euc))->sjis"

Cygwinは使ったことないが、
それだけでは、誰にも分からないだろう。
0874nobodyさん2007/08/29(水) 13:27:36ID:???
EncodeじゃなくてJcodeなの?
0875nobodyさん2007/08/29(水) 13:53:19ID:???
どっちでもいいだろw
0876nobodyさん2007/08/29(水) 14:01:41ID:???
Jcodeはラッパーなので微妙ながらタイムラグが出来ます
0877nobodyさん2007/08/29(水) 16:47:36ID:???
Encode使う時点で重いから、どうでもいい。
0878nobodyさん2007/08/29(水) 21:19:54ID:???
> Encode使う時点で重いから、どうでもいい。

どうでもいいなら、どうしてここに反応を書き込むの?
キモい2次元絵見ながら黙ってチンコでもいじってればいいだろ。
08798712007/08/29(水) 21:44:47ID:P8i/jgkh
>>873

回答ありがとうです。
勉強なります。

>>876

Encodeのほうが最近向きなんですね。
ちょっと調べてみました。


もう1つの質問は自己買い付けしました。
我ながらとちくるった質問の仕方でした。w
0880nobodyさん2007/08/30(木) 13:15:57ID:???
フォームから送られて来たデータを
jcode'convert(*name, 'euc');
これでEUCに変換してるんですが、
半角カタカナを入れると文字化けしてしまします。
どうすればいいのでしょうか。
0881nobodyさん2007/08/30(木) 13:29:38ID:???
送られてくるデータの文字コードを指定しましょう。
08828802007/08/30(木) 15:10:33ID:???
>>881
ありがとうございます
うまくいきました。
0883nobodyさん2007/08/31(金) 18:10:59ID:???
俺も jcode::convert(\$name, 'euc'); いまだに使ってる
0884nobodyさん2007/09/01(土) 09:16:04ID:???
POE::Component::IRCに同梱されているexamples内のdicebot.plを使ってみたら、

>Use of POE::Component::IRC->new() is deprecated, please use spawn().
>Called from main /home/xxxx/perl-lib/dicebot.pl 100

と怒られてしまいました。
これは、
POE::Component::IRC->new( 'dicebot' ) と書いてある部分を
そのまま POE::Compenent::IRC->spawn( 'dicebot' ) に書き直せばOKという意味なのでしょうか?
0885nobodyさん2007/09/01(土) 12:15:25ID:???
エラーで親切に教えてくれているというのに・・・
0886nobodyさん2007/09/02(日) 00:16:36ID:1H6hgBEM
携帯のIPを直接使ってキャリア判別したいんですけど、
どういうコード書けば良いんでしょうか?

例えば公開されてるIP帯域が127.0.0.0/24だとするなら
$ENV{'REMOTE_ADDR'} =~ /^127.0.0.[0-9]+$/
のように上位24ビットだけマッチするなら真で良いんですか?

(例の帯域はあり得ないかも知れませんがサブネットマスクについて良くわからないんで勘弁してください)
0887nobodyさん2007/09/02(日) 00:17:53ID:1H6hgBEM
↑ドットのエスケープ忘れた
0888nobodyさん2007/09/02(日) 00:21:59ID:???
my @quadip = split(/\./, $IPADDRESS);
my $ipdec = 0; # 10進に変換された IP
my $basedec = 256 * 256 * 256 * 256; # ベースとなる値

for(my $i = 0; $i < 4; $i++){
  $basedec = $basedec / 256;
  $ipdec += $basedec * $quadip[$i];
}

これで $ipdec に10進数にされた IP アドレスが入るので、同じように公開されてる IP アドレスの範囲も10進数に変換して
その範囲内に収まってるかどうかで確認できる。

0889nobodyさん2007/09/02(日) 00:23:50ID:???
これも追記
## IP の範囲やサブネットから IP の最小値と最大値を10進数で返す
sub getipminmax{
  my($ip) = $_[0] || "";
  my(@retip) = (0, 0);

  # $ip に数字、/、- 以外があればエラーリターンする
  if($ip =~ /[^\d\.\-\/]/){ return @retip; }

  # - か / で分割する
  if($ip =~ /\-/){ # IP の範囲
    my ($ipaddr1, $ipaddr2) = split(/\-/, $ip);
    $retip[0] = &ip2dec($ipaddr1);
    $retip[1] = &ip2dec($ipaddr2);
  }elsif($ip =~ /\//){ # サブネット
    my ($ipaddr, $subnet) = split(/\//, $ip);
    my $subnetdec = (2 ** 32) - (2 ** (32 - $subnet));
    my $ipaddrstart = &ip2dec($ipaddr) & $subnetdec;
    $retip[0] = $ipaddrstart;
    $retip[1] = $ipaddrstart + (2 ** (32 - $subnet)) - 1;
  }else{ # 単一の IP
    $retip[0] = &ip2dec($ip);
    $retip[1] = 0;
  }
  return @retip;
}
08908862007/09/02(日) 00:45:58ID:???
>>888-889
凄い…。
ありがとうございます。

できれば>>888の2,3行目についてもう少し詳しく教えて貰えますか?
0891nobodyさん2007/09/02(日) 01:22:15ID:???

質問です。

ユニークな6〜8文字の英数字文字列があるのですが、この文字列を他の文字列(英数字10文字)にしたいんですが、
それもユニークにしたいんです。
ならべく元の文字列がわからないようにしたいんですが、何か方法はありますでしょうか?

ユニークな文字列は5万行ぐらいあります。
0892nobodyさん2007/09/02(日) 01:31:27ID:???
>>891
my $10moji = sprintf "%010d",$id;
0893nobodyさん2007/09/02(日) 01:33:55ID:???
何この初心者が書いた様な酷いコードは
0894nobodyさん2007/09/02(日) 01:38:33ID:???
>>890
2行目は初期化してるだけ
3行目は

111.222.333.444 という IP をループさせないで素直に書くと
(111 * 256 * 256 * 256) + (222 * 256 * 256) + (333 * 256) + 444
となります
これじゃ見た目がアレなのでループで回す関係上基準値というか初期値を定義してるのが3行目です
0895nobodyさん2007/09/02(日) 01:40:06ID:???
>>893
じゃぁ初心者じゃないあなたが書いてみてください
参考にしたいです m(_ _)m

>>890
ここまで書いておいてアレですが IP アドレスが指定する範囲に収まってるかどうかチェックするような
perl モジュールがあったはずです
0896nobodyさん2007/09/02(日) 01:44:27ID:???
>>895
unpack("N", pack("C4", split(/\./, $ip)))
0897nobodyさん2007/09/02(日) 01:54:25ID:???
>>891
既存のハッシュ関数を元に自分で作りなさい。
MD5とかSHA1も中身は乱数表でクルクルさせてるだけだから。
08988862007/09/02(日) 01:54:57ID:???
>>894
良くわかりました。ありがとうございます。


>>895
NetAddr::IP
こんなのありました。
0899nobodyさん2007/09/02(日) 02:10:43ID:???
やっぱり unpack か
それは知ってたけど、0から書いて10進にする過程を勉強したかったからそういったコードを期待したのだが・・・
0900nobodyさん2007/09/02(日) 02:18:02ID:???
つ Net::CIDR::MobileJP
0901nobodyさん2007/09/02(日) 07:26:04ID:???
>>899
>>899
>>899
0902nobodyさん2007/09/02(日) 13:00:20ID:???
負け惜しみにしか聞こえなくて笑える
ここは初心者が初心者に答えるスレですね
0903nobodyさん2007/09/02(日) 15:05:41ID:???
これが負け犬の遠吠えってやつか
0904nobodyさん2007/09/02(日) 18:56:16ID:???
Perl ってなんでこんなに複雑なんだ?
PHPやRuby Java はすんなり理解できるのに Perl は納得いかないことばかりだ・・・
0905nobodyさん2007/09/02(日) 19:05:01ID:???
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

まずどういう部分が納得いかないでわからないでいるのかを書かないと教えてもらえないよ
0906nobodyさん2007/09/02(日) 19:35:56ID:???
>905
んー、>904に特に意図は無いんじゃねーのかな。
質問スレに書くべきことかどうかはともかく。

良し悪しは別として、Perlは怠慢・短気・傲慢の方向に進化した言語だから、
他言語から入って来たような人だと違和感があってもおかしくないっしょ。
0907nobodyさん2007/09/02(日) 19:39:57ID:???
>>904
>Perl ってなんでこんなに複雑なんだ?

これじゃなきゃ、CPANにあるような膨大なモジュールを作り出せないよ
0908nobodyさん2007/09/02(日) 20:30:52ID:???
perl++, cpan++
0909nobodyさん2007/09/02(日) 21:26:57ID:???
Perlのようなもの
0910nobodyさん2007/09/03(月) 16:56:41ID:EmlGMulI
関数呼び出ししたあとに$_がクリアされてしまうのですが
リファレンスも渡さずに呼び出し先が$_を変更する事はできますか?
0911nobodyさん2007/09/03(月) 17:11:15ID:???
>>910
やってみたら判るだろ?
perl -le '$_= 1 ;sub { $_=2}->(); print $_ '
0912nobodyさん2007/09/03(月) 17:20:12ID:???
>>911
ありがとうございます。
myっぽく確保されるものだと
勝手に思い込んでました。
0913nobodyさん2007/09/03(月) 17:29:35ID:???
そのために local つーものがある
perl -le '$_= 1 ;sub { local $_=2}->(); print $_ '
0914nobodyさん2007/09/04(火) 00:51:54ID:???
テストは、use strict; use warnings; した環境でやれよ馬鹿。
0915nobodyさん2007/09/04(火) 01:58:39ID:???
>>914
use strict;
use warnings;
でも捕まえられないと思うがどうか。
0916nobodyさん2007/09/04(火) 03:51:54ID:???
>>915
つけないよりマシじゃなかと思うがどうか。
0917nobodyさん2007/09/04(火) 06:15:03ID:???
Q:「こんどのデート、どこ行こう?」
A:「映画館でいいんじゃね?」
914:「コンドームも持たずに何やってんだボケ!!」

、、、くらいに>>914はズレてんなあ。QもAもコンドーム持ってっか
どうか会話内容からは分からんのに。それどころかmy知ってるし、
使ってる可能性の方が高いのに。
0918nobodyさん2007/09/04(火) 07:00:37ID:???
コンドームがどうかしたの?
0919nobodyさん2007/09/04(火) 08:23:01ID:???
ただコンドーム言いたいだけだろ!!!
0920nobodyさん2007/09/04(火) 12:41:44ID:???
俺かなりのPerlエキスパートだけど
use strict, warningsは使わないよ
こんなの使って喜んでるうちは素人だね
0921nobodyさん2007/09/04(火) 12:56:08ID:???
>>920
ハ イ ハ イ  エ キ ス パ ー ト 様 乙 で す 
0922nobodyさん2007/09/04(火) 12:59:27ID:???
>>920-921
自演乙
0923nobodyさん2007/09/04(火) 14:03:30ID:???
いや、俺もPerlプロフェッショナルだけど
use strict, warningsは使わないよ
こんなの使って喜んでるうちは素人だね
0924nobodyさん2007/09/04(火) 14:08:37ID:???
>>923
ハ イ ハ イ  プ ロ フ ェ ッ シ ョ ナ ル 様 乙 で す
0925nobodyさん2007/09/04(火) 14:17:32ID:???
いやぃゃ、俺はPerlマイスターだけど
use strict, warningsは使わないよ
こんなの使って喜んでるうちは素人だね
0926nobodyさん2007/09/04(火) 14:19:02ID:???
もういいよ
0927nobodyさん2007/09/04(火) 17:09:14ID:???
俺はPerlマスターベーションだけど
use strict, warningsは使わないよ
こんなの使って喜んでるうちは素人だね
0928nobodyさん2007/09/04(火) 21:03:16ID:???
さすがクソスレ。
0929nobodyさん2007/09/04(火) 22:18:58ID:???
親がforkで子プロセスを作って、親はその後すぐにexitします。
子は一定の処理を行い、またforkして孫をつくる。forkしたあとはexit。
孫も処理を行い、exitする。
これをやると、たまに500内部サーバーエラーが起きるんだけど、
理由がわかりません。

forkする際には、どちらも$|=1、標準出力は閉じています。
0930nobodyさん2007/09/04(火) 23:04:14ID:???
親が終了したら子はゾンビになって子の処理はinitプロセスに渡る
0931nobodyさん2007/09/05(水) 01:30:11ID:???
ゾンビ?

何処に居る!!
0932nobodyさん2007/09/12(水) 18:15:02ID:w11eoBjq
エクセルにおけるCOMBIN(n,m)関数(組み合わせの関数です)ってPerlではどうすればいいでしょうか?
何か数学系の関数を提供してくれるモジュールがありますでしょうか?

また、自分でやる場合は結局階乗も以下のようにすることになるのでしょうか。

sub kaijo{
my $n = $s = shift;
for(1..($n-1)){  $s *= $_ }
return $s;
}

組み合わせ関数も自分で書くしかないんでしょうか。
あんまり軽く仕上げる自信がないですが。
0933nobodyさん2007/09/12(水) 18:16:00ID:???
べき乗は ** じゃなかったっけか?
09349322007/09/12(水) 18:30:54ID:w11eoBjq

sub kaijo{
my $n = shift;
for(1..($n-1)){ $n *= $_ }
return $n;
}

sub niko{
my $n = shift;
my $m = shift;
return &kaijo($n) / ( &kaijo($m) * &kaijo($n-$m) ) ;
}

print &niko(14,2);

とりあえずヒマなので自分で書くのならという事で試しに書いてみました。
何千っていう計算をさせてみようかなって思ったのでちょっとした重さの違いが大きな差につながるかなとおもてまうsが。
採点かアドバイスか。何か下さい。

>>933
階乗ってべき乗使ってできるんでしたか?
すいません調べてみます。
0935 ◆TWARamEjuA 2007/09/12(水) 18:59:47ID:???
my $length = $volume ** (1/3);
って云うのは仕事上、多用しています♪@三女ウコン
09369322007/09/12(水) 19:01:36ID:w11eoBjq
sub fact{
my $n = shift;
for(1..($n-1)){ $n *= $_ }
return $n;
}
sub combin{
my $n = shift;
my $m = shift;
return ($n==0 or $m==0 or $n==$m) ? 1 : fact($n) / ( fact($m) * fact($n-$m) ) ;
}

エクセルに名前倣いました。
それと僕の勘違いで二項係数全然いりませんでした。

別の質問をさせてください。
my @array = qw/1 13223 46 4 29 3/;
こういう風に配列に数値が入ってる場合の、総和を出したい時はどうコーディングするのでしょうか?

@array[0..2]の分の総和
@arrayの総和
など確率のプログラムなので、
@arrayは数千の要素数
それを0と1の総和0-2の総和、0-3の総和のように最後までやってifでわけたいところがあるのですが。
09379322007/09/12(水) 19:02:25ID:w11eoBjq
>>935
ありがとうございます。
三乗根の計算ですね。
0938nobodyさん2007/09/12(水) 19:08:56ID:???
mapでどうぞ
09399322007/09/12(水) 19:18:07ID:w11eoBjq
>>938
具体的なコードを教えてもらってもいいでしょうか?
僕もmapあたりでかっこよくいけると思ったのですが、なかなかそうもいかないというか、
思いつかないんです。


sub sum{
my $a;
foreach(@_){ $a += $_ }
return $a;
}
で、こんなの書いてみました。
いちいち変数を使うあたりがいやです。変数を使わなければmapでも出来るのか?
とか思いますが。
0940nobodyさん2007/09/12(水) 19:45:29ID:???
List::Util
0941nobodyさん2007/09/13(木) 02:52:57ID:???
↑こういうpassは簡単には教えないよーん、みたいなカキコむかつく
0942nobodyさん2007/09/13(木) 04:53:33ID:???
perldoc List::Util
0943nobodyさん2007/09/13(木) 05:20:26ID:???
::
って外部モジュール使うって
意味だったんだね。
0944nobodyさん2007/09/13(木) 08:08:01ID:???
>>939
「変数使わない」って結構大変だし、それで上等だと思うけど?
print eval join '+' , @arr ;
>>943
・・・釣り?
0945nobodyさん2007/09/13(木) 20:30:12ID:QEyk4I0D

$form =~ m/([++,,、、。。__\//  ])/)

正規表現で上記のような記号を抽出しようとすると、
どうもうまく抽出されません。

たとえば「?」が半角の。になってしまいます。

文字コードはjcode::sjis2euc(\$form)で事前に
EUCにしておりますが(ソースコードもEUCです)、
何か対策等ございましたらご教示いただきたく思って
おります。

宜しくお願いいたします。
0946nobodyさん2007/09/13(木) 20:53:20ID:???
まずは。。 []内に2バイト以上の漢字コード書いても1バイトごとのぶつ切りで指定してる
ことになる

あと、日本語EUCと言えども文字の並びによっては別の文字と同じ文字コードパターンがきて
文字の境目が部分だけでは判断できにくくなる

対策としては先頭から1文字ごとに分割して判断するのが素直なやり方
0947nobodyさん2007/09/13(木) 21:15:58ID:???
UTF-8 でがんがろう。
0948nobodyさん2007/09/13(木) 21:53:49ID:???
>>946-947
アドバイス感謝です。

できないことがわかりましたので、早速以下に変えてみました。
報告とさせていただきます。
-------------------------------------------------------
my $form_length = length($form);
for (my $i = 0; $i < $form_length; $i++) {# 文字を1文字ずつ処理(日本語対応)
  my $form_substr = substr($form, $i, 1);
  if ($form_substr =~ /[\x80-\xff]/) {
    $form_substr = substr($form, $i++, 2);
  }
  if(($form_substr eq '+') ||
    ($form_substr eq '+') ||
    ($form_substr eq ',') ||
    ($form_substr eq ',') ||
    ($form_substr eq '、') ||
    ($form_substr eq '、') ||
    ($form_substr eq '。') ||
    ($form_substr eq '。') ||
    ($form_substr eq '_') ||
    ($form_substr eq '_') ||
    ($form_substr eq '/') ||
    ($form_substr eq '/') ||
    ($form_substr eq ' ') ||
    ($form_substr eq ' '))
  {
    &error_out();
    last;
  }
}
0949nobodyさん2007/09/13(木) 22:06:55ID:???
なんで素直にuse utf8しないのだろう
ifでくくるにしてもgrepなりfirstなりで検索するとか
ハッシュテーブル使うとかすりゃいいのに・・・

if (grep{ $_ eq $str } @mojilist) {

if ($mojilist{$str}) {

$pat = join '|', mapquotemeta @mojilist
$form =~ m/($pat)/
0950nobodyさん2007/09/13(木) 22:12:41ID:???
書いてる途中で送信してしまった・・・
足りない部分は想像力で補ってくれ

if (grep{ $_ eq $str } @mojilist) {
・・・

%mojilist{$str} = map { ($_=>1) } @mojilist;
if ($mojilist{$str}) {
・・・

# このやり方はすごく効率が悪い
$pat = join '|', map { quotemeta $_ } @mojilist;
$form =~ m/($pat)/;
0951nobodyさん2007/09/14(金) 14:13:47ID:???
初心者なんですが質問させてください。
Perl言語を用い、fpingの出力ファイルから、
ラウンドとリップ時間のみの数値列を出力するプログラムを作成せよ。
という宿題がでました。
何から手をつければいいかわからない状態なので、もしよかったら教えてもらえないでしょうか?
0952nobodyさん2007/09/14(金) 16:04:26ID:???
>>951 >>1
0953nobodyさん2007/09/14(金) 20:30:20ID:???
> 書いてる途中で送信してしまった・・・
> 足りない部分は想像力で補ってくれ

エスパー能力を要求する回答者イラネ
0954nobodyさん2007/09/15(土) 13:34:20ID:???
わざわざ答えてくれてるのに、ブーたれる初心者イラネ
0955nobodyさん2007/09/15(土) 16:49:52ID:iajdiFDw
シミュレーションプログラムを書いてみました。
ループ回数を増やすほど理論値に近似しますのでできるだけ増やしたいですが、
あまり増やして、数十分も処理を続けられると困ります。

ループ1回あたり何秒かかるのか。
もしくは1秒で何回ループさせられるのかを調べるコードを教えてくだしあ。
0956nobodyさん2007/09/15(土) 16:56:47ID:???
>>955
use Benchmark ;
09579552007/09/15(土) 17:03:02ID:iajdiFDw
>>956
早速ありがとうございます。
英語読めないんですがperldocちょっと読んでどうやらtimethisでできそうな気が。

でやりましたら、
error 0.168701171875 at (eval 6) line 40.
なんて表示されました。

どういうエラーでしょうか。

my $code = q{コード};
timethis(1,$code);
って感じでやってみました。

「コード」内で別モジュールを使ったり、コード内にない自作関数を使ったりするのはありですよね?
それともrequirやuseもコード内でやるべきですか?

イマイチうまくいきません。でもあと少しっぽいのでもう少しだけアドバイスお願いしまうs。
09589552007/09/15(土) 17:05:33ID:iajdiFDw
一応コードの40行あたりの
die
をコメントアウトしてやりなおしたら
Illegal division by zero at (eval 6) line 47.
こんなエラーにかわりました。

改善策わかりますでしょうか?
09599552007/09/15(土) 17:06:51ID:iajdiFDw
すいません括ってる範囲を変えたらなんか上手くいったみたいです。
もうちょっと挙動を調べて又きまう。
09609552007/09/15(土) 17:24:13ID:iajdiFDw
特に問題なしでした。
0961nobodyさん2007/09/15(土) 21:08:38ID:???
簡単なエラーすら理解できないなら、大学辞めればいいと思うよ。
0962nobodyさん2007/09/15(土) 22:37:55ID:???
これで大学生だったら噴くぞ。
0963nobodyさん2007/09/15(土) 23:36:16ID:???
webprogから入ったものですが、最近ちょくちょくPerlにやらせることができそうな
事をみつけてはコーディングしてみています。

複雑なループ処理等になってくると全てがきっちり動いてるのか確認大変ですね。
今なにをやっているかという具体的な中身を視覚化してくれるモジュールなどあるのでしょうか?

自分で「よし、まずはこの変数の動きをチェックしてみよう」みたいな事をやっていくのにも限界があるなと思うこのごろです。
0964nobodyさん2007/09/15(土) 23:40:09ID:???
デバッガって知ってるか。
09659632007/09/15(土) 23:47:45ID:???
>>964
確かエラーを見つけるものですよね?
エラー修正はそこまで苦労しないのです。

普通に何行目あたりに構文エラーがあるなどとわかりやすいですし。
問題は動いてるけど、この出てきてる数値が果たして本当に合っている数値なのかってことです。

それのコードの検証作業を補助してくれるものはないのかなと思ったのですが。
以前にフローを視覚化するなんとかがあるとかないとかって聞いたことがあります。
Perlではなかったかもしれませんが。

実際はもっとわかりやすく、実際に動かした時の逐一の動作を見せてくれると楽だな。と。
0966nobodyさん2007/09/15(土) 23:49:53ID:???
違うから調べてこような。
0967nobodyさん2007/09/15(土) 23:59:55ID:???
>>965
つ print
0968nobodyさん2007/09/16(日) 00:05:24ID:???
どんな数値かどうか知りたいならそれこそPerlでできることだろ
追加書き込みでログ保存するサブルーチン書いて

&func("\$val=$val");
って書いていけば簡単にできると思うが
0969nobodyさん2007/09/16(日) 00:18:53ID:???
デバッガってあまり使われてない気がする
まぁ、プログラム作ってる最中っていうより、プログラムできあがったけど
なんか動作があやしいって時に使うもんだけど。
自分がテストやんなくていいなら使わないか。。。
0970nobodyさん2007/09/16(日) 02:17:16ID:???
WindwosのGUIのデバッガは有料が多い気がする。

とりあえず、perlデバッガなら、w 変数名 と c だけ覚えておけば、
変数をヲチできるよ。

大体は、print文や、ログの事後解析で事足りるから、
デバッガは殆ど使わないな。
0971nobodyさん2007/09/16(日) 03:26:56ID:???
あとData::Dumperかな。
よく多重のハッシュを使うから、これがないとね。
0972nobodyさん2007/09/16(日) 07:21:24ID:y2OdqWq5
my @list = qw/3 7 4/;
print (sort{$a<=>$b}@list)[0];

これで上手くいきません。並べ変えた0番目の要素を表示したいのです。
別配列に一旦入れるのは避けたいです。
確かナイスな方法があったような気がするのですが思い出せません。
お願いします。
0973nobodyさん2007/09/16(日) 07:33:41ID:???
print +(sort{$a<=>$b}@list)[0] . qq{\n};
0974nobodyさん2007/09/16(日) 07:43:09ID:y2OdqWq5
>>973
すっげえ男前。
忘れてたのとは違うやり方だけどナイスですね。

しかしどういう理屈でしょうか?
[0..1]とかも使えちゃいましたし。
プラス演算子がおかれると何故配列として認識してもらえるのでしょうか。
0975 ◆TWARamEjuA 2007/09/16(日) 07:47:24ID:????2BP(6825)
print 式
print(式)
0976nobodyさん2007/09/16(日) 07:52:15ID:y2OdqWq5
>>975
回りくどい。
0977nobodyさん2007/09/16(日) 08:32:37ID:???
>>974
scalar() と似たもんだ。
print scalar ( (sort{$a<=>$b}@list)[0] ) ;
print + (sort{$a<=>$b}@list)[0] ;

配列スライス出力時に、+, scalar 共に使うのも良くない。
print + ( sort{$a<=>$b}@list)[0..2] , qq{\n};
print + ( sort{$a<=>$b}@list)[0..2] . qq{\n};
print scalar ( ( sort{$a<=>$b}@list)[0..2] ) , qq{\n};
print scalar ( ( sort{$a<=>$b}@list)[0..2] ) . qq{\n};
きちんと挙動確認して使うならいいかもしらんが後に読みなおした時
(もしくは他の人が読んだとき)に混乱するのは必至。

、、、が深くは突っ込まんでくれ。理解はしている(つもり)だが、
素人の説明を鵜呑みにするのはイクナイ。ここらへんは本とかperldocとか
読んでくれ。


これだとなんなんで。も一つ
printf "%d\n", sort{ $a <=> $b } @list ;
こっちは配列の中身が整数であることを「保証されない」時痛い目に
合うこと受け合いさ。
0978nobodyさん2007/09/16(日) 09:19:49ID:???
演算子の優先順位をきちんと理解すればわかるはず。

しかしいつも思うのだがO(n)で求めることができる最小値をO(n*log(n))はかかるソート使って求めるのは抵抗あるなあ。組み込みだからよっぽど長いのくわせない限り十分速いのはわかるのだが
0979nobodyさん2007/09/16(日) 10:19:55ID:y2OdqWq5
>>977
すいません。ありがとうございます。

print \(sort {$a<=>$b} @array);
こうすると配列のリファレンスができると思ったらできない。
それで思い出したけど、
print [sort {$a<=>$b} @array]->[0];
これが以前よく使っていた方法でした。これなら配列スライスも安全に
print @{[sort {$a<=>$b} @array]}[0..1];
とできますし。

()の中に配列が入ってるのに[0]でインデックス指定できるかできないか。
+をつけるとできる。scalar()の中に書くとできる。
>>978
その優先順位によって何が行われるんですか。
\()で配列リファレンスができなかったのは\の方が優先低いから先に3つのスカラーが出てきちゃった?
+()だと+が優先高い。。。で、+の優先が高いと何故にインデックス指定ができる?
0980nobodyさん2007/09/16(日) 11:12:25ID:???
いいかげん黒魔術みたいな書き方辞めた方が良いと思うよ。
0981nobodyさん2007/09/16(日) 11:47:48ID:???
配列とリストは違うんだぜ
0982nobodyさん2007/09/16(日) 13:00:23ID:???
> \()で配列リファレンスができなかったのは\の方が優先低いから先に3つのスカラーが出てきちゃった?

根本的に間違ってますから
0983nobodyさん2007/09/16(日) 14:12:00ID:???
sub root{
my @get = @_;
sort @get;
return $get[0];
}

print root 1,2,3;

普通は
print &root(1,2,3);
と書くでしょうし、それが一番わかりやすいですが、括弧なしで書いた場合は一体いくつまでをサブルーチンの引数と解釈されるんでしょうか?
0984nobodyさん2007/09/16(日) 14:27:19ID:???
>>983
挙動は変らんよ。与えられたリストを全部もってく。
print root 3,4,5, print q{hoge} ;
なんてマネしたら当然1 が返る(sort の行をきちんと機能させた場合)
がそれは、
print &root( 3,4,5, print q{hoge}) ;
と同じわけで本来の挙動だ。

お前さんが prototype の事を質問しているのだとしたら全く別の話。
0985nobodyさん2007/09/16(日) 14:35:03ID:???
>>972
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod
> 括弧を使うときには、単純な (しかし、ときには驚く結果となる)
> 規則が適用できます: 関数に見えるならば、それは関数で、
> 優先順位は関係ありません。
0986nobodyさん2007/09/16(日) 14:42:55ID:???
こんにちわ。
コーディングとちょっと違うかもしれませんがお願いします。
test.plを実行すると自分のパソコンのスペックで15分くらいかかります。
ファイル操作とか何もしない、コード内完結型?のコードなので、処理をさせてる間
他の作業をパソコンでしたいのです。

簡単に言うとtest.plの完遂を待ってる時間に2ちゃんねるでもして暇をつぶしたいのです。
なので30分かかってもいいので、test.plのCPUやメモリの最大使用率を通常の1/2にしたいのです。
可能でしょうか?
09879632007/09/16(日) 15:21:39ID:???
>>966-968
う〜ん。なんか伝わってないような。

例えばsort関数が何をしているか視覚化して初心者に説明しなさい。
ってな時にsort関数のコードを渡せば自動で視覚化してくれるモジュールがあればなってことです。
自分でsort関数と同じ関数を作って、そこにごちゃごちゃと視覚化のためのコードを書くのは、
簡単な関数の時にしか「簡単じゃん」とは思えないですよね?

いや、簡単だというならsort関数の視覚化をこの場でやってもらえればいいんですけどね。
my @col = (4,6,2,98,2,1345,22);
この配列をsort関数がどういう手順でどういう事をしてるかを目で見えるようにするコードを「簡単に」どうぞ。
0988nobodyさん2007/09/16(日) 16:00:13ID:???
>>986
コードにメモリ食う個所がどれくらいあるか見ないとニンともカンとも・・
0989nobodyさん2007/09/16(日) 17:10:58ID:???
my @array;
for (1..100){ push @array,$_ }
@array = sort {$a<=>$b} @array;
my $tr = (@array * (1-0.68)/2);
print $tr;
print "\n";
splice @array,0,$tr;
splice @array,-$tr;
print "@array";

このコードですが、$trを表示すると16になります。
しかし$trをintすると15になります。
さらに、spliceに使われてる$trもどうも15として動いてるようです。

15.999999999という状態になっているのか。
こんな事があるなんておもいませんでした。
print すると整数のみなのに、実際は小数付きの数字という事は常に想定しておかないといけないことなのでしょうか?

print "\n\n";
print ($tr != 16);
をすれば1と表示されます。だからそんなに問題はない?
でもなんか混乱しています。何故こんなことになってるのでしょうか?
0990nobodyさん2007/09/16(日) 17:23:41ID:???
>>989
浮動小数点誤差の蓄積?
Math::BigFloat を試すと幸せになるかもしらん。
0991nobodyさん2007/09/16(日) 17:27:58ID:???
>>990
英語の説明しか身吊りません。orz
使い方がわからない。
0992nobodyさん2007/09/16(日) 17:33:39ID:???
>>991
すまんが、
ttp://corn.2ch.net/php/kako/988/988728069.html
の5〜10嫁。
0993nobodyさん2007/09/16(日) 17:51:31ID:rriFOokp
プログラム全体で使用する設定(各種パスやデータベースハンドルなど)を
別ファイルにまとめておきたいのですが、
どのような仕組みにすればいいのでしょうか。
例えばconf.pmに変数として$path=/home/...;
などと書いて、スクリプト本体でrequireしてprint $path;としてもダメですよね・・・
ダメダメな質問ですみませんが、お願いします。
0994nobodyさん2007/09/16(日) 17:53:04ID:???
>>992
すいませんでした。

use Math::BigFloat;
my @array;
for (1..100){ push @array,$_ }
@array = sort {$a<=>$b} @array;
my $tr = Math::BigFloat->new((@array * (1-0.68)/2));
print $tr;
print "\n";
splice @array,0,$tr;
splice @array,-$tr;
print "@array";

としましたら表示が16で、動作も16になってくれました。
これって結構重要なことですよね。
乱数とかを扱う場合特にちょっとした誤差でとんでもない違いが生まれてしまいますし。

で、一体なんなんです?
15.99999999になってるのは別にいいんです。比較でもちゃんと!=16で真出しますし。
なんでprintでは勝手に四捨五入されてしまう?のでしょうか。

誤差が気になるよりもprintでの表示が違う事の方が気になります。
0995nobodyさん2007/09/16(日) 17:58:04ID:???
とりあえず大きい小数点がいつ生まれるかわからないから、
誤差が怖い時は常にbigfloatに入れて使っておけばいいんですかね。
0996nobodyさん2007/09/16(日) 19:33:23ID:???
次スレはないんでしょうか?
ここで質問しても流されそうですが・・・

一応してみます。回答お願いしますm(__)m

@test[-10]の本来のインデックス番号?って簡単にわかりますか?
spliceしないで、頭10番目から末尾10番目を得たいんです。
ごちゃごちゃしないと無理ならspliceでもいいんですけれど。
0997nobodyさん2007/09/16(日) 19:52:40ID:???
Perlコーディング初心者質問スレ Part 56
ttp://pc11.2ch.net/test/read.cgi/php/1189939783/
0998nobodyさん2007/09/16(日) 19:57:31ID:???
>>996
初心者にもほどがあるってレベルなんだけど、釣りなのか?
本気なら、もう少し本なり入門サイトなり見てから質問してくれよ
0999nobodyさん2007/09/16(日) 20:01:49ID:???
use Math::BigFloat;
my $tr = Math::BigFloat->new((@array * (1-0.68)/2));

と書くの大変なので

my $a = use Math::BigFloat;
my $tr = $a->new((@array * (1-0.68)/2));

と書いてみましたがエラーでした。
こういう意図を実現するのは無理ですか?
小数の計算をさせた上で配列のインデックスにする場合はBigfloatしておかないと危ないです。
やってない$trに
$array[-($tr +1)];
とすると実質インデックスが2個変わってしまいます。
15.999だったのが、+で16になり、さらに1が足されて17になる。
そんな現象を確認しました。

簡単な記述方法はないでしょうか。
1000nobodyさん2007/09/16(日) 20:07:07ID:???
新しいスレに再投稿させていただきました。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。