Perlコーディング初心者質問スレ Part 39
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/11/27 11:35:03ID:DJwiGeFM【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0450nobodyさん
04/12/24 00:58:03ID:???use PHP::Perlinfo;
perlinfo();
こうやってみましたけど、500エラーになっちゃいました。
0454nobodyさん
04/12/24 08:09:11ID:o66Ux/q0やりたいことは、画像ファイルをアップしてもらったときに、その画像を表示させる際、widthとheightの指定をするために、数値が必要なのです。
表示する際に取得しても、アップされたときに取得してdatファイルに書き込んでもどちらの方法でもいいんですが、
いいやりかたがありましたらお教え下さい。
0455nobodyさん
04/12/24 08:22:07ID:???Image::Magickが使えるならもっとお手軽。
0456450
04/12/24 10:56:48ID:tsjI5bY5だからレンタルサーバーだからわかりませんて。
0457nobodyさん
04/12/24 11:24:35ID:???別に.pm無くても調べれるし、そういうスクリプトも配布されてるけどな。
てめーのその書き方が気に入らないから教えない。
勝手に調べろ。どーせすぐ見つかる。
0458nobodyさん
04/12/24 11:42:50ID:???RPM使うのが手っ取り早いんじゃ?
0461nobodyさん
04/12/24 13:21:51ID:???0462nobodyさん
04/12/24 13:30:52ID:???0463nobodyさん
04/12/24 13:36:23ID:???-> レンタル業者のサポートセンターに電話して確認汁
「500エラーになってしまいます」
-> レンタル業者のサポートセンターに電話してエラーログを教えてもらう
一番確実、簡単、早いヽ(゚∀゚ )ノ
0464nobodyさん
04/12/24 13:48:24ID:???use CGI::Carp qw(fatalsToBrowser);
を頭の方にいれとくだけでエラーメッセージが
ブラウザに出るようになるからかなりやりやすく
なると思うのだが。
0465nobodyさん
04/12/24 17:25:57ID:???0466nobodyさん
04/12/24 17:30:09ID:???結局サーバでやるしか無い場合もちらほら。
0468nobodyさん
04/12/24 21:08:00ID:???ActivePerl ならリポジトリに以下のサイトを加えると PPM で入るな。
http://www.bribes.org/perl/ppm
0469nobodyさん
04/12/24 22:32:19ID:cTzXcA78通常のPC宛には正常に届きますが、ドコモに送ることができません。
画面上ではエラーにはなりません。
携帯のドメイン指定受信は間違いありません。
require "jcode.pl";
$mailer = '/usr/lib/sendmail';
$mlfrom = '[email protected]';
$mlto = '[email protected]';
$mlsb = "件名";
$body = "ほげほげ";
jcode'convert(*mlsb, "jis");
jcode'convert(*mlms, "jis");
$mlhd = "From: $mlfrom" . "\n" . "To: $mlto" . "\n" . "Subject: $mlsb" . "\n\n";
$err = 0;
open(MAIL, "| $mailer -t") or $err = 1;
if ($err == 0) {
print MAIL $mlhd;
print MAIL $mlms;
print MAIL $body;
close(MAIL);
$msg = 'メール送信正常に処理しました。';
} else {
$msg = 'メール送信エラー';
}
0470nobodyさん
04/12/24 23:08:26ID:???0471nobodyさん
04/12/24 23:12:43ID:cTzXcA78前に、Net::SMTPとかいうの使ったら送れたんですが・・・。
0472nobodyさん
04/12/24 23:13:38ID:cTzXcA780473nobodyさん
04/12/24 23:20:03ID:???sendmailのログを見ろ。これ以上はperlいじってもわからない。
「メール送信エラー」になるのなら、$!を表示させるべし。
0474nobodyさん
04/12/24 23:23:02ID:???・送信を規制しているIPアドレスがある(らしい)
・スクリプトを実行しているドメインは$mlfrom と一致しているか?
0475nobodyさん
04/12/25 13:35:49ID:???0476nobodyさん
04/12/25 15:46:52ID:???$bodyはjis変換しないの?
$mlmsってどっから出てきた?
MIME-VersionとかContent-typeとかのヘッダー付けないの?
ちなみにbase64使って件名を変換するならこれでいいはず・・・
use MIME::Base64;
&jcode'convert(*mlsb, 'jis');
$mlsb = encode_base64($mlsb);
$mlsb =~ s/\n//g;
$mlsb = "=?ISO-2022-JP?B?" . $mlsb . "?=";
0477nobodyさん
04/12/25 16:12:32ID:???http://www.din.or.jp/~ohzaki/perl.htm#JP_Base64
0478nobodyさん
04/12/25 23:20:20ID:bFVNXg4wchmod 0777,<*>;
単純にやるならこれで大丈夫なものの、
ディレクトリ > ディレクトリ > ファイル
のように階層が深くなると書き方が判りません。
何か定石はないでしょうか?
0479nobodyさん
04/12/25 23:31:08ID:???http://www.itmedia.co.jp/help/tips/linux/l0647.html
0481478
04/12/25 23:49:48ID:bFVNXg4wありがとうございます。
ただ、Perlでの記法が知りたいのです。
言葉足らずで申し訳ありません。
0482nobodyさん
04/12/26 00:16:31ID:???type="file"を使うときはenctype="multipart/form-data"にしろ、とあったので、
form要素にそれを記述したら、書き込み自身できなくなりました。
サーバーによってファイルのアップロードができない、とかそういうのはあるんでしょうか?
0485482
04/12/26 01:58:00ID:???データの受け取り方がテキストとは違うようですね。
0486nobodyさん
04/12/26 02:11:01ID:???フォームからCGIへ値を渡す時、何を使ってデコードしてるんだい?
CGI_Lite.pmあたりを使ってりゃ、問題は無いはずだよん。
0487nobodyさん
04/12/26 02:14:01ID:???0488482
04/12/26 02:24:06ID:???if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else { $buffer = $ENV{'QUERY_STRING'}; }
とやって、$bufferを散々弄繰り回しておりました。
type=fileを使うのは初めてなので緊張してます。
CGI_Lite.pmというものを探して使い方を勉強してみます。
有難う御座いました。
0489482
04/12/26 03:25:48ID:???あとは、これを画像ファイルとして生成するだけなんですが、
GIF89aから始まる文字列の中のどこに元々のファイル名が含まれてるんでしょうか。
抽出方法がありましたら教えてくださいますようお願い致します。
単純に文字列の中には見つかりませんでした。
0490nobodyさん
04/12/26 03:28:57ID:???0491482
04/12/26 03:31:54ID:???回答有難う御座います。
ということは、<input type="file">のパスを抽出出来るようにしなくちゃいけないわけですね。
なんだかいろいろ見えてきたような気がします。頑張ります。
0492nobodyさん
04/12/26 04:28:34ID:???0493nobodyさん
04/12/26 09:31:51ID:mhqMgdk4PHPからperlをexecで実行させる処理を書いてるのですが
perlスクリプトへの引数で
エスケープが必要な文字ってなにがあるのでしょうか?
試した限りでは
" は \"
\ は \\
にして " で囲えばいいかなと思ったのですが。
0494nobodyさん
04/12/26 10:04:43ID:???print qq|ここに"でも\でも好きなだけ書くがよい|;|
0495nobodyさん
04/12/26 10:08:15ID:???0496493
04/12/26 10:28:19ID:???ごめんなさい
実行スクリプトの引数の話しです
第一引数:aaa
第二引数:aa"a
第三引数:a\a
xxx.pl "aaa" "aa\"a" "a\\a"
こんな感じなのですが
0497nobodyさん
04/12/26 13:04:55ID:???PHP なら escapeshellarg 使えば済むような気がするが、スレ違い気味だ
0498nobodyさん
04/12/26 13:06:01ID:RQ2dyxHHprint join("\n", @ARGV),"\n"; とかやって確認できない?
0500nobodyさん
04/12/26 23:47:49ID:???PHPでPerlなんか起動するなよ。
0502nobodyさん
04/12/27 08:22:06ID:???俺もmySQL使う時はPHP使うよ。
Perl+DBは遅いイメージがあるし、mod_perl使えないし。
誰かこのイメージ払拭させてくれませんか?(スレ違い)
0504nobodyさん
04/12/27 14:15:25ID:Wb/eo+Oruseの行で
$ ../xxx.pl
Can't locate xxx.pm in @INC (@INC contains: /usr/lib/perl5/5.6.1/i386-
linux /usr/lib/perl5/5.6.1 /usr/lib/perl5/site_perl/5.6.1/i386-linux /
usr/lib/perl5/site_perl/5.6.1 /usr/lib/perl5/site_perl /usr/local/lib/
site_perl/5.6.1/i386-linux /usr/local/lib/site_perl/5.6.1 /usr/local/l
ib/site_perl .) at ../xxx.pl line 39.
となってしまいます。
useの行の前で
push(@INC, '/xxx/xxx/xxx');
としてxxx.pmがあるパスを指定してるのですが
それがエラーメッセージの「@INC contains」に表示されていません。
@INCに追加できていないということなのでしょうか?
0505nobodyさん
04/12/27 14:18:01ID:???かuseの前に
BEGIN
{
push(@INC, '/xxx/xxx/xxx');
}
0506504
04/12/27 14:28:57ID:???ありがとうございます!
スクリプトを読み込むと同時にuseが処理されてたということ
だったのですね
ずっと悩んでました m(__)m
0507nobodyさん
04/12/27 15:51:41ID:???私は今までずっと引数でセッションIDを引き回す方法をとって
いたのですが、とある案件でmod_perlの「PerlTransHandler」と
いうものを使うことにより、自作モジュールをプログラム読み
込み前にロードし、セッションIDをsubprocess_envというものを
使用して環境変数に埋め込むという方法を知りました。
これであれば引数を使用することはなくなりますし、静的ペー
ジでもセッションIDを保持することが出来ます。
これからこの方法を使っていこうと思ったのですが、今回の
案件がモジュールのインストール関連を許可してくれない
関係で、この方法はとれなくなってしまいました。
この他に似たような方策があれば、ご教授いただきたく思っ
ております。
宜しくお願いいたします。
0508nobodyさん
04/12/27 17:19:58ID:d87nS7mBmy $a = "123456789";
$a =~ s/(?:\xA3([\xB0-\xB9]))/ chr(ord($1)-0xB0+ord('0')) /eg;
print $a;
>123456789
↑自分で全角数字を半角数字に変換するコードを考えたのですが、
マルチバイト文字などの中間に誤ってマッチしてしまいます。
例→隠隠
1文字目の2バイト目が\xA3で、2文字目の1バイト目が\xB0-\xB9である組み合わせには
完全に誤作動してしまいます。
どうすればよいでしょうか?
0509nobodyさん
04/12/27 20:29:10ID:???ほとんどFAQだが、
(1) 5.8以降のユニコード機能を有効にすればtr/0−9/0-9/でいけるが
いろいろ落とし穴が(笑)
(2) Jcode.pmのtrを使う
(3) 自分で書きたければ ttp://www.din.or.jp/~ohzaki/perl.htm
あたりが参考になるだろう
0510nobodyさん
04/12/27 20:32:05ID:???Apache::ClickPath かあ。URLのパス部分にセッションIDを埋め込むやつだよね。
頑張れば mod_rewrite で似たようなことを実現できそうな気もする。
ただその場合「Perl コーディングの質問」では無くなってしまうのだけれど。
「mod_rewrite すらダメ」と言われると厳しいかも。
0511nobodyさん
04/12/27 21:12:19ID:???そうです!まさにそれでございます!
mod_rewriteでしたらできる可能性があるんですね。
ちょっと上司に使用許可を求めてみたいと思います。
0512nobodyさん
04/12/28 11:03:41ID:???1を渡したら、ab
(略)
25を渡したら、az
26を渡したら、ba
(以下略(ただし、zzまでの有限配列))
となるようにしたいのですが、どうすればいいのでしょうか?
全部記載した配列を使ってるのですが、重そうなので簡単な方法があれば知りたいです。
おねがいします
0513nobodyさん
04/12/28 11:16:40ID:???キミがしたいのは、こうゆうことか?
foreach ('aa' .. 'zz'){
$list[$count++] = $_;
}
0514508
04/12/28 11:18:22ID:/d0b1jT1jcode.plでもできるようです^^;
アホなことをしてしまいました。
しかしどうやってるのでしょうか?
>1文字目の2バイト目が\xA3で、2文字目の1バイト目が\xB0-\xB9である組み合わせには
>完全に誤作動してしまいます。
これをどうやってクリアにしたのか気になってjcode.plのtrの中身を
見てみましたが・・・・・・・orz
字句解析でもしてるんだろうか
0516512
04/12/28 12:11:25ID:t9GmHYc3> >>512
> foreach ('aa' .. 'zz'){
> $list[$count++] = $_;
> }
今、それとほぼ同じコードなんだけど、676個も要素をメモリに読み込んでるから軽く出来る方法はないかとカキコしますた
0517nobodyさん
04/12/28 13:22:09ID:???掲示板のCGIで半角カナを使用するために半角カナが使用できるjcode.plを入れたのですが、
どうやら掲示板のCGIの方でも改変すべき箇所があるみたいです。
jcode::convert(\$value,$gl->{mycode});
if ($gl->{mycode} eq 'sjis') {jcode::h2z_sjis(\$value); }
if ($gl->{mycode} eq 'euc') {jcode::h2z_euc(\$value); }
か
jcode::convert(\$message,'jis');
あたりだと思うのですが半角カナ→全角カナへのコンバートをしないようにするためにはどうすればいいのでしょうか
0518nobodyさん
04/12/28 14:48:39ID:???hankaku to zenkaku の意味
0519nobodyさん
04/12/28 14:58:26ID:???0520nobodyさん
04/12/28 16:02:26ID:???jisコードには半角カナが無いので、jisコードに変換した時点でアウト
0523nobodyさん
04/12/28 16:31:52ID:???それだったらJISへ変換は当然として、そこは半角にはできないな。
いずれにしても改造スレのほうが適切じゃないか?
0524nobodyさん
04/12/28 18:23:28ID:???0526nobodyさん
04/12/28 20:08:29ID:???$var1='あかさたなはまやらわ';
$var2='亜加差多菜羽真矢裸和';
この二つの変数を使って
s/あ/亜/g;
s/か/加/g;
s/さ/差/g;
…
みたいな置換をしたいのですがグルっても分かりませんでした。どういう処理をすれば良いんでしょうか。
0527517
04/12/28 21:20:58ID:???レスありがとうございました。
良く考えたら半角→全角変換しないでいいのならjcode.pl自体使う必要がないので、
cgi中からjcode.plを抜き取ればいいだけでした。
0528nobodyさん
04/12/28 21:36:42ID:???my @key = ('a'..'z');
my $keynum = scalar @key;
# my $d = 675;
my $code = $key[$d/$keynum].$key[$d%$keynum];
# 繰り返し使うなら、配列の方が負荷は軽いと思う。
>>526
文字コードとPerlバーションを書くべし。
>>527
JISコードへのコンバートはしなくていいの?
0531nobodyさん
04/12/28 23:30:38ID:???微妙だね。
String::Multibyteを使ったもの。
use String::Multibyte;
my $mbcs = String::Multibyte->new("shiftjis");
my $var1='あかさたなはまやらわ';
my $var2='亜加差多菜羽真矢裸和';
print $mbcs->strtr('あめんぼ あかいな あいうえお', $var1, $var2);
0532531
04/12/28 23:32:16ID:???require 'jcode.pl';
my $var1='あかさたなはまやらわ';
my $var2='亜加差多菜羽真矢裸和';
my $tr = sjis_tr($var1, $var2);
print $tr->('あめんぼ あかいな あいうえお');
exit;
sub sjis_tr
{
my ($from, $to) = @_;
jcode::euc(\$from, "sjis");
jcode::euc(\$to, "sjis");
return(
sub {
my $line = shift;
jcode::tr(\$line, $from, $to);
return($line);
});
}
--
encodingを使ったもの。
use encoding "shiftjis";
my $str = 'あめんぼ あかいな あいうえお';
$str =~ tr/あかさたなはまやらわ/亜加差多菜羽真矢裸和/;
print $str;
0533531
04/12/28 23:38:14ID:???my $var1='あかさたなはまやらわ';
my $var2='亜加差多菜羽真矢裸和';
my $tr = sjis_tr($var1, $var2);
print $tr->('あめんぼ あかいな あいうえお');
exit;
sub sjis_tr
{
my ($from, $to) = @_;
my $sjis = '[\x00-\x7e]|[\x0x81-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc]|[\xa1-\xdf]';
my %keys;
my @key_code = ($from =~ /($sjis)/g);
@keys{@key_code} = ($to =~ /($sjis)/g);
my $key = '('. join('|', map{ quotemeta($_) } @key_code). ')';
my $pattern = qr/\G((?:$sjis)*?)$key/;
return(
sub{
(my $str = shift) =~ s/$pattern/$1$keys{$2}/g;
return $str;
});
}
0534531
04/12/29 00:18:35ID:???sub sjis_tr
{
my ($from, $to) = @_;
jcode::convert(\$from, "euc", "sjis");
jcode::convert(\$to, "euc", "sjis");
return(
sub {
return jcode::sjis(jcode::trans(
jcode::euc(shift(), "sjis"), $from, $to), "euc");
});
}
0537nobodyさん
05/01/03 03:52:58ID:BvOHark/例えば
@foo = qw(1 2 3 4 5 6);
という配列があったら
1:2 3 4 5 6
2:1 3 4 5 6
3:1 2 4 5 6
4:1 2 3 5 6
・・・
というように取り出したい。
foreachとifを使って地道にやらないとだめかなぁ
0539nobodyさん
05/01/03 04:17:37ID:Jw9YIMiU今作成中のアクセス解析でshift_jisで出力した際
検索文字列に上のような文字化けが出るんですが、
これ元がどの言語コードが分かりますでしょうか?
漢字 \ x アルファベット 数字
という規則的な並び方してるのですが、
お分かりの方いたらご教授お願いしますm(__)m
0540nobodyさん
05/01/03 04:35:28ID:???俺だったら、おとなしくforeachを使うと思う。
少し考えてみて、いい方法があったら、後で書き込みます。
>>538
それだと、配列中に要らない値が重複して存在する場合、
その値に対応する要素が複数削除されるぞ。
0541nobodyさん
05/01/03 04:44:00ID:???>それだと、配列中に要らない値が重複して存在する場合、
>その値に対応する要素が複数削除されるぞ。
元質問だといらない値以外が残ればいいんじゃないの?
0543540
05/01/03 05:39:41ID:???を使えば楽みたいね。今まで使った事なかった、鬱 orz
例(※検証してません):
@foo = qw(1 2 3 4 5 6);
splice(@foo, 1, 2);
print join(',',@foo) , "\n";
結果:
1,4,5,6
0544nobodyさん
05/01/03 06:08:27ID:???CPAN 経由でインストールしたモジュールをアンインストールするには
どうすればいいの??
0546nobodyさん
05/01/03 14:59:35ID:???■ このスレッドは過去ログ倉庫に格納されています