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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/09/16(日) 19:49:43ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

お勧めサイトは >2 以降

前スレ ttp://pc11.2ch.net/test/read.cgi/php/1180492441/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0577nobodyさん2007/11/25(日) 16:07:12ID:???
>>576
content-typeの前に書いてみ
0578nobodyさん2007/11/25(日) 16:35:27ID:???
>>577
出来ました。
ですが書き込みがされなくなりました・・・。
0579nobodyさん2007/11/25(日) 17:55:01ID:???
そもそもがどんな仕組み何だかわかんねーと答えようがねーよw
こっちはエスパーじゃないんだからさw
0580nobodyさん2007/11/25(日) 18:30:55ID:???
>>579
http://www.uploda.org/uporg1129660.txt
これなんですが上手く動作しなくて・・・。
0581nobodyさん2007/11/25(日) 18:47:07ID:???
一番最初に

print "Content-type: text/html\n\n"; # データ形式

を書いてるのが不味いような気がするのは気のせいかな。
0582nobodyさん2007/11/25(日) 18:47:57ID:???
>>581
他のところに置いたりすると上手く動作しないんです・・・。
0583nobodyさん2007/11/25(日) 18:50:17ID:???
あと、$locationって変数、どこで使ってるんだろ。
0584nobodyさん2007/11/25(日) 18:55:24ID:???
勉強し直しておいで。
0585nobodyさん2007/11/25(日) 18:55:39ID:???
あ、それは書き忘れましたがKENTWEBさんのところのをちょっと借りたやつです。
# リロード
if ($location) {
if ($ENV{'PERLXS'} eq "PerlIS") {
print "HTTP/1.0 302 Temporary Redirection\r\n";
print "Content-type: text/html\n";
}
print "Location: $location?\n\n";
exit;
}
これがサブルーチンのwriteの最後に置いてました。
0586nobodyさん2007/11/25(日) 18:56:09ID:???
とりあえずヒントは、
・Location: はHTTPヘッダに出力する
・ヘッダとボディの区切りは空行で示す
0587nobodyさん2007/11/25(日) 19:08:15ID:???
前も書いたけど、kentwebのってデリミタに<>使うの好きだねえ。データがでかくなってくると、
2バイトも勿体無いと思う。
0588nobodyさん2007/11/25(日) 19:10:08ID:???
>586
難しそうですが頑張ってみます。
0589nobodyさん2007/11/25(日) 21:12:48ID:???
2バイトさえ気になるような人はデミリタに何使うんだろ。
0590nobodyさん2007/11/25(日) 21:13:37ID:???
デリミタねw
0591nobodyさん2007/11/25(日) 21:51:10ID:???
タブ?
0592nobodyさん2007/11/25(日) 21:57:24ID:???
俺はタブ。excelにも貼るだけで、データやりとりできるし。
0593nobodyさん2007/11/26(月) 01:21:50ID:???
俺は適当に,にしてた
0594nobodyさん2007/11/26(月) 09:34:29ID:???
>>593
CGIでHTMLを吐く前提なら、 , を入力されると面倒なことになるんだよな。
< > なら < > ってできてしまうからいいんだけど。
0595nobodyさん2007/11/26(月) 09:35:03ID:???
↑失礼
< > なら &lt; &gt; ってできてしまうからいいんだけど。
0596nobodyさん2007/11/26(月) 17:00:07ID:???
, は&#44;でいいんじゃね?俺もタブ使うけど
0597nobodyさん2007/11/26(月) 19:49:54ID:???
ちょいと質問を。

今ソフトバンククリエイティブのCGI/perl ハンドブック第3版
のCGIサンプルで掲示板を作ったのですが掲示板にメッセージが書き込まれなかったらエラーを出そうと
思って四苦八苦しているんですがperl6はよく分からなく苦戦しています。
誰かこの本を持っていて、分かる方がいればご教授お願いします。
0598nobodyさん2007/11/26(月) 20:23:48ID:???
>>597
その本持ってないから知らないけど、本当にperl6ですか?

#このスレはご教授ってOKなんだっけ?

0599nobodyさん2007/11/26(月) 21:19:36ID:???
こんばんは。
LWPで、現在取得しているURLの情報を参照する方法ってあるでしょうか。

ttp://www.xxx.ne.jp

