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

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

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん2006/01/18(水) 02:17:46ID:???
Perlのコーディングで困ってる人のスレです。

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

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

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0809nobodyさん2006/02/21(火) 17:51:46ID:???
>>807
どうしてもprintを使いたいならIO::ScalarなりIO::Stringなり、
さらに必要ならIO::Teeなりを使う必要がある。
08108072006/02/21(火) 17:54:07ID:???
unkoじゃなくてhogeでした。
>>808
戻り値にセットしてもうまくいきません・・・
0811nobodyさん2006/02/21(火) 18:56:43ID:???
>>810
釣れますか?
0812nobodyさん2006/02/21(火) 23:48:30ID:???
>>806
できました。ありがとう。
0813nobodyさん2006/02/22(水) 05:44:07ID:???
おはようございます。
サイトに来てくれた人のHTTP_REFERERを保存していて
どんな単語で検索して来たのかを表示しようと思ったんですけど
うまく表示されない場合があります。

$value =~ tr/+/ / ;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("H2", $1)/eg ;
jcode::convert( *value, 'euc' );

調べたんですけど、だいたいどこもこのくらいしか書いてないんです。
他に何か必要なことがあるんでしょうか?
0814nobodyさん2006/02/22(水) 06:10:09ID:???
GoogleなんかはUTF-8だからJcode.pmとか使え
0815nobodyさん2006/02/22(水) 07:48:55ID:???
おぉ!化けなくなりました。
ありがとうございましたmm()__
0816nobodyさん2006/02/22(水) 15:01:17ID:???
ゲットの方法でポストすることって出来ますか?
詳しく言うとボタンをつかわいで変数にデータを入れる方法とかなんですが・・・
その場合後ろのタイトルとかに?をつけてポストとか書けばいいんでしょうか?
なんとかしてボタンじゃなくてリンクだけで送信されるようにしたいのですが。
宜しくお願いします。
0817nobodyさん2006/02/22(水) 15:12:46ID:???
複数の呼び出し元からアクセスできて、呼び出し元の環境変数を参照して、
それぞれ対応したページを生成する掲示板を作っています。
その掲示板に’ホームへ戻る’のリンクをつけて、その呼び出した元のページへ帰るようにしたいのですが、
どのような方法があるでしょうか?
最初はリファラーをクッキーに保存しておけばいいかなと思ったんですが、
imodeはクッキー使えないみたいなので困っています。
他の方法があれば教えてください。
0818nobodyさん2006/02/22(水) 15:21:39ID:???
>816
クリック保証型の詐欺ですか (; ̄^ ̄)
0819nobodyさん2006/02/22(水) 15:23:17ID:???
>818
面倒くさいだろうけど、<input type="hidden"〜 を使うしかないんじゃないかな
0820nobodyさん2006/02/22(水) 17:49:13ID:???
ハッシュのハッシュの配列の値を取る記述がうまくいきません。
'KKK'をプリントしたいんですが・・・
どうやればいいんでしょうか。

$a = {
  1 => 'aaa',
  2 => 'bbb',
  3 => 'ccc',
  4 => $b->{test}[0]
};

$b = {
  test => ['kkk','yyy']
};

print $a->{4};   # KKKをプリントしたいけどうまくいかないorz
0821nobodyさん2006/02/22(水) 18:13:58ID:???
$bを$aより先に定義。
それと$a,$bはsortで使う特殊変数だから、テストでも使わないのが吉。

08228202006/02/22(水) 18:36:33ID:???
>>821
順番の問題でしたか。トホホ・・・
サンクスです。
0823nobodyさん2006/02/22(水) 18:40:23ID:???
レンタルサーバを使用しています。
Jcodeを使用しようと思い
Jcode一式をドキュメントルートのlibフォルダ下へコピーしました。
続いて、test.cgiに
use lib './lib';
use Jcode;
と記述しました。ですが、エラーになります。
ttp://www.aglabo.com/agl/proevo/perl/install/jcode-user.html
ここを見るとこれだけで使えるようなのですが
何が悪いのでしょうか。
0824nobodyさん2006/02/22(水) 19:00:54ID:???
>>823
エラーメッセージをコピペしないところが悪いんじゃないかなと思った

