Perlコーディング初心者質問スレ Part 55
質問です。
web(charset=euc-jp)から入力された内容を送信し、Jcodeを通して、utf8でテキストファイルを
作成しています。
入力時に、例えば「りゅうべい(立方メートルの記号)」などを登録すると、㎥のような
記号でデータが送信されます。
この文字列(𘚟)から、Jcodeを通してutf8の文字列を取得するには、どうすればいいでしょう?
my $result = Jcode->new(■)->utf8;
■の部分をどうにかすれば可能かと思うのですが、どうすればよろしいでしょうか?
5 :
◆TWARamEjuA :2007/05/30(水) 19:15:21 ID:??? BE:5227586-2BP(6824)
(´-`).。oO(実体化すればよいだけのような。。。)
こっちがホントの次スレか。
言われるまで気付かなかったよ。
>>4 use CGI;
use Jcode;
my $q = CGI->new;
my $result = Jcode->new($q->param('hoge'), 'euc')->utf8;
use Unicode::String qw(utf8 ucs2);
...
$result =~ s/?(\d+);/ucs2(pack('n', $1))->utf8/eg;
こういうことかしらん。
9 :
4:2007/05/31(木) 12:37:01 ID:???
>>5-8 レスありがとうございます。
>>8さんの方法でうまくいきました。
有難うございました。
10 :
nobodyさん:2007/05/31(木) 18:33:42 ID: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";
このようにやってみましたが、ファイルは出来てもフォルダができません。
11 :
nobodyさん:2007/05/31(木) 18:35:50 ID:F65+C5fx
そりゃできんだろ・・・
>>10 再帰的にコピーするPerlモジュールがあった気がするが、Googleで
30秒探して見付からなかったので諦めた。邪道も道。
#! /bin/bash
mkdir 5555;
cp -fR ./* 5555/;
echo "Content-Type: text/html";
echo "";
echo "mission complete.";
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
ム板にスレ立てたキチガイが暴れてるのかw
16 :
nobodyさん:2007/05/31(木) 22:06:41 ID:oHHUgLPV
掲示板へのポストをサーバサイドでRSAの公開鍵で暗号化して保存し、
秘密鍵を入力したユーザだけが参照可能にしたいのですが、
何か良い方法はありますでしょうか?
そこまで流れ分かってるなら分かりそうだが…
18 :
nobodyさん:2007/06/01(金) 12:46:18 ID:nf+wPUUR
$str = 'AAACCBBBBBAEDAACCCCB';
という文字列(最大5種の半角英文字の羅列で最長50バイト)を
「A3コ、C2コ、B5コ、A1コ、E1コ、D1コ、A2コ、C4コ、B1コ」
というように、文字列の先頭から連続している部分を一区切りとして取り出したいんですが
何か良い方法はないでしょうか?
正規表現で可能かとも思って、チャレンジしてみたんですが頭が足りずできませんでした・・・。
答えに直結するレスがもらえれば最高ですが、
答えに近づくアドバイス(参考書籍・サイト等)でも構いませんのでよろしくお願いします。
$hoge =~ s/((.)\2*)/$1\n/g;
print $hoge;
20 :
18:2007/06/01(金) 13:17:33 ID:???
>>19 ありがとうございます!希望通りできました。
こういうのは、センスなんでしょうか、慣れなんでしょうか。
単に私の努力と勉強がまだまだ足りないだけかもしれませんが・・・。
本当にありがとうございました。
my @r = $str =~ /((.)\2*)/g;
print join ',', @r[map $_*2,(0..$#r/2)];
>>19のほうがいいな。
質問させていただきたいのですが、
コマンドラインから引数を渡して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 こちらのページで、別プロセスに〜と書いてありますが
何かいい方法はありますでしょうか。
俺はニュータイプになれそうにもないな
>>23 う・・・・
ちなみに上で長々と書きましたが、
open(|FILEHANDLE,EXPR)としたときの返り値はサブプロセスの pid になるので
うまくperlファイルで扱えないのですが、
対応方法を教えていただきたく書き込みました・・・。
またエスパーですね・・・
ファイルから読み込んで要素数が1000個の配列(1要素は1KBもありません)を作るのと、
必要になるたび(といっても3回程度ですが)ファイルを読み込むのとどっちがいいですかね?
>>22 > open(FP,"| /hoge/file.php $i");
|を置く場所が違う。それじゃデータの流れがperlからサブプロセス。
その結果、出力をperlが受け取ることなくその場で表示される。
正しくはこの位置
open(FP,"/hoge/file.php $i |");
# ちなみに、openじゃ入力と出力両方を接続することは出来ない。
# そういう用途ではIPC::Open2とかが必要
27 :
nobodyさん:2007/06/02(土) 06:39:37 ID:L1OVX2UL
フラッシュ(swf)から変数を受け取って、HTMLのフォームからデータを送ったときに、
POSTの中身って自分で調べることが出来るんでしょうか?
cgiのURLはソースを見れば、バレバレなんですが、変数の中身はswfから受け取ってるので、
htmlのソースには書かれてないんです。
フラッシュ内にパスワードとかを書いておきたいのですが、見られると意味ないので…。
ちなみに個人的に調べたところでは、
ttp://www1.mahoroba.ne.jp/~mitt/itmemo/webappsecurity/02.htm 見られて困るデータの場合は GET でなく POST を使いましょう。
そのまんまですがこれしか思い浮かばないです)
一般にサーバ側の履歴はアクセス要求があった URL などは保持しますが、
POST されたデータの中身まで1つ1つ保持することはほとんどありません。
ブラウザの履歴にも URL しか残らないので、他人にパソコンを触られても
どんなデータを送信したかまでは見られる心配はないです。
とは、書かれてあったのですが、心配なもので…。
パケットキャプチャーすれば楽勝で見ることができる。
swfファイルにパスワードを書くとな?おそロシア
32 :
27:2007/06/02(土) 08:41:15 ID:???
>>31の存在は知っていたのですが、パケットキャプチャーなるものは
知りませんでした。とにかくどういう手法を使っても、
「自分のブラウザから」送信するデータを見えなくするって無理ってことですよね。
ありがとうございました。
キャプチャだけの問題ならワンタイムパスワードなりSSLなり
方法は無数にあるけどPerl関係無いからね
一般的にPOST+SSLのサイトがほとんだしね
それでいいんじゃないの
パッケージHageにTuruturuサブルーチンがあるかどうかチェックする方法はありますか?
Hage->can("Turuturu")
37 :
35:2007/06/02(土) 20:47:47 ID:???
UNIVERSAL の can かあ。勉強になった。
pod のディレクトリで grep してやっと所在が分ったよorz...
exists &Hage::Turuturu;
こういうのもあり。
サブルーチンのプロトタイプ宣言って、みんな書いてますか?
Cとかだと当たり前だけど…
よっぽどクリティカルな場合以外書かないなあ
Perlのアレはな。値渡しする気満々にしか見えない。
Perl5 のプロトタイプはサブルーチンのインタフェース、具体的には引数リスト要素の各コンテキストを強制的に変更します。呼出しが不自由になるだけで特にコードが分かりやすくなったりしないので、ぼくは使いません。
以前にはサブルーチンによる定数定義に "()"(引数なし) を使っていたくらいかな。今は更に特別な目的がないと使わないと思います。
>>40 氏ね。
>>41 モジュールから引っ張って来れないことがわかってから使わなくなったな。
呼び出し側にプロトタイプ書かなきゃ使えないなんて無意味すぎ。
useとuse baseは継承と多重継承だそうですが、違いはなんでしょうか?
親を一つ持つか複数持つか、の違いだとは分かるんですが、継承を繰り返す=多重継承ではないんですか?
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
>>47 > useとuse baseは継承と多重継承だそうですが、違いはなんでしょうか?
use はコンパイル時にモジュールをロードする構文であり、use base は「所定の場所から base.pm を探してきてロードしなさいよ」といった意味です。
この場合、たまたま base プラグマが継承に関する機能を持っているというだけで、use 自体は継承とは何の関係もありません。
> 親を一つ持つか複数持つか、の違いだとは分かるんですが、継承を繰り返す=多重継承ではないんですか?
親を複数持つのが多重継承です。継承を繰り返すのが多重継承であれば、少なくとも Perl ではほとんどの明示的な継承は暗黙の多重継承となります。そうだとしたら呼び分ける必要がありませんね。
皮肉ではなく純粋に心配なので、こういうでまかせをどこから仕入れてくるのか、参考までにお教え願えませんか。
50 :
47:2007/06/03(日) 22:23:03 ID:???
>>49 本やネットから正しい知識を得てきても出来の悪い頭がこんな解釈をしたようです。
回答ありがとうございました。
>>48 Perlの質問と言うかMySQLの質問に近いが…
MySQL上のどこかの文字セット設定がまずいな。多分スクリプト側だと思うが。
$db->do('SET CHARACTER SET sjis');
接続直後にやって見れ。
後、本当にsjisでいいのか?
Windowsお得意の機種依存文字を受け入れたいならcp932使っとけ。
いや、解ってて確固たる信念を持って受け入れないならそれはそれでいいんだが。
>>48 my.cnf (Windows XP ということなので my.ini とかになるのかな?) の調整で解決しないかな。
いかにも自動変換が悪さをしている気配よ。
あぁそれか。それmy.cnfにありえない一行が必要です。
ディレクトリの読み込みについて質問があります。
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);
とした場合でも同様に読み込めず、原因が何なのかもわからず困っています…。
何か基礎的な部分で間違っているのかもしれませんが、教えて頂けると助かります。
宜しくお願い致します。
>>54 > my @dir_list = (test,test2);
ソースそのまま実行したのなら。
my @dir_list = ('test','test2');
opendir DIR, $dir_list[0] or die ;
する事もお勧め。
>>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の
ディレクトリ指定が間違っていると思うのですが…。
<>演算子で@th_listに代入したということは、@th_listの要素の尻に
改行が残っているということではないか
> unless(open(FILE,"<testdir/list.dat")){$error = ."魚"; &error();}
の
$error = ."魚"
ここで死んでるだけだと思われ
use strict;
use warnings;
くらい付けましょう
59 :
54:2007/06/05(火) 15:06:29 ID:???
>>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行に問題があると思うのですが…。
60 :
54:2007/06/05(火) 15:10:42 ID:???
書き忘れましたが、動作しないというのは500エラーが出るという事ではなく、
サブルーチン&errorに飛んでしまうという事です。
>>56の最後の2行目を除いた状態では、&errorに飛ばずそのまま次の処理へ映るのですが、
unless(opendir(DIR,"$th_list[0]")){$error .= "魚"; &error();}
closedir(DIR);
という記述をすると、$th_list[0]に入っている「001」というディレクトリが開く筈のところ、
何故かディレクトリを開けずに&errorに飛んでしまうのです。
61 :
54:2007/06/05(火) 15:25:19 ID:???
>>57 勘違いしていました…各行に改行が入っているという事だったんですね;
chopを使って@th_listの各行の改行を削除したところ、解決しました。
長々とすみませんでした;
ありがとうございました。
書き間違い、書き忘れ多すぎ。
自分の書き込みのチェックぐらいしろ。
てか、後出し情報多すぎ。
>>54のときと
>>56のときと問題が微妙に変わってるし。
お前の書き込みを真に受けて付き合ってる方の身にもなれ。
結論は
>>57が正解。
chomp使え。
63 :
62:2007/06/05(火) 15:26:20 ID:???
orz.
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 '
携帯電話でアクセスしたとき、携帯電話用のページ表示したいのですが、
どういう方法がよいのでしょうか?
よろしくお願いします。
ご自分の環境に適した方法が良いでしょう。
詳しくはGoogle参照。
>>66-67 レスどもです。
ブラウザで、条件分岐させる方法があるみたいですね。
つ Net::CIDR::MobileJP
>>69 たぶんそれじゃなくて、スレタイと無関係に SetEnvIf とか RewriteCond なんだと思う。
Perlスレの正しい答えだろ
>>51 >>52 ありがとうございます。
管理ソフトでも入れて my.ini変えてみます。
それらでは解決しないけど少し苦しめ
74 :
nobodyさん:2007/06/10(日) 15:23:21 ID:m8gOFHaO
CPANを使いたいんですが、makeでコケてしまいます。
nmakeもnmake15もmingw32-makeを使ってもダメなんですが、
WindowsでCPANを使う時には何が主流ですか?
75 :
nobodyさん:2007/06/10(日) 21:30:37 ID:c+ghO5Jd
>>64の、
>本当に「001」って名前のディレクトリを使ってないと思うが、
>もし使ってるのなら用心した方がいいよ。
というのはどういう事でしょうか?
ディレクトリ名に番号を使用するとエラーになる(?)可能性があるとかでしょうか?
>>54じゃないですが、ちょっと気になったもので…
>75
ヒント: Perl的には0で始まる"数字"は8進数
>>76 ヒントというか半分答えですね。
すっきりしました!ありがとうございます。
perlの質問なのかわからないのですが、お尋ねします。
今レンタル鯖でLWP::Simpleを使って、cronを仕組んで、100以上のurlを早朝にgetしてパースしています。
uptimeの値を見ても、全くといっていいほど、負荷はかかっていないように思えるのですが、getするのに一番時間が
かかっているためなのか、スクリプトの実行から終了まで2分程度掛かっているようです。
一般論として、レンタル鯖でやってはいけない負荷の高いスクリプトの使用とは、何をもって判断すべきでしょうか?
また、LWPで100以上のurlを一気に取得することは非常識なのでしょうか?
鯖に聞け
>>79 個々については鯖に聞かないといけないのはわかるけど、このスレには自分で書いたスクリプトを
走らせてる人も多いと思うんだけど、これはヤバいかな?みたいな定性的な判断ってどうしてるのかな。
自鯖だから気にせん
Socket : 微妙
GD : 大変微妙
fork ; sine
こんな感じ
100文字程度の任意の文字列をPerlのみで縦書きに書き換えるにあたり、
当方何も思いつきませんので、何か思いついた方がいらしたら教えて下さい。
【入力例】
前走の大敗がよく分からないが、引き続き毛ヅヤや馬体の
張り等は際立って良く見える。
【出力例】
見際体きいよ前
え立の毛がく走
るっ張ヅ、分の
。てりヤ引か大
良等やきら敗
くは馬続なが
、
実際は縦書き用の等幅フォントを使用します。
日本語の方は 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" ;
}
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"
}
俺の無い知恵を絞った力作
禁則処理まで要求すんのかあ…ガンガレ!
87 :
nobodyさん:2007/06/11(月) 23:37:43 ID:LQaHOZkB
Perl初心者です。
よろしくおねがいします。
メールフォームで添付ファイルをつけて送信されるようにしたいと
思っているのですが、添付されたファイルが全て1バイトになっていまいます。
考えられる原因は何でしょうか?
サーバーの一時フォルダ(temp)にアップロードされているファイルは0バイト
になっています。
どうぞよろしくおねがいします。
>>84-85 ありがとうございます。恐縮です。
後で試してみます。
>>86 もしかして禁則無いですか?
まぁアイデアは貰えたのでそのへんは己で何とかします。
>>88 84 には振り下げが含んである(一応)。後は自分で頑張れ。
マルチパートになってる?
91 :
nobodyさん:2007/06/11(月) 23:52:48 ID: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
こんな感じになっています。
これはマルチパートになっているということでいいんでしょうか?
92 :
nobodyさん:2007/06/11(月) 23:54:50 ID: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);
ソースの方はこんな感じにしています。
ファイル名は正しく添付されているのですが、なにせ中身がありません・・・
よろしくおねがいします。
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;
}
-----------------------------
>>92 その部分だけではなんともいえない。Perlプログラムがどうこうより、まずは
生成されたメールのソースをよく見て関連するRFCに照らし合わせて正しいか
どうか確認したほうがいいと思われる。
>>93 s///のeオプション使って好きに加工すればOK
>>93 もとのURLの後半をcutしてから『…』くっつけて、
html出力するときにリンクタグではさめばいいだけじゃん
何を悩む必要があるのかわからないんですけど
>>96 俺は君の回答がさっぱりわからない。
cutしてからリンクタグだと、リンクの飛び先も…になるじゃない。
しかも
>>93が言っている変換対象の変数にはURLがひとつというわけでもなさそうだし。
表示するURLと、アンカーに含めるURLを別々に保持してっていう考えすら浮かべられないの?
初心者にも程があるだろ
>>93=
>>97 氏ね
$_[0] =~ s/([^=^\"]|^)(https?\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)/$1 . '<a href="' . $2 . '">' . (length $2 > 30 ? substr($2, 0, 30) . '…' : $2 ) . '<\/a>'/egx;
キチガイの相手なぞしてやるな。
101 :
97:2007/06/12(火) 12:56:27 ID:???
>>98 申し訳ない。
少し有名なもんで天狗になっていた。
ソースを提示してもらえないでしょうか。
>>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とかモジュール使ってみて比較してみれば。
有名ってなんだよwwww
ふつーに変数2つとか配列とかハッシュとかに突っ込んで片方cutすりゃいいだけだろ
ソースもクソもねえよ
文字列を禁則を考慮しつつ行に分けるのとそれを縦書きに組み替えるのは
一度にやらない方が見通しがよいんじゃないか? 前半はJcodeのjfoldとか
使えばいいわけだし。
愚直に作るとこんな感じだけど、ちょいと微妙。
文字の切り分けは、どこかで一文字単位にしないといけないので、一度に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";
}
>>102 mcbsとヒアドキュメントのダブルクォートと\rに突っ込んどくw
>>103 だから相手にするなって。
おまえも文章の誤解をしている時点で初心者以下の糞レベルであることには変わらんよ
はいはいおもしろいおもしろい
>>106 mcbsは… orz
脳内 =~ s/mcbs/mbcs/g;
聞く方も答える方も初心者かよ
はいはいおもしろいおもしろい
変数に代入できる値の制限はあるのでしょうか?
文字列だと1000文字まで、数値だと100桁まで...等
検索してもそれらしい情報が見つかりません…。
数値はあったが忘れた。Math::BigIntで検索すれば何か出る。
CGIで質問フォームを作ってそれが完了したと同時にメールが送られるようにしてるんだけど、
一定文字数を越えると文字化けしてしまう。。
誰かこの文字化けが何系の文字コードか分かる方います??
$"$($($($($($($($($($($($($($($($($($($($($($($($($($($($($($($($($($($($3$3$G2~9T$*$*$*$*$*$*$*$*$*$*$*$*$
普通に考えりゃ7bitJISだよね
そんな風に出るわけねーと思うけど
ありがとうございます。
ヘッダに
Content-Transfer-Encoding: 7bit
を付加してみましたが結果変わらず。。
途中までは普通に文字が表示されてるんだけど途中から急に上みたいな文字列になってしまう。
メール分を生成してるところで本文が入っている変数をDumpしてみたけど
そこは特に文字化けも無く全ての文字が正常に格納されている状態。。。
メールのヘッダとかその辺の設定しか考えられる余地が無いのだけど、うーん。。。
>>114 見るからにJISのひらがなあたりだろ。EUCのMSB落ちかもしれない。
とりあえず頭にESC-$-B補ってnkfに食わせたら
あえええええええええええええええええええええええええええええええええええここで改行おおおおおおおおおおおお
と出ました。
すごい!そう打ちましたw
>頭にESC-$-B補ってnkfに食わせたら
この部分がさっぱりですがググリながら実装方法を調べてます。
感動しましたw
$B$J$K$2$J$/BG$C$?J*$,;/$5$l$A$c$&$N$O0U30$HCQ$:$+$7$$$+$b$J!D#w
実装というか欠落したメールを復元するだけなのか(´・ω・`)
>あえええええええええええええええええええええええええええええええええええここで改行おおおおおおおおおおおお
わらたw
まあ、テスト時に特に意味の無い文字列を送るのはEメールの伝統ではあるが。
open(FH, 'test.txt');
$content = <FH>;
$content or die;
close(FH);
みたいに、closeする前に終了する(可能性がある)のはあまりよろしくないでしょうか?
終了する時にはcloseするので何の問題もない。
125 :
123:2007/06/15(金) 10:12:39 ID:???
個人的にはちゃんと閉じたいけどね
そんなことを気にしているくらいならopen文のエラーも気にしろよ
俺はかならずifの中でopenしてる
unlessじゃ駄目?
>>128 Cから来た奴は必ずそうするがorが最もスマートだ
> Cから来た奴は必ずそうするがorが最もスマートだ
or のあとにブロック書ける?
... or do{ ... };
え?
こんな高い位置にブロック書くの?
ちょっと書いてみて。
sub error
{
my($str) = @_;
print $str;
exit;
}
sub main
{
open(FILE, "< uso.txt") or &error("そんなファイルないよ");
my @lines = <FILE>;
close(FILE);
$#lines < 0 and &error("中身ないよ");
# 以下略
}
はースッキリ快適。
>>133 「 can か cannot」かって聞かれて(と判断して) can と答えたんじゃね?
実際やるか とは別でしょ。
135 :
132:2007/06/16(土) 12:14:24 ID:???
2引数openとか古臭い書き方だなあ
批判はするが例を示さない
この板らしいっちゃらしいな
示すまでもなくperldocに書いてあります
確かにこの低レベルなスレはperldocと統合しても何ら差支えはないだろう
あ、ム板の方は高レベルなので残して置いて下さいね^^
ム板ならともかくこっちなら2引数で正解だな。
どこにでも5.6以上のPerlが置いてあるなんて考えるのは甘い。
顔赤すぎ
まあ現代の大抵のレン鯖は5.8なのが事実ですけどね
ム板って何?
前スレの終わり辺りから何かあると盛んに出てくるけど
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ばかり見てるとますますバカになるよ。
>>141 FileHandleやIO::Fileモジュールを使おうよ。
だって遅いしー
PerlモジュールのEmbed::Persistentはどこにありますか?
Win (no cygwin) + lighttpd + FastCGIでPerl 5.8を動かしたいのですが、ppmで引っかかりませんでした
普通にいつものページで検索すればありましたが
Win32 PPM packages for "ExtUtils-Embed"
trouchelle.com Perl 5.8 repository [ v 1.14 ]
151 :
nobodyさん:2007/06/18(月) 00:25:21 ID:k4WptDOc
メールで送信した内容をCGIで処理するには、
どうしたらよいでしょうか?
MovableTypeやWordPressのメール投稿のようなイメージです。
[email protected]に送信して、www.hoge.comのCGIで
その投稿内容を読むといった感じです。
PerlでPOPクライアントを書いて、内容を取得して、
それをcronで回すくらいしか思いつかないのですが、
cronを回せるレンタルサーバも少ないですし、
回せても1時間毎くらいがせいぜいだったりしますし。
ログイン時に受信すればいい
151 さんは、メールを送った直後に自動更新されることを期待していると思うんだ。
152 みたいなバカは死ぬとよい。
>>151 =
>>153?
バカな153のせいで、151の質問に答える奴はいなくなりましたとさ(終)
ここまで俺の
157 :
154:2007/06/18(月) 07:36:43 ID:???
>>155 まぁ、そうくるだろうと思ったよ。マジレスすると152は漏れじゃない。
信じなくても良いけど、
>>153を援護すればする程、
>>151の質問に
答える奴はいなくなるよ?(w
ここまで俺の
神経戦乙
> 答える奴はいなくなるよ?(w
答える能力はないが煽っていますということ?
qmailならhomeディレクトリにメール受信時にスクリプトを動作させることはできるが、
他のメールサーバーでも同じことはできるかと思う
答える答えない以前に、Perlの質問じゃないから。
> 答える答えない以前に、Perlの質問じゃないから。
それがどうしたの?
それがどうしたの、と言われましても…
ここはPerl"コーディング"質問スレな訳ですし。
ロジック的なことを聞きたいのならば、
この板にも適切なスレッドがありますし、
更に深い内容ならUNIX板とかに行けば良いでしょう。
しかし、そのロジックを理解した上でのコーディングに関する
質問はスレ違いではありませんが、レベル的に
"自分で考えれば分かる"程度なので、処理をアシストする
モジュールくらいしか案内出来ないでしょう。
少なくとも 151 の書き込みを読む限りでは。
>>153 が
>>152 を煽る理由がわからん
152 が質問者なのか
違うのなら質問に答えると思うが
上島竜平は まで読んだ。
167 :
54:2007/06/18(月) 15:51:47 ID:???
名前欄誤爆った…54ってorz
情けない質問するやつも氏ねば済むんじゃね?
メール着信でスクリプトをキックする方法は、管理者に訊いた方がいい。
システム構成によって方法が違うから。
禁止されてるかも知れないし、maildropが使われてるかも知れない。
ここからPerlコーディングについての質問。
my $intAnchor = 1;
while( $intAnchor < 1001 ) {
>>172 += $intAnchor;
$intAnchor++;
}
塩
>>151 CGIで読むってことは、CGIがメーラー(POPクライアント)の役割をするわけだから、
CGI起動時にメールボックスから届いたメールを読み出せばいいのでは。
Net::POP3でも使ったらどうですか? 読み出したらサーバから削除するなどの
処理はすべて自分で書く必要があります。GUIのないメーラーを作るようなもんです。
…ていうことではなくて、届いたタイミングで、届いたメールデータを処理したい
ってことかしら。であれば、perlというよりは、.forwardまたはdot-qmailファイル
にでもプログラムにパイプで渡す設定をしておけば、プログラムから標準入力
を読んで処理すれば済む。MIME::Parserを使うと便利。
まずはコードを書いてみることです。
素朴な疑問。
CGIで、場合によってLocationヘッダを返した場合、
ユーザからみると、即座にページを飛ばされるんですが、
そのCGIはLocationヘッダを返したあともexitしない限り、
以後の処理をし続けるんでしょうか。
どうも。確かめる方法がわかりました。つまらん質問すみません。
飛ばした後にファイル出力できたので、ちゃんと最後まで処理しますね。
てことは飛ばした場合もちゃんとexitしたほうが無駄が少ないということ
ですよね??
きみの言う無駄とは?
ああ、そういう突っ込みになりますよね。無駄があるのは僕だけの事情でした。
例えば、通常、ウェブページをきちんと出力するルーチンの途中で例外的に
飛ばした場合の、その後のページ出力処理、とか。
179さんの言ってる意味がいま解りました。最後まで処理しないと
飛ばないんですね。面目ない。
そりゃ単にバッファをフラッシュしてないだけだろ
185 :
151:2007/06/18(月) 23:52:23 ID:k4WptDOc
質問の仕方等々で至らぬ点があり、なんだか揉めてしまったようで申し訳ないです。
普通に帰るのが遅い人間&出先から書きにくい状態でした。
意図としては
>>177さんが書いてくださったような、
「届いたタイミングで、届いたメールデータを処理したい」、
つまり、メールを受けたことをトリガとしてバックエンドの処理を動かすという
というものでした。
例えば、メールで「1+1」と送ると、バックエンドで計算処理をして、
答えを「2」で返す、というような。
ご指摘いただいたように、Perlコーディングという内容ではないので、
いただいたお答えを元に、うちの環境で確かめることにしてみます。
ほんとうにありがとうございました。
改行を含む文字列の中の一部分を取りたいときに、直近の改行コードまでという指定は出来ないものでしょうか?
kani
kanimiso@
kanikama
上のような文字列(@部分がいろいろ変わる)からmiso@を抜き出したいんだけど
s/.*kani(.*)\n/$1/;
みたいにするとmiso@\nkanikama\nまでが取れてしまいます。
最短マッチとかs修飾子とか
最短マッチで出来ました。ありがとうございました。
中身が空っぽもしくは
<html>
<head></head>
<body>
</body>
</html>
になってるファイルに<p>hogehoge</p>を書き込んで
<html>
<head></head>
<body>
<p>hogehoge</p>
</body>
</html>
にしたいのですがどうしたらよいでしょうか。
質問ってレベルじゃねえぞ…
>>189 それだけの条件なら何も考えずに最終結果を固定で上書きするだけでいいんじゃねーの?
すみません
>>189に追加させてください
<body>〜</body>に<p>hogehoge</p>以外に既に何か文字が入っていても
それを消さずにその下に追記するようにしたいのです。
<body>
<p>fugafuga</p>
</body>
を
<body>
<p>fugafuga</p>
<p>hogehoge</p>
</body>
こんな感じです
HTML::Templateでも使っとけよ・・・
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.
perl -MIO::All -e '($tmp = ${io("index.html")}) =~ s{(</body>)}{<p>hogehoge</p>$1}, $tmp > io("index.html")';
perl -0777 -i.bak -pe 's{(</body>)}{<p>hogehoge</p>\n$1}' index.html
>>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);
}
/<\/body>/ こんな書き方する馬鹿は氏ねばいいのに!
>>199 そこまでは思わんが、実行するまでもなくグダグダな195に
195を実行せずにレスする質問者を見るとなあ。
>200
if ($line =~ m{</body>})
こんな感じにしたほうが読みやすいだろ、ってこと
いや
別にいいだろwww
それだけで氏ねとか言われたならなんだかちょっぴりかわいそすwww
基本だろ。大丈夫か?
ってまた彼が言ってるだけか。
>>189へのレスのシカトっぷりと、結局自分で書けた(=質問する意味ね
えじゃん)って事と、
>>195のふざけた態度みて(なにが添削しろだよ、
せめてsyntax errorなくしてからレスれ)寛大で居られるおまえらは凄い。
氏ねとは思わんが消えろとは思うぞ、心の底から。
Template
>>206のキレっぷりも凄いがなw
>>195の最後の2行は「これ自信無い。間違ってたら指摘して」って事じゃねぇの?
>>195は回答者としては初心者(良回答とは言えない)だろうが、
一応
>>193の答えにはなってるからいいんじゃないのか?
自分で書けた〜のくだりは同感だが、そんなのにいちいち目くじら立ててもな。
ついでに言うと、
>>206は海外に行かない方が良さそうだな。
>>210 syntax error出るのが答えなの?
要件にも沿ってないよ。実行してみ?
>>208 正確な和訳は出来てたが、つい勢いで。
>>210 どっちかってーと質問者よりも195の方が消えて欲しい。
一回くらいは実行してから、レスするのが礼儀じゃないか?
特に自信ないならなおさら。
最後の一行は同意。
>>208 そう書いたつもりなんだろうけど「俺じゃなくてこのコードさんが、自信がない、と」に
なってたりでいろいろアレなことになってる。
>>206 俺は寛大じゃないけどめんどくさいので
>>195はほったらかしてた。
>>210 辞書で confident 引いて用例眺めろ、ってあんたに言えば
>>195に伝わりそうな気がする。
質問者が自己解決するまでに
ろくな回答もできない低脳どもの集まるスレはここですか?
違う。
お前が一人で荒らしてるスレ。
これだからPerlはwww
tp://0-9.sblo.jp/article/4439458.html
"1,21,10,100,1"のようにランダムに数字が入った文字列の中で
「1」という要素が含まれているかどうかを知りたいのですが、
splitで配列化してハッシュに入れる方法以外には無いでしょうか?
最短マッチで
$data = '1,21,10,100,1';
if ($word =~ /(1?,)/) { print "存在します¥n"; }
とやったら最後にある「1」がチェックできませんでした。
色々勘違いしてそうだから「最短マッチ」でググるといいよ
それと$dataと$wordのtypo
おまえら魚でも食って落ち着けよ
if (grep { $_ eq '1' } split(/\,/, $data)) { print "存在します\n"; }
/1(,$)/じゃダメ?
223 :
218:2007/06/21(木) 14:57:47 ID:???
>>219 ググって勉強し直しました。typo_| ̄|○
文字列なのだからわざわざ分割せずに正規表現を使って調べる方法は無いかと
思ったのですが、素直に分割した方が早そうですね。
221さんもありがとうございました。
if($data =~ m/1/g){print"存在します\n"}
/\b1\b/
print "存在します\n" while($data =~ m/\b1\b/g);
if($data =~ /^1,|,1,|,1$/){ print "true \n"; }
>>216の
>CGI.pmをラップしてMyCGI.pmを作った。
>CGI::Varsを上書きして定義し、最後に「return $this->SUPER::Vars()」とかした。
>帰ってきたのはhashに見える別物。参照を突っ込むと「'ARRAY(nnnn)'」って文字列で保存しやがる。
>保存できねぇなら半端にやらずにいっそ死んでくれ。。。
ってどういうこと?
質問です。
CGIの処理で、別のCGIを呼び出すにはどうしたらいいのでしょうか?
例えばセッションを確認して、有効じゃなかったので、ログインページを表示するCGIに
飛ばす場合などです。
現状ではレスポンスヘッダーのlocationに、呼び出したいCGIのパスを指定して渡していますが、
そうするとサーバはperlの起動を2回してることになって負荷的にスマートじゃない気がします。
何か定番のやり方があれば教えてください。
>>229 俺はlocationにしてるな。
locationをブラウザに渡してからリクエストを受けるから2回起動してるわけじゃないぞ。
うちもlocationだなー。
で、飛ばす先(CGI)へのパラメータとして、元のページのURLを渡す。
>>228 「ぼくは頭が悪すぎるから死にたい」ってことじゃね?
>>228 ログインページ表示を切り出しておいて呼び出すとか。
234 :
233:2007/06/21(木) 17:43:15 ID:???
235 :
nobodyさん:2007/06/21(木) 18:33:45 ID:e31j4SZZ
use strict;
の必要性について教えて下さい。
色んなサイトを見てみても、書いてあることがまちまちで混乱しています。
要はグローバル変数を認めないということだと理解しているのですが、
それは変数名をタイプミスすることによるエラーの回避や
可読性を考慮してのことなのでしょうか?
それともその他に重要な部分があるのでしょうか?
例えば、
$hoge = '2ch';
print $hoge;
という内容で、どこからも呼び出されないfuga.cgiがあった場合、
use strict;
my $hoge = '2ch';
print $hoge;
とする必要性はあるのでしょうか?
2行なら一目でわかるのでいらないという考え方もあるし、普段から
習慣をつけておくという意味ではやっといたほうがいいという人も
いる。好きにしろ。
つーかどこからも呼び出されないCGIならそもそも存在する必要ないっしょ
それは変数名をタイプミスすることによるエラーの回避や
可読性を考慮してのことなのでしょうか?
↑で9割正解かと
Template Toolkit で EVAL_PERL オプションを付け、
テンプレートの中にPERLのコードが書けるようにしました。
で、下記のように書いてテンプレートフォルダ内の count.txt を読み込むよう記述したのですが
その内容が全く出力されませんでした。
Template Toolkitではパールのコードは書けるけどファイルハンドルは扱えない等、
そういう制限があったりするのでしょうか?
[% PERL %]
open FH,"count.txt";
my @count = <FH>;
print @count;
close FH;
[% END %]
240 :
235:2007/06/21(木) 18:59:48 ID:???
>>236 これから新たに書く場合は心掛けた方が良いけど
既に書き上げてしまったものの中で、自分でコードを全て把握しており
第三者に読ませることがないものについては放置でも良い
という方針でいこうと思います。
>>237 「そのCGIだけで完結していて、他のCGIから呼び出されない」という意味です。
>>238 ありがとうございます。
「とりあえずuse strict;は必須!」と書いてあるところは多いのですが
そのメリットやデメリットについてまで詳しく書かれているところは少なく
自分の理解が合っているのか不安だったので助かりました。
>>239 そんな制限はきいたこともないな。よくわからんがファイル開けて
ないんじゃねーの?
printやcloseのエラーまで厳密にチェックしろとまではいわないが、
openのエラーチェックだけは省略しないほうがいいよ。
>>239 ありがとうございます。
エラーチェックしてみたところ、openの段階でファイルが開けていませんでした。
しかしパスも間違えていないのに何故に開けないんだか。。
原因不明です(´・ω・`)
すいませんアンカ間違えました。
>>241さんです。
>>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 に変更しても動く。最終改行の制御がどうしても一個多かった。
245 :
244:2007/06/21(木) 19:54:53 ID:???
失敗例。
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 を普通に先に宣言しても上手く動かない。
事故レス。'EOF' にしたら動いた、、、、orz...
>>245 それはttが動く以前の話だろ。
use strict;
print <<"EOF";
@line
EOF
と同じこと。
>>244さん
わざわざ検証して下さってありがとうございます!
環境の違いがありますが試してみます!
大変参考になりました、感謝です!
>>247 > かといって my @line を普通に先に宣言しても上手く動かない。
ってこっちの例を出すべきでしたね。失礼。
250 :
244:2007/06/21(木) 22:19:28 ID:???
ああ、復活した!
アホでした。245以降の私の戯言は消去してください。バルス!!
ああああああ、穴があったら入りたい。ったらありゃしない。
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
の様に改行されず出力されている様ですが、これは何故でしょうか?
252 :
251:2007/06/21(木) 23:24:48 ID:???
すみません、自己解決しました;
\nではなく\r\nとしたら、理想どおりの結果になりました。
スレ汚しすみませんでした…。
TT で EVAL_PERL とかするくらいなら php 使ったほうがよくね?
1: うんこがしたい
2: トイレに行って踏ん張ってみたが
3: うんこがでない
一つのファイルに以下のように書きます。
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で宣言した変数が使えるのではないですか?
ファイルスコープ
そんなこと出来たらいろんなファイルをrequireしたら好きな変数名使えませんね
ちったぁ考えろヴァカが!!!!!
> ちったぁ考えろヴァカが!!!!!
オマエモナー
以下無限ループ
> ちったぁ考えろヴァカが!!!!!
いつからここは初心者罵倒スレにかわったの?
質問に答える気ないなら繰るなよ
1行目で答えてるのにそれが目に入らないらしい
眼科池よ
3行目が目に入らないらしい
眼科池よ
ん…
>>255 =
>>258 =
>>260 =
>>262 なのか?
なんか最近こういうの多くないか…意図的な偽者な気もするけど。
普通に別ファイルでmy付で宣言したら参照出来ないのは当たり前な気がするが
どーでもいいけど特殊変数の$a, $bでテストするの止めろ。
普通の変数で実行したら、きちんとエラーメッセージが出る
(compilation errors)し、そしたらここで質問せずに済む。
>>263 >>262だが、
>>260の3行目は確かにおかしいが、それに対する
>>261の
「回答してるからいいじゃん」的な発言もどうかと思うのでレスしただけ。
ここは初心者質問スレなわけで、当たり前の事でもわからない人が来る訳で。
それに対していちいち馬鹿だのなんだのと余計な一言つけないと回答できない
>>257 =
>>261 = 263 は来なくていいと思う。
質問回答じゃない、つまらない煽りが多すぎw
最近暑いからなぁ
>>263 だけど同一人物と見なせる
>>265 の脳味噌を疑う…
暴言が嫌ならmixiとかでやれよ。ここはそこまで平和な掲示板じゃないっての。
わたくすは普段は回答に罵倒なんか付けない善良な回答者ですが、何か。
馬鹿扱いされた質問者が
必死になってるとしか思えないww
w
>>269 自分の事を棚に上げる
>>269の脳味噌はさぞ凄いんだろうな。
暴言が嫌とか、そもそも俺は質問者じゃないからどうでもいい。
ただ単に
>>261が、
>>260のレスに対してあほなレスして、
それに俺があほなレスを返したところで善良な(笑)
>>263様が登場したわけさ。
>>270みたいな安直な考えしか浮かばないなら、勝手にそう思っとけ^^
お前ら暇すぎ
>>272 どこが自分のことを棚に上げてるの?
もしかして
>>263の1行目のこと? "なのか?"って読める?
しかもまた
>>270と同一人物だと認定するの? どこまで自己中なの?
どこか他所でやれよ荒らしども
言い返せなくなったら
ゆとり〜童貞〜中卒〜在日〜部落〜
もうこの手のレッテル貼りは飽きたわ…
>>274 >>258,260,262は特に質問者を擁護している訳でもないのだが、
>>263は根拠もなく自演を思わせるレスをしている。
なのか?が該当者或いは他の閲覧者に対する疑問文なら相当な池沼。
>>261,263は
>>257を擁護しており、
>わたくすは普段は回答に罵倒なんか付けない善良な〜
が「罵倒したのは257の時だけ」とも取れる内容なので、自演と疑われる要素はある。
そして、
>>272の末行の内容は269のみに宛てたレスではなく、
270と同様の考えをしている者に向けられたものである。
よって自演を指摘するものではないが、
>>274は自己な解釈のみで
自演を指摘するものと判断し、それを根拠に自己中呼ばわりしている。
また、「同一人物だと認定」発言や、それらしい発言が無いにも関わらず「自己中」等という
レスを返す
>>274は「ゆとり」或いはそれと同程度の知的レベルであると推測される。
さらに、
>>277が269や274と同一人物であるかは定かではないが、
>>276が272であると、やはり自己の解釈のみで判断し、レスをしている。
思考に似た点が多い為、恐らくは同一人物であると推測されるが、いずれにせよ
「自分を非難する者を同一人物とし、レスを勝手に解釈し批判する」という
自分の自己中心的思考に気付かずにレスを繰り返す理解し難い有機生命体には
何を言おうが無駄だと推測できるので、これにて閉店とさせて頂きます。
またのご来店をお待ちしております^−^
line
[1~] 2chに限らず周りに意見を求めるのを知的障害者と認定するなんて、
余程あなたは世間知らずなのですね。社会に出ましょう。
[6~] 罵倒自演云々はあなたの勘違いですね。反省して下さい。
[10~] 何度も言いますが、日本語読めますか。私は疑問系で書いてるのに、
君は265で断定して書いてる訳で。一緒にしないで下さい。
[15~] 自分のレスを読み返せばあなたが自己中なのは明瞭です。
[18~] 自己矛盾してますね。自分で妄想で語ってるのに気付きませんか。
[21~] 同一人物化云々も君の妄想の域を出ませんね。何を言おうが無駄なら
これ以上私にレスしないで下さいね。閉店とか言って顔文字使ってるのから
必死さが伝わってきて、個人的に気持ち悪いです。初心者みたいで。
テンプレもム板からのパクリだしホントこのスレには低脳しかいないな( ´,_ゝ`)プッ
余程自身が自己中扱いされるのを嫌ってる様だけど、事実なんだよね。
>>265を自分で読み返せば分かると思うけど、一応書いて置くね。
罵倒が嫌なら温いコミュニティに行けば良い訳。それで、自分の掲示板でもないのに
『いちいち馬鹿だのなんだのと余計な一言
つけないと回答できないxxxは来なくていいと思う。』
これは、誰がどう見ても自己中心的な考えだよね、回答者を排除する。
2chは自由な掲示板なんだよ。質問者も自由、回答者も自由。
もちろん、君も意見を言うことは自由だよ。しかし、それによって
住人に叩かれたら、それは事実として認めないといけない訳。
つまり、何を言いたいかと言うと、君は2ちゃんねるには不向きなんだよ。
こんな些細な「馬鹿」とか「阿呆」に反応してる様ではまだまだ未熟な訳ですよ。
いわゆる半年ROMれっていう。適当な板で経験積んでからお越し下さい。
それでも君がこんな2chの体質は異常だと主張するなら、批判要望板にでも行って下さい。
板違いです。 [2ch批判要望]
http://ex21.2ch.net/accuse/
>>280 ほんとその通り。てか最近ム板にも変な奴が
湧いてるんだよな。お前が主導で捕獲してこっちに連れて来い。
論破したつもりで長文書いて、
文脈から低脳さが滲み出てる奴多いよね〜
夏っすね
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コーディングの話をしろ
かにでも食って落ち着けよ
いやカニは落ち着けないだろ
293 :
nobodyさん:2007/06/26(火) 07:28:23 ID: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';
↑これでいけるとの事でしたが動きません><
サーバーはジオプラス→ロリポップ→さくらインターネットと乗り換えてみました
いずれも動きません。
>>293 chmod 0775,'./$id/g4.cgi';
''
と
""
の違いについて調べれ。
chmod 0775,"./$id/g4.cgi";
これなら動く。
ときどきCGIを動作させてるとエラーでもなく、正しい表示結果が出るでもなく、
1
って出るんですが、これはどういうことでしょうか?
貴方が1と出力するように組んだから。
ソースも無く、再現する状況を並べるでもなく、どうすればいいのか。
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->{ } の { }中にはどう書けばいいのでしょうか?
そこでエスパー初心者が登場ですよ
require するファイルの末端に 1; って書くけど、もしかして
実行させる CGI 本体のファイル末端にも 1; を書いていませんか?
>>297 俺もよく知らんがkeys使うとかして調べればわかるんじゃない?
>>299 foreach (keys %$hash_ref) { print; } で見てみると、sellerとSum(price)っぽいんだけど、
$hash_ref->{Sum(price)} って書くとエラーになります…
$hash_ref->{'Sum(price)'} だろ
>>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";
}
とすることで一応の解決はみたのですが、直接参照する方法はないのでしょうか?
303 :
296:2007/06/26(火) 11:13:42 ID:???
>>298 書いてません。__END__はありますが・・・
外部ファイルはuseで読み込んでます。
そっちには1;って書いてます。
一体どうしたらいいのか・・・出るのは毎回じゃなくて時々です。
304 :
nobodyさん:2007/06/26(火) 12:42:27 ID:QSRpPplO
>>294 ありがとうございました
自作に行き詰まって業者に制作依頼の見積もりしたら40万だったので諦めて
いたのですが、0円ですみましたほんとうにありがとぉ。
>>302 これでどう?
$hash_ref->{'Sum (price)'},
# 一度、use Data::Dumper; して print Dumper($hash_ref); してみるといいかも。
306 :
nobodyさん:2007/06/26(火) 14:45:38 ID:VwPHcZDu
perlを実行すると↓のsftpのコマンドが実行されるようにしたいのですが、
どのように組めばよいですか?
---------------------------
sftp hogehoge
get /home/member/110
bye
-------------------------
>>306 いくつか方法はあるがどうせそのうちいろんなことしたくなるんだから
Expectモジュール使っとけ。
そろそろ夏休みですし、夏休み中に色々勉強することをお奨めします
>>302 普通、お前がやったように
Sum(price) AS sumprice
こうする。これが「直接」でないというお前の感覚が腐っている。
310 :
nobodyさん:2007/06/28(木) 11:56:41 ID: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 に変更するメリットはないのでしょうか?
311 :
310:2007/06/28(木) 11:59:09 ID:YXGDvJmi
s/</</g;
です。
変わったところ:標準モジュールになった
これはこれで大きいんじゃないの?
313 :
nobodyさん:2007/06/28(木) 13:46:44 ID:5j7nThKQ
cgi-libを利用してアップローダー作りました。
wavファイルをアップしようとしたらこのようなエラー表示が出てアップできません
Short Read: wanted 194, got 0
これがなんなのか教えてください。
CGI.pmを使ってるのにcgi-libも使ってたりしません?
オブジェクトを持ちまわせよ
何のためにOOインタフェースも用意してあんだよ
316 :
nobodyさん:2007/06/29(金) 13:30:50 ID:FzkfeL60
Shift_JISで出力する場合、全半角の変換を確実に行う方法は
今でもやはりjcode.plが一番なんでしょうか?
Jcode.pmだとEUCを通してから変換を行っているせいか
一部文字化けが避けられませんよね。
何かおすすめの方法とかモジュールとかあれば是非教えて下さい。
Perlは5.8.6です。
よろしくお願いします。
>>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 "全角ひらがなしかない!";
}
>>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 "全角ひらがなしかない!";
}
319 :
316:2007/06/29(金) 14:10:58 ID:???
>>317-318 >jcode.pl使ってるけど、文字コードをEUCに揃えておいて、出力するときにShift_JISじゃだめかな。
全く問題ないと思います。
質問の趣旨としてはjcode.plに代わる新たなモジュールとか方法とかが
出てきてないかな、ということだったんですが分かりにくかったらすみませんでした。
できたら標準モジュールで済ませたいという思いがあって
Jcode.pmを見てみたんですが、ちょっと問題ありだったのでそのことについても
対策があるのか聞いてみました。
やはりjcode.plは今でも全半角変換の定番なんでしょうか?
unicodeにして\p{Hiragana}使ったほうが楽だと思うのだが
decode('euc-jp', $s) =~ /[^\p{Hiragana}]/
>>320 シンプルでいいですね。ありがとうございました。
やっぱjcode.plは卒業した方がいいんだろうか…
Perl5.8ならEncode.pmだろ
323 :
nobodyさん:2007/06/30(土) 14:49:08 ID:taxZDsiL
掲示板のエラーファイルの容量が一定値を超えたら新しいファイル名にリネーム(一定ファイル数になったら圧縮)して、
元のファイルを空にしようと思うんだけど、どの程度の容量を超えた場合にリネームするのが適切?
1 日とか 1 週間単位でやればいいんじゃないの?
ファイルシステムの中の人と相談した方が良いんでないすか
326 :
nobodyさん:2007/07/03(火) 14:19:01 ID: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億などはしていません。)
賢い方どうぞよろしくおねがいします。
my $a = rand 1;
$a>=0 and $a<1;
>>326 rand(-1) + 1
例示でも sort と無関係に $a が出てくると何だか落ち着かない。
329 :
326:2007/07/03(火) 14:32:53 ID:8gn4hJb2
1-rand(1)
>>329 rand(1) だと0以上1未満が返ってくる
>>329 そのページの記述はいい加減なのでちゃんと付属のマニュアル嫁
rand EXPR
rand Returns a random fractional number greater than or equal to 0
and less than the value of EXPR. (以下略)
>>328 EXPR should be positive.
334 :
326:2007/07/03(火) 14:43:10 ID:8gn4hJb2
>>330 つまりrand 1の返り血が1であることは100%ないということですか?
なるほど。0~1というのは自分の勘違いですね。
>>328 これはどうなるんですか?
-1から始まって0までが選択される?
つまり -1<rand(-1) and 0<=rand(-1) ということですか?
なんかこんがらがりそうorz
335 :
326:2007/07/03(火) 14:45:30 ID:8gn4hJb2
とりあえず解決していただきましてありがとうございました。
0以上1未満ということで。感謝ですm(__)m
336 :
328:2007/07/03(火) 15:51:45 ID:???
>>333 そうなの?
use strict;
use warnings;
print rand(-1); # -0.689697265625 が出た。strict も warnings も何も言わない。
>>334 rand(1) が返すのは0以上1未満の値。なので
>>330へのお返事についてはそのとおり。
>>328は、上で負数を食わすな的に言われてるから忘れてください。
337 :
328:2007/07/03(火) 15:53:35 ID:???
連投ごめん。自分で調べろ、と。
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ありがとう。
>>336 望ましい(should be)だから絶対だめというわけではない
ねばならない(must be)ならだめだけど
ソース見たけど ([0,1)の乱数) * (第一引数) で計算してるので
今の実装なら負でも特に問題なさそう。
340 :
326:2007/07/03(火) 22:37:20 ID: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;
341 :
326:2007/07/03(火) 22:41:20 ID: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されてしまうのです。
342 :
326:2007/07/03(火) 22:42:43 ID:8gn4hJb2
つまり先ほど教えてもらった
my $a = 1 - rand(1);
この方法での乱数取得が
$a>0 and $a<=1;
を満たせない時が存在してることになってしまいます。
単純にそのほかの部分の自分のミスだと思うのですが見つけられません。
アドバイスお願いできますでしょうか?
もしよろしければ上記のコードを数度実行してみて確認もしてみてください。
343 :
326:2007/07/03(火) 23:34:12 ID:8gn4hJb2
どう思われますか?
activeperl 5.8.1
windowsXP
遅ればせながらこちらの実行環境になります。
>>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;
に等しいって気付いているか?
関数のリファレンスから関数名やパッケージ名を取得するにはどうすればいいですか?
とりあえずerrorになったときは$aの値も表示しろよ
何やってるコードか全く理解してないうえで、
とりあえず、変数の並びが法則に反してるとこ一か所あるけど、
それで正しいの?
>>345 そもそも、その関数に名前がついてるとは限らないので不可能。
なるほどです。
名前がないものは当然取得できないですが、
名前のあるものも取得する手段はないということでしょうか。
350 :
326:2007/07/04(水) 00:36:21 ID:GRubSazo
>>346 なるほど。確認したところ、0.342-0.343あたりの時にerrorになってるようです。
$musのあたりになるはずですが・・・なんでこんなことになるのでしょう。
>>344 すいません、たまにしか触らないのでどうしても細かい部分は忘れて無難な方法を取りガチです。
>>347 ぜひどこなのか教えてください。
351 :
326:2007/07/04(水) 00:41:01 ID:GRubSazo
すいません。
}elsif($a>$rep+$che+$mus+$zou+$bel+$big and $a<=$rep+$che+$mus+$zou+$bel+$reg){
ここでしたorz
352 :
326:2007/07/04(水) 00:52:15 ID:GRubSazo
本当メチャクチャすいませんm(__)m
353 :
nobodyさん:2007/07/04(水) 01:54:39 ID:1Rhv3smG
ブログCGIで、削除された記事をパラメータ指定されたときに
404を返したいんですが、その後の表示(ErrorDocument)を
htaccessなどの指定に従う方法はあるでしょうか。
CGIにエラーページを持たせたくないという理由です。
apacheに丸投げできればいいんですが、何らかの方法で
htaccessに指定されたパスを取得して自分で出力してもいいです。
よろしくお願いします。
リダイレクトするか、読み込んで垂れ流したらいいじゃん。
それ見た10人が10人ともCGIスクリプトが存在しないと思うだろうけど。
あれ、やっぱりそういうことになります?
例えば、検索ロボットがblog.cgi?a=1を見に行って、404だったら、
blog.cgiが消えたものとしてblog.cgi?a=2もDBから削除するでしょうか。
実際はそんなことしないとは思いますが、
世の中のルール的には、そうされてもやむなしでしょうか。
400が正しいですね。たぶん。では、400を返すとして。
リダイレクトだと301を返すことにならないでしょうか。
読み込む場合、パスをハードコーディングしたくないのです。
あれ、すいません。400は確かに違いました。
404でよかったみたいですね。
やっぱり、blog.cgiの設定項目として
ErrorDocumentを指定させるような仕様に
してみようと思います。ありがとうございました。
print "Status: 404\n\n";
ごめん、寝ぼけてた。
サブルーチンの戻り値についての質問です。配列とスカラー変数を戻り値にしたいのですが、
@hogeは値が帰ってくるものの、末尾に2つ空の要素が入り、$hoge1と$hoge2に値を返すことが出来ていません。
このような場合どう記述するのでしょうか?
sub main {
my (@hoge, $hoge1, $hoge2) = &hogehoge();
}
sub hogehoge {
return (@ho, $ho1, $ho2);
}
($ho1, $ho2, @ho)
>>362 つまり、(@hoge, $hoge1, $hoge2)っていう書き方だと、配列の末尾に値を追加するという意味になってしまうのでダメ
ということでしょうか。
# でも、配列が2つ以上だったらどうするんでしょう…
リファレンスを返す
>>364 リファレンスはよくわかってないですが、そういう時に使うんですか。ありがとうございました。
# と、今回は配列1個だけだから、
>>362の方法で乗り切りましたw
リファレンスを返すか、配列を戻り値のケツに持ってくるか。
見た目ならリファレンスのが綺麗かなぁ
配列が1つとは限らないからリファレンス覚えたほうがいい
368 :
nobodyさん:2007/07/05(木) 04:46:34 ID:Ees4tlLi
特定の処理のみでモジュールやライブラリが必要な場合、
1.ソースの冒頭の方で呼び出す
2.その特定の処理の中で呼び出す
どちらが一般的なんでしょうか?
アマグラマの意見で申し訳ないが、その辺に落ちてるソースだと冒頭以外は見た記憶が無い。
370 :
368:2007/07/05(木) 05:16:30 ID:???
>>369 配布前提の場合は、ライブラリのパスを設定したり、どのモジュールを使用するかを
利用者に分かりやすく書く必要があるのでまた特別かなと思ったりもするんですが
やはり冒頭にまとめて書くのが普通なんですかね。
めったに使われない処理のためだけにモジュールを毎回呼び出すのって
何か妙に無駄な気がしてしまうんですが、どうなんでしょうか。
配布目的ならPODやマニュアルを用意するんでしょ?
そこで必要なモジュールや処理の補則をすれば問題ないじゃない
つかuseはどこに書いてもプログラム実行前に必ず実行されるわけで
373 :
368:2007/07/05(木) 06:46:04 ID:???
>>372 し・・・知らなかった・・・
は、恥ずかしー
出直してきます。
処理で分けて読み込むかどうか決めたいなら require でできるけど、
プラグインみたいな使い方じゃない限り素直に読み込ませた方がいいんじゃないかな
そういうときはrequireを使うんだ!
ってバニング大尉が言ってた
今更ながら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';
ってやると、何かマズイとこありますか?
あまり美しくない程度ですか?
俺は趣味の範疇だと思うけど、頭にmyつけるだけのほうがいちいち
変数名しらべて書き並べるより楽じゃない?
どうせなら
my ($title,$hoge01,$hoge02) = qw(タイトル 値01 値02);
書き方としては
my ($title,$hoge01,$hoge02);
で問題無し
書き直すなら
>>377に同意
380 :
376:2007/07/05(木) 12:03:58 ID:???
>>377>>379 どっちでも良いと分かって一安心。
前半同じ名前で後半の数字が違うだけ、って変数名が多いんで
調べる手間はそんなかなぁ、と思ってたけど、結局全部網羅するとなると
大して作業量は変わらないかな・・・。
>>378 それはムチャクチャ長くなりそうなんで、ちょっと勘弁w
アドバイス感謝!
381 :
378:2007/07/05(木) 12:15:33 ID:???
なにも使うのを1つの my で済ませろって意味ではなくて、
my ($authID, $authPASS, $authEXP) = qw(〜); # 認証関連
my ($htmlTITLE, $htmlSUBTITLE, $htmlCSS) = qw(〜);
のように似てるもの同士でまとめて書くのよ
382 :
nobodyさん:2007/07/05(木) 13:21:28 ID:rw6MBlh9
Perl上級者です。すいませんラリって幻覚が見えてるので教えてください。
65,536byteは60KB以上で間違いありませんか?
しゅくだいはじぶんでやろう!
384 :
nobodyさん:2007/07/05(木) 13:49:32 ID:rw6MBlh9
またか。このスレで答えてもらったことねーや( ´ ー ` )
答えたことはあるけどな。
>>19と
>>362の二回だけ。
もういいや。ありがとうございます。たしかGNOME電卓にそんな機能が・・・
use vars
our
>>384 スレタイ100回音読して半年ラリってろ
なんだこいつwwwww
60KB=61440B
>>380 >前半同じ名前で後半の数字が違うだけ、って変数名が多いんで
俺も変数名で悩んで、そういう名前をつけてしまうことがたまにあるけど、それはやめたほうがいい。
自分の頭の中でも整理がつかなくなってしまうから。
俺は実は、use strict;してないんだけど、変数名を整理して、局在化して書くことだけ気をつけていれば、
仕様書を書かなければ整理がつかないような大きなスクリプトを書くのならともかく、そんなに問題はないと思うけどね。
390 :
378:2007/07/05(木) 14:43:43 ID:???
割れば分かるだろ割れば・・・
と釣られてみる
391 :
nobodyさん:2007/07/05(木) 17:42:15 ID:/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 〜
使い方間違ってますか?お助けくださいませ。
Benchmarkの各関数に渡せるのは
サブルーチンのリファレンスか
evalして実行できる文字列だけだにょ
393 :
391:2007/07/05(木) 22:56:26 ID:/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秒になってしまう。
どこをどう直せばいいのですか?
> while (@line){
0.00秒になるのは分からんけど
無限ループだにょ
395 :
391:2007/07/06(金) 10:06:20 ID:oyGEvxOp
>>394 foreachと間違えました。すいません。危うく死亡するところでした。
benchの中で大助かりです。
ところで無限ループが始まった時って賢い対処法はありますか?
いつもはwindowsの終了をやってますが、タスクマネージャあけてアプリケーションの終了させればいいだけなのですか?
とりあえず問題は解決しました。benhの花井で卯s。
なんか数がすくないよってことだったらしいです。50000000とかにしたらようやく比較できました。
半角全角スペースのみの投稿を拒否したいと思ってます。
if($name eq ""){&er_("名前が未記入");}
if($name eq " "){&er_("名前が未記入");}
if($name eq " "){&er_("名前が未記入!");}
・
・
if($name eq "連続する半角全角スペースいっぱい"){&er_("名前が未記入!");}
とやっていくとキリがないです。
そこでパターンマッチ演算子というのを使ってみたのですが↓のであってますでしょうか?
if($name=~ /^ /){&er_("名前が未記入");}#半角スペースが先頭の時
if($name=~ /^ /){&er_("名前が未記入");}#全角スペースが先頭の時
とりあえず判定できてるっぽいですが
もっとスマートな方法があれば教えてください。
if($name =~ /^( | )*$/){&er_('名前が未記入');}
正規表現ド素人なんであんまり自信ない。
>>397 それは2バイト文字の開始位置を誤った場合に誤作動しそう。
連投ごめ
400 :
396:2007/07/06(金) 19:07:34 ID:???
>>397-399 ありがとうございました。
文字コードについて考えてませんでした。
もう一度見直してみます。
サブルーチンの質問です。
&hoge($bar);
&hoge($bar{'id'});
&hoge($bar[0]);
sub hoge {
return $_[0];
}
真ん中の例のように、ハッシュを入れると値が帰ってきません。このような場合に、値を返すようにするには、どう記述するのが
一般的なのでしょうか?(試していませんが、一番下の配列の1要素を入れてもダメかもしれない?)
shiftしてください
>>402 &hoge('hoge','hoge');
みたいに呼び出したときに、@_をshiftして呼び出すのはわかるのですが、同じ$_[0]で何故、$barの値は渡るのに、
$bar{'id'}の値は渡らないのでしょうか、という疑問です。
ごめんなさい。別の部分でポカやってました。
問題は解決しましたが、
>>401は依然疑問かも。恐らく
&hoge($bar{'id'});
でも
&hoge($bar[0]);
でも$_[0]に値は入ると思う(思いたい)という、もやもやは残りましたがw
> ところで無限ループが始まった時って賢い対処法はありますか?
> いつもはwindowsの終了をやってますが、タスクマネージャあけてアプリケーションの終了させればいいだけなのですか?
そんな面倒なことやってるんですか?
パソコンのコンセントを抜くだけですよ!
レン鯖で今日もまた無限ループやってしまった俺様がきましたよ。
質問。入力フォームを作っているのですが、postされたデータに対して入力チェックを行い、エラーがある場合は
入力フォームを再度表示して、エラーのある箇所に赤文字でエラーメッセージを出力する。
この板的にはそういうスクリプト書くことが多いと思いますが、そういう場合に便利なモジュールなどはあるのでしょうか?
>>399 頭から見て行って、別の文字が混じった時点で失敗するから問題無いのでは?
ひらがなを半角カタカナに変換する方法はどうしたらいいんでしょうか?
hiraZ2H(STRING)
hiraZ2H(SCALAR REF)
というのが出てきたんですけど使い方がわからないです
そこまで出て何故悩むんだ…… サブルーチンの使い方が分かんないとか?
>>411 &jcode'z2h_sjis(\$foo);
で全角の$fooを半角にできました
でもひらがなをカタカナにしないと使えないです
>>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
>>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;
}
}
半角カナとダメ文字の扱いに嫌気がさして
shift_jisで書かれたperlスクリプトをeucに変えてるのだけど、
文字コードをeucに変更して保存とjcode.plでshift_jisにしてる部分をeucに変更で
とりあえずは表面的には問題なさそうに見えるのだけど、ちょっと不安。
で、ここから質問なんだけど、他にやっておいた方がいい事とか注意する点とかってあるかな。
utf8 で書く
化石のようなライブラリを使わない
charsetの指定ぐらいか。
ぶっちゃけ、どんなスクリプトなのか、どういう人のアクセスを想定しているのか、
ぐらいの情報すら書かずに、ちょこちょこ後出しの駄レスが続くことに嫌気がさしてきた。
不特定多数の携帯からのアクセスがあるならUTF-8はまだダメだろうな。
まぁ、4、5年以上前の携帯だとそもそもEUCもダメなのあるけど。
???
utf8で書いてshiftjisで吐けばいいじゃん
レスさんくす。
utf-8はファイルサイズが増えるから・・・って思い込んでたけど思ったより増えないんだね。
これならそっちでも問題ないな。
どんなスクリプトとかアクセス方法によってそんなに変わるもの?
基本抑えておけば色々な場合に対応できると思ってたんだけど、
やっぱノウハウに違いが出てくるのかな。
ちなみにちょっとした掲示板系スクリプトとゲーム系スクリプト混ぜた感じの自作だったり。
アクセス数少ないし多分携帯も問題ない筈。
420 :
414:2007/07/09(月) 05:26:23 ID:???
>>419 utf8+encodingはバッドノウハウてんこ盛りなので、
もうjcode.pl+EUCで書いててください。
>>420 jcode.pl+EUCで書いてますがw
perlがいいのは、web上に情報が多いことで、さらに、ある程度化石級の書き方のほうが、
情報量が多くて便利なこともあるような。
無駄に中途半端な情報も多いけどね。
古いライブラリだと新しい規格に対応してないなど不都合もある。
とりあえずjcode.pl+EUCでいいよ
speedycgiというのを試してみたのですが、どうしてもrequireしたものが
2度目以降に動作しません。テスト用のpmファイルでは変数は一切使っておらず、
ただprint "test2"としているだけですが、最初の1回だけ出力されます。
main側もただtest1とだけ出力していますが、こちらは毎回出力します。
どのような原因が考えられましょうか。
サーバ上に置いたファイルをCGIから改名(拡張子含み)させたいのですが、perl関連のページを漁っても
見つかりませんでした…
どうかよろしくお願いしますm(_ _)m
425 :
423:2007/07/12(木) 02:01:32 ID:???
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;
426 :
423:2007/07/12(木) 02:04:16 ID:???
>>425 キャッシュされてるだけのような。
関数で呼び出すようにしたら、どうなん?
>>426 rename関数を使うのですね。ありがとうございました!
429 :
423:2007/07/12(木) 03:13:50 ID:???
>>427 関数だとちゃんと出力されました。
グローバル変数の初期化から前述のコードに迷い込んだのですが、
要するに初期化もパッケージの直下にour $a = 0なんて書くのではなく、
INITとか初期化用関数とかを用意しないとならないのですね。
グローバルという言葉をよく理解できてないようです。勉強します。
ありがとうございました。
例の通りで良いなら普通にGETじゃだめなの
それでダメならLocationなりで飛ばせばいいじゃない
jcode.pl関連で質問します。
文字コードをEUC-JPに変換して半角文字を全角文字に変換する場合、
&jcode::convert(\$value,"euc","","z");
これと
&jcode::convert(\$value,'euc');
&jcode::h2z_euc(\$value);
これは、
同じなんですか?
後者のはよく見かけるんですが、
前者のはあまり見かけないような印象があるんですが
何か理由があるのでしょうか?
433 :
432:2007/07/12(木) 18:51:01 ID:qGszHv4Y
連投すみません。
質問なのにsageてしまったのでage直します。
435 :
432:2007/07/12(木) 19:23:06 ID:???
>>434 &jcode::convert(\$value,'euc');
は
&jcode::convert(\$line, $ocode [, $icode [, $option]])
の第三と第四の引数(?)を省略した形ということですよね?
だとすると、なぜわざわざ省略したのに
&jcode::h2z_euc(\$value);
とするのかが理解できません。
最初から
&jcode::convert(\$value,"euc","","z");
で良いのでは?と思ってしまうんですが・・・。
いいから全部読め
>>431 ありがとうございます。
LocationはJavaScriptのことですよね?携帯端末向けなのでスクリプトは使用できませんm(_ _)m
GETで値を受け取って変数に入れて、それをアンカーで排出することまでは出来たのですが、
ダイレクトでの飛ばし方が分かりません…
HTTPのLocation
質問です。
複数あるダウンロード対象を複数選択し、
ダウンロードボタンを押したら順次ダウンロードできるようなものを作りたいんだが
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);
でいけるんだけど、複数ファイルとかどうやるか知ってる方いませんか?
>>439 複数のファイルをサーバで固めてから1回で落とすとか。順次というのは無理っぽい。
まあ、ふつう落とすファイルのリンクを並べたページをまず出力して、クライアント側で1つずつ
クリックして落としてもらうのが妥当なのでは?
それから、
while(<FILE>){
print "$_";
}
は
print <FILE>;
で済むよ。
軽いファイルならいいけど、重いファイルはシンボリックリンクを作った方がいいんじゃないかな
やっぱり無理か・・・
ありがとうございます
固めるのも考えたんですが、素のtar.gzですでに1G超えファイルがあるので
別々にダウンロードしたかったんですね
#サーバが32bitなので最大6Gのファイルしか生成出来ない
そして、現状ひとつずつぽちぽち押してダウンロードする仕様なんですが
それがめんどくさいからまとめようぜ?見たいな乗りになった末での質問でした(_O_)
STDINからフォームデータを読む場合に、
sysreadを使うのとreadを使うのでは、
一見、同じように見えますが、どういうときに違いますか?
お願いします。
444 :
443:2007/07/13(金) 00:34:18 ID:???
完全に内部専用なら、tarでまとめてしまうとか…… 無理か。
32bitだから6GBてどんなシステムだろう…
どーでもいいけど、そのファイルを読み込んでアウトプットするルーチン
君が言う様な1GBのファイルを読み込んだらメモリが物凄いことになりそうだけどね
バッファを用意してsysreadとかsyswriteでチョコチョコ出す方が良いと思うのだけど
448 :
nobodyさん:2007/07/13(金) 19:25:41 ID:rAe1S2vb
mod_perlにトライしています
モジュールとクラスの違いがよく分かりません。
クラスだとnewするので、その分メモリが多く使われるなど
メリット、デメリットってありますか?
もうね
大雑把に書くと、
モジュールは外部ファイルを読み込んで実行する機構の、外部ファイル。
クラスはオブジェクト指向プログラミングで使われる、データと操作手順をまとめて雛形にしたもの。
よって比較できない。
451 :
nobodyさん:2007/07/13(金) 20:53:17 ID:rAe1S2vb
>>450 共通部分はモジュールかクラスかにするんだな。と単純に考えていて
どっちがいいのかな?と思っていたのですが考え方が違うと。
クラスのほうがスッキリしそうですけど、遅いとかメモリ食うとか
あるのかなと思いました。
ソースの共有化においてって話し?
>>451 藻前が言ってるモジュールって言うのは、Perlのモジュールなの?それともApacheのモジュールなの?
スクリプトの話なんだからApacheじゃないだろう
>>454 ApacheのモジュールもPerlで書けるとオライリー(Apache拡張ガイド 上)に書いてあったよ。
mod_perl云々言ってるんで、Apache解説本でも読んでるのかと思ったんで一応聞いてみたんだが。
>>451 たとえを出すと、自動車とタイヤキ型を比べてるようなものだから、
比較が出来ないという話。
それで、オブジェクト指向と非オブジェクト指向のどちらがいいかという質問か?
>>456 それって例えがちょっと違わね?
クラスの方は型っていうのはほぼ良いとしても、
モジュールは、部品の切り分け方(取り付け方)だから、例えで言えばネジ止めみたいな事じゃね?
つまり、
「鋳造型とネジ止めを比較するようなもので、鋳造された部品だってネジ止めする事はあるから比較できない。」
って感じじゃね?
うかつにたとえ話をすると
こうやってぐだぐだになるんだよな
実行効率でクラスにするかモジュールにするか選ぶのはやめとけ。
どうせ違うとしても大した差じゃない。見通しよく書けるかどうか
のほうが重要だよ。
460 :
nobodyさん:2007/07/14(土) 13:23:11 ID: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初心者につき変なこと言ってるかもしれませんが、
よろしくご教授ください。。。
>>460 ソースを読んでuse baseか@ISAをいじってるところをさがす
or
そのパッケージの@ISA配列の値を調べる
すでに初心者じゃない件
>>458 >>451がどれだけドンチキな話をしてるのか理解してもらえればそれでいいのよ。
>>460 IO::Socketが親で、さらに上をたどるとIO::Handle。
464 :
460:2007/07/14(土) 15:20:34 ID:XODLozhP
>>461 ありがとうございました。親クラスはIO:Socketでした。
今のところ、IO:Socket:connect()まで入ってきているのを確認できたので、
connect()の中を色々探ってみたいと思います。
(connectのどこかで止まっている状態)
465 :
460:2007/07/14(土) 15:24:56 ID:???
ああ、書き込むの久しぶりだからageちゃった。すみません。
>>464 Hanndleとか行ったりきたりして、今のところ463のような状態なので
引き続き調べます。ありがとうございます。
die $!とかやらずに&error("error")とかやってんのマゾとしか思えない。
467 :
トラハムちゃん:2007/07/14(土) 16:32:18 ID:M6VlwpzH
すいません、ちょっと教えていただきたいのですが、
ユーザーエージェントに「AAA」または「BBB」という文字が
含まれていなかったらエラーを表示したいと思っています。
if(not $ENV{'HTTP_USER_AGENT'} =~ /AAA/) {
&error("エラーです");
}
「AAA」だけでしたら作れたのですが、うまく「BBB」が追加できなくて困っています。
初心者なりにor等を使ってみても、入れ方が悪いのかうまくいきませんでした。
どなたかご教授いただければと思います。
よろしくお願いします。。
!~ /AAA|BBB/
469 :
トラハムちゃん:2007/07/14(土) 17:14:18 ID:M6VlwpzH
>468
できました!
ありがとうございました!!
助かりました!!
>>466 慣れないうちは、&errorとかサブルーチン作った方が、本人の!可読性がいいと思うし、
webprog的には、エラーが発生したときにブラウザに表示させることも多いので、別に構わないというか
俺はそうしてる。
特殊変数なんかも同じで、慣れないうちは使ってなかった。
foreach my $str (@hoge) { print $str; } みたいに。
471 :
460:2007/07/14(土) 18:53:18 ID:???
>>460,464の続きです
IO:Socket:connect()の↓のconnect関数から反応が返ってこないということが
分かりました。
if (!connect($sock, $addr)) { }
connect()関数を使うにあたって、
サーバ側で何か設定が必要だったりするでしょうか?
今回自宅サーバのため、同じcgiが動いているレン鯖と何か設定が
違うのかもしれないと思いまして。
もしくは、ポート開放関係?一応メールの110ポートはあけているんですが。。。
すみませんが、よろしくお願いします。
>>471 「ソケット叩いちゃダメ」のサーバかどうかを確認する必要が
あったりするかもしれません。
473 :
448:2007/07/14(土) 19:25:34 ID:ybwwq6ev
>>459 その点が気になってたとこです。
実行効率か、可読性かみたいな。
ただ、どっちがどうかは良く分かってませんが。
すんません。
標準モジュールのNet::POP3使って幸せになろうよ、ねえ
475 :
nobodyさん:2007/07/15(日) 00:16:49 ID:tgDYqhX7
ファイルを操作するライブラリを作っているのですが、
普通にやるとアクセス元のcgiのあるフォルダにファイルが作られてしまいます。
ライブラリであるplのあるフォルダにファイルを作りたいのですが、
どのようにすればいいのでしょうか?
知らんがなw
馬鹿には聞いてません
@array = caller 0;
>475
アマグラマの回答でよければ。
library.pl 側で、自分の位置を変数に保持するか、それを調べて返すサブルーチンを用意してはどうでしょう。
私も初学者ゆえ、パスの調べ方については分からんのですが、たぶんやり方はあると思います。
で、そうやって取得したlibrary.plのフルパスを、ファイル操作ルーチンに突っ込む。
480 :
479:2007/07/15(日) 08:08:13 ID:???
ごめん訂正。最後の行。
× そうやって取得したlibrary.plのフルパスを、〜
○ そうやって取得したlibrary.plが存在するディレクトリのフルパスを、
>>480 ありがとうございます。
その方法を参照させていただきます。
>>482 そんなことに時間を浪費してないで481の言う事に耳を傾けといた
方がいいと思うけどな。
484 :
460:2007/07/15(日) 18:30:54 ID:???
>>471 PerlのSocket:connect()を使えるかどうかは
自宅サーバなので自分で設定できるんですが、
設定する箇所がわからない・・・。
httpdのconfigにもそれらしき箇所はないし、
perlってconfigファイル的なものがなさそうなんですが、
設定とかってどこでするんでしょうか?
単にネットワークの問題じゃないかという気がするのだが。
etherealかなんかでやり取り眺めて切り分けしろ。
すいません質問です。
アップローダでアップされたファイルなど、CGIを使ってバイナリ単位で編集したいのですが、どのように行えばよいのでしょうか?
その前に質問の仕方を学んだらどうだ
488 :
nobodyさん:2007/07/18(水) 19:44:38 ID:U8dvSnpW
mod_perl2 + Apache2.2でセッション管理したい場合、
CGI::Session、Apache::Session(mod_perl2に対応していない?)
以外の方法ってありますか?
自前で実装になる?
perlとかプログラミングをもっと基礎から勉強してレベル上げてから来い。
>>486 なんでいきなり謝ってんの?
perlは日本語の勉強してからにしたほうがよいよ
>>489 初心者スレってスレタイが良くないよな
プログラミングは初心者がやるものではない
>486
C、C+、tcl、lisp、sh、perl、PHP、java、ruby、ほか好きな言語、スクリプトで
open か fopen でもしていじってくださいな
493 :
486:2007/07/18(水) 20:45:04 ID:???
open関数も知らない馬鹿だったのか
>perlは日本語の勉強してからにしたほうがよいよ
ワロスww
はいはい自演乙
> 1: 自分はこういう事がしたい。
> 2: それでこんな風にやってみたが・・・
> 3: こんなエラーが出て上手く行かなかった。
>>497 結局open関数が知りたかっただけかw
( ゚д゚)…
>>495は、
>>490が日本語云々言ってるのに「よいよ」って書いてるのにつっこんでんのに、
自演とか言ってる
>>496は何だ?
>>497は質問者に
>>1嫁と言っているだけだと思うのだが、
>>498のつっこみは何だ?
何だ( ゚д゚)何だ(゚д゚ )何なんだ(゚д゚)???
この板も強制ID欲しいよ。
>>501 Auの携帯ブラウザのこと?
それを使うと任意IDのこの板が強制IDで見れるの?
なんじゃそりゃ。
>>502 dat読み込みの仕様ががまだ不十分だから、今なら見れるよ
正規表現で、対象変数の中の値が「ひらがなだけ」なら真とする if 文は
どのような表記になるのでしょうか?
この場合「ー」や「〜」も含めたいです。
文字コードで範囲指定すりゃいいだけですね
で使うのは !~ を使ってください
こうかな?
if( $test !~ '^[\82\9e-\82\ef]+$' )
{
//ひらがなの場合
}
!~使うなら^[]は要らないんじゃない?
わからん
// (笑)
あるあるwww
512 :
505:2007/07/20(金) 21:55:38 ID:???
>>511 ネ申降臨!
一発で性交だったよありがとう!!
困ったときにそのサイト見るのは常識だろ。
どこの国の常識だよww
テンプレにあるぐらいなんだから、こことム板のスレでは常識に近いんじゃないか。
質問
サーバーで実行されることを想定して
作られているCGIゲームを、自分の
windowsのパソコン上で一人で実行したいのですが、
perl+アパッチ+アクtィブパール
という構成になるのでしょうか?
アパッチは必須ですか?
AN HTTPDでも使っとれ
PerlとActivePerlの両方って何?
>>518 もし言ってることが変だなーと思ったら
遠慮なくいってくれたほうが早いです
きっと使い分けたいぐらいの凄腕なんだろ
perlで、静止画を少しずつ(ドット単位orピクセル単位で)左右上下に動かしたりできますか?
特に、ImageMagickとかでそういう機能ありますか?
ここはエスパーの集う場所ではありませんよ?
超ヤサシイ俺が。
初心者はAN HTTPDとActive Perlでいいだろ
つーかぐぐれ
あまりの優しさに全米が感動した
>>521 超ヤサシイ俺が。
左右上下に動かすって、ボタンを押すたびに動かす事は出来るかもな。
基本的にPerlが動くのはボタン押したりアドレス開いたりした直後だけ。
つーかCGIの入門書でも嫁。
>>525 いや、それでもいい。
フォームでボタン押してパラメタ送信、受け取ったら画像が右に少し移動してるって状態で十分。
空白文字分を入れて右にずらしたりはできるけど、上下左右に細かく描画位置を変えれる方法が知りたす。
>>526 超ヤサシイ俺が。
テーブルで囲んで上下左右にセルを用意して透明画像(幅、高さ指定して)を挿入すりゃいいんじゃね?
それか、GD使って元画像を編集するか・・・。マンドクサイな。
ってかなんでCSS+JavaScriptでやらねえのか、かなり疑問。
CGIの出力なんてHTMLなんだから、そこをDynamicHTMLにしちゃいけないって決まりはないんだし。
528 :
518:2007/07/22(日) 16:52:24 ID:JZmpPZ9R
ActivePerlはPerlインタプリタの1つであって、
ActivePerlと別途にPerlが必要、ってのは何かおかしくないか?
と思ってたのだけど、俺が勘違いしてたかもしんない。
529 :
nobodyさん:2007/07/22(日) 16:56:58 ID:RK22sjeK
配列の全ての要素に対して一定の処理をしたい場合、例えば要素の全てを2倍したいときなんかに、
foreachを使わない方法があったと思うのですが、忘れてしまいました。
foreach(@list){$_*=2;}
以外の、foreachを使わない、全ての要素にアクセスする関数か何かあったと思うのですが・・・教えてエロイ人。お願いいたします。
map
531 :
529:2007/07/22(日) 17:20:08 ID:???
>>527 CSSとJavaScriptもいいんだけど、俺の知り合いが携帯しか持ってない奴ばっかりで。
携帯じゃCSSもJavaScriptも無理だから。
つーか超ヤサシイもまいは超ヤサシイ俺という名前なのか気になた
超ヤサシイ俺が。は1人じゃないよ。
中野一人が言うんだから間違いない。
うん、超ヤサシイ俺のひとりだけど別人だよ。
俺も、超ヤサイ俺のひとりだけど別人だ
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'}がどんな値でも通ってしまう。
}
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が空だと、通らないはず。
}
>>537 その対策だとパスワードに「0」を設定されると問答無用でfalseになりますね。
$CRYPT eq "" のほうがいいかも?
というかそれ以前にif( crypt($form{'pass'}, $CRYPT) eq $CRYPT )で常にtrueになるのが変です。
本当にやってることはそれだけ?
>>538 cryptを通した後の暗号化された文字列$CRYPTが、一文字の"0"になるってことはあるんでしょうかね。
if (($form{'id'} eq $ID) && (crypt($form{'pass'}, $CRYPT) eq $PASS)) { }
みたいにIDも照合してます。
環境によってはcryptにおかしな値を食わせると空文字列が返ってくる
それともundefだったかな?
0になりませんね。
蛇足は間違えてるし本題はなんの役にも立たないしで恥ずかしいので無視してください。
>>540でFAだとすると、結構怖いですね…ありがとうございました。
ちゃんと、値のチェックを行っていなかった自分に反省…
はじめまして。
my %file = map { chomp; $_ } <f>;###こんな感じで一旦chompして改行取っ払って、、、
delete $file{'$blogFileName'};###こんな処理をしたあと、、
また改行をくっつけてもどしたいのですが、どうすればいいか教えていただけませんか。
join
>>544 ありがとうございます
言葉足らずですいません
一番最後の要素にも改行コード付けて戻したいんですが、どうすればいいでしょうか…
文字列連結演算子
てかデータ構造を示せ
あと連想はやめろ
map { print f "$_$/" } %file;
map { print f $_,$/ } %file;
map { print f $_,$/ } %file;
smaf { print f $_,$/ } %file;
とかじゃダメ?
while(my ($name, $value) = each %file){
print f $name, "\n", $value, "\n";
}
DBI->connect を使ってポスグレにアクセスしています。
正しくないIDやDB名を入れた場合はきちんと
DBI::errstr にそのエラー文言が入るのですが、
正しくないパスワードを入れた時は何故かそのまま通っちゃいます。
帰ってきた中身を見ても、パスを入れた時、入れない時でどちらもハッシュが入っています。
これは不可思議な事に何故か両方繋がってしまっていると見た方がいいですよね??
>>553 ポスグレの設定で、Perl動かしてるマシンをポスグレ鯖が無条件でトラストしてるんジャネ?
>>554 ありがとうございます。
セキュリティをかなりガチガチにしているところなのでちょっと考えにくいような。。。
パスワードの値を変更したらハッシュの値も微妙に変わりますがこれは仕様でしょうか?
何にも入れない時と入れた場合で±8くらい差があります。
文字数でハッシュも変わる!?
>>555 DBI->connectの復帰値はデータベースへの接続ハンドル(接続者の識別コードみたいなもの)なので、
接続毎に違う値になる事もあるし、disconnect → 再connect で同じ番号が割り当てられないとは限らない。
ってか、値自体に意味はない。(0ならエラーって意味以外は人間様が解析するべき内容じゃない。)
レン鯖でも、ポスグレがlocalhostを無条件トラストしてる事は十分考えられる。
コンソール前に座って、コンソールの管理者ログインパスワード知ってても
DBパスワード知らなきゃメンテナンス出来ないんじゃ、管理コスト高くつくからな。
その状態で、ポスグレ鯖とHTTP(CGI)鯖が同じマシンだったら、
localhost(=HTTP(CGI)鯖)は無条件トラストされてるから、ユーザー名さえあってりゃコネクトできる。
試しにテーブル作ってダミーデータぶち込んで、それを表示するプログラムを
パスワードありなし両方で動かしてみれば良いんジャマイカ?
それでパスワードなしで繋がっちゃったら鯖缶に問い合わせれば良いと思われ。
とても参考になる詳細なご説明ありがとうございます!
ポスグレ鯖とWeb鯖は同一PCです!
さっそく今からためしにテーブル作ってデータぶちこんで表示させてみます!
>>557 役に立ててよかった。
漏れ、ポスグレ+アパッチの鯖缶兼CGI開発やってるから多少は分かるが、
鯖缶としてはシロウトに近いんで(テスト用2台、本番用1台しかやってない)
切り分けぐらいまでしか役に立てない。スマソ。
もし設定やらについて必要ならポスグレスレででも聞いてみてくれ。
>>558 試してみたところ、仰せの通りパス無条件設定でした。
原因が分かってすごく安心してます。
ポスグレスレの方にもこれから常駐させて頂きます!
テスト用2台と本番用1台って十分すごいですw
助かりましたありがとうございます!
560 :
543:2007/07/25(水) 21:31:06 ID:???
561 :
nobodyさん:2007/07/26(木) 10:17:46 ID:6zNTEP+l
複数の人間でカレンダーにスケジュールを書き込めるcgiを作りたいのですが、、
それぞれがラジオボタンで○・×などを選択して、一つのページに結果を表示させたいです。
初心者なので調べても、文字の表示程度の簡単なことしかできなくて困っています。。
どなたか土台になるものを作って頂けませんか。
工程をご教授していただけるだけでもあり難いです。よろしくお願いします。
ググれ
例えば、エラー個所にあたると
エラーメッセージ at ./test.pl line 123
とか出ますが、どこから呼ばれてエラーが出てるのか
(サブルーチン又はrequireのスタック?)わかる方法はありますか?
例えば
hoge.pl line 234 で呼ばれて
fuga.pl line 564 で呼ばれて
test.pl line 123 でエラー
…みたいな
>561
予算を述べよ
__LINE__
__FILE__
ハニャーン
>>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
KCatch
569 :
nobodyさん:2007/07/26(木) 20:56:44 ID:Im3nlar7
CGIで入力された内容を,ユーザ個人のファイルを書き込む処理でちょっと悩んでいます.
WWWサーバはwww-dataユーザ権限で動いているのですが,パスワードなどの認証を行った上で,
そのCGIを呼び出したユーザ個人の持っているファイルに中身を書き込みたいのです.
su などを呼び出してなんとかするという方法は思い付くのですが,なんかもっと簡単にする方法はないでしょうか?
; というか,以前どこかでそういう目的のモジュールを見掛けた気がするのですが,思い出せなくて困っているのが真相なんですけど.
うぐぅ。
>>569 作戦1.
ファイルを書き込む wrapper を作成して、setuid root する。
(この wrapper はその中で対象のユーザに setuid する。
十分注意して作成しないとセキュリティホールになる。)
CGIプログラムからはwrapperを呼び出す。
作戦2.
FTPサーバが動いていれば、入力されたIDとパスワードを使って接続する。
作戦3.
CGIプログラムでは一時ファイルを作成するまで。
定期的にroot権限で動作するプログラムで各ユーザごとにコピーする。
作戦4.
ウェブサーバとして動作するプログラムを作成し、rootで動作させる。
これも十分に注意しないと危険。
>>569 そのファイルのモードを666にしておく。
おまえさんが提示した制約は逸脱していない。
572 :
nobodyさん:2007/07/28(土) 00:47:16 ID:AqKfoxxh
test.cgiにperlのバージョンを表示するコードを書きました。
しかし、これをブラウザからアクセスしてもInternal Server Errorになります。
#!C:/perl/bin/perl
$ perl -v
kentwebの掲示板は正常に動きますので、perlのインストール事態には問題ありません。
どこを手直ししたらブラウザにperlのバージョンを表示できるでしょうか?
どこから突っ込んでいいかってレベルじゃねえぞ
プロンプトが一番ツボに来た。
>>572 Perlで実行すると決めたからには、
スクリプトはperlの言語に従って書かなければいけない。
print `perl -v`;
と書けば表示できると思う。
その前にちょっと訊きたいけど、コマンドプロンプトを知っているかい?
ちょっと古めかしいけど、perlと付き合うには、もってこいの奴なんだ。
知らなかったら、ぜひ、このサイトを見て欲しい。
http://cmd-pro.com/ そして、コマンドプロンプトで
perl -v[ENTER]
([ENTER]はエンターキーを表す。)
を入力すれば、バージョンを知ることができる。
どうだいイカしてるだろ?
577 :
nobodyさん:2007/07/28(土) 04:09:46 ID:AqKfoxxh
ありがとうございます。
おかげさまで無事バージョンをしることができました。
PHPからはじめて、今日からPERLの勉強をはじめたばかりですが、
このスレのお世話になります。
___
/ \
/ ⌒ ⌒ ヽ _________
/ (●) (●) | /
| ::: ⌒(__人__)⌒:: | < ま、お断りしますけどね
| |r┬| i \_________
\ ー―' _/. | | |
⌒ヽ ヽノ ヽ | | |
/ ノ::::::::::::::::::l\. | | |
ヽ `ー― ⌒、ヽ |_|______|
ー――、_ヾ⌒ヽ〜== | | |
579 :
nobodyさん:2007/07/28(土) 16:42:17 ID:bc1YYpxV
>>570 FTPサーバ経由は目から鱗でした.LWPとの組合せで簡単に実現できそうですね.もう少し考えてみます.
580 :
nobodyさん:2007/07/28(土) 17:13:28 ID:FChki3sW
PHPからPerlに移行してくる奴が出てくるって、
また時代が変わってきたな
581 :
nobodyさん:2007/07/28(土) 18:50:02 ID:AqKfoxxh
いまだにperlでcgi組んでくれって人がいるんですよ。
なのでperlはじめてみました。
> いまだにperlで
失礼な!プンスコ!
583 :
nobodyさん:2007/07/28(土) 20:51:25 ID:FChki3sW
PHPがファイナルファンタジーなら
Perlはドラクエみたいな感じだな。なかなか次期バージョンが出ない。
Rubyは
板違いスマソ
数字が書かれているファイルを開いて、その数字をインクリメントして上書きしたいと思います。
open FH, "count.txt";
$count = <FH>;
close FH;
open FH, "+>$ct";
print FH ++$count;
close FH;
こんな感じなのですが、2回openせずにできますか?
perl -i
587 :
nobodyさん:2007/07/28(土) 21:42:09 ID:FChki3sW
>>584 open(FH, "+< $datafile");
$count = <FH>;
seek(FH, 0, 0); # ファイルポインタを先頭にセット
print FH $count++; # 書き込む
truncate(FH, tell(FH)); # ファイルサイズを書き込んだサイズにする
close(FH);
test
589 :
名無しさん@そうだ選挙に行こう:2007/07/29(日) 17:41:22 ID:4RCBobOY
perlをちょっとかじっただけの素人ですが教えて下さい。
PostgresqlとPerlの組み合わせってあんまり良くないんですか?
参考書とかもあまり深く説明が無いのですが。。
今更PHPを覚えなおすのも厳しいかなと思ってます。
>>589 DBIで接続して、SQL投げるだけでしょ?
SQL内容はPostgresを解説してるサイトがあるので、
そこを見ればいいんじゃないか。
DBI使えばインターフェースどれも一緒じゃん
それSQL使いこなせてないってレベルなんじゃ?
perlでDBつかえないやつがPHPなんてできるわけねええだろタコ
PHPのほうが簡単だろハゲww
>>589 超ヤサシイ俺が。
Perl好きは重いのキライが多いから話題にのぼりにくいだけで、組み合わせが悪いとかは全くない。
で、もし藻前が重いDBがキライならMySQLを使えばいい。
今となってはPgもMySQLもそれほど変わらんと俺は思うけどね。
あと、せっかくDB使うならビジネスロジック(データの処理)はストアードプロシージャに任せて
Perlはフロントエンド(入力チェックや画面遷移など)に徹した方が、
例えば帳票用にMS-ACCESSからもデータを見たい・いじりたいって時に便利だ。
$2ch
print <<tekitou;
aaaaaaaaaaa
$2chaaaaaaaaaaa
aaaaaaaaaaa
tekitou
printの中で$2chを表示させるのってどうすればいいんですか??
aaaaaaaが続くからこれだと表示されないTT
>>596 ${2ch}aaaaaaaaaaa
そもそも $2ch なんて変数名使えんがな
>>598さん
できました!ありがとうございます!!
質問です。perlの質問ではなさそうですけど、詳しそうな人が多そうなので…
フォームに入力されたメールアドレス宛てに、sendmailで送信しているのですが、
例えば、
[email protected]と入力しようとして、誤ってhogehoge@yahooと入力すると、
[email protected]のように、レン鯖のホスト名が補完されるのは仕様なのでしょうか。(レン鯖はさくらです。)
市ね、板違い
送る前にドメインチェックぐらいしろよカス
603 :
nobodyさん:2007/07/30(月) 16:13:02 ID:9vd3BgBN
質問です。
Class::DBI で Postgres にアクセスしているのですが、
任意のデータの "stat" というカラムのデータを書き換えるために
$self->stat("now()::text || ',$stat'");
としたところ、書き換え後のデータ内容は
now()::text || ',00000001'
となってしまいました。
2007-07-30 16:09:47+09,00000001
↑こうしたいのですが、どうすればいいでしょうか?
SQL の UPDATE文でないとだめですか?
何でPerlの日付関数を使わないの?
特に理由があるならSQL文発行すればいいんじゃないの
類推してこんなんか。
now()::text.','.$stat
606 :
603:2007/07/31(火) 17:21:44 ID:???
レスありがとうございます。
>604
1行で書ければラクかなと思ったのですが・・・
Perl の localtime で文字列 $new_stat を生成してから、
$self->_stat($new_stat);
とすることにしました。
>605
syntax error って怒られました。
$self->stat("now()::text || ',$stat'");
$self->stat(now()::text || $stat);
1行ね〜、無理やり書くとこんな感じか。$selfてのが謎だが
$self->sql_stat(do{ref($self)->set_sql('stat',q{UPDATE __TABLE__ SET stat = now()::text||%s});",$stat"})->execute;
609 :
nobodyさん:2007/08/01(水) 11:03:14 ID:cHuXo2mz
Aサーバ
/home/mydirectory/
Bサーバ
/var/saitama.txt
Bサーバの/var/saitama.txtを
Aサーバの/home/mydirectory/以下にコピーした後に
/var/saitama.txtを削除する
と言う動作を1つのスクリプトを作りたいと思います。
サーバ間のファイルの転送はSFTPです。
どのようにしたらよいでしょか?
perlのバージョンは5.8 RedHatです。
>>609 >>1 > 1: 自分はこういう事がしたい。
> 2: それでこんな風にやってみたが・・・
> 3: こんなエラーが出て上手く行かなかった。
>
> 最低でも1と3が無いと誰も答えられないよ。
1はわかったので、2と3を書いてくれ
Net::SFTP でも使ってあとは素直に書けばOK
sftpって第3者サーバ間転送もサポートしてたの?
ftpだけかと思ってた。
613 :
nobodyさん:2007/08/01(水) 21:53:07 ID: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から行いました。
なんか質問自体も正しいのか分からない状態ですが、よろしくお願いします。
>>613 エラーメッセージよく読め。
Perhaps the DBD::Pg perl module hasn't been fully installed,
と親切に指摘してくれてるじゃないか。
分からんことをすぐ人に聞く奴は伸びない
ぼくは困るとすぐ人に聞いていますが、チンコの皮は、伸びやすいです。
この包茎野朗が
夏夏夏夏
ココナツ
愛愛愛愛
アイランド
なんそかそれ(笑)
ジェネレーションギャップを感じたw
624 :
nobodyさん:2007/08/03(金) 01:21:20 ID: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;
どこが間違っているのかご指摘お願いできないでしょうか?
よろしくお願いします。
print "<input type=\"button\" value=\"戻る\" onClick=\"javascript:history.back()\">\n";
"" で囲まれた中で " を使う場合は \" のようにエスケープしてね♪
>>624 バックスラッシュが全角なのはわざと置き換えていて本物はちゃんとしてる
んだろうけど、どうみても最後の行の「"」が閉じていない
627 :
624:2007/08/03(金) 01:34:55 ID:HqqiKgbo
>>625 ありがとうございます。
上記はエスケープしきれてないのでしょうか?
628 :
624:2007/08/03(金) 01:37:08 ID:HqqiKgbo
>>626 おはずかしい…
できました。ありがとうございました。
この際
print '<br><br><br><br>'."\n";
みたくするか、ヒアドキュメントを使ってみては?
>>625 その人はたぶん \ を勝手に\に変換してしまうあのブラウザを使ってるんでしょう。
>>624 > print "</form>\n;
ここ。何かが足りない。
「500エラーが出ます」じゃなくて、せめて use CGI::Carp qw(fatalsToBrowser); してほしい。
もっと言えばコマンドラインでチェックして syntax OK. が出てから CGI として動かしてほしい。
631 :
630:2007/08/03(金) 01:38:06 ID:???
リロード…orz
632 :
629:2007/08/03(金) 01:45:51 ID:???
>>630 氏ねって書かれるんだろうけど、ローカルでテストできる環境を整えたり、
telnetでperl -cできる環境を持てる初心者って、あまりいなそうな気がするけどね。
この人だって、エスケープしたり、"を閉じ忘れるくらいの初心者なわけだし。
俺は未だにローカルでテストできる環境を持ってなかったりするし、排他処理にflockを使ってたりするから、
windowsで書いてて、なかなか満足するテスト環境にも恵まれてない。
今はようやくtelnetが使える外部鯖が手に入ったから、コマンドラインでチェックできるけど、
何がいいたいかというと、文法をチェックできる環境を整えるのって、cgiをいじったりするより、
案外難しいんだってこと。
>>632 えと、いちおうその辺も想定しまくったうえで
せめて use CGI::Carp qw(fatalsToBrowser); でも入れてね
「500エラーです」では何もわからないけど、まともなエラーメッセージ出るようになるよ
という気持ちで書いたわけですよ。
「氏ね」と思う人も当然いるだろうし、「環境構築とかわかんねーよ」な人もいるんだろうけど
それについてあーだこーだ言うつもりはないんです。少なくとも「氏ね」とは思ってません。
634 :
629:2007/08/03(金) 02:06:36 ID:???
>>633 いや、別に俺もそんなに反論的な意見でもなかったです^^
use CGI::Carp qw(fatalsToBrowser);
は俺も使ってますが、結構ダメなこともあるんで、正直微妙ですw
>>639 勉強の為に
> use CGI::Carp qw(fatalsToBrowser);
のダメなところを教えていただけませんか?
>>635 俺も初心者だから、よくわかんないけど、
> use CGI::Carp qw(fatalsToBrowser);
って書いてても、500が出るときは出るってこと。
perl -wcより、出てくるメッセージは親切だと思う。使って損はない。
>>636 それマジで言ったん? ソースあんならすぐ出せ。
マジなら2ちゃんねら総力を挙げて潰すが。
> 2ちゃんねら総力
できもしないこといわないでくださいw
たった2つ3つで「流行ってんの?」はないだろ〜
>>637 俺のバックには○○がついてるんだぜ!みたいな…
ねらー気取ってんじゃねぇよカス厨
自分で何もできないくせに虚勢張ってんじゃねぇよばーか^^
二行目に
> use CGI::Carp qw(fatalsToBrowser);
を入れて500が出るなんて、シェバング間違えてるぐらいじゃないか。
流行らせるんだよ!!
2ちゃんねら総力を挙げて。
2ちゃんねら総力を挙げてオナニー
>>637 はたまに見かけるコピペだよ。
ニュー速とかにもある。
ただのVIP用語らしい。
このコピペはニュー速で流行り出したらしい
『VIP用語』って
どんなけ長い用語だよ
649 :
nobodyさん:2007/08/03(金) 22:35:25 ID:oY004xfP
CGIからplの関数を呼び出して、
さらにplがあるところからDBにアクセスする
ということをしたいのですが、うまくいきません。
手法としては、plから相対でDBにアクセスするか、
plの絶対アドレスからアクセスしたいと思っているのですが、
どのようにすれば可能でしょうか?
日本語でやれ
>649
おまえは文章もまともに書けないのか?
652 :
nobodyさん:2007/08/03(金) 23:21:30 ID:oY004xfP
>>650,651
ライブラリ自身の絶対パスを取得する方法はありませんか?
DBって何。バークレーなんとか?SQLiteとか?DBI?
use File::Spec;
use Cwd;
print File::Spec->catfile(getcwd, __FILE__);
655 :
nobodyさん:2007/08/04(土) 00:33:18 ID:TU5rHtE+
>>654 ありがとうございます。問題解決しました
はじめまして。
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;
$hoge_of{$data}++して、
$hoge_of{aaaa} == 1のとき $data = 'gggg'
$hoge_of{aaaa} != 1のとき $data .='gggg'
$data =~ s/aaaa/ggggg/is;
で終わり
659 :
nobodyさん:2007/08/04(土) 17:16:52 ID:+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);
660 :
nobodyさん:2007/08/04(土) 17:30:25 ID:RQKCxjR+
661 :
nobodyさん:2007/08/04(土) 17:36:26 ID:+PxwZdc+
662 :
nobodyさん:2007/08/04(土) 17:43:21 ID:RQKCxjR+
>>661 もう一つ教えてください。下記の2種類あるんでが
どれを選択すればいいんですか?
Windows (x86)
AS package
MSI
Windows 64-bit (x64 AMD64)
AS package
MSI
msi のがいい
64bit は OS が 64bit である場合のみ
既に開発してて過去の古いソースが有りソレを何が何でも生かしたいのであれば 5.6 系がいいかもしれないけど
そうでなければ Perl は Ver 5.8 系をオススメ
665 :
656:2007/08/04(土) 19:43:16 ID:???
>>657-
>>659 有難うございます。
さっそく試してみます。
build818以降PPM4になってアレだから5.8.8build817が個人的にはよい。
build815もいいけど、816はバイナリ互換がないから死ぬ。
>>667 GUIバージョンになったのがイヤとかいう話じゃね?
それでも ppm3 で以前のを使えると思うが。
669 :
nobodyさん:2007/08/05(日) 05:40:21 ID:ZbLLWuy9
perlをこれから学びたいと思っているのですが
jcode.plって必ずつかわなければいけないのでしょうか?
文字コードはeucで作る予定です。
>>669 やめた方がいいと言われそうだけど、俺は好きだw
jcode.plはできる限り使わないほうがいい。
今からやるならせめてJcode.pm、できればEncode.pmがよさげ。
# 新しいJcodeはEncodeのラッパーだったっけ?
>672
です
Encode.pm が全部やってるはず
>>669 use Encode;
文字コードはUTF-8でやった方がいいよ。
在庫管理の機能をつけたいのですが
入荷毎の履歴から古いものから順番に在庫を減らす工程がわかりません。
$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
エスパー頼む
というか素朴な疑問。
テキスト系DB作ってる人って、区切り文字は何にしてる?
俺はタブなんだけど、<>って良く見るけど、どういう意味があるんだろう。
データに<>を含まないからっていうのは、もちろんだけど。
漏れ的にはデータ内にHTMLタグが含まれてたときには
全部排除する前提だから<>という入力は
100%ありえないという前提で<>にしている、と思う
でも、セコイこと言うと、<>の方が1バイト多くね?
フィールドが数十個あって、レコードが1000以上とかあると、バカに出来ないような気がする。
まあ、大量のデータ扱うなら、DB使えっていうことでFAなんだろうけどw
俺の場合は毎度車輪の再発明してもしょうがないので、csvにするかStorableにするか
DB使うかといったあたりで場合に応じて使い分けだな。独自形式でテキストに保存って
いうのは基本的にやらない。
>>681 でも、csvって"の扱いがいやらしくない?そういう車輪は発明されてるんだろうけどw
>>675 whileでループ作って1行ずつマイナス処理してマイナスなら数値を0に置き換えて次の行、
プラスならその数値に置き換えてループ脱出して終了
ファイル(または配列)の終端に達したら、エラー送出してループ終了
でいいんじゃないの?
とりあえずなんかコード書いてみれば?
>>675 俺的には、何でもforeachとsplit
perl書くようになって、この2つは一番汎用してるかも。
今はData::Dumperは流行らないか。
686 :
669:2007/08/07(火) 02:43:38 ID:???
遅くなりました。
たくさん回答頂いてしまい恐縮です。
Encode.pmを使ってみることにします。
ありがとうございました。
最近はaudreyのYAML::Syckをよく使う
Encode.pmって半角カナに完全対応してたっけ?
日本語入力がある場合は結局jcode.plが最適だったのでは。
あの手軽さを考えたら未だにjcode.plから抜け出せない。
>>688-689 何をもって「完全」かは知らんけど、Encode::JP::H2Z のような実装は
用意されている。jcode.pl は UTF-8 扱えない時点で選択肢外なので、
1. Encode + 自前の補助コード
2. Jcode Ver 0.88
3. Unicode::Japanese
の優先順位で使ってるかな。
半角カナより機種依存とか拡張外字とかの扱いに困ってるんですが
みなさんどうしてますか?
もう大分定着してきたと思うが、shiftjis使ってるやつは
cp932にしたら大分マシになると思う。
教科書立ち読みしてたら
シフトJIS使うときは、
2バイト文字の後半部分がC5のもの、
たとえば表とかつかうときは
表¥
ってしないと文字化けするから!
とかって書いてあって、はぁ?とおもった
これってperlでなくてもwebアプリつくるひとは
全員必須の知識なの?
知ってて損は無いけど、古すぎな知識。
正確に言えば、Webアプリ限定ですらないよな。
unicode万歳やで〜
utf-8がいちばん扱いやすい。
Unicodeキライ
結局DBも使わず、jcode.pl、eucでショッピングカート作った。
>>699 設置サーバや運用者の技術レベルによってはありかもね。
「文字コードって何?」ってレベルだと Shift_JIS で問題が
出ないよう作った方が後々面倒が無くていいけど。
文字を変更したのに
表示される文字が変更されない
my $msg="abcdefg ".$DT->{unkoname}."あいうえお".$count."かきくけこ";
このあいうえおの部分を
test
に変更して
my $msg="abcdefg ".$DT->{unkoname}."test".$count."かきくけこ";
にしたのに、表示されるのはあいかわらずあいうえおのまま。なんで?
702 :
nobodyさん:2007/08/09(木) 09:15:01 ID:4ANcM0VH
windowsにperlの5.6と5.8を共存させたいのですが
どのようにしたらいいのでしょうか?
>>702 つ[ VMwarePlayer ][ Linux ]
ひょっとしたら管理モードにしないで
スクリプト更新したからデーターが壊れたかも
「スクリプトをいじるときには
必ず管理モードにしてください、そうでないと
最悪、データーが壊れます」
って説明書読んだら書いてあった
>>702 仮想化なしでそのままふたつインストールする技はないのでしょうか?
入れてみろ
片方入れると片方アンインストールされてしまうんですよ
>>705 つ[Partition Logic][デュアルブート]
709 :
nobodyさん:2007/08/09(木) 12:31:51 ID:UyK8ofDd
ビスタならできるんじゃない?いや、分からんけど。
ActivePerl の 5.005 と 5.8 なら Win98SE上に両方インスールしてる。
インストール先を別ディレクトリにして、環境変数PATHの設定や
PPMの設定ファイルをちょこちょこ変更するだけで普通に使えている。
まあ、今時 Win98SE なんかつかってるばかは氏ねばいいと思うんだけど。
再起動の時に必ずフリーズした98SE
714 :
nobodyさん:2007/08/09(木) 20:28:15 ID:qod+hj3t
sleep関数は3日(259200秒)とか指定して実際3日待機して
くれるものなのでしょうか。
ご教示いただけますと幸いです。
…やってみれば?
サーバーのCGI実行制限時間に達するとKILLされます
>>715 今からでは試すのにちと間に合わなかったので(あさって納品)
質問させていただきました。
>>716 なるほど。
危なそうなので別の方式をとります。
有難うございました。
定期実行させたいならcronで回してくださいな
>>677 タブ区切りにしている。
タブは空白文字に置換しても差し支えない場合が多いことと、CSV程ではないけどExcelで読み込みやすいため。
>>680 せこいこと言うと、Perlなんて遅いから全部アセンブラで書くべき。:-p
>>702 Cygwin入れて、片方は
/usr/local/perl5.6
みたいなディレクトリにインストールする作戦も。
>>717 おまえプロじゃないだろ
学校の宿題は友達にうつさせてもらえよ
>>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++;
}
>>721さん
本当にありがとうございますm(_ _)m
でも在庫管理で難しいのは、排他処理がなってなかったり、どの段階で在庫を減らすかとか、
実物の在庫管理をどうするか、という問題の方が大きいような希ガス。perlの話と離れてスマソ
>>723さん
そうですね、排他処理は色んな方のスクリプトを参考にしていきます。
どの段階、実在庫管理、というのは永遠の課題です。アドバイス感謝です。
そんなのが永遠の課題ってすごいなwww
廃業するべき。
在庫管理で失敗するのは在庫があるかないかのフラグだけにするからだ。
在庫を管理しようとするから難しくなる。
発想を逆転させるんだ。
管理を在庫にするんだ。
在庫にたんぽぽを載せるようにするんだ。
730 :
nobodyさん:2007/08/12(日) 21:21:39 ID:sl0Dt6RW
UTF8フラグのついた文字(char)のバイト数を知りたいのですが
$byte = length($char)とすると当然ながら答えはどれも1になります。
現在は
utf8::encode($char);
$byte = length($char);
urf8::decode($char);
として凌いでいますが、もう少しスマートなというか、
違う書き方できますか?
length文をブロックで囲って中にuse bytes;って書いてみそ
みそwwwwwwww
733 :
730:2007/08/12(日) 22:01:23 ID:sl0Dt6RW
>>731 ありがとうございます!
そんなuse文があったとは知りませんでした。
パッケージ内のサブルーチンでの扱いでしたので、
サブルーチン(ブロック)の先頭にuseを置いてみましたm(_ _)m
ひらがなのみを受け付けるフォームを作成しています。
正規表現で
($prm !~ /(?:\x82[\x9F-\xF1]|\x81[\x4A\x4B\x54\x55])/)
と書くことによって一応ひらがなを識別できるようにはなったんですが、
他の文字も混ざってしまうと判定ができなくなります。
例えば「aaaaaaあaaaa」のように一文字だけひらがなが入っていた場合エラーにする事ができないのです。
全て英字なら問題はないのですが。。。
ひらがなのみを受け付けるようにするにはここからどう改造すればよろしいのでしょう?
($prm !~ /(?:\x82[\x9F-\xF1]|\x81[\x4A\x4B\x54\x55])+/)
で
>>735 す、すみません。。
やってみましたけど結果変わらずでした。。。
?:のせいなのかなぁ。。。
自己解決しました
738 :
nobodyさん:2007/08/14(火) 20:44:26 ID: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を使っていますが、これはどういうわけなのでしょうか?
部分文字列を指定した文字列で置換して代入することをやるにはどうすればいいのでしょう?
宜しくお願い致します。
パチンコ屋かと思いました
戻りは置換された文字列
$a を出力してください
ついでに書くと $a と $b は使用しないように
740 :
nobodyさん:2007/08/14(火) 20:56:14 ID:5P93CXGl
>739さん
ありがとうございます。
教えてくださったようにやると、うまくいきました。
$a,$bの件、気をつけます。
ありがとうございました。
perlでCGIで
実体参照を出力するんだけど
&アンパサンドと
;セミコロンを含んじゃうので、
この場合、”ダブルクオーテーションで囲むのと、
’シングルクオーテーションで囲むのと、
どちらがより適切ですか?
ページの閲覧者はアメリカ人で
文字コードのデフォルト設定はたぶんUS-asciiとかで、
ソースファイル自体の文字コードはシフトJISです。
文字列に”ダブルクオーテーションか’シングルクオーテーションが含まれるなら、悩む意味があるけど、
;セミコロンだったらどっちでもいい。
個人的には変数展開しない’シングルクオーテーションの方が軽くていいかなと思うけど、
$hoge = 'ぬるぽ';
print 'ぬるぽ'.$hoge;
print "ぬるぽ$hoge";
ってどっちが軽いんだろう。
;セミコロンを打ったとたんに、
perlが、
「ああ、、、ここでこの行は終わりなんだな(ニヤリ」
とかって解釈して、勝手に行が終わるかと思ったんですよ。
あと&アンパサンドはつかっていいんですか?
エスケープしたりとか、
&アンパサンド自体を実体参照にしたりとか、
なにか特別な処理をしなくてもいいんですか?
\でエスケープすれば?
無限ループかw
749 :
nobodyさん:2007/08/16(木) 21:38:37 ID:IWfAsW1M
一度
print "Content-Type: text/html\n\n";
と出力してしまったHTTPヘッダを次の行で削除することは
できないものでしょうか。
もし方法があればどうかご教示ください。
時空間を移動できる能力が身に付けば可能です
>>749 というより、どうしてそういうことがしたいのかという方が気になる…
まあ、2回出力させちゃって、ページの上に Content-Type: text/html って表示させたことの
ある奴は俺だけじゃないはずw
皆様ご返答有難うございました。
事情は、
>>753のとおりです。
一番先頭に出力させてしまい、500行目くらいでlocation使わなけれ
ばならなくなってしまい、どうにかできないものかと思った次第です。
できないとわかっただけで収穫です。
感謝です。
>>753 あるあrw
>>754 そういう場合は先に条件判定させて、真偽によってサブルーチン使ったりして別々にすればおkかと。
756 :
nobodyさん:2007/08/17(金) 00:55:10 ID: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モジュール以外に何か足りないのでしょうか?
ポカーン・・・
>>756 ひとつのファイルとしてDBを組んで、
アップロードしたいならSQLiteでも使いなさい。
DBIだけでなくDBDのインストールも必須。
>754
こっちの方がスマートじゃない? そうでもないかな?
(1) 変数 $output を用意する
(2) ソースの途中でprintは使わず、代わりに $output へ文字列を追加するようにする
(3) 最後に$outputを出力
変数に代入するだけなら、幾らでもやり直しができる。
スマートさを追求するならテンプレート使えよ
>>756 pg_dumpして、ファイルをアップロードが一番安全だろうけど、権限が必要。
専用鯖なら問題なしだけどね。
DBD::Pgは、theoryx5をリポジトリに追加で行けると思う。
追加方法については、ぐぐってくれ。
762 :
nobodyさん:2007/08/17(金) 12:05:57 ID:kNB1PTWd
>>763 改行コードが混じっていました。
ありがとうございました。
765 :
nobodyさん:2007/08/17(金) 19:23:59 ID:5ZhoqBhg
KDDIのサーバを使っているのですが、インストール済みのモジュールしか使えないと書いてありました。
ピュアパールのモジュールを使いたいのですがどのようにしたら良いでしょうか?
766 :
765:2007/08/17(金) 19:30:54 ID:???
すみません、インストール済みのモジュールしか使えないと言うより、useが使えません。
pure perl なら
use lib qw(./path);
で
そんなの糞環境にしかならないですし use が使えないわけ無いのでは?
useって書いてあるところに差し掛かった瞬間、エラーで終了する
って設定のサーバーが結構あるよ。
useはコンパイル時に解釈されるから差し掛かった瞬間にエラーで終了というのは・・
Perlインストール時にuse使えないようにコンパイルした可能性がないとも言えない
コンパイル時にどういうオプションつけたらそうなるの?
use使えないのは不便極まりないな。
Bフレッツひけばすべて解決だろ。
そこそこの来訪数を期待してる鯖を開けるプロバイダってどのぐらいあるんだ?
というか、ここの住人が使ってる鯖ってどれくらい?○つけてよ。
・専鯖、ハウジング系
・自宅鯖(Windows系)
・自宅鯖(UNIX系)
・レンタル鯖(月5000円以上)
・レンタル鯖(月1000円以上) ○
・レンタル鯖(月500円以上)
・レンタル鯖(月500円未満)
・無料のレンタル鯖
・プロバイダーの無料スペース
友達のところに間借り
プロックスの何とかアドバンスってやつ
サーバー管理は出来ない知り合いに管理するの約束でただで使わせてもらってる
知り合いはつてで小さい会社のホームページ(静的なページのみ)とメール預かって金作ってるみたい
・専鯖、ハウジング系
・レンタル鯖(月1000円以上)
この2つかなー。片方は仕事だが。
778 :
nobodyさん:2007/08/19(日) 15:53:31 ID:t6VsRWnY
ソースがutf8で出力がshiftjisの掲示板作ってるんですが、
@ABCD等の数字を対応出来なくて困ってます。
utf8のままで解決出来るんでしょうか?
Shift JISには@なんて文字はありません
780 :
nobodyさん:2007/08/19(日) 17:04:05 ID:pOFLTECe
しばらくPerlってなかったので質問なんですが
今でもフォームからの受け取りは CGI.pm 等がデファクトスタンダードでしょうか?
cgi-lib.pl とか古い知識しかないので、CPANなどで最新の方法など御教示ください。
Catalyst でも使うといいよ。
>>778 Windowsの文字コードを使うならcp932へ変換する必要がある。
>>781 catalystって今後生き延びそうですか?
785 :
nobodyさん:2007/08/20(月) 11:49:55 ID:O2ADjgGz
しょぼい質問ですがお願いします・・・
Search::Namazuを使用して得たNamazuの検索結果(オブジェクトの配列)をダンプしました。
ですが、このダンプしたデータの呼び戻し方がどうしてもわからないです・・。
検索結果(@result)内のデータは例えば以下のとおりです。
$VAR1 = bless( { 'name' => 'hoge', 'score' => '82' }, 'Search::Namazu::Result' );
$VAR2 = ・・・
次のようにすると上記したような文字列としては読み込めますが、できたのはそこまで。
for (@result) { print $_, "\n"; } # => $VAR1 = ・・・
ダンプせず直接書き出す場合は$_->nameでhogeが出力されるんですが・・・
786 :
785:2007/08/20(月) 11:52:52 ID:O2ADjgGz
※訂正※真ん中の段
×文字列としては読み込めますが
○文字列としては書き出せますが
787 :
765:2007/08/20(月) 18:34:36 ID:U/5QePTj
>>767-768 ありがとうございます。また、すみません。
useが使えないというのは勘違いで、@INCに何も入っていないだけでした;
けれど、BEGIN { unshift(@INC, 'hogehoge'); }してもコンパイル時の
モジュール見つかりませんエラーに表示される
@INCの中にはhogehogeは入りませんでした。
スクリプトの中で@INCを(printなどして)参照すると確かにhogehogeは@INCに入っているのですが。。
どうにかしてモジュールを使う方法は無いでしょうか?
788 :
785:2007/08/21(火) 10:37:32 ID:???
>>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; }
みたいな感じで。
というか質問自体がわかりにくかったですね。スマソ
789 :
nobodyさん:2007/08/22(水) 02:37:38 ID:pj3xRAc/
次のページにrefreshを使わずに瞬時にリンクしたいのですが
どうすればいいのでしょうか?
>>789 何故ここで聞く…スレ違いじゃね?
CGIならLocationでおk
791 :
789:2007/08/22(水) 02:44:24 ID:???
質問の内容が漠然としてるみたいなので変えます
次のページに瞬時でリンクした時、次のページに
データを渡したいのですがどうすればいいのでしょうか。
792 :
789:2007/08/22(水) 02:45:28 ID:???
>>790 即レスありがとうございます
Locationを検索してみます
リンクしなきゃいいんじゃね?
二行目を詳しく
>>794 まさかLocationがわからないとか…ないよな?
>>795 >>791の2行目の事じゃね?
>>791 「次のページ」が2つ出てきているが、それらは何なのか。またリンク元から見てどこに位置するのか。
「瞬時でリンク」とは何か。
これがわからないと答えようが無い。
797 :
789:2007/08/22(水) 12:19:59 ID:???
自分が探してたのLocationみたいだったので解決しました
レスありがとうございました
798 :
nobodyさん:2007/08/22(水) 22:14:48 ID:sWD+Yq++
ユニコードだとlength($x)で日本語も一文字扱いになるけど、
日本語のバイト数拾うのはどうすると良い?
どの文字コードにするかでバイト数は異なるから、
お望みのコードにencodeしてlengthとるのが正攻法。
perlの内部表現(utf8)のバイト数でよければbytes::length
>731
801 :
nobodyさん:2007/08/23(木) 07:54:48 ID:uXF+dyLC
802 :
nobodyさん:2007/08/23(木) 18:57:09 ID:uXF+dyLC
803 :
nobodyさん:2007/08/24(金) 18:26:53 ID:rvbxrzrr
質問させてください
移動平均原価法で原価計算をしたいと思ってます
@COST=(
'2000','3','6000',
'3000','4','12000',
'1000','5','5000',
'4000','3','12000'
);
左から単価、個数、合計という@COSTの配列を作りました
ここからがわかりません。。foreachでまわしてはみたものの、
最初は2行で区切り計算をしてその結果を次の行と計算・・・という流れが作れません
どなたかヒントくださいますでしょうかm(_ _)m
>>803 移動平均原価法じゃ何も分からん。スレ違い。
せめてもっとソースを示して、こうやりたいと書くべき。
すみません、ソースを晒したいのは山々なのですが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と出したい状況です。
汎用的に書いて
> 移動平均原価法じゃ何も分からん。スレ違い。
> せめてもっとソースを示して、こうやりたいと書くべき。
坊やはつまんないKENT CGIでも改造してオレすごいぜーとか思いつつ引きこもっておけばいいじゃん。www
人様に迷惑かけんなよ。wwww
よくわからん計算法だな。全部足して割り算したほうが
(2000*3+3000*4+1000*5+4000*3)/(3+4+5+3)
わかりやすいような気がするのだが。
各ステップで小数点以下を丸めてわざと誤差を余計に
蓄積させるのが肝??
#!/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";
}
>>808 移動平均法と簿記知らない人は黙っててください。
#!/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";
}
Moving Average Method perl pm
でぐぐれ
それは探せよwww
それって、結局何も示してないのと同じだよね。
質問者回答者共々に
馬鹿なのは珍しいな
見物させて貰うよ
> 質問者回答者共々に
> 馬鹿なのは珍しいな
> 見物させて貰うよ
馬鹿であると認識しつつ見物するというのは何らかの精神障害でもお持ちですか?
簿記も移動平均法もよく分からんが書いて見る。
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";
動物園で猿を眺める感覚なんじゃない?
どうして猿?
>>809 >>811 >>818 ヒントというかコピペで使える答えを有難う御座います!!
全て試しましたところ3つとも希望通りの動きをしてくれました。
すごくわかりやすくて綺麗なソースです。感謝です
$obj = new Pkg();
はエラーになるけれど、
$obj = Pkg->new();
または
$obj = Pkg::new('Pkg');
はエラーにならない原因は何が考えられるでしょうか。
カレントパッケージにnewやPkgというサブルーチンがある場合いくない時がある
package main;
sub new { print "main::new\n" }
Pkg->new();
new Pkg();
package Pkg;
sub new { print "Pkg::new\n" }
824 :
822:2007/08/26(日) 16:43:34 ID:???
>>823 ビンゴでした!
ほんとありがとうございます!
825 :
nobodyさん:2007/08/27(月) 01:16:35 ID:/FKQmVjf
一般的な質問になりますが、
掲示板をPerlで作るとき、データは皆さんどのようにして保存しますか?
私が考えたのは
・連番テキストファイル
・連番XMLファイル
・一つのXMLファイル
ぐらいですが、他にもいい方法などありますか?
db
DB
828 :
nobodyさん:2007/08/27(月) 01:43:22 ID:/FKQmVjf
あ、スミマセン。
外部からも、元データを簡単に参照できるようにしたいので、SQLなどは除外して考えています
データベース
db
db
外部からの参照時は1枚被せる
832 :
nobodyさん:2007/08/27(月) 02:10:27 ID:/FKQmVjf
やっぱり、データベースが良いですか
では、これを機にSQlite+Perlでも勉強してみます
別に無理して RDBMS 使わなくてもいいんじゃない?
どうせいっぱいいっぱいになって途中で投げ出すよw
テキスト保存だろうが何だろうが、DBを名乗っても別に問題は……。
まあ、冗談は別として。
なんで連番ファイルにしようと思ったん?
フォームからCSVファイルのPOSTで、処理の機能ごとにsubでまとめ、
DB入力だけ別鯖へ投げようと思ってます。
(そのDB鯖は外部からのDB接続は許可してない)
それでLWP::UserAgentで外部鯖へPOSTさせた場合の動作で、
CSVが100行あった場合、ループ内で100回のPOSTになりますが
その時に外部鯖の処理速度もループに影響しますよね?
ファイルごと投げないのは何故?
ファイルをアップロードしてそのままインポートさせりゃいいのでは?
838 :
835:2007/08/27(月) 12:57:01 ID:???
DB鯖はFTPアカウント貰えないのですよ・・・
ループ内に処理は書いてなく、LWP::UserAgentでPOSTしてるだけですが、
結局DB鯖での処理が終わってreturn受けてから次のループ というフローでOKでしょうか?
そう思うならそうしろよ
フォームでどうやって投げてると思ってんだろうね
840 :
nobodyさん:2007/08/27(月) 13:50:36 ID:/hovVpUg
外部のHTMLソースを表示するってことperlで可能でしょうか?
LWP
そんな糞スクリプトでやるんじゃなくて、ふつーに外注すればいいのに。
>>838 HTTPでファイルをアップロードすれば?
844 :
835:2007/08/27(月) 15:03:22 ID:???
いくつもレス頂きありがとうございます。
ただDB鯖の方は全く操作できない(させてもらえない)環境なので、
CSV処理のCGIを1つかまして、そこから個別に1件ずつPOSTするフローにしました。
こういった場合、何かこうしろみたいな方法はありましたら御教示よろしくお願いします。
※外部DB鯖の管理元に解決のお願いをするのは無しの方向でw
全部いっぺんに送ればよくない?
846 :
835:2007/08/27(月) 15:55:05 ID:???
>>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;
フォームからCSVアップロードしてるのにそれをなぜ1行ずつ転送するんだ
みなさんこんにちは
小さな英会話教室をしていて、ホームページを作っています。
そこでスケジュールカレンダーを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
ご連絡先メールアドレス
[email protected] 宜しくお願いいたします。
ここに田代しろっていうフリだよね?
850 :
840:2007/08/27(月) 16:55:57 ID:/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エラーでるのですが
これはサーバーの不備でしょうか?
>>835 もしかして、そのDB鯖って、インターフェイスがフォームしかない(笑)とか?
852 :
835:2007/08/27(月) 17:21:20 ID:???
>>851 通常の入力フォームはありますが、1件ずつが大変だしデータフォーマットを合わせるために、
CSVのデータからCGIで各値の変換(英数字を半角など)をしてからPOSTする予定です。
こういうのを社畜って言うのか。
上から言われたら反抗もせずに無駄な労力を費やすと。www
なんで一々POSTでおくらなきゃいけないのかと
普通にDBに接続しろってw
>>850 use してなければいろいろエラーは出ると思う。
856 :
840:2007/08/27(月) 18:50:06 ID:/hovVpUg
エラーは出なくなりましたが
目的の外部HTMLはいろいろ処理(タイトルが変化や色が変わる)していて
表示処理が完全に終わったソースを
perl側から見ることはできないでしょうか?
もう少しHTMLの勉強をした方がいいと思うな、うん
背伸びする必要ないと思うなぁ。うん。
それにしても、未だに CGI なんか作ってる人たちっているのかぁ。
単体なら需要あるしね
それどんなひねくれた需要?
本当にわからないならただの無知だな
あとスレ違いだからこの辺にしとこうぜ
> 本当にわからないならただの無知だな
> あとスレ違いだからこの辺にしとこうぜ
答えれなくなるとそうやって逃げるんだよな。www
webprog板の55まであるcgi(&初心者)スレで858みたいな事書くのが
信じられん、、、
Web2.0(笑)
>>856 もしかしてPOSTじゃなくGETしたいんじゃないの?
(; ^ω^)・・・?
うおっ! このスレレベル高っ!
perlコーディングに関する質問が来ない罠。
Perlでさ、ブラウザからサーバーのファイルを管理できるソフトを作ってる途中なんだけど、こんなCGI作ってる人って他にもいるかな?
いますね。そういうのは既にあります
871 :
nobodyさん:2007/08/29(水) 06:39:40 ID:XYYl0jHZ
質問です。
コマンドプロンプトからActivePerlを使っていますが、
perldoc Jcode::Nihongo
とした時に文字化けします。
どうしたら正常に表示されますか?
それから、CygwinからもPerlを使ってますが、
$ perldoc
Segmentation fault (core dumped)
$ perl -V
Segmentation fault (core dumped)
$ cpan
Segmentation fault (core dumped)
といった表示が多発しています。
これはどうしたら直りますか?
perlコーディングに関する質問が来ない罠。
>>871 perldoc -T Jcode::Nihongo | perl -MJcode -p -e "$_ = Jcode->new($_, q(euc))->sjis"
Cygwinは使ったことないが、
それだけでは、誰にも分からないだろう。
EncodeじゃなくてJcodeなの?
どっちでもいいだろw
Jcodeはラッパーなので微妙ながらタイムラグが出来ます
Encode使う時点で重いから、どうでもいい。
> Encode使う時点で重いから、どうでもいい。
どうでもいいなら、どうしてここに反応を書き込むの?
キモい2次元絵見ながら黙ってチンコでもいじってればいいだろ。
879 :
871:2007/08/29(水) 21:44:47 ID:P8i/jgkh
>>873 回答ありがとうです。
勉強なります。
>>876 Encodeのほうが最近向きなんですね。
ちょっと調べてみました。
もう1つの質問は自己買い付けしました。
我ながらとちくるった質問の仕方でした。w
フォームから送られて来たデータを
jcode'convert(*name, 'euc');
これでEUCに変換してるんですが、
半角カタカナを入れると文字化けしてしまします。
どうすればいいのでしょうか。
送られてくるデータの文字コードを指定しましょう。
882 :
880:2007/08/30(木) 15:10:33 ID:???
>>881 ありがとうございます
うまくいきました。
俺も jcode::convert(\$name, 'euc'); いまだに使ってる
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という意味なのでしょうか?
エラーで親切に教えてくれているというのに・・・
886 :
nobodyさん:2007/09/02(日) 00:16:36 ID:1H6hgBEM
携帯のIPを直接使ってキャリア判別したいんですけど、
どういうコード書けば良いんでしょうか?
例えば公開されてるIP帯域が127.0.0.0/24だとするなら
$ENV{'REMOTE_ADDR'} =~ /^127.0.0.[0-9]+$/
のように上位24ビットだけマッチするなら真で良いんですか?
(例の帯域はあり得ないかも知れませんがサブネットマスクについて良くわからないんで勘弁してください)
887 :
nobodyさん:2007/09/02(日) 00:17:53 ID:1H6hgBEM
↑ドットのエスケープ忘れた
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進数に変換して
その範囲内に収まってるかどうかで確認できる。
これも追記
## 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;
}
890 :
886:2007/09/02(日) 00:45:58 ID:???
質問です。
ユニークな6〜8文字の英数字文字列があるのですが、この文字列を他の文字列(英数字10文字)にしたいんですが、
それもユニークにしたいんです。
ならべく元の文字列がわからないようにしたいんですが、何か方法はありますでしょうか?
ユニークな文字列は5万行ぐらいあります。
>>891 my $10moji = sprintf "%010d",$id;
何この初心者が書いた様な酷いコードは
>>890 2行目は初期化してるだけ
3行目は
111.222.333.444 という IP をループさせないで素直に書くと
(111 * 256 * 256 * 256) + (222 * 256 * 256) + (333 * 256) + 444
となります
これじゃ見た目がアレなのでループで回す関係上基準値というか初期値を定義してるのが3行目です
>>893 じゃぁ初心者じゃないあなたが書いてみてください
参考にしたいです m(_ _)m
>>890 ここまで書いておいてアレですが IP アドレスが指定する範囲に収まってるかどうかチェックするような
perl モジュールがあったはずです
>>895 unpack("N", pack("C4", split(/\./, $ip)))
>>891 既存のハッシュ関数を元に自分で作りなさい。
MD5とかSHA1も中身は乱数表でクルクルさせてるだけだから。
898 :
886:2007/09/02(日) 01:54:57 ID:???
>>894 良くわかりました。ありがとうございます。
>>895 NetAddr::IP
こんなのありました。
やっぱり unpack か
それは知ってたけど、0から書いて10進にする過程を勉強したかったからそういったコードを期待したのだが・・・
つ Net::CIDR::MobileJP
負け惜しみにしか聞こえなくて笑える
ここは初心者が初心者に答えるスレですね
これが負け犬の遠吠えってやつか
Perl ってなんでこんなに複雑なんだ?
PHPやRuby Java はすんなり理解できるのに Perl は納得いかないことばかりだ・・・
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
まずどういう部分が納得いかないでわからないでいるのかを書かないと教えてもらえないよ
>905
んー、>904に特に意図は無いんじゃねーのかな。
質問スレに書くべきことかどうかはともかく。
良し悪しは別として、Perlは怠慢・短気・傲慢の方向に進化した言語だから、
他言語から入って来たような人だと違和感があってもおかしくないっしょ。
>>904 >Perl ってなんでこんなに複雑なんだ?
これじゃなきゃ、CPANにあるような膨大なモジュールを作り出せないよ
perl++, cpan++
Perlのようなもの
910 :
nobodyさん:2007/09/03(月) 16:56:41 ID:EmlGMulI
関数呼び出ししたあとに$_がクリアされてしまうのですが
リファレンスも渡さずに呼び出し先が$_を変更する事はできますか?
>>910 やってみたら判るだろ?
perl -le '$_= 1 ;sub { $_=2}->(); print $_ '
>>911 ありがとうございます。
myっぽく確保されるものだと
勝手に思い込んでました。
そのために local つーものがある
perl -le '$_= 1 ;sub { local $_=2}->(); print $_ '
テストは、use strict; use warnings; した環境でやれよ馬鹿。
>>914 use strict;
use warnings;
でも捕まえられないと思うがどうか。
>>915 つけないよりマシじゃなかと思うがどうか。
Q:「こんどのデート、どこ行こう?」
A:「映画館でいいんじゃね?」
914:「コンドームも持たずに何やってんだボケ!!」
、、、くらいに
>>914はズレてんなあ。QもAもコンドーム持ってっか
どうか会話内容からは分からんのに。それどころかmy知ってるし、
使ってる可能性の方が高いのに。
コンドームがどうかしたの?
ただコンドーム言いたいだけだろ!!!
俺かなりのPerlエキスパートだけど
use strict, warningsは使わないよ
こんなの使って喜んでるうちは素人だね
>>920 ハ イ ハ イ エ キ ス パ ー ト 様 乙 で す
いや、俺もPerlプロフェッショナルだけど
use strict, warningsは使わないよ
こんなの使って喜んでるうちは素人だね
>>923 ハ イ ハ イ プ ロ フ ェ ッ シ ョ ナ ル 様 乙 で す
いやぃゃ、俺はPerlマイスターだけど
use strict, warningsは使わないよ
こんなの使って喜んでるうちは素人だね
もういいよ
俺はPerlマスターベーションだけど
use strict, warningsは使わないよ
こんなの使って喜んでるうちは素人だね
さすがクソスレ。
親がforkで子プロセスを作って、親はその後すぐにexitします。
子は一定の処理を行い、またforkして孫をつくる。forkしたあとはexit。
孫も処理を行い、exitする。
これをやると、たまに500内部サーバーエラーが起きるんだけど、
理由がわかりません。
forkする際には、どちらも$|=1、標準出力は閉じています。
親が終了したら子はゾンビになって子の処理はinitプロセスに渡る
ゾンビ?
何処に居る!!
932 :
nobodyさん:2007/09/12(水) 18:15:02 ID:w11eoBjq
エクセルにおけるCOMBIN(n,m)関数(組み合わせの関数です)ってPerlではどうすればいいでしょうか?
何か数学系の関数を提供してくれるモジュールがありますでしょうか?
また、自分でやる場合は結局階乗も以下のようにすることになるのでしょうか。
sub kaijo{
my $n = $s = shift;
for(1..($n-1)){ $s *= $_ }
return $s;
}
組み合わせ関数も自分で書くしかないんでしょうか。
あんまり軽く仕上げる自信がないですが。
べき乗は ** じゃなかったっけか?
934 :
932:2007/09/12(水) 18:30:54 ID: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 階乗ってべき乗使ってできるんでしたか?
すいません調べてみます。
my $length = $volume ** (1/3);
って云うのは仕事上、多用しています♪@三女ウコン
936 :
932:2007/09/12(水) 19:01:36 ID: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でわけたいところがあるのですが。
937 :
932:2007/09/12(水) 19:02:25 ID:w11eoBjq
>>935 ありがとうございます。
三乗根の計算ですね。
mapでどうぞ
939 :
932:2007/09/12(水) 19:18:07 ID:w11eoBjq
>>938 具体的なコードを教えてもらってもいいでしょうか?
僕もmapあたりでかっこよくいけると思ったのですが、なかなかそうもいかないというか、
思いつかないんです。
sub sum{
my $a;
foreach(@_){ $a += $_ }
return $a;
}
で、こんなの書いてみました。
いちいち変数を使うあたりがいやです。変数を使わなければmapでも出来るのか?
とか思いますが。
List::Util
↑こういうpassは簡単には教えないよーん、みたいなカキコむかつく
perldoc List::Util
::
って外部モジュール使うって
意味だったんだね。
>>939 「変数使わない」って結構大変だし、それで上等だと思うけど?
print eval join '+' , @arr ;
>>943 ・・・釣り?
945 :
nobodyさん:2007/09/13(木) 20:30:12 ID:QEyk4I0D
$form =~ m/([++,,、、。。__\// ])/)
正規表現で上記のような記号を抽出しようとすると、
どうもうまく抽出されません。
たとえば「?」が半角の。になってしまいます。
文字コードはjcode::sjis2euc(\$form)で事前に
EUCにしておりますが(ソースコードもEUCです)、
何か対策等ございましたらご教示いただきたく思って
おります。
宜しくお願いいたします。
まずは。。 []内に2バイト以上の漢字コード書いても1バイトごとのぶつ切りで指定してる
ことになる
あと、日本語EUCと言えども文字の並びによっては別の文字と同じ文字コードパターンがきて
文字の境目が部分だけでは判断できにくくなる
対策としては先頭から1文字ごとに分割して判断するのが素直なやり方
UTF-8 でがんがろう。
>>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;
}
}
なんで素直にuse utf8しないのだろう
ifでくくるにしてもgrepなりfirstなりで検索するとか
ハッシュテーブル使うとかすりゃいいのに・・・
if (grep{ $_ eq $str } @mojilist) {
if ($mojilist{$str}) {
$pat = join '|', mapquotemeta @mojilist
$form =~ m/($pat)/
書いてる途中で送信してしまった・・・
足りない部分は想像力で補ってくれ
if (grep{ $_ eq $str } @mojilist) {
・・・
%mojilist{$str} = map { ($_=>1) } @mojilist;
if ($mojilist{$str}) {
・・・
# このやり方はすごく効率が悪い
$pat = join '|', map { quotemeta $_ } @mojilist;
$form =~ m/($pat)/;
初心者なんですが質問させてください。
Perl言語を用い、fpingの出力ファイルから、
ラウンドとリップ時間のみの数値列を出力するプログラムを作成せよ。
という宿題がでました。
何から手をつければいいかわからない状態なので、もしよかったら教えてもらえないでしょうか?
> 書いてる途中で送信してしまった・・・
> 足りない部分は想像力で補ってくれ
エスパー能力を要求する回答者イラネ
わざわざ答えてくれてるのに、ブーたれる初心者イラネ
955 :
nobodyさん:2007/09/15(土) 16:49:52 ID:iajdiFDw
シミュレーションプログラムを書いてみました。
ループ回数を増やすほど理論値に近似しますのでできるだけ増やしたいですが、
あまり増やして、数十分も処理を続けられると困ります。
ループ1回あたり何秒かかるのか。
もしくは1秒で何回ループさせられるのかを調べるコードを教えてくだしあ。
957 :
955:2007/09/15(土) 17:03:02 ID:iajdiFDw
>>956 早速ありがとうございます。
英語読めないんですがperldocちょっと読んでどうやらtimethisでできそうな気が。
でやりましたら、
error 0.168701171875 at (eval 6) line 40.
なんて表示されました。
どういうエラーでしょうか。
my $code = q{コード};
timethis(1,$code);
って感じでやってみました。
「コード」内で別モジュールを使ったり、コード内にない自作関数を使ったりするのはありですよね?
それともrequirやuseもコード内でやるべきですか?
イマイチうまくいきません。でもあと少しっぽいのでもう少しだけアドバイスお願いしまうs。
958 :
955:2007/09/15(土) 17:05:33 ID:iajdiFDw
一応コードの40行あたりの
die
をコメントアウトしてやりなおしたら
Illegal division by zero at (eval 6) line 47.
こんなエラーにかわりました。
改善策わかりますでしょうか?
959 :
955:2007/09/15(土) 17:06:51 ID:iajdiFDw
すいません括ってる範囲を変えたらなんか上手くいったみたいです。
もうちょっと挙動を調べて又きまう。
960 :
955:2007/09/15(土) 17:24:13 ID:iajdiFDw
特に問題なしでした。
簡単なエラーすら理解できないなら、大学辞めればいいと思うよ。
これで大学生だったら噴くぞ。
webprogから入ったものですが、最近ちょくちょくPerlにやらせることができそうな
事をみつけてはコーディングしてみています。
複雑なループ処理等になってくると全てがきっちり動いてるのか確認大変ですね。
今なにをやっているかという具体的な中身を視覚化してくれるモジュールなどあるのでしょうか?
自分で「よし、まずはこの変数の動きをチェックしてみよう」みたいな事をやっていくのにも限界があるなと思うこのごろです。
デバッガって知ってるか。
965 :
963:2007/09/15(土) 23:47:45 ID:???
>>964 確かエラーを見つけるものですよね?
エラー修正はそこまで苦労しないのです。
普通に何行目あたりに構文エラーがあるなどとわかりやすいですし。
問題は動いてるけど、この出てきてる数値が果たして本当に合っている数値なのかってことです。
それのコードの検証作業を補助してくれるものはないのかなと思ったのですが。
以前にフローを視覚化するなんとかがあるとかないとかって聞いたことがあります。
Perlではなかったかもしれませんが。
実際はもっとわかりやすく、実際に動かした時の逐一の動作を見せてくれると楽だな。と。
違うから調べてこような。
どんな数値かどうか知りたいならそれこそPerlでできることだろ
追加書き込みでログ保存するサブルーチン書いて
&func("\$val=$val");
って書いていけば簡単にできると思うが
デバッガってあまり使われてない気がする
まぁ、プログラム作ってる最中っていうより、プログラムできあがったけど
なんか動作があやしいって時に使うもんだけど。
自分がテストやんなくていいなら使わないか。。。
WindwosのGUIのデバッガは有料が多い気がする。
とりあえず、perlデバッガなら、w 変数名 と c だけ覚えておけば、
変数をヲチできるよ。
大体は、print文や、ログの事後解析で事足りるから、
デバッガは殆ど使わないな。
あとData::Dumperかな。
よく多重のハッシュを使うから、これがないとね。
972 :
nobodyさん:2007/09/16(日) 07:21:24 ID:y2OdqWq5
my @list = qw/3 7 4/;
print (sort{$a<=>$b}@list)[0];
これで上手くいきません。並べ変えた0番目の要素を表示したいのです。
別配列に一旦入れるのは避けたいです。
確かナイスな方法があったような気がするのですが思い出せません。
お願いします。
print +(sort{$a<=>$b}@list)[0] . qq{\n};
974 :
nobodyさん:2007/09/16(日) 07:43:09 ID:y2OdqWq5
>>973 すっげえ男前。
忘れてたのとは違うやり方だけどナイスですね。
しかしどういう理屈でしょうか?
[0..1]とかも使えちゃいましたし。
プラス演算子がおかれると何故配列として認識してもらえるのでしょうか。
print 式
print(式)
976 :
nobodyさん:2007/09/16(日) 07:52:15 ID:y2OdqWq5
>>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 ;
こっちは配列の中身が整数であることを「保証されない」時痛い目に
合うこと受け合いさ。