というURLを取得したときに、いくつかリダイレクトされて、

ttp://www.xxx.ne.jp/cgi-bin/test.cgi?id=aaaa&pass=bbbb

こんな感じのURLになってるのですが、この ? 以降の情報を取得したいのです。
$responoser->base
では、 ? より前のURLしか返してくれません。
教えてください。
0600nobodyさん2007/11/26(月) 23:26:29ID:???
>>598
その使い方も間違ってない以上、突っ込む方が野暮or空気が読めないでおk
0601nobodyさん2007/11/27(火) 03:23:29ID:???
質問します

他のサーバー上のテキストファイルを読み込ませたいのですがopen関数ではできないんでしょうか?
0602nobodyさん2007/11/27(火) 03:33:26ID:???
できない
0603nobodyさん2007/11/27(火) 03:49:49ID:???
>>601
あんたすげーな
0604nobodyさん2007/11/27(火) 06:16:45ID:???
童貞で40歳まで行ったら妖精になれるよりすごい発想
0605nobodyさん2007/11/27(火) 07:36:33ID:???
ただ、PHPでは同じような方法でできるこの不思議。
0606nobodyさん2007/11/27(火) 08:12:36ID:???
だれか599についての回答を・・・
0607nobodyさん2007/11/27(火) 09:01:18ID:???
>>599=606
リダイレクトされるためには適切なHTTPヘッダが返っているはずだからそれ調べる。
0608nobodyさん2007/11/27(火) 11:02:47ID:???
>>599 >>606
うちの環境では、3回リダイレクトを経て、?&引数がもっさりついたurlに飛ばしても、
print $response->base();
で、引数(’?’以降%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8Aとか)がついた
URLを表示できたけど・・・。

ActivePerl 5.8.8-build822(XPsp2)
LWP/5.808
0609nobodyさん2007/11/28(水) 05:14:00ID:???
ブログの自動投稿プログラムを作りたいと思ってるんですが、大まかな仕組みも分からず困っています。
どなたかご教授願えませんか?
ちなみに、用途はバーチャルな人間の日記を作りたいと思っています。

日記を出力するアルゴリズムは別に用意しますので、
それをブログの投稿画面に自動でログインして書き込むようにしたいのです。

ローカルからでも構わないのですが、
できれば安いレンタルサーバーから行えれば良いなと思ってます。

検索で『自動投稿』としたらたくさん見つかったのですが、どれもアフィリエイター用のもので、
結構値段も高いですし、記事を予め用意しないとダメなので私がしたいようには出来そうにありません。
06106092007/11/28(水) 05:16:24ID:onMmaiK+
よろしくお願い申し上げます。m(__)m
0611nobodyさん2007/11/28(水) 05:24:30ID:???
ひょっとしたら、atom っていうのを勉強したら道が開けるんですか?
0612nobodyさん2007/11/28(水) 05:26:27ID:???
日記を出力するアルゴリズム ←これがきになる
0613nobodyさん2007/11/28(水) 09:39:10ID:???
日記を出力するアルゴリズム ←ってのはもしかして勝手に日記を書いてくれるプログラムだろうか
0614nobodyさん2007/11/28(水) 09:48:03ID:???
>>609
△▲ WebProg 初心者の質問 Part16 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1187729623/
0615nobodyさん2007/11/28(水) 13:29:43ID:???
日記を出力するアルゴリズムを書ける人ならそれぐらい自分でできそうだけど。
荒らしスクリプトにするつもりじゃないなら、その日記を出力するアルゴリズムの
元ネタの場所を公開すれば信用が得られるかも。
0616nobodyさん2007/11/29(木) 03:01:28ID:???
そういうのは荒らしやスパムに使われる可能性が高いから、自分でやりな。
06176092007/11/29(木) 18:18:55ID:fn44RAXr
>>612-615
日記のアルゴリズムが完成したわけではありません
ただそっちは、大したものじゃないにしても何とかなりそうなんです。
一方、自動投稿の方は何から手を付けていいのかすら分からない状態でしたので質問させてもらいました

>>616
やっぱりそうですか

わかりました。何とか頑張ってみます

因みにスパム行為をするつもりは毛頭ありませんが、確かに見ようによってはそう映る可能性も否定できないですね。