最近はEncodeもJcodeも入ってる貸し鯖が増えてると思ってたんだけど
そうでもないのかな?
0825nobodyさん2006/02/22(水) 19:13:05ID:???
みんなEncodeって使ってる?
utfフラグとかめんどくさくて結局Jcode使ってる。
0826nobodyさん2006/02/22(水) 19:34:27ID:???
>>824
すいません。
エラーは 500 Internal Server Error です。
use Jcodeをevalでくくってもだめでした。
0827nobodyさん2006/02/22(水) 19:37:27ID:???
>>826
うう。そっちじゃなくて、

use CGI::Carp qw(fatalsToBrowser);

を仕込んでおいたら吐いてくれそうなほうのエラーメッセージ。
0828nobodyさん2006/02/22(水) 20:13:43ID:???
うう、すいません。
CGI::Carp使ってみました。
でも500エラーのままかわりません。
use Jcode;をコメントにするとエラーはなくなります。

use Jcode or die("asdf");は無理なんでしょうか?
0829nobodyさん2006/02/22(水) 20:14:51ID:???
>>825
Encodeのある今、Jcodeなんてキモくて使えない。
utfフラグが面倒だったら常にfrom_to使えばいい。
0830nobodyさん2006/02/22(水) 20:22:10ID:???
〜が?になる問題は解決したのか?
0831nobodyさん2006/02/22(水) 20:43:49ID:???
>>830
それは Encode じゃなくて >>830 の側の問題だろ。
0832nobodyさん2006/02/22(水) 21:00:05ID:???
>>831
どう解決するの?
ググり方がよくわからん
答え教えて
0833nobodyさん2006/02/22(水) 21:20:26ID:???
問題の起こるコードを見せれ。
0834nobodyさん2006/02/22(水) 21:37:54ID:???
use lib してないに一票
0835nobodyさんNGNG
>>828
evalして$@でキャッチしろ
0836nobodyさん2006/02/22(水) 22:47:51ID:???
>>823
use lib 'ドキュメントルート/lib;
ってすればいいんじゃないの?
0837nobodyさん2006/02/23(木) 00:36:17ID:???
>>835
山田家の逆襲を参考にファイルごとevalしてみたらこんなのが出ました。

