Perlコーディング初心者質問スレ Part 54
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/02/10(土) 19:21:23ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >>2-10
前スレ http://pc10.2ch.net/test/read.cgi/php/1164519503/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0511510
2007/03/28(水) 22:51:27ID:???my @img = map {"$_\n"} (/<a href="(http://.*?)"/gis);
は
my @img = map {"$_\n"} (/<a href="(http:\/\/.*?)"/gis);
に訂正
偉そうに書いておいてエスケープ忘れた…
0512nobodyさん
2007/03/29(木) 00:42:31ID:???今後の参考にさせていただきます^^;
>>510
>最初の一個しか抽出できない
あ〜・・・だから抽出したリンク数が合わなかったんですね^^;
ありがとうございます。
これからmap関数?を調べて(初めて見るんで;)それから試してみようと思います
0513nobodyさん
2007/03/29(木) 12:49:04ID:???回答はもう結構です。お騒がせしました。
0514nobodyさん
2007/03/30(金) 04:04:21ID:???「表」というディレクトリに chdir して、
その中で opendir, readdir とかしたいのですが、うまくいきません。
うまくいく方法があればお願いします。
0515nobodyさん
2007/03/30(金) 06:41:02ID:???答えは忘れたけどw
0516nobodyさん
2007/03/30(金) 07:44:15ID:???0517nobodyさん
2007/03/30(金) 07:44:58ID:???0518nobodyさん
2007/03/30(金) 11:12:45ID:Ov/YkxL/{
my($query,$pair);
if($ENV{'REQUEST_METHOD'} eq 'POST'){
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
}
else{
$query = $ENV{'QUERY_STRING'};
}
foreach $pair(split(/&/,$query)){
my ($key,$value) = split(/=/,$pair);
$value =~ tr/+/ ;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
$FORM{$key} = $value;
}
}
というプログラムでhttp://www.e777.co.jp/perlcw/perlcw.htmlのサイトを使って文法チェックしたところ
Bareword found where operator expected at tmp.pl line 75, near "9a"
(Might be a runaway multi-line // string starting on line 74)
(Missing operator before a?)
Unquoted string "a" may clash with future reserved word at tmp.pl line 75.
syntax error at tmp.pl line 75, near "9a"
Unrecognized file test: -F at tmp.pl line 75.
が出てきました
正しいプログラムをコピペしても出てきたんですが
どこが違うか教えていただけないでしょうか??
0519nobodyさん
2007/03/30(金) 11:53:25ID:???スラッシュがぬけてる。
0520nobodyさん
2007/03/30(金) 12:14:19ID:???File::Find と Path::Class はうまく扱えませんね。
0521nobodyさん
2007/03/30(金) 12:17:30ID:???> 答えは忘れたけどw
Perlについての質問箱 30箱目
http://pc11.2ch.net/test/read.cgi/tech/1173880452/10
これもうまく動かない。
0522nobodyさん
2007/03/30(金) 20:49:19ID:???s/%([\da-f]{2})/chr hex $1/ieg;
s/%([\da-f]{2})/pack 'H2', $1/ieg;
どっちがはやいんだろ。
0523nobodyさん
2007/03/30(金) 21:28:36ID:???use Benchmark qw( timethese cmpthese ) ;
use CGI::Util qw(escape);
my $str = escape("Perlコーディング初心者質問スレ");
my $r = timethese( 100000, {
chrhexi => sub {
local $_ = $str;
s/%([\da-f]{2})/chr(hex($1))/ieg;
},
chrhex => sub {
local $_ = $str;
s/%([0-9A-Fa-f][0-9A-Fa-f])/chr(hex($1))/eg;
},
packh2i => sub {
local $_ = $str;
s/%([\da-f]{2})/pack('H2', $1)/ieg;
},
packh2 => sub {
local $_ = $str;
s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
},
} );
cmpthese($r);
0524nobodyさん
2007/03/30(金) 21:29:20ID:???chrhex: 8 wallclock secs ( 5.21 usr + 2.13 sys = 7.34 CPU) @ 13623.98/s (n=100000)
chrhexi: 7 wallclock secs ( 6.72 usr + 0.71 sys = 7.43 CPU) @ 13458.95/s (n=100000)
packh2: 8 wallclock secs ( 7.25 usr + 0.57 sys = 7.82 CPU) @ 12787.72/s (n=100000)
packh2i: 8 wallclock secs ( 7.54 usr + 0.61 sys = 8.15 CPU) @ 12269.94/s (n=100000)
Rate packh2i packh2 chrhexi chrhex
packh2i 12270/s -- -4% -9% -10%
packh2 12788/s 4% -- -5% -6%
chrhexi 13459/s 10% 5% -- -1%
chrhex 13624/s 11% 7% 1% --
perl -v
This is perl, v5.8.8 built for i386-linux-thread-multi
uname -a
Linux colinux.localdomain 2.6.11-co-0.6.4 #1 Mon Jun 19 05:36:13 UTC 2006 i686 i686 i386 GNU/Linux
0525518
2007/03/31(土) 06:34:34ID:x8D9Mjhzあっ本当ですね
でも文法でひっかかるのはその下の
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;という部分なんです
0526518
2007/03/31(土) 07:58:19ID:x8D9Mjhzエラーってでるとこが悪いとは限らないんですね
ありがとうございました
0527nobodyさん
2007/03/31(土) 11:00:31ID:???/がないから、s/の/までがtrだと思われてるわけだろ?
0528nobodyさん
2007/03/31(土) 11:01:12ID:???0529nobodyさん
2007/04/01(日) 07:53:31ID:uYKSgLT/�T if(not exists $FORM{'adminpass'}) {
printGatePage();
}
�U elsif($FORM{'adminpass'} eq $ADMINPASS) {
loadUserfile();
}
else {
printErrorPage("管理パスワードが違います。");
}
exit;
というプログラムでif文とelsif文について教えてください
�Tが真 つまり$FORM{'adminpass'}がなかった場合
�Tのプログラムが実行されて�Uのelsifのプログラムは実行されないはずなんですが
本によれば�Uのプログラムも実行されるんです
どういうことかと言いますと
�Tで真
→$FORM{'adminpass'}がないのでprintGatePage();で$FORM{'adminpass'}を存在させるようにする
→�Uのプログラムが実行
となっています
これは本当は�Tが真であれば�Uのプログラムは実行されず終わるんではないでしょうか?
よろしくおねがいします
0530nobodyさん
2007/04/01(日) 08:34:15ID:???0531nobodyさん
2007/04/01(日) 08:43:42ID:???# ローマ数字(I、II、III、…)は機種依存なので使うのをやめましょう
# 本によれば、というからには、本のタイトルや出版社など原典がわかるようにしましょう
%FORMについてなにも説明がありませんが、はフォームデータを解析・デコードして入って
いるのだと思います。で、Iが真ならばIIは評価されないというのはその通りです。
なお、「$FORM{'adminpass'}がなかった場合」というのは、%FORMに adminpassという
キーが存在しなかった場合、という意味です。普通パスワードの入力欄は、inputタグを
使うのであり、空欄のままsubmitを押しても、"adminpass="という文字列が送られて
きますので、それを%FORMに格納した場合、 adminpassというキーは存在しているので、
Iは常に偽となります。パスワードが空欄かどうかを判定するには、existsではなく
空文字列との比較($FORM{adminpass} eq "")をする必要があります。
0532529
2007/04/01(日) 09:36:29ID:uYKSgLT/自分で確かめたらelsifが実行されていたのでここで聞いています
>>531さん
詳しい説明ありがとうございます
ではなぜelsifのプログラムが実行されたのでしょうか??
プログラム全部を載せたいのですが改行で無理みたいなので…
sub printGatePage
{
print <<END;
Content-type: text/html; charset=$CHARSET
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><title>ゆーざーかんり</title></head>
<body>
<h1>ユーザー管理</h1>
<form action="$ENV{'SCRIPT_NAME'}" method="POST">
管理パスワード:<input type="password" name="adminpass"><br>
<input type="submit" value="決定">
</form>
</body>
</html>
END
}
本の名前は『10日でおぼえる Perl/CGI』著:高橋大吾です
この本の6章で認証プログラムを作っているのですが
0534nobodyさん
2007/04/01(日) 13:23:47ID:???・I → printGatePage() → II → loadUserfile()
という流れだと思い込んでるから、自分で確かめても if と elsif を両方通ってると思うだけで。
・何かのフォームからPOST → Iが真 → printGatePage() → exit # >>532のHTMLを吐いて一旦終了
・続いて「ゆーざーかんり」ページからPOST → 同じスクリプトが叩かれる → Iが偽 → II
…こう動いてるような気はしませんか。
0535529
2007/04/01(日) 15:33:33ID:uYKSgLT/本当に捨ててやりたいです
でも独学なのでこの本が一番分かりやすかったんで…
>>534さん
つまり
<form action="$ENV{'SCRIPT_NAME'}" method="POST">
でもう一度同じとこに戻っていることですよね??
ありがとうございました 大変助かりました
0536nobodyさん
2007/04/03(火) 16:20:52ID:7w7pj3iquse CGI;
foreach (&CGI::param) {
$FORM{$_} = &CGI::param($_) || undef; }
print &CGI::header(-charset=>'Shift_JIS'),
&CGI::start_html(-encoding => 'Shift_JIS');
if(not exists $FORM{'adminpass'}) {
&printGatePage; }
elsif($FORM{'adminpass'} eq 'aaaa') {
&loadUserfile; }
else {
&printErrorPage; }
sub printGatePage {
print <<END;
<h1>ユーザー管理</h1>
<form action="$ENV{'SCRIPT_NAME'}" method="POST">
管理パスワード:<input type="password" name="adminpass"><br>
<input type="submit" value="決定"></form></body></html>
END
exit(0); }
sub loadUserfile {
print 'loadUserfile</body></html>'; exit(0); }
sub printErrorPage {
print 'printErrorPage</body></html>'; exit(0); }
0537nobodyさん
2007/04/03(火) 20:04:01ID:Ex+wZs3rLocationヘッダをContent-type:text/htmlを出力した後に
使いたいのですが何か方法はないでしょうか。
0538nobodyさん
2007/04/03(火) 20:51:15ID:???<q cite="http://www.studyinghttp.net/cgi-bin/rfc.cgi?3875#Sec6.2.2">
スクリプトはいかなる他のヘッダフィールドも message-body も
返してはならない
</q>
0539nobodyさん
2007/04/03(火) 20:52:16ID:???これなんですが、標準入力をリダイレクションでファイルに変更すると
標準出力されません、なぜでしょうか?
0540539
2007/04/03(火) 20:53:22ID:???0541539
2007/04/03(火) 20:54:01ID:???http://homepage2.nifty.com/~~~/utf8_decode.pl
0542nobodyさん
2007/04/03(火) 21:07:53ID:???0544nobodyさん
2007/04/03(火) 21:22:35ID:???Perlについての質問箱 30箱目
http://pc11.2ch.net/test/read.cgi/tech/1173880452/163-178
0545537
2007/04/03(火) 21:22:59ID:???つまりはできないということなのでしょうか?
もしできないのであればCGIにてhtmlを出力した後に
別ページを表示することはMETAタグを使わずには打
開策すらないのでしょうか…。
0549nobodyさん
2007/04/04(水) 09:32:06ID:???0550nobodyさん
2007/04/04(水) 14:01:56ID:???6.2.4. Client Redirect Response with Document
にできるのかな。
0551539
2007/04/04(水) 20:34:07ID:???D:\htdocs\awstats\utf8_decode.pl < T:\Logs\a.txt
ではダメで、
perl D:\htdocs\awstats\utf8_decode.pl < T:\Logs\a.txt
ではOKです。
先頭のperlを書きたくなければ、下記らしいです。
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
\Policies\Explorer
にInheritConsoleHandlesというDWord値を作り1をセット
0552nobodyさん
2007/04/04(水) 21:42:58ID:???0553nobodyさん
2007/04/04(水) 23:16:32ID:???とりあえず、正常動作おめ
0554nobodyさん
2007/04/05(木) 00:54:13ID:???0556nobodyさん
2007/04/05(木) 11:31:17ID:???配送エラーのとき、$from_mailに返信させたいのですができません。
$from_mail="[email protected]"; # $from_mailは存在します。
$to_mail="[email protected]"; # $to_mailは存在しません。(hoge2.jpは存在しないものとします。)
open (MAIL,"| $mail_pass -t") || &error("posfixエラー");
# print MAIL "Error-To: $from_mail\n"; # Error-To:ヘッダがあっても無くても返ってきません
print MAIL "From: $from_mail\n";
print MAIL "To: $to_mail \n";
これを実行したところ、エラーの連絡が$from_mailに送信されません。
上記と同じメールの内容で、outlookを使用して、手作業で送信すると
件名:failure notice のエラーのメールが、返ってきました。
・posfixの設定で、足りないものあるのでしょうか?
・perlのプログラミングで、足らないことがあるのでしょうか?
よろしくお願いします。
0557nobodyさん
2007/04/05(木) 11:42:22ID:???> $from_mail="[email protected]"; # $from_mailは存在します。
> $to_mail="[email protected]"; # $to_mailは存在しません。(hoge2.jpは存在しないものとします。)
メール送信以前の問題なので$from_mail,$to_mailの値をチェックすることを
お勧めします。
ヒント: 文字列リテラルへの(配列)変数の埋め込み
0558nobodyさん
2007/04/05(木) 11:43:28ID:???シングルクォートで
$from_mail = '[email protected]';
$to_mail = '[email protected]';
としてやればおk
# hoge.jpは実在するドメインだから、こういうときの例にはexample.comを使おうな
0559nobodyさん
2007/04/05(木) 12:29:53ID:???>>558
お返事ありがとうございます。
シングルクォートに変更し、存在するメールには、
送信できること確認できました。
[cgi]
$from_mail = '[email protected]';
にしてみましたが、配信エラーの通知がされませんでした。
また、ドメイン検索で存在しないことを確認したドメインを
指定してもだめでした。
[outlook]
手作業で送信したとき、配信エラーが返って来るか確認してみました。
存在しないことを確認したドメインで、outlookでyahooや他のメールサーバから
送信すると戻ってきましたが、'[email protected]'は、戻ってきませんでした。
[考察]
ドメイン検索で存在しないことを確認したドメインで
outlookから送信すると、普通にエラーが帰ってきました。
cgiだと帰ってきません。cgiでなにかおかしいんじゃないかと思ってます。
open (MAIL,"| $mail_pass -t")の-tオプションが無いと
メール送信できなかったので付けてます。
思い当たることなどありますでしょうか。
よろしくお願いします。
0560nobodyさん
2007/04/05(木) 13:09:03ID:???まったく無関係で、送信プログラムにsendmail(postfixのsendmail互換コマンド)
を使っているならばプログラムを実行したユーザのアドレスになるのがデフォルトで、
変更したい場合は-fオプションで指定する必要がある。
open (MAIL,"| $mail_pass -t -f $from_mail")
0561nobodyさん
2007/04/05(木) 16:00:15ID:???丁寧な解説ありがとうございます。
open (MAIL,"| $mail_pass -t -f $from_mail")
にしてみましたが、配送エラーのメール送信されませんでした。
Envelope-From:ヘッダー、を試しましたがエラーは返信されませんでした。
cgiじゃなくて、postfixの設定ファイル/etc/postfix/main.cf
の設定がおかしい可能性高いでしょうか?
/etc/aliasesの設定がおかしいのかと思いまして、
FROM:ヘッダーを除いて、存在するメールを指定すると、
送信者はApache表示で$from_mailは、きちんと指定されていました。
$from_mailは、レンタルサーバのメールアドレスですが、
postfixサーバから普通に送信できるので、大丈夫だと思うのですが。
ん〜。難しいです。
0562nobodyさん
2007/04/05(木) 16:40:06ID:???postfixのログを見られるなら見るのが一番だが、レン鯖などで
見られないなら、まず自分に送ってみて届いたメールが思い通りに
なっているか確認するのが基本だな。
envelope fromはたいていreturn-pathというヘッダに保存されるので
それが自分が設定したつもりのものか確認するといい。
0563nobodyさん
2007/04/05(木) 16:56:54ID:???自宅サーバで、勉強してます。
違うcgiの過去の受信メール見てみるとReturn-Path:があるときと、
無いときがありました。ということは、cgiがおかしいのかもです。
どうもありがとうございました。
原因がわかりましたら、報告いたします。
0564nobodyさん
2007/04/05(木) 18:06:22ID:2CVq1dn3で、ググった結果jcodeg.plを知り、これをアップロードして、半角文字のみで
書き込みのテストをしたらちゃんと半角で表示されました。
とここまでは良かったのですが、文章に全角と半角文字を混ぜた状態で
投稿すると、投稿後の記事内の文章が全て全角で表示されてしまいます。
入力した通りに投稿するには、jcodeg.plのドコを変更したらよいのでしょうか?
0565nobodyさん
2007/04/05(木) 18:58:00ID:???0566nobodyさん
2007/04/05(木) 18:59:13ID:???0568nobodyさん
2007/04/06(金) 07:42:58ID:???port25は開けていました。
試しにコマンドラインで、[email protected]に送信してみました。
--------------------------
# /usr/sbin/sendmail -t
Envelope-From:"普段のメール"
To:[email protected]
.
--------------------------
で送信しましたが、配送エラーのメール返って来ませんでした。
・コマンドのオプション
・Envelope-From:"普段のメール"で、何かあるのか。
いろんなメール指定してみましたがダメでした。
・ヘッダーオプションで他に何か必要か
ぐらいと思うのですが、どのあたりがおかしいでしょうか。
これが解決したら、perlにそのまま反映すれば
配送エラー返ってくる気がするんですが。。。
よろしくお願いします。
0569nobodyさん
2007/04/06(金) 09:53:13ID:???Envelope-From: などというヘッダはない。
# /usr/sbin/sendmail -t [email protected]
To: [email protected]
本文…
.
#
のように指定します。-fの直後に指定するのがenvelopeアドレスです。
上記の場合、envelopeアドレスに何かメールを戻したいなら、Toヘッダのアドレスを
実際に存在しないアドレスとか、ドメインにしてみないと、Toのアドレスに普通にメールが
届いて終わるので注意。
さもなくば、telnet localhost 25 でMTAと直接交信してみるとか。
0570nobodyさん
2007/04/06(金) 12:41:32ID:???お返事ありがとうございます。
#/usr/sbin/sendmail -t -f<存在するメール>
To:[email protected]
エラーメール戻ってきませんでした。
メールが送信できたのか、送信できていないのかも区別が付きません。orz
DNSの設定かと思い検索してます。
スレ違いになってきてしまいまい、申し訳ないです。
maillogは、下記の通りです。
Apr 6 12:26:04 localhost postfix/pickup[20462]: 4CCACC04193: uid=48 from=<存在するメール>
Apr 6 12:26:04 localhost postfix/cleanup[20527]: 4CCACC04193: message-id=<・・・@mail.example.com>
Apr 6 12:26:04 localhost postfix/qmgr[17310]: 4CCACC04193: from=<存在するメール>, size=301, nrcpt=1 (queue active)
Apr 6 12:26:04 localhost postfix/qmgr[17310]: 4CCACC04193: to=<[email protected]>, relay=none, delay=0,
status=deferred (delivery temporarily suspended: Host or domain name not found. Name service error for name=example.jp type=MX:
Host not found, try again)
0571570
2007/04/06(金) 19:26:09ID:???経過ですが、存在しないメールアドレスに送信した場合、
delivery temporarily suspended: Host or domain name not found.
Name service error for name=example.jp type=MX: Host not found, try again)
このパターンになるようです。
やっぱり、エラーのメールが自分に帰ってこないと不便ですよね。
tailf maillogで、眺めていたら突然、上記のパターンでログが大量に流れました。
昔送信したでたらめなメールで、しかも、try againっていうぐらいなので、
送信されずに、再送待ちになってるみたいです。
ttp://www.postfix-jp.info/trans-2.0/jhtml/faq.html
あとは、再送待ちじゃなくて、配送エラーが送信すればいいんですね。
再送のメールはどこにあるのとか、いろいろ、つまずいてます。
あとちょっとのような気がしてきました。
丁寧にレスありがとうございました。
0572570
2007/04/07(土) 04:16:46ID:???で解決しました。
ログを見ることと、検索能力が少しアップしました。
ありがとうございました。
0573nobodyさん
2007/04/07(土) 18:44:41ID:MSfJ44Rvよいですか?
Linuxです。
0574nobodyさん
2007/04/07(土) 18:50:58ID:???とか置いてそこからlwpなりで適当に
取ってくればいいんじゃないすか
0575573
2007/04/07(土) 19:10:45ID:MSfJ44RvPerlでグローバルIPを取得する関数がないとすると、
シェルで組んだ方がよさそうですね。。
ありがとうございました
0576nobodyさん
2007/04/07(土) 19:31:41ID:???とか勝手なこと言ってみる
0577nobodyさん
2007/04/07(土) 19:56:03ID:???127.0.0.1みたいなのを取り除いて残ったもの」とすればよさそうだが、
これを複数もつホストもあるだろうなぁ。
0578nobodyさん
2007/04/08(日) 03:05:36ID:???ルータやファイアウォールがあってNATされているのかで話が違ってくる。
後者の環境の方が多いんじゃないか。
だとすると、外部のサーバにアクセスしてそのサーバ側から教えてもらうとか。
あるいは、ルータの管理画面を自力で取得してパースするとかね。
0579nobodyさん
2007/04/08(日) 04:54:35ID:???場合によってはこんな方法も
use Socket;
print inet_ntoa(scalar gethostbyname($ENV{HTTP_HOST}));
0580nobodyさん
2007/04/08(日) 06:44:51ID:???俺はDDNSの更新する時ルータに教えてもらってる
0581nobodyさん
2007/04/08(日) 09:30:52ID:???http://pc11.2ch.net/test/read.cgi/tech/1112553783/
本人か?
0582nobodyさん
2007/04/08(日) 09:31:57ID:???0583nobodyさん
2007/04/08(日) 10:08:34ID:???そこから「10」という数字の列だけを参照するには
どうすればいいのでしょうか?
index関数だと100や210など10が含まれていたら
抜き出してしまうので悩んでいます。
検索で調べる場合の検索用語でもかまいませんので、アドバイスお願いしますorz
0584nobodyさん
2007/04/08(日) 10:54:12ID:???詳しく日本語で
0585エスパー
2007/04/08(日) 11:35:44ID:???をエスパー日本語訳してみる。
こんな内容のファイルがあります。
--------
210 hoge
10 foo
100 guge
10 zoo
123 boo
--------
この場合 "10 foo" と "10 zoo" の行だけを抜き出したいのですが、index関数だと
210、100 といった行も含まれてしまいます。
どしたらいいの? お前らとっとと教えろ。
0586583
2007/04/08(日) 12:42:51ID:???$xx =~ /^$yy$/ でいけました。お手数かけました、ごめんなさい。
0587nobodyさん
2007/04/08(日) 12:58:04ID:???だがな、それなら eq で比較するだけでもよさそうだな。
0588nobodyさん
2007/04/10(火) 04:15:40ID:???> 過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
これ見ようとするとリダイレクトされて過去ログ閲覧不可なのね。
> 現在、mirrorhenkan/perl/ はFREESPACE利用規約の禁止事項に
> 抵触しているためアクセスを制限しております。
0589nobodyさん
2007/04/11(水) 01:18:30ID:???open(IN, $file);
@list = <IN>;
------------------------------------
#�Awhileで一行ずつ読み込んで処理
open(IN, $dfile);
while ( $line = <IN >) {
#$lineを区切り文字を分割して、何か処理
}
何十Mというサイズの大きいCSVファイルを扱うときが前提です。
�@だと配列に格納するみたいですが、メモリの消費は大変でしょうか?
�Aのほうがよいでしょうか?
0590nobodyさん
2007/04/11(水) 01:35:16ID:???(1)の方はCSVが1GBならメモリも1GB以上使うわけだが、(2)は
CSVのサイズが1MBでも10GBでも変わらない。
ってことはわかってるわけだな。
答えわかってんじゃん。
しかし、割り切って(1)の方法を使う場合もあるよ。
書き捨て的なスクリプトとかだと。
っちゅうか、丸数字やめね?
0591nobodyさん
2007/04/11(水) 03:38:11ID:???パソコンの仕組みとperlの勉強を、はじめたばかりで、
メモリの動きとか、あまり考えたこと無かったので、
ちょっと自信がありませんでした。^^;
どうもありがとうございました。
0592nobodyさん
2007/04/11(水) 04:20:00ID:???そんなコンパクトに収まるかよw
0593nobodyさん
2007/04/11(水) 10:31:55ID:???少しお尋ねします。
例えば
perl -pi.bak -e "tr/A-Z/a-z/"*.html
とか便利ですよね?
これを.plとして使いたいのですが無理なのでしょうか?
コマンドラインから打ち込むしか手がないのでしょうか?
0594nobodyさん
2007/04/11(水) 10:41:24ID:???http://pc11.2ch.net/test/read.cgi/tech/1173880452/235
0595nobodyさん
2007/04/11(水) 10:41:25ID:???0596nobodyさん
2007/04/11(水) 10:45:21ID:???こちらに変えました。
申し訳ない。
0597nobodyさん
2007/04/13(金) 14:21:28ID:ZxZihQHU0598nobodyさん
2007/04/13(金) 14:45:10ID:???詳しくはperlvar(1)の
Technical Note on the Syntax of Variable Names
を読め。
0600nobodyさん
2007/04/13(金) 17:45:43ID:???$::HOGE = 1;とかもだめ?
後はこんなの書いといてプログラムの頭でuseするとか
package Global;
use strict;
use warnings;
use base qw(Exporter);
our @EXPORT = qw($BAKA $AHO $SHINE);
our $BAKA = 1;
our $AHO = 'a';
our $SHINE = 'A';
push(@UNIVARSAL::ISA,__PACKAGE__);
package TEST1;
use strict;
use warnings;
printf "%s::BAKA=%s\n",__PACKAGE__,$BAKA++;
printf "%s::AHO=%s\n",__PACKAGE__,$AHO++;
printf "%s::SHINE=%s\n",__PACKAGE__,$SHINE++;
package TEST2;
use strict;
use warnings;
printf "%s::BAKA=%s\n",__PACKAGE__,$BAKA++;
printf "%s::AHO=%s\n",__PACKAGE__,$AHO++;
printf "%s::SHINE=%s\n",__PACKAGE__,$SHINE++;
0601nobodyさん
2007/04/13(金) 18:12:42ID:???importするのが普通の方法なので、あまり変なことをせず従っておいたほうが
なにかといいと思われ。
0602597
2007/04/13(金) 20:19:19ID:ZxZihQHUありがとうございます。試してみます。
何に使うってわけじゃなくて、そういうことが出来るのなら知りたいなと思いまして。有難う御座いました。
>>599
顔が見えないからってそういう言い方はしないほうがいいでしょうね。
0603nobodyさん
2007/04/14(土) 04:03:04ID:???検索機能をつけて、検索語句を$wordとし、
$dataに一致するものがあれば、って形でやってます。
if($data =~ /\Q$word\E/){
すると、「[」で「ー」もヒットしてしまったりします。
これは「ー」に「[」のコードが含まれているからだと思うのですが、それを除外する方法はどうしたらよいでしょうか?
0604nobodyさん
2007/04/14(土) 04:08:26ID:???0605nobodyさん
2007/04/14(土) 04:17:21ID:???なるほどutf8という方式だとコードの重複がないんですね
検索語句と、検索対象をutf8に一旦エンコしてから、ってやり方にしてみます。
有難う御座いました。
0606nobodyさん
2007/04/14(土) 05:37:58ID:???みたいな感じに簡単にできると思ってましたが、複雑ですね。
一時的に対象の$変数をutfに変換して戻す簡単な方法は御座いませんでしょうか?
調べた限り、utfでスクリプトを書くことが前提の記事ばかり出てきてしまいます。
0607nobodyさん
2007/04/14(土) 10:35:22ID:???0608nobodyさん
2007/04/14(土) 11:07:17ID:???my %hash = ();
$hash{a}{b}{c}{d} = 'test';
↑の場合だと自動的に {b}{c}{d}の部分が無いのに自動的に作られてしまいます。こういうのを防ぎたいのですが・・
0609nobodyさん
2007/04/14(土) 11:22:25ID:???既にありそうだけど。
0610nobodyさん
2007/04/14(土) 12:46:48ID:???http://pc11.2ch.net/test/read.cgi/tech/1173880452/10
■ このスレッドは過去ログ倉庫に格納されています