あくまでも普通の人間っぽい挙動にしたいと思っているので、投稿の数も一日で多くて3通程度、少ないときは三日ぐらい更新しないような動きを考えてました。

とにかく自分で何とかしないとダメみたいですね

ご迷惑おかけ致しました
0618nobodyさん2007/11/29(木) 18:50:54ID:???
http://search.cpan.org/perldoc?XML::Atom::Client
0619nobodyさん2007/11/29(木) 18:56:46ID:???
>>617
う〜む、どう考えてもやっぱりその
日記を出力するアルゴリズム
ってのが、自動投稿するスクリプトより遥かに高レベルのような気がするが・・・・。

まあいいや、ヒントだけ。
WWW::Mechanize オススメ。
内容や使い方は、自分で調べてちょ。
06206092007/11/30(金) 00:45:15ID:???
>>618,619
ありがとうございました。
参考にさせていただきます。

今いろいろ資料を調べたり、さっき図書館で借りてきた
Webクライアントプログラミングって言う本(めちゃふるいですがw)
を読んだりしてます。

HTTP通信などは一度もやったことがないので、
LWPあたりから勉強したほうがよさそうな、
そんな気がしてる今日この頃。

AtomとかXML-RPCとかの資料にまではたどり着けたのですが、
そこに平然と書かれている GETだのPOSTだのという表現についていけない状況です。
あれを全部 perl のコードに解釈するための知識がないのです。

というわけで、だいぶ時間掛かりそうですが、
こつこつやっていこうかなと。

もう少し進歩して、またわからないことがあったら、
ここか>>614さんが教えてくれたスレにでも出没いたします。

では、ごきげんよう皆様。
06216092007/11/30(金) 03:34:24ID:???
(´・ω・`) ノシ やっとこさ、livedoor から餌を頂戴できました

なんだか、嬉しくて涙が出てきた 。・+゜(つД`)゜+・。

みんなありがと
06226092007/11/30(金) 03:51:57ID:???
>>619 Mechanize というのを完全に誤解してたようです
XML-RPCとかAtomPubなどとはまったく違うんですね。

なんというか、禁断の・・・いや、貴重な情報ありがとうございました。
0623nobodyさん2007/11/30(金) 12:46:37ID:???
フォームメールに入力された内容を半角→全角に変換するプログラムがわかりません。

$str = '$mystr';
$kigou ='@!"#$%&\'()=-^\\|{}:;+*?_/<>';

require 'jcode.pl';

if ($FORM{'namae'} ne ''){
$mystr = $FORM{'namae'};
&hankaku;
}

sub hankaku{
&Jcode'convert(*str,'euc');
if($str =~ /^[0-9]{7,11}$/){
&jcode'tr(*str,'0-9A-Za-z','0-9A-Za-z');
}elsif ($str =~ /\x8E/) {
&jcode'h2z_euc(*str);
}else ($str =~ /$kigou/){
&jcode'tr(*str,'@!”#$%&’()=−^¥|{}:;+*?_/<>','@!"#$%&\'()=-^\\|{}:;+*?_/<>');
}
&Jcode'convert(*str,'sjis');
$str = $value;
exit 0;
}

1度eucに変換してからと考えたんですが。
0624nobodyさん2007/11/30(金) 13:06:38ID:???
>>623
Unicode::Japanese
0625nobodyさん2007/11/30(金) 13:27:37ID:7wito75u
2007/11/30-2007/12/01,00-24,[動作させる値]

のようなdatファイルを下記でブランチさせると、指定範囲外だと判定されてしまうようなのです。
改善するにはどこを直せば良いでしょうか・・・最後の日付部分の比較だけで判定されてる・・?
localtime(time)取得やDAT読み込みは大丈夫っぽいです。