Can't locate auto/Jcode/Unicode/utf8_euc.al in @INC
( (@INC contains:
./lib
/usr/lib/perl5/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/5.8.0
/usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.0
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.0
/usr/lib/perl5/vendor_perl .) at lib/Jcode/Unicode.pm line 64

このline64ってのはコメント除いた行数なんですかね?

>>836
やったけどだめだったんです。
0838nobodyさん2006/02/23(木) 01:12:06ID:???
そりゃ間違った文法だもん
動いたら、それのほうが問題
0839nobodyさん2006/02/23(木) 06:14:00ID:???
eval しろというのは、以下のようにすることをいいまつ。

eval {
require Encode;
};
if ($@) {
print $@;
}

eval 使う時って、use でなくて、require しないと止まるんやね。
あと、eval ブロックは、; セミコロン付けないといけないので、きをつけるべし。
0840nobodyさん2006/02/23(木) 07:29:23ID:???
eval("use Omaemona");
print $@;
…じゃダメなの?

拙い自分用に拙く作ってみました。% hoge.pl Net::SMTP したりして遊ぶ。

#!/usr/local/bin/perl -w

use strict;

if (!$ARGV[0]) {
  die("まじめにトラップする気がない。\n");
}

eval("use $ARGV[0]");

if ($@) {
  print $@, "\n↑読め。\n";
} else {
  print "$ARGV[0]が使える気配。\n";
}
0841 ◆TWARamEjuA NGNG
(´-`).。oO(perl -e 'use Hoge' で十分な気がする。。。)
0842nobodyさんNGNG
>>841
そんな事言ったら perl -MHoge で十分
0843nobodyさん2006/02/23(木) 11:25:13ID:???
お世話になります。
eval("use Jcode");
ではエラなしの様子です。
eval{ Jcode::convert($hoge,"utf8","euc-jp"); };
だと>>837と同じエラがでます。
間違えて
eval{"use Jcode"};
としたときは
Undefined subroutine &Jcode::convert called
とでました。
0844nobodyさん2006/02/23(木) 11:33:40ID:???
perl -e 'eval("use unko");'
これだけ実行すると何もエラー吐かないわけだけど。
0845nobodyさん2006/02/23(木) 12:06:11ID:???
evalしたなら$@で補足しないと意味ないだろ。
perl -e "eval('use unko'); print $@"
0846nobodyさん2006/02/23(木) 12:08:49ID:???
ttp://www.ellinikonblue.com/blosxom/UNIX/20050816Jcode_pm.html
ここみて同じ今年たら解決しました。
お世話になりました。
evalの件は勉強になりました。ありがとうございました。
0847nobodyさん2006/02/23(木) 16:06:00ID:???
>>845
それで、藻前が書いた unko は本当に拾えるんか?
0848nobodyさん2006/02/23(木) 20:01:33ID:???
例に下ネタがある時点で答える気0
0849nobodyさん2006/02/23(木) 23:51:28ID:???
「埼玉県蕨市ヘロ」というバイナリ文字が入力されたらしく、
SQL発行(insert)時に止まってエラーになったみたいなの
ですが、この現象を回避する方法をご教示いただけますと
幸いです。

DBはPgモジュールを使用し、Postgresで管理しております。

たしかにコマンド直打ちでSQLを実行してみると、ターミナルが
停止してしまいます。。
0850nobodyさん2006/02/23(木) 23:52:30ID:???
MySQL で UTF-8 を使うようにして解決。
0851nobodyさん2006/02/23(木) 23:53:17ID:???
>>849
漢字コードとかも書きましょう。DBのテーブル側も。
0852nobodyさん2006/02/23(木) 23:56:18ID:???
CDBI とか DBIC とか使うとどうだろう。
ちゃんとエスケープしてくれるんじゃないかな。
0853nobodyさん2006/02/23(木) 23:57:35ID:???
すみません。
肝心のバイナリが貼り付けられませんでした。

「蕨市」と「ヘロ」の間には、エディタで開いて「SV」という
反転文字が入っております。
コードはSJIS→EUCに変換したものです。
0854nobodyさん2006/02/23(木) 23:58:36ID:???
> 「埼玉県蕨市ヘロ」というバイナリ文字が入力されたらしく、

元の文字列って何だろう?
そういうことも示せないってのは馬鹿かなにか?
08558492006/02/24(金) 00:22:49ID:???
皆様の早急なご返答、誠に感謝しております。
本当にありがたいです。。

もう少し具体的に説明させていただきますと、フォームはSJIS
ですので、入力があった文字はプログラムの先頭でEUCに
変換されます。

それをSQLにいれてinsertするのですが、その際に

「蕨市 〒ヘロ1-5-15」
    ↑
血管が浮き出るようなマーク

このような文字列でSQLが止まってしまっていることが発覚し、
改修していたのですが、どうしてもこのバイナリを処理すること
ができず困り果て質問させていただきました。

バイナリ文字は秀丸エディタで開くと、「SV」という反転文字が
入っております。

説明不足で申し訳ありません。
0856nobodyさん2006/02/24(金) 00:26:33ID:???
それで、何で藻前の仕事を漏れ等がしないといかんのかと。バカじゃねーの?
08578492006/02/24(金) 00:34:50ID:???
>>856
おっしゃるとおりです。
スレ汚しすみませんでした。
0858nobodyさん2006/02/24(金) 00:35:24ID:???
>>857
ということにしたいのですね?
0859nobodyさん2006/02/24(金) 00:35:54ID:???
一件落着

はい次
0860nobodyさん2006/02/24(金) 00:38:18ID:???
この展開ヒドス。
08618492006/02/24(金) 00:38:43ID:???
>>858-859
はい。
ずらずらと書いてしまい申し訳ありませんでした。
0862nobodyさん2006/02/24(金) 01:17:56ID:???
なんだかかわいそうにも見えるな

849が自殺していないことを祈る
0863nobodyさん2006/02/24(金) 01:37:32ID:???
この程度で自殺なんかしたら笑い話だなw
0864nobodyさん2006/02/24(金) 01:59:07ID:???
元の文字列と、変換後のバイナリデータのヘキサダンプ、
何を使って変換したのか(できればモジュールのバージョンも)が分かれば、
原因も分かるかもね。
0865nobodyさん2006/02/24(金) 05:23:53ID:???
簡単なcgi(UAがこれならこれ、こっちならこれを表示、というもの)を書いて、ローカルでテストしてokだったので、サーバーにアップしてみたのですが、
500エラー(文法エラーですよね?)になりました。

チェッカなどにかけてみると、

In string, @808 now must be written as \@808 at index.cgi line 70, near "@808"
index.cgi had compilation errors.

と、出たのですが、意味が分からなくて、ググってみたんですが当該情報が見つかりませんでした。
何が問題か、分かる方いましたら、お教えくださいますようお願いします。
0866nobodyさん2006/02/24(金) 05:38:14ID:???
>>865
@808 => \@808
0867nobodyさん2006/02/24(金) 05:44:22ID:???
>>865
sjisで全角スペースの下位バイトが0x40で"@"だから" 808"ってリテラルがどっかにあるのかも
0868nobodyさん2006/02/24(金) 05:45:48ID:???
>>866
有難う御座います
808なんて記述してないと思い込んで、確認してなかったですが、
(ファイルサイズ 808KB)
ってのがあってそこに\つけたら直りました

ほんと助かりました
0869nobodyさん2006/02/24(金) 05:55:06ID:???
全角スペースと8でダメなんだ。
0870nobodyさん2006/02/24(金) 08:17:49ID:???
全角の2バイト目が @ じゃなかったっけ?
0871nobodyさん2006/02/24(金) 10:45:19ID:???
UTF-8 使っとけばおk
0872nobodyさん2006/02/24(金) 10:59:30ID:???
もういい加減shift_jis関連の質問秋田
0873nobodyさん2006/02/24(金) 12:35:39ID:???
テンプレつーか診断フローチャートみたいのがあると良い気がする。

1. 日本語文字列を使っている: YES => 2, NO => 30
2. Shift_JIS を使っている: YES => 10, NO => 3
3. EUC-JP を使っている: YES => 5, NO => 4
4. UTF-8 ...

みたいな。
0874nobodyさん2006/02/24(金) 12:37:35ID:???
まあ、いいだしっぺが勝手にやってくれればよろしい。
使いやすければ使うし、そうでなければ無駄働きw
0875nobodyさん2006/02/24(金) 13:17:52ID:???
そうね。よさそうなら手伝うから873はたたき台よろしく。
0876nobodyさん2006/02/24(金) 13:49:15ID:???
多分やらないから、何度も同じ質問に答えればよろしいw
0877nobodyさん2006/02/24(金) 13:51:23ID:???
質問に答えず罵倒するということも可能。
0878nobodyさん2006/02/24(金) 13:55:04ID:???
テンプレ(できれば1)に
Shift_JIS のスクリプトにはお答えできません
0879nobodyさん2006/02/24(金) 15:59:44ID:hXh5LOuq
ググっても見つけられませんでしたので、
こちらで質問させて頂きます。

サーバのローカル上にある画像ファイルのMIMEタイプを
判別したいのですが、どうすればよろしいでしょうか?
GIFとJPEGが区別できるだけでいいです。
できることならモジュールとか使わず、
今のスクリプト上にシンプルに書きたいのですが。

08808792006/02/24(金) 16:03:26ID:hXh5LOuq
↑
画像のMIMEタイプって変ですね…。
画像のフォーマットの種類を判別したいのです。
よろしくお願い致します。
0881nobodyさん2006/02/24(金) 16:22:19ID:???
バイナリオープンしてヘッダを調べる
0882nobodyさん2006/02/24(金) 16:24:24ID:???
sub get_type{
  $file = $_[0];
  open (FILE, "$file");
  read (FILE, $data, 4);
  close (FILE);
  ($type) = unpack ("H4", $data);
  if ($type eq "ffd8") {
    $type = "jpg";
  } elsif ($type eq "8950") {
    $type = "png";
  } elsif ($type eq "424d") {
    $type = "bmp";
  } elsif ($type eq "4749") {
    $type = "gif";
  } else {
    $type = "知るかボケ";
  }
  return ($type);
}
0883nobodyさん2006/02/24(金) 16:45:12ID:???
ここって、口は悪いが何気にいい奴多いよなw
口悪くて性格も悪いやつもかなり混じってるけど。
08848792006/02/24(金) 16:53:33ID:hXh5LOuq
>>881,>>882
どうもありがとうございます。
画像なんて普段扱わないから、さっぱり?でした。

>>883
ほんとですねw
0885nobodyさん2006/02/24(金) 17:38:26ID:???
>882
特に問題は発生しないだろうけど、Win も考えるなら read の前に binmode を
0886nobodyさん2006/02/25(土) 01:58:25ID:qE7CF1Aw
どなたかお知恵をお貸しください。
外部ファイル呼び出しについて質問なのですが、呼び出し時に関数を
与えて呼び出す事は可能なのでしょうか?
ニュアンスとしましてはmain.cgiというソースの中に外部ファイル
(gaibu.cgi)を呼ぶ時にgetデータの送り方のように
require("gaibu.cgi?data=1");
としてgaibu.cgiへdata=1という関数を引き渡したいのですが・・・
main.cgiから渡されたdata=1というのをチェックして、gaibu.cgiの方で
main.cgiへ引き渡す関数を指定したいのですが。
妙な文章で申し訳ありませんが、どなたか宜しくお願い致します。
0887nobodyさん2006/02/25(土) 02:23:48ID:???
use 使えば?
0888nobodyさん2006/02/25(土) 02:28:14ID:???
エスパー待ちだなこりゃ
0889nobodyさん2006/02/25(土) 02:39:53ID:???
>>886
requireしてあんたが使う関数に、引数を渡してやれば良い。
0890nobodyさん2006/02/25(土) 02:48:36ID:???
最後の3行が名探偵も解けなさそう
0891nobodyさん2006/02/25(土) 02:54:14ID:???
「関数」と「引数」を混同している?
0892nobodyさん2006/02/25(土) 02:56:47ID:???
引数に戻り値のある関数を指定するって意味だろ
0893nobodyさん2006/02/25(土) 02:58:46ID:???
エスパーへの道程は長そうですが、

$ENV{"REQUEST_METHOD"} = "GET";
$ENV{"QUERY_STRING"} = "data=1";
my $data = `gaibu.cgi`;
0894nobodyさん2006/02/25(土) 05:08:43ID:???
>>886
そのスクリプトは、不特定多数がアクセスするような鯖に置くのかな?
0895nobodyさん2006/02/25(土) 05:10:53ID:???
>>893
> my $data = `gaibu.cgi`;

はつみみです。
0896nobodyさん2006/02/25(土) 11:37:16ID:JV6sbN7w
CSVファイル(最終行にだけ必ず特定の文字列XXXが含まれている)
を読み込んで、その最終行だけを行ごと削除して出力したいのですが
ググっていろいろ調べて試したんですがうまくいきません。
よろしくお願い致します。
0897nobodyさん2006/02/25(土) 13:21:09ID:???
>>896
(1) CSVファイルを一行ずつ読み込む
(2) 行がXXXでなければprint
(3) 終了
0898nobodyさん2006/02/25(土) 13:50:14ID:???
暇だから釣られてみた
ロックとかエラー処理は自分で付け加えてね
open(IN, "inputfile.csv");open(OUT, ">outputfile.csv");while(my $inline = <IN>){if($inline =~ /XXX/){print OUT $inline;}}close(IN);close(OUT);
… どこのセルにXXXが含まれてるか分からんからこれ以上は無理
0899nobodyさん2006/02/25(土) 13:51:44ID:???
軽く間違えたw
if(!($inline =~ /XXX/)){〜
0900nobodyさん2006/02/25(土) 14:08:44ID:???
!~ 使えよ。
0901nobodyさん2006/02/25(土) 15:47:11ID:???
初心者の初心者による初心者のための質問スレ
0902nobodyさん2006/02/25(土) 16:01:54ID:???
初心者の初心者による初心者のための底辺質問スレ
0903nobodyさん2006/02/25(土) 18:07:52ID:???
という訳で、上級者の>>901様と>>902様がツッコミどころの無い完璧なレスをしてくれます。
0904nobodyさん2006/02/25(土) 18:21:00ID:???
> という訳で、上級者の>>901様と>>902様がツッコミどころの無い完璧なレスをしてくれます。

>>901 と >>902 が上級者である根拠は?
0905nobodyさん2006/02/25(土) 18:22:11ID:???
臭いでわかる
0906nobodyさん2006/02/25(土) 18:26:41ID:???
汚物は消毒(ry
0907nobodyさん2006/02/25(土) 18:26:45ID:???
臭いでわかるための方法をきぼん。
0908nobodyさん2006/02/25(土) 18:27:58ID:???
汚物を消毒したからといって、汚物のままなのでは?
レス数が900を超えています。1000を超えると表示できなくなるよ。