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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/02/16(月) 11:42:29ID:gvPTpodw
Perlのコーディングで困ってる人のスレです。

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

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

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

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1218030872/
0767nobodyさん2009/06/24(水) 23:00:29ID:???
>>766
サンクス!やっぱfirefoxはいいね
0768 ◆TWARamEjuA 2009/06/24(水) 23:31:37ID:????BRZ(10072)
Safariに入っているWeb インスペクタは重宝していますm(_ _)m
0769nobodyさん2009/06/25(木) 02:01:15ID:???
デバッグの時、HTTP::Proxyで、localhostに仮想プロ串立てて、
そこから全てのリクエスト(ヘッダやPOSTの中身、Javascript絡みの通信も)を
監視してるオレは、マイノリティなのかな・・・。
0770nobodyさん2009/06/25(木) 03:30:59ID:???
5.8の時はHTTP::Proxyを使うこともあった。
5.10以降、Windowsで使えるHTTP::Proxyが無いのが困り物。
CPANから拾ってもテストが通らないし。
0771nobodyさん2009/06/25(木) 09:04:35ID:???
wiresharkで通信全部見る。httpsには使えないが。
0772nobodyさん2009/06/25(木) 12:37:23ID:???
5.10って色々不便そうだな
6が出るまで5.8でいいわ
0773nobodyさん2009/06/25(木) 12:45:53ID:???
5.005のときも5.6のときもそんなことを思ったw
0774nobodyさん2009/06/25(木) 14:05:24ID:???
まぁライブラリ/モジュールの対応が遅れるのは仕方ないだろ。

ところで // ってどんなときに使うん?
0775nobodyさん2009/06/25(木) 14:38:37ID:???
my $d = $v; 但し$vの内容がundefなら$d = '' にしたい

my $d = $v || '';

$v = 0 でも$d = '' になっちゃうじゃん

my $d = $v // '';
0776nobodyさん2009/06/25(木) 15:32:19ID:???
質問です。
値をリファレンスにして、サブルーチンに渡す。
あるいはサブルーチンで処理したデータをリファレンスで受け取った後に、
そのリファレンスの値が参照できない・・・ということはありますか?
0777nobodyさん2009/06/25(木) 15:55:12ID:???
あったら大変じゃん
0778nobodyさん2009/06/25(木) 16:19:30ID:???
>>776
いまいち話が掴めないけど、
普通に使っていれば、無いんじゃないか。
0779nobodyさん2009/06/25(木) 20:28:45ID:???
内部コードをutf8で書きhtml出力をshiftjisで書いてるんですが、
フォームから「テストあいうえお日本語」等と送っても正常に処理出来るんですが
「テスト&」と送ると
Wide character in subroutine entry at C:/usr/lib/Encode.pm line 162
となりエラーになります。

「&」だけでは大丈夫なんですが「ト&」ではエラーになります。
デコード前に処理が必要なんでしょうか?
0780nobodyさん2009/06/25(木) 21:15:06ID:???
ソース無しにデバッグしろとな。
エスパーすると、decodeした文字列をもう一回decodeしてる。
0781nobodyさん2009/06/25(木) 21:59:58ID:???
>>780
見苦しいですが思いあたるとこはこの辺りです。
use Encode qw(from_to decode encode encode_utf8);
use open ':utf8';
use encoding 'utf8',STDOUT=>'shiftjis';