foreach $sdat(@set){
next, if $sdat eq "\n";
@sdat = split(/,/,$sdat);
@ddat = split(/\-/,$sdat[0]);
@d1dat = split(/\//,$ddat[0]);
@d2dat = split(/\//,$ddat[1]);
@tdat = split(/\-/,$sdat[1]);
if(
($ddat[1] eq '' || ($ddat[1] ne '' && $d2dat[0] eq '*' || $d2dat[0] >= $year))
&&($ddat[1] eq '' || ($ddat[1] ne '' && $d2dat[1] eq '*' || $d2dat[1] >= $mon))
&&($ddat[1] eq '' || ($ddat[1] ne '' && $d2dat[2] eq '*' || $d2dat[2] >= $mday))
&&($d1dat[0] eq '*' || ($ddat[1] ne '' && $d1dat[0] <= $year) || ($ddat[1] eq '' && $d1dat[0] == $year))
&&($d1dat[1] eq '*' || ($ddat[1] ne '' && $d1dat[1] <= $mon) || ($ddat[1] eq '' && $d1dat[1] == $mon))
&&($d1dat[2] eq '*' || ($ddat[1] ne '' && $d1dat[2] <= $mday) || ($ddat[1] eq '' && $d1dat[2] == $mday))
&&($sdat[1] eq '*' || ($tdat[0] <= $hour && $hour <= $tdat[1]))
){
chomp $sdat;
$url = $sdat[2];
last;
}
}
0626nobodyさん2007/11/30(金) 13:32:25ID:???
ひどすぎわろた
0627nobodyさん2007/11/30(金) 15:56:59ID:7wito75u
失礼。自己解決しました。
0628nobodyさん2007/12/10(月) 07:32:09ID:aPvXjzqK
Perl5.x+CGIです。

現在、複数のプロセスから、同じデータにアクセス(読み書き)したいと考えています。
異なるプロセス間で共有される静的な変数、というようなイメージです。

外部ファイルやデータベースなどを経由する方法以外で、
このような処理を実現するにはどのようにすればよいか、ご存知の方がいましたらお願いします。

やはりmod_perlが適当でしょうか。
0629nobodyさん2007/12/10(月) 11:08:15ID:???
静的な変数?

ていうかそれプロセスが落ちたらデータは消えていいってこと?
素直にファイルなりDBなり使えばいいとおもうんだけど、それができない理由は?
0630nobodyさん2007/12/10(月) 11:47:45ID:???
質問の意味がわからないけど
mmapやmemcacheみたいなの?
0631nobodyさん2007/12/10(月) 13:16:59ID:???
読み書きするのに静的ってナンダロ

スレッド使うMPM+mod_perlで:shared使うとか
shared memory使うとかそういう話かな?

質問の仕方が初心者臭いし素直にDB使っとけって気がする。
06326282007/12/10(月) 20:47:52ID:???
>629-631
ありがとうございます。遅くなってすみません。
ご想像通り初心者です。初めて触ったのは何年も前ですが、仕事とか全然関係ないので。


Perl ←―→ 外部ファイル、DB
    ↑
ここのコストが凄く重いので、可能な限りアクセスを減らしたいと考えています。
Perl側で保持しておけば多少は減るかなあと。
要は、「キャッシュ」のようなものだと思っていただければ。


>629
>プロセスが落ちたら
はい、構いません。もう一度、データ本体から取得するだけなので。

>631
>読み書きするのに静的
「静的変数」と「定数」は全くの別物という認識だったのですが、
もしかするとPerlの世界だと違うのかもしれません。少し調べてきます。

>630-631
>mmap、memcache、shared
軽く調べてみただけですが、そういうことです。勘違いしてるかもしれませんが。
この辺のキーワードを参考に、深く見てみようと思います。
0633nobodyさん2007/12/12(水) 13:49:47ID:uWSb2hJm
すみません質問です。
複数画像ファイルが入っている特定フォルダから更新日が一番最新のファイルを
探して表示させたいのですが出来ますでしょうか?
尚、ファイル形式は不定です。
教えてください。
宜しくお願いします。
0634nobodyさん2007/12/12(水) 13:58:00ID:???
(stat 'filename')[9]
0635nobodyさん2007/12/12(水) 16:11:40ID:???
質問です。
aaa.htmというファイルを読み込んで、その中に書かれている変数を変数展開したいと思ったのですがそう簡単にはいきませんでした。
print qq|$_|;
とすれば変数展開されるかなと思いましたがそれもだめ。
置換を使えば簡単なのですが、置換以外の方法がありましたら教えてください。

--------aaa.htmの内容--------
<html>
<body>
$a
</body>
</html>

--------ソース--------
$a = 'aaa';

open(IN, "< aaa.htm");
@html = <IN>;
close(IN);

print "Content-type: text/html; charset=Shift_JIS\n\n";
foreach (@html)
{
print $_;
}
0636nobodyさん2007/12/12(水) 16:27:53ID:???
HTML::Templateでも使っとけ
06376352007/12/12(水) 16:52:55ID:???
evalをつかったらなんとかなりそうです。

>636さんレスありがとう
0638nobodyさん2007/12/12(水) 17:26:25ID:BkwLyerT
Encode.pm 5.85でEUC→UTF-8変換時に、
「��」などの漢字が化けてしまうのですが、
これを化けないように工夫するにはどうすればいいのでしょうか?
0639nobodyさん2007/12/12(水) 18:06:55ID:???
>>638
Encode::EUCJPMSを入れて、cp51932を使う。
0640nobodyさん2007/12/13(木) 08:48:25ID:???
>>635
s/\$(\w+)/${$1}/g;
0641628=6322007/12/13(木) 20:33:46ID:???
自己レスな上に遅レスです。
色々と検討してみた結果、速度や安全性に疑問も多いですが、とりあえずshm○○を使ってみようかなと思います。
ありがとうございました。
0642nobodyさん2007/12/14(金) 03:20:01ID:jWEjvsMQ
質問です。
Usteramで録画したflvをダウンロードしたくて、
http://unknownplace.org/memo/2007/10/03を参考に以下のソースを実行しました。
#!/usr/bin/env perl

use strict;
use warnings;
use AMF::Perl;
use LWP::UserAgent;
my $cid = shift || '5Fq8cQp9eHsEEknbQ22OOZniqS2xUiuz';
my $amf = AMF::Perl::Util::Object->new;
$amf->addBody('client.watch_video', '/1', { cid => $cid });
my $outputstream = AMF::Perl::IO::OutputStream->new;
my $serializer = AMF::Perl::IO::Serializer->new($outputstream, 'utf-8');
$serializer->serialize($amf);
my $amfdata = $outputstream->flush;
$amfdata =~ s/\xff\xff\xff\xff/\0\0\0\x31\x0a\0\0\0\x01/;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new( POST => 'http://gw.ustream.tv/gateway.php' );
$req->content( $output );
$req->content_type('application/x-amf');
$req->content_length( length $amfdata );
my $res = $ua->request($req);
my $deserializer = AMF::Perl::IO::Deserializer->new(AMF::Perl::IO::InputStream->new($res->content), 'utf-8');
use YAML;
print Dump $deserializer->getObject->getBodyAt(0)->{value};
06436422007/12/14(金) 03:21:23ID:jWEjvsMQ
実行結果は以下の通りです。

Content-Length set when there is no content, fixed at /Library/Perl/5.8.6/LWP/Protocol/http.pm line 196.
Can't use an undefined value as a HASH reference at test.pl line 37.
どうすればいいでしょうか。

よろしくお願いします。
0644nobodyさん2007/12/14(金) 08:48:00ID:???
37行目って何処よ
0645nobodyさん2007/12/15(土) 20:24:19ID:???
$text = <STDIN>;

として、処理中に何らかのテキストを入力させたいです。
英数字は問題ないのですが、日本語を入力したときが変です。

aあ

と入力して、バックスペースを押すとちゃんと消去されません。2回おせば「あ」の表示は消えるのですが、
受け取った文字のaも消えてしまっています。
解決策を教えてください
0646nobodyさん2007/12/15(土) 22:15:15ID:???
IPアドレスから携帯のキャリア判定してる人ってみんなここから
新しいIPアドレスが追加されたか定期的にチェックしてるんですか?
http://ja.wikipedia.org/wiki/%E5%88%A9%E7%94%A8%E8%80%85:Tietew/%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1%E3%81%AEIP%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%83%AA%E3%82%B9%E3%83%88
0647nobodyさん2007/12/15(土) 22:41:06ID:???
ついでにききたいのですが、
@text = <STDIN>;

ってやったときに、入力を終わりにするにはどうすればいいのですか?
0648nobodyさん2007/12/16(日) 02:59:28ID:???
>646
そこから調べてるかどうかはともかく、公式サイトを見るのは確かだな。
まあ、IPアドレスが追加されること自体はあんまり無いし……。
0649nobodyさん2007/12/16(日) 11:33:56ID:???
>>646
リモートホストに変換して判断してる。
0650nobodyさん2007/12/16(日) 16:00:14ID:???
>>649
ホストに変換するのは失敗することあるらしいぞ。
直接IPから判断した方が確実。

気にするほどじゃないとは思うけど、どうなんだろ
0651nobodyさん2007/12/16(日) 18:41:45ID:???
perlで2ちゃんねるの専用ブラウザみたいなのって作れるんでしょうか。
0652nobodyさん2007/12/16(日) 19:23:33ID:???
ネットワークをサポートしていて、文章の出力が出来るなら大抵の言語で可能だと思うよ。
06536422007/12/17(月) 11:34:49ID:FgX+pG+l
>>644
37行目は一番最後のprintの部分です。
0654nobodyさん2007/12/18(火) 10:34:57ID:???
たとえば、sample.plに、

require('lib/lib.pl');
&dosomething();

と書いておいて、lib/lib.plに、

sub dosomething{
  open(FH, '>> baka.log');
  print FH time."\n";
  close(FH);
}

とすると、lib/の中にファイルができるのではなく、ひとつ上にできてしまいます。
これをlib/の中に保存したいのですが、ライブラリからの相対パスで保存する方法はないでしょうか。
または絶対パスを使うしかないのでしょうか。
ヒントだけでもお願いします。
0655nobodyさん2007/12/18(火) 11:18:35ID:???
>>654
じゃあ、ヒントだけ…
つ %INC
06566542007/12/18(火) 16:52:48ID:???
>>655
ありがとう!
こーゆー用途に使うのな。
0657nobodyさん2007/12/19(水) 01:05:36ID:???
ハッシュ配列の各要素をリファレンスとして関数の引数に渡したいのですが
よくわからなくて試行錯誤の末下のような方法にたどり着きました

$AA{'name'} = '1234';
$BB[0]{'name'} = 'abc';
$BB[1]{'name'} = 'ああああ';
$BB[2]{'name'} = '!?';

kansuu( \%AA );
$tmp = \@BB;
kansuu( ${\$tmp->[0]} );
kansuu( ${\$tmp->[1]} );
kansuu( ${\$tmp->[2]} );

sub kansuu
{
  my $h = $_[0];
  print "$h->{'name'}<br>";
}

BBの要素を kansuu() に入れるために
もっとスマートな方法(っていうか正しい書式)がありましたら教えていただけないでしょうか?
0658nobodyさん2007/12/19(水) 01:14:31ID:???
my %AA = ( name => 1234 );
my @BB = (
{name => 'abc'}, #$BB[0]に無名ハッシュ(リファレンス)をいれる
{name => 'ああああ'}, #$BB[1]に〃
{name => '!?'} #$BB[2]に〃
);
kansuu( \%AA ); #\をつけることで%AAのリファレンスがわたる
kansuu( $bb[0] ); #$bb[0]の無名ハッシュリファレンスを渡す
kansuu( $bb[1] );
kansuu( $bb[2] );

sub kansuu {
printf('%s<br>',shift->{name});#ハッシュリファレンスは->をつけて要素を取り出す
}
0659nobodyさん2007/12/19(水) 02:00:39ID:???
$,@,%,\と(),{},[]と->の組み合わせで大抵何とかなる。
正直スカラーのリファレンスの説明は自身がないけどおよそあってると思う
my $scalar = 'abc'; #スカラー
my $scalar_ref = \$scalar; #スカラーのリファレンス
my $anon_scalar_ref = \do {my $anon;}; #微妙に無名じゃないけど
my @array = (1,2,3); #配列
my $array_ref = \@array; #配列のリファレンス
my $anon_array_ref = [1,2,3]; #無名配列のリファレンス
my %hash = (a=>1,b=>2,c=>3); #ハッシュ
my $hash_ref = \%hash; #ハッシュのリファレンス
my $anon_hash_ref = {a=>1,b=>2,c=>3}; #無名ハッシュのリファレンス
my $slacar_object = bless $scalar_ref => __PACKAGE__; # スカラー使ったオブジェクト
my $array_object = bless $array_ref => __PACKAGE__; # 配列使ったオブジェクト
my $hash_object = bless $hash_ref => __PACKAGE__; # ハッシュ使ったオブジェクト
#素直に取り出せる
printf "scalar=%s\n",$scalar;
printf "array=%s\n",$array[0];
printf "scalar=%s\n",$hash{a};
#アドレスっぽいのがとれる
printf "scalar_ref=%s\n",$scalar_ref;
printf "array_ref=%s\n",$array_ref;
printf "scalar_ref=%s\n",$hash_ref;
#リファレンス先の値書き換えたり取り出したり
$$scalar_ref = '書き換えちゃった';printf "scalar=%s\n",$$scalar_ref;
$array_ref->[1] = '書き換えちゃった';printf "array=%s\n",$array_ref->[1];
$hash_ref->{b} = '書き換えちゃった';printf "scalar=%s\n",$hash_ref->{b};
#デリファレンスする(copyが作られる)
my $scalar2 = ${$scalar_ref};
my @array2 = @{$array_ref};
my %hash2 = %{$hash_ref};
0660nobodyさん2007/12/19(水) 07:53:49ID:???
CGI.pmでmetaを出力したいのですがうまくいきません。
↓これを出力したいのですが・・・
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

ttp://www.geocities.co.jp/SiliconValley-Sunnyvale/6128/perl/cgipm.html

このページの解説によると、

use CGI;
my $q = CGI->new;

print $q->start_html(
              -head=>meta({'http-equiv' => 'Content-Type'
              -content=>"text/html; charset=$CharSet"}
),

このようなコードになるはずなのですが、やってみると
Undefined subroutine &main::meta called
というエラーがでます。meta()がメインのサブルーチンだと解釈されてるみたいです。

0661660 続き2007/12/19(水) 07:54:19ID:???
print $q->start_html(
              -head=>$q->meta({'http-equiv' => 'Content-Type'
              -content=>"text/html; charset=$CharSet"}
),

とやると一応うまくいくのですが、なぜか
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />


このようにもう一つ余計なメタが出てしまいます。どうすればいいのでしょうか?
CGI.pmは3..31です。
0662nobodyさん2007/12/19(水) 10:23:45ID:???
>>660-661
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod

my $q = CGI->new;
$q->charset('UTF-8');
06636602007/12/19(水) 23:37:11ID:???
>>662

ありがとうございました!
06646572007/12/20(木) 08:31:41ID:???
>>658-659
ありがとうございます!
超わかりやすくて助かりました
今のプログラムの色んなところがもっと簡潔に書けそうです
0665nobodyさん2007/12/20(木) 10:28:40ID:???
> 超わかりやすくて助かりました
> 今のプログラムの色んなところがもっと簡潔に書けそうです

本当はわかってないくせに。
0666nobodyさん2007/12/20(木) 13:33:18ID:???
>>658-659ですべてが理解できれば天才
0667nobodyさん2007/12/20(木) 13:39:25ID:???
最低限は書かれてて分かりやすいとは思ったぞ
0668nobodyさん2007/12/20(木) 16:21:00ID:???
読む気もしねぇよ
0669nobodyさん2007/12/21(金) 21:13:42ID:???
でもああやって思いつく限りの書き方試して要素やハッシュ値見てればなんとなくでもわかってくるはず。
めんどいけど。
0670nobodyさん2007/12/22(土) 18:50:11ID:???
あんな変な列挙を眺めるんじゃなくて、続初めてのPerl読むべきだろ。
0671nobodyさん2008/01/02(水) 06:47:19ID:???
perl5.10 に移行した人います?
0672nobodyさん2008/01/02(水) 20:07:21ID:???
ノ
依存コードは書いてないけど
0673nobodyさん2008/01/03(木) 00:16:04ID:???
ノシ
cygwinで5.10入れてみた
use 5.10;で書いてみてる
0674nobodyさん2008/01/05(土) 22:21:41ID:???
変数の中身を展開せずに確認したい場合ってどうすればいいんでしょうか?

$test = "今日は\n いい天気です $wether";

こんな変数があるとして、$test自体は展開してほしいんですが、
中身の\nや$wetherは展開せずに出力したいのです。
0675nobodyさん2008/01/05(土) 22:58:36ID:???
'

ちなみに、weather?
0676nobodyさん2008/01/06(日) 03:58:05ID:???
>>674
$testに代入した時点で展開しちゃってるでそ
そもそも確認したい意図は何?

リファレンスにしてアドレスを確認する手もあるけど
■ このスレッドは過去ログ倉庫に格納されています