my %param = parse_form();
my $query;
if (exists $param{'query'}) {
$query = decode('shiftjis',$param{'query'});
#$query = $param{'query'};
}
0782nobodyさん2009/06/25(木) 22:01:15ID:???
sub parse_form {
my $buffer;
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{'QUERY_STRING'};
}
my %param;
foreach (split(/&/,$buffer)) {
my ($name,$value) = split(/=/);
#form要素のname属性が/^[A-Za-z]+$/でなければ無視する
$name = uri_decode($name);
next unless $name =~ /^[A-Za-z]+$/;
$value = escape_string(uri_decode($value));
if (defined $param{$name}) {
my @values = sort((split(/\t/,$param{$name}),$value));
$param{$name} = join("\t",@values);
} else {
$param{$name} = $value;
}
}
0783nobodyさん2009/06/25(木) 22:03:33ID:???
sub uri_decode {
my $string = shift;
$string =~ tr/+/ /;
$string = encode_utf8($string);
$string =~ s/%([0-9A-Fa-f]{2})/pack("H2",$1)/eg;
return $string;
}
sub escape_string {
my $string = shift;
$string =~ s/&/\&\;/g;
$string =~ s/"/\"\;/g;
$string =~ s/$string =~ s/>/\>\;/g;
$string =~ s/\t/\ /g;
$string =~ s/\r\n/\n/g;
$string =~ s/\r/\n/g;
return $string;
}
return %param;
}
0784nobodyさん2009/06/25(木) 22:29:49ID:???
そんな適当なデコードするくらいならモジュール使ったほうがいい
0785nobodyさん2009/06/25(木) 22:39:23ID:???
>>784
ふだんはuse CGIしてるんですけど、
URIデコードの途中でutf8フラグを落とさないと
上手くいかなかったんで試行錯誤してます
具体的にやり方教えてもらえるならお願いします
0786nobodyさん2009/06/26(金) 00:38:52ID:???
use utf8;
use open ':utf8';
binmode(STDIN => ':raw');
binmode(STDOUT => ':encoding(Shift_JIS)');
use CGI qw(-utf8 :cgi);

my $cgi = CGI->new;
my $query = $cgi->param('query');
0787nobodyさん2009/06/26(金) 02:19:39ID:???
>>775
あぁなるほどね。
"0"も0も、||オペランドでは数値の0として評価されるから必要になるのか。
0788nobodyさん2009/06/26(金) 02:22:48ID:???
このノリでrubyやると躓くんだよな
0789nobodyさん2009/06/26(金) 08:18:46ID:???
>>786
おお!ありがとうございます。
と思ってprintしてみたらデコードされてなかったorz
もうやだ文字コードめんどくさい。
もうutf-8駄目な環境は無視していいのかな?
0790nobodyさん2009/06/26(金) 14:05:30ID:???
なるべくshiftjisで粘るのが吉
0791nobodyさん2009/06/26(金) 15:26:54ID:???
>>789
STDINがutf8で、STDOUTがShift_JISで、コードがutf8なんだよね?
デコードされてなかったってのは、\x{0081}とかで表示される?
うーん、分からん。

でも、CGI.pmとencodingの相性が最悪なのは分かった。
0792nobodyさん2009/06/26(金) 16:44:17ID:???
use encodingせずにCGI.pmのparamを自前でdecodeしてから
使うのが今のところ確実かな。
0793nobodyさん2009/06/26(金) 17:55:34ID:???
>>791
>デコード
例えば「テスト&」と送ると
\x{fffd}e\x{fffd}X\x{fffd}g&
となりutf8::is_utf8はtrueになります。

まだ勉強しなきゃいけない部分が多く出て来たんで
対処のしようが無いorz

>>792
CGI.pmはインスタンス作った時点でデコードされてるんではないんですか?
てことは、paramを自前でデコードしても2重デコードになったりしないんですよね?
あれ?俺なんか変?
0794nobodyさん2009/06/26(金) 18:07:24ID:???
ttp://blog.livedoor.jp/dankogai/archives/51227060.html
0795nobodyさん2009/06/26(金) 18:21:09ID:???
>>794
お勉強してきますw

いちおう全文ぅpしときます。
少なくともなにがしたいのかは分かると思います
お願いします
http://www.kent-web.com/pubc/book/test/uploader/uploader.cgi?mode=downld&no=2167
0796nobodyさん2009/06/26(金) 19:11:15ID:???
入力がShift_JISなのね。

use utf8;
use open ':utf8';
binmode(STDIN=>':raw');
binmode(STDOUT=>':encoding(Shift_JIS)');
use CGI qw(:cgi);

my $cgi = CGI->new;
my $query = decode 'Shift_JIS' => $cgi->param('query');
07977962009/06/26(金) 19:27:16ID:???
一応動くと思うけど、paramの返り値のundefチェック忘れてるので適宜入れておいてね。
ソース見て気になったけど、サブルーチン内でサブルーチンの定義はPerlではやめた方がいいよ。
0798nobodyさん2009/06/26(金) 19:38:40ID:???
>>796-797
ぅわぁぁぁぁ完璧です。
いままで何度も挫折したんですが初めて解決しました。
まじで感謝してもしきれないですw

>サブルーチン内でサブルーチン サブルーチンからサブルーチン呼ぶ場合はいつもそうしてました(汗
0799nobodyさん2009/06/30(火) 17:03:31ID:???
ローカルに保存したニコニコ動画のmp4をiPod用にエンコする操作の
スクリプトを書こうと思ったんですが,mp4に格納されている
動画(コーデックはh.264)のサイズ(幅×高さ)を取得する方法って
ありますか?

MP4::Infoでイケルかと思ったら,これは動画サイズを取得できない
みたいなんですよ・・
ttp://search.cpan.org/~jhar/MP4-Info-1.12/Info.pm
0800nobodyさん2009/06/30(火) 23:13:29ID:???
mplayer だかなんだかわすれたけど、パッケージマネージャーを見てれば発見できるよ
08017992009/07/01(水) 02:27:40ID:???
>>800さん
>mplayer
なるほど.一度外部のアプリを使って画像を生成して
それの大きさを取得するってことですかね?
ちょっとやってみます.
アドバイスありがとうございます.
パッケージマネージャーのほうはよくわかりませんでした.
0802nobodyさん2009/07/01(水) 10:56:47ID:???
会社に行ったらPCから書きまする
0803nobodyさん2009/07/01(水) 14:19:30ID:???
今は使ってないので、使い方は試行錯誤してもらうとして。
ppm から Audio-Play-MPlayer っていうパッケージを入れて、

実行する CGI/pl と同じディレクトリに MPlayer を置いてください。

使い方は、、、がんばれw




書いてて思ったけど、自分は system() で起動して情報を取得してた気がするw
08047992009/07/02(木) 23:42:04ID:???
>>802-803さん
継続してアドバイスありがとうございます。
自分でも色々試行錯誤した結果なんですが、
エンコで使うffmpegが入力する動画情報も返してくれることが
分かったので、そっちを使うことにしました。その結果、

my @out = `ffmpegのパス -i 動画ファイル名 2>&1`;
my ($width, $height);
foreach my $line(@out){
$line =~ /Stream .+ Video: .+ ([0-9]+)x([0-9]+), /;
if($1){
$width = $1;
$height = $2;
last;
}
}
print "$width x $height\n";

こんなかんじで取得することができました。
>>802-803さんや、見守って頂いたスレの皆様に感謝致します。
ありがとうございました。
0805nobodyさん2009/07/03(金) 13:19:59ID:???
ttp://search.cpan.org/search?query=ffmpeg
やっぱりあるのね。
0806nobodyさん2009/07/06(月) 17:16:31ID:???
Encode::Guessなんだけど、候補が複数あるときに
どれを採用すればいいのかって話は確立してる?

今のところ、すべての候補でdecodeして文字列長の短いものを採用しているんだけど
良い方法があるなら知りたい。
0807nobodyさん2009/07/06(月) 17:21:04ID:???
それが確立されてればとっくに文字コード誤判別問題は解決してる
0808nobodyさん2009/07/06(月) 17:41:03ID:???
それもそうか。
幸いにも>>806の方法でまだ文字化けには遭遇してないけど、もしバケたら諦めよう。
0809nobodyさん2009/07/06(月) 18:28:01ID:???
Guess で or って文字列が無ければ決め打ち
or って文字が入ってれば、最初に来たエンコードでやってみる

すごくあいまいだけど、それで済ましてる
0810nobodyさん2009/07/06(月) 18:49:46ID:???
それだけだとバケると思うけど。

use strict;
use Encode;
use Encode::Guess qw/euc-jp shiftjis/;

my @words = (
 "\xE3\x83\xAF\xE3\x83\xB3", # UTF-8 "ワン"
 "\xE6\x8E\x88\xE6\xA5\xAD", # UTF-8 "授業"
 "\xE7\x86\xB1\xE3\x81\x84", # UTF-8 "熱い"
);

for my $word (@words) {
 my $enc  = Encode::Guess->guess( $word );
 if( ref $enc ) {
  print $enc->name,"\n";
 } else {
  print $enc,"\n";
 }
}

結果は
shiftjis or utf8
shiftjis or utf8
utf8
0811nobodyさん2009/07/06(月) 19:50:17ID:???
形態素解析にかけてだな
0812nobodyさん2009/07/06(月) 20:21:17ID:???
それで?
0813nobodyさん2009/07/06(月) 21:26:40ID:???
形態素解析といえば、Yahoo! APIに丸投げする手があったか。

・・・コストたけえよ。
0814nobodyさん2009/07/11(土) 14:22:02ID:???
array、scalar両方をreturnすることのできる関数を使用するときに、
arrayを期待して関数を実行する一般的は方法はどのようなものでしょうか?

スカラーを期待するときは print scalar any_func();
とscalarを使えばいける用ですが、arrayを期待するやり方が分かりません。
0815nobodyさん2009/07/11(土) 14:27:11ID:???
例えば @{[ func()]}; とか?
要素だけ欲しいなら [ func()]->[0] とか使ってる
もうちょっといい方法があるかもしんないけど
0816nobodyさん2009/07/11(土) 14:43:15ID:???
印字ならprint any_func();でいける

代入なら($x)= any_func();でいける
0817nobodyさん2009/07/11(土) 14:57:08ID:???
>>515-516
即レスありがとうございます。
any_func() のなかでwantarrayを使用しているのですが、

sub any_func {
my @a = (1, 2, 3);
my $s = 6;
return wantarry ? @a : $s;
}

print文のなかで使用するにはやはり一旦変数にとってからprintでしょうか。
print文のなかで直接any_func()を使用するとscalarのreturnが表示されて困ってました。
0818nobodyさん2009/07/11(土) 14:58:10ID:???
× >>515-516
>>815-816
0819nobodyさん2009/07/11(土) 16:34:37ID:???
use strict;
use warnings;

sub any_func {
my @a = (1, 2, 3);
my $s = 6;
return wantarray ? @a : $s;
}

print any_func();

wantarryをwantarrayに直しただけで、ちゃんと123が表示されるよ?
0820nobodyさん2009/07/11(土) 19:10:03ID:????PLT(54324)
print +(any_func());
0821nobodyさん2009/07/11(土) 19:46:53ID:???
>>819
すみません。勘違いでした。printのなかで使用した場合arrayがかえってきました。
>>820
こんな指定の仕方もあるんですね。知らなかった。。
0822nobodyさん2009/07/11(土) 22:23:13ID:???
マジレスすると、
リストを返す関数からリストを得る為には、関数を「リストコンテキストで評価してやる」だけでよろしいです。
wantarray() の名の通り、array を want してやるだけ(ここは Perl 用語としては array でなく list と呼ぶべきだけれど)。

リストコンテキストの例としては、リスト代入(配列、ハッシュ、あるいはスカラー変数のリストに対する代入)、リストを取る関数の引数部などがそれにあたります。

print() は引数にリストを取る関数なので print の引数はリストコンテキストで評価されます。ですからこの場合、特別な仕掛けは要りません。

Perl の組込関数は、単項演算子として振舞ういくつかを除き、ほとんどが引数をフラットなリストとして扱います。
そのため scalar() はあっても、対となるはずの list() 組込関数は存在しません。(和ラクダ第3版v2 P.925 参照)
# ちなみに scalar() 自身は単項演算子として振舞う関数のひとつです。
0823nobodyさん2009/07/16(木) 14:08:29ID:XeS/olXC
すみません、質問です。

サーバーはXREAを使っています。
MIME::Parser を使おうと思い、他の箇所は問題無いCGIファイル内に
use MIME::Parser;
という記述を入れると
Argument "2.00_01" isn't numeric in subroutine entry at /usr/local/lib/perl5/site_perl/5.8.8/MIME/Head.pm line 119.
Argument "2.00_01" isn't numeric in subroutine entry at /usr/local/lib/perl5/site_perl/5.8.8/MIME/Head.pm line 120.
Argument "2.00_01" isn't numeric in subroutine entry at /usr/local/lib/perl5/site_perl/5.8.8/MIME/Head.pm line 143.
Argument "2.00_01" isn't numeric in subroutine entry at /usr/local/lib/perl5/site_perl/5.8.8/MIME/Entity.pm line 230.
Argument "2.00_01" isn't numeric in subroutine entry at /usr/local/lib/perl5/site_perl/5.8.8/MIME/Entity.pm line 231.
というエラーが発生してしまいます。

これの回避方法をご教示ください。
よろしくお願いします。
0824nobodyさん2009/07/16(木) 15:54:53ID:???
>>823
該当ファイルの該当行の前後がどうなってるのか分からないとね。
0825nobodyさん2009/07/16(木) 16:17:48ID:???
>>823
s/_01//
0826nobodyさん2009/07/21(火) 03:06:34ID:uwULaVde
誘導により、プログラム板より移動していきました。

CGIを作っているのですが、<input type="file" name="file">の扱いがよくわかりません。
ファイルが入力されているかいないかの判別を、definedで判別できるかと思ったのですが、
$cgi = new CGI;
if( defined( $cgi->param( "cgi"))) {}
これだと、いつもifの中にはいってしまいます。
わたしが謝ったコードを書いているのでしょうか?
今は、
if( 4 < length( $cgi->param( "cgi")))
で処理していますが、通常はどのような条件分岐を行うのでしょうか?
(上記の条件分岐は、ファイルをzipファイルをアップロード対象としているため、拡張子の分のファイル名を4文字と考えています。
0827nobodyさん2009/07/21(火) 03:46:34ID:???
大体のブラウザではファイルが選択されていない場合、空文字が入りますのでdefinedでは常に真になります。
ベターなチェック方法は
if( defined( $cgi->upload( "cgi"))) {}
です。
この方法ならファイル選択をせずテキストボックスに適当な文字を入力されたケースにも対応できます(偽が返る)。
0828nobodyさん2009/07/21(火) 04:02:29ID:???
>>827
それだと2回も uplodad メソッドが呼ばれるからなんか無駄な気分

if( defined( my $file = $cgi->upload("cgi") ) ){
   print $file;
}

こんな感じのがよくね?
0829nobodyさん2009/07/22(水) 23:40:08ID:???
パスワード付きのzipファイルをPerlで解凍する方法を教えてください。
sample.zipのパスパードはtestです。ここまで書きました。

#!/usr/bin/perl

use strict;

my $zipfile = 'sample.zip';
my $pass = 'test';
0830nobodyさん2009/07/22(水) 23:52:11ID:???
>>829
my $unzip = "/usr/bin/unzip";
my $file = "$unzip -p -P $pass $zipfile |";
open my $fh, $file;
my @lines = <$fh>;
close $fh;

あとは@linesを書けばOK
0831nobodyさん2009/07/23(木) 00:27:53ID:???
それ、コマンド叩いてるだけじゃ...
0832nobodyさん2009/07/23(木) 01:02:41ID:???
自力でやる意味がどこにあるんだ
勉強の為だとしたら質問するんじゃない
0833nobodyさん2009/07/23(木) 08:23:53ID:???
コマンド叩くのが一番自然
0834nobodyさん2009/07/23(木) 10:26:53ID:???
Archive::Zip はencryptに対応してないってマニュアルに
明記されてるし、IO::Uncompress::Unzipははっきりとは
書いてないけどパスワード与えるインタフェースがなさげ
なのでこちらも多分対応してない。
0835nobodyさん2009/07/24(金) 22:10:31ID:???
> IO::Uncompress::Unzipははっきりとは
> 書いてないけどパスワード与えるインタフェースがなさげ
> なのでこちらも多分対応してない。

return $self->HeaderError("Encrypted content not supported")
if $gpFlag & (ZIP_GP_FLAG_ENCRYPTED_MASK|ZIP_GP_FLAG_STRONG_ENCRYPTED_MASK);

そうみたいだね。
0836nobodyさん2009/07/27(月) 11:10:44ID:???
my @bar = (scalar(@{$foo}) > $N) ? @{$foo}[0..($N-1)] : @{$foo};

というコードがあるんですが、何をやっているのかわからないので教えてください。
・@{$foo} は何ですか?$fooでも@fooでもないのでわかりません。
・scalar(@{$foo}) は結局何をしているんでしょうか?
0837nobodyさん2009/07/27(月) 11:30:52ID:???
> ・@{$foo} は何ですか?$fooでも@fooでもないのでわかりません。

$fooというリファレンスを、デリファレンスしてる

> ・scalar(@{$foo}) は結局何をしているんでしょうか?

配列の要素数を得てる
スカラーコンテキスト。

my $count = @array;
ってやると、コンテキストで要素数が得られるのと同じ。
0838nobodyさん2009/07/27(月) 11:42:52ID:???
ふと心配になったので、念のため

@{$foo}
と書くのも
@$foo
と書くのも一緒だから、覚えとくといいよ。むしろ後者で書く人の方が多い気がするから。
0839nobodyさん2009/07/27(月) 11:46:28ID:???
>>837-838
ありがとうございます。@{$foo}と@$fooは同じなんですね。
@{$foo}なんて書き方、初めてみたんですが、これどんなときにつかうんですか。@$fooだけでいいように思いました。
0840nobodyさん2009/07/27(月) 12:21:05ID:???
>>839
Perlはいろんな書き方出来る言語だから、そんなことでいちいち疑問に思ってたら前に進まないよ

というより、@{$foo}の方が丁寧な書き方っていう印象がある。
俺がそう思うということは、たぶん、オライリーのプログラミングPerlや初めてのPerlにはそう書いてあるはず。
0841nobodyさん2009/07/27(月) 12:35:35ID:???
>>839
あくまで @{...} が基本形。{} の中はリストリファレンスを返すものなら何でもいい。

@{ ['A'..'Z'] }
@{ $flag ? $bar : baz() }
@{ $foo[1] }
${ $quux }[1]
@{ $quux }[ 1..3 ]
@{"symbolic"} # 文字列ならシンボリックリファレンス
@{bareword} # トークンなら普通の変数

{} の中が単純なスカラー変数の場合は{}を*省略*できる (そして省略する人が多い)。

…と覚えた方が、後で悩まずに済むよ。
0842nobodyさん2009/07/27(月) 12:39:54ID:???
${foo}
0843nobodyさん2009/08/07(金) 10:07:16ID:???
バイナリに関してです。

my $head = 0x00000000; #空の4バイト確保
print (pack( "V", $head) . "\n"); #挙動がおかしいのでちょっと出力してみた

しっかり消滅してるしw
どうしればいいですか。

0844nobodyさん2009/08/07(金) 10:27:48ID:???
>>843
よくわからんがhoge.plにそのまま書き込んで実行してみた。

% perl hoge.pl |hex
0x00000000: 00 00 00 00 0a - @@@@J

ちゃんと4バイトの0が出てるので書いてるとおりの動作だな。

これで不満ならどうやって確かめて何がおかしいと思ったのか説明
してもらわないと。
0845nobodyさん2009/08/07(金) 10:42:44ID:???
すみません。
俺が勝手に使ってるテキストエディタ内の新タブに出力させてたら、エディタの問題だったみたいです。

プロンプト、ファイル出力、共に4バイトありました。
0846nobodyさん2009/08/12(水) 14:33:18ID:???
この↓ようなモジュールないですかね?

use CGI::Sendmail;

my %mail = (
To => 'you@2ch.net',
Cc => 'he@2ch.net',
Bcc => 'she@2ch.net',
From => 'me@2ch.net',
Name => "ひろゆき",
Subject => "こんにちは",
Body => <<EOL,
お元気ですか?
では、さようなら
EOL
"Sendmail-path" => "/usr/sbin/sendmail",
"Character-code" => "euc-jp",
);

if ( CGI::Sendmail->new(%mail)->send ) { print "送信完了" }
else { print "送信できませんでした" }
0847nobodyさん2009/08/12(水) 16:40:16ID:???
>>846
http://search.cpan.org/dist/MailTools/
http://search.cpan.org/~markov/MailTools-2.04/lib/Mail/Send.pod
http://search.cpan.org/search?m=module&q=Mail&s=1&n=100
0848nobodyさん2009/08/12(水) 18:05:46ID:XtZqM+tg
超低レベルな質問なんですが
フォームで受け取った$pass(値はhoge)と
同じくフォームで受け取った$idをファイル名に含んだファイルの二行目をfile()で読み込んで
$data[1](値はhoge)に代入して
if($pass==$data[1]){
print"値は同じです".$pass"==".$data[1];
}
else{
print"値は違います".$pass"==".$data[1];
}
を実行すると
「値は違います hoge==hoge」
と表示されるのですが「値は同じです」と表示させるにはどうしたらいいですか?
0849nobodyさん2009/08/12(水) 18:10:12ID:???
eq
0850nobodyさん2009/08/12(水) 18:11:08ID:???
それか改行入ってるとかありがち
0851nobodyさん2009/08/12(水) 18:14:13ID:XtZqM+tg
PHPスレと間違えましたすみませんでした
0852nobodyさん2009/08/12(水) 18:16:02ID:???
>>847
d
文字コード変換とMIME-base64?変換を自分でやれば使えそうです。
0853nobodyさん2009/08/13(木) 20:16:07ID:CNJ7rD2p
Perl勉強したときは
printfと書きましょうと習ったんだけど

printでも普通に使えるよね?
昔は使えなかったの?
0854nobodyさん2009/08/13(木) 20:43:12ID:???
>>853
>printfと書きましょうと習ったんだけど
まずそれがおかしい
0855nobodyさん2009/08/13(木) 21:09:54ID:???
誰からどう習ったんだよw
0856nobodyさん2009/08/13(木) 22:41:36ID:???
printfのfの意味わかってんの?
0857nobodyさん2009/08/13(木) 22:44:43ID:???
こういう場合は という限定的な意味で教えたが、
習った>>853は、全ての場合でと勝手に解釈したってことだろ

会話で生じる誤解としては良くある例
0858nobodyさん2009/08/14(金) 01:16:04ID:???
printf が使えるなんて知らなかった
print と sprintf だけ使ってた

びっくらこいた
0859nobodyさん2009/08/14(金) 01:26:28ID:???
人のソースみるとびっくりすること多いよね
こんな書き方できたのか!?って
0860nobodyさん2009/08/14(金) 02:07:28ID:???
糞質問失礼します

html表示するときのフォントをverdanaにしてるんですが
そうすると半角¥がバックスラッシュで表示されてうざいので

$hoge=~ s/\\/¥/ig;

としようと考えたのですが、すると今度は特定の日本語文字が
化けてしまいます

$hogeの中の英数記号だけを変換するにはどう書いたらよいでしょうか
08618602009/08/14(金) 02:12:28ID:???
あっ

$hoge=~ s/\\/&yen/ig;

です
0862nobodyさん2009/08/14(金) 02:53:12ID:???
use utf8
0863nobodyさん2009/08/14(金) 13:14:16ID:???
>>859

$hash{$1} = $2 while $str =~ /(.+):(.+)/g;

とかな
0864nobodyさん2009/08/14(金) 14:02:57ID:dh+Y7m4l
>>860
バイトコードで書く
\5Cの次にS-JISの2バイト目が来なかった場合のみ置換
0865nobodyさん2009/08/15(土) 03:34:02ID:???
>>864
正規表現で書くことはできますか?
すみません初心者で
0866nobodyさん2009/08/15(土) 03:55:15ID:???
>>865
http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
■ このスレッドは過去ログ倉庫に格納されています