Perlコーディング初心者質問スレ Part 42
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/05/25(水) 06:36:28ID:PVpWgcdf【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0482nobodyさん
2005/06/20(月) 16:36:58ID:???+漢字も含む文字以外を許容しないというものなん
ですね。
この場合は
if ($str !~ /^([\xA1-\xFE][\xA1-\xFE])+$/) {
}
これで問題ないのでしょうか?
0483nobodyさん
2005/06/20(月) 17:47:52ID:/wReIU3Iperlでcgiを作成しているのですが
URLでhoge.cgi?day=20050620
と指定しているのに
--------------------------------
use CGI;
my $cgi = new CGI;
my $gDay = $cgi->param('day');
--------------------------------
というように取得できません、、、
Ctrl+F5で更新すると取れるのですが
なんでなのでしょう?
何か情報をお持ちな方はお教え頂けますとありがたいです。
0484nobodyさん
2005/06/20(月) 18:47:08ID:???0485nobodyさん
2005/06/20(月) 19:04:03ID:???ありがとうございますっ
url_paramというのがあったのですね、、
不勉強でした。
どうもですっ
0487482
2005/06/20(月) 21:33:18ID:???ぐぐりまくってなんとかここまでたどりつきました。
先生方、見てくださると大変助かります。
$eucpre = qr{(?<!\x8F)};
$eucpost = qr{
(?=
(?:[\xA1-\xFE][\xA1-\xFE])* # JIS X 0208 が 0文字以上続いて
(?:[\x00-\x7F\x8E\x8F]|\z) # ASCII, SS2, SS3 または終端
)
}x;
$hiragana = '\xA4[\xA1-\xF3]'; # ぁ〜ん
$katakana = '\xA5[\xA1-\xF6]'; # ァ〜ヶ
$kanji = '[\xB0-\xFE][\xA1-\xFE]'; # 漢字(実際に割り当てのない領域も有るが問題はない)
$nobashi = '\xA1[\xBC\xBD\xC1]'; # ー−〜
if($name !~ m/^$eucpre(?:$hiragana|$katakana|$kanji|$nobashi)+$eucpost$/){}
0488nobodyさん
2005/06/20(月) 22:07:25ID:???・・・にしては最後のアスキーは何なのかわからんか・・・。
全角記号とかはどうなるのかな。
まあ、やりたいことをもちょっと詳しく。 例とかだしてくれるとわかりやすいかも。
0489nobodyさん
2005/06/20(月) 22:58:52ID:???すいません。ファイルオープンについて教えてください。
ファイルを読み書きオープンで開いて、
前の書き込みのデータを参照して処理をしたあとに追加でデータを書き込みたいのですが、
なかなかうまくいってくれません。
どなたかご教授願えませんでしょうか。
【ファイルについての仕様】
・データの追加書き込みがある
・ある程度データがたまったら削除される。
open(DOUT, "+<$log_file");
これだと、ファイルが削除されている場合エラーが出てしまいます。
open(DOUT, "+>$log_file");
open(DOUT, "+>>$log_file");
上2つだとデータが読み込めないんですけど、これは自分の書き方は悪いんでしょうか。
乱文ですけどよろしくお願いします。
0490nobodyさん
2005/06/20(月) 23:01:55ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_come_when_I_open_the_file_re
0491nobodyさん
2005/06/20(月) 23:59:48ID:???読み書きopen
} else {
新規でopen
0492nobodyさん
2005/06/21(火) 00:03:52ID:???seek (DOUT, 0,0);
が安定じゃね?
0493489
2005/06/21(火) 00:23:19ID:???>>490
私の目的だと
sysopen(FH, $path, O_RDWR|O_CREAT) || die $!;
sysopen(FH, $path, O_RDWR|O_CREAT, 0666) || die $!;
を選択するのが妥当・・・ですよね。
>>491
なるほど、そういう書き方がありますね。
>>492
open(DOUT, "+>>$log_file");
で
@log = <DOUT>
とすると、@logで値が入ってこないんですけど、
@log = <DOUT>をする前に
seek (DOUT, 0,0);
が必要でしょうか??
また、明朝来ます。
0495482
2005/06/21(火) 02:15:58ID:???説明不足ですみません。
ひらがな + カタカナ + 漢字 + [ー〜] だけを許容したい
ずばり、そのとおりでございます。
「最後のアスキー」とは、何か漏れがあったりしますでしょうか?
0496nobodyさん
2005/06/21(火) 02:28:41ID:???最後の $eucpost の後方参照が必要なのかどうかわからないのだった。
まあいるんならいいんじゃない? それで動けば。
0497nobodyさん
2005/06/21(火) 08:45:48ID:???0498493
2005/06/21(火) 09:46:03ID:???ありがとうございます!なりました。
今までseekを使うことがなく、(<と>>だけ)
いまいち感覚がつかめませんでした。
たすかりました。
ところで、+>>でオープンした場合の書き込みは追記になるので
書き込む前に
seek(OUT, 0, 2);
をする必要はないと考えてよいでしょうか。
今のところ問題ないんですけど、やっておかないとマズイことはありますか?
0499nobodyさん
2005/06/21(火) 10:51:42ID:???use utf8;
$str='日本語';
print length $str, "\n"; # 3
foreach (split //, $str) {
print sprintf("%04X\x20", ord); # 65E5 672C 8A9E
}
utf8で書いたファイルを読み込んで同じことをやろうとするとだめです。
use utf8;
while(<>){
print length $_, "\n";
foreach (split //, $_) {
print sprintf("%04X\x20", ord);
}
}
ちなみにファイルは、以下のもので、
これはutfであります。
結果は、
~$ perl utf_test.pl utf_test.txt
32
0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 0075 0074 0066 0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 000D 000A
cygwinのperl5.8.5でやってます。どうしたら、日本語マルチバイト認識して
くれるんでしょう。
0500nobodyさん
2005/06/21(火) 10:57:18ID:???~$ perl utf_test1.pl utf_test.txt
32
00E3 0081 0093 00E3 0082 008C 00E3 0081 00AF 0075 0074 0066 00E3 0081 00A7 00E3 0081 0082 00E3 0082 008A 00E3 0081 00BE 00E3 0081 0099 00E3 0080 0082 000D 000A
です。よろしくお願いします。
0501nobodyさん
2005/06/21(火) 11:02:53ID:???ttp://sakaguch.com/utf2.html#noteで見つけますた。
use open ":utf8";にすれば、問題なくなりますた。
0502nobodyさん
2005/06/21(火) 11:18:14ID:???use open ":utf8";
use utf8;
while(<>){
# while(/\p{Hiragana}/g){
while(/[ぁ-ヶ]/g){
print "$&\n";
}
}
みたいにすると、結果はOKなんですが、
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
これは抑止できないんですかね。
0503nobodyさん
2005/06/21(火) 11:44:02ID:???binmode STDOUT, ":utf8";
perldiag(1)のそのメッセージの説明に書いてあったわけだが。
0504nobodyさん
2005/06/21(火) 13:44:01ID:???0507nobodyさん
2005/06/21(火) 16:19:13ID:???POSTしてるからだろ。
ttp://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod の
「POSTとURLパラメータの混合」より:
問い合わせ文字列(引数が後ろについた"?"マーク)が入ったURLへ
POSTするフォームを作成することにより、スクリプトはフォームと
同じように CGIパラメータをURLで受け取ることは可能です。param()
メソッドは、 URLの問い合わせ文字列を無視し、常にPOSTされた
フォームの内容を返します。 URLパラメータを取り出すためには
url_param()メソッドを呼び出してください。
0508nobodyさん
2005/06/21(火) 16:51:26ID:???0509505
2005/06/21(火) 17:02:14ID:???クエリ付きURLにPOSTすると
paramはPOSTされた値だけ持ってくるってこと?
勉強になった超エロイ人ありがとう!
0511nobodyさん
2005/06/21(火) 23:12:56ID:???RSSをHTMLとして出力するCGIを作成中なのですが、
my $rssfile = $cgi->url_param('rssfile');
open(my $fhin, $rssfile) or die $!;
と書くとDOCUMENT_ROOTにあるrss.xmlを出力しようとして
rssfileに/rss.xmlと指定しても出力できません。
仮想パスを物理パスに変換する必要があるのは分かるのですが、
IISのMapPathメソッドのようなものはないのでしょうか?
よろしくお願いします。
0513nobodyさん
2005/06/21(火) 23:31:31ID:???質問の仕方がまずかったですね。
それも考えましたがrssfileが//etc/passwdとかだった場合は
セキュリティ的に問題があると思ったもので。
DOCUMENT_ROOTの中か外かの判断ができればよいのですが。
0514nobodyさん
2005/06/22(水) 01:31:35ID:???だからこういう事だろ?
my $rssfile = $cgi->url_param('rssfile');
$rssfile =~ s|^[./]*|$ENV{'DOCUMENT_ROOT'}/|;
-f $rssfile || die 'No such file';
open my $fhin, '<' . $rssfile or die $!;
外から渡される文字列は全部危ないんだから、危なくないよう加工・確認
してから使うのがセオリー。問答無用で DOCUMENT_ROOT を基点にして
しまえば中か外か判断する必要はないし、DOCUMENT_ROOT の外の
階層構造をわざわざ外部に教えてあげる必要もない。DOCUMENT_ROOT の
外のファイルを読ませたいのなら、ハッシュを一個用意してそのキーを指定
させる等、パスを直接的に指定させない方法を採ればいい。
%rssfile = (index => '...', news => '...', ... );
if (defined $rssfile{$rssfile}) { ... }
0515nobodyさん
2005/06/22(水) 01:34:47ID:???chdir ($ENV{'DOCUMENT_ROOT'});
とかにして、最初の スラッシュ を削除するとか。
つーかそーゆーモジュールすでにありそうだし、それくらいのメソッドくらい自分で造れそうだがw
0517511
2005/06/22(水) 02:15:15ID:???ありがとうございました。
0518nobodyさん
2005/06/22(水) 11:32:07ID:???ttp://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_can_I_make_a_filehandle_loca
以下抜粋
>上の例では、ファイルハンドルを使う前にそれをスカラー変数に代入していました。
>これは式でもなく、ハッシュや配列の添え字でもなく単純なスカラー変数だけがprintやC<printf>、
>ダイヤモンド 演算子と一緒に使えるのです。コンパイル時にエラーになってしまうような間違いの例を挙げてみましょう:
> @fd = (*STDIN, *STDOUT, *STDERR);
> $got = <$fd[0]> # 間違い
これって、ハンドルのリファレンスをハッシュに入れることは出来ないってことなんでしょうか。
以下のソースでエラーは出ないのですが、書き込みも読み込みも動きません。
package p_file;
my %ref_handle; #クラスで使うファイルハンドルのハッシュ(複数のファイルを同時に開けるようにしたい)
sub open {
my ($id, $path, $file) = @_;
local *FILE;
$ref_handle{$id} = \*FILE; #←ここが問題?
open($ref_handle{$id} , "+>>$path$file");
}
sub read {
my ($id, $row, $begin) = @_;
my @tmp = <{$ref_handle{$id}}>;
〜以下略
sub close {
my ($id) = @_;
close($ref_handle{$id});
}
0519nobodyさん
2005/06/22(水) 11:51:25ID:???君が引用しているのは一つ下の問答のようだが、当の URL の問答に
> 複数のハンドルや無名ハンドルを作りたいのであれば、
> Symbol, FileHandle, IO::Handle といったモジュールを参照してください。
とあり、その例も書いてある。また君が引用している問答の中に、
> このアプローチは print や printf をオブジェクトメソッドの呼び出しの
> ように扱うものですが、これはダイヤモンド演算子には使えません。
> なぜなら、ダイヤモンド演算子はカンマなしの引数を取る関数ではなくて
> 本当の演算子だからです。
と書いてある。
0521nobodyさん
2005/06/22(水) 13:06:21ID:???my($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime($_[0]);
return sprintf("%04d%02d%02d", $year+1900, $mon+1, $day);
なら "%04d%02d%02d" → 20050622 のようになることは理解できるのですが、
($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime($new);
$day = sprintf("%.4d/%.2d/%.2d", $year+1900, $mon+1,$day);
で "%.4d/%.2d/%.2d" → 20050622 となるのはどうしてなんでしょうか。
この『.』の意味が、調べてみても手元の本には載っていなくてわからず、すっきりしません。
桁数の指定(例えば『5.2』とかの)の . ではないようですし・・・
そして、"%.4d/%.2d/%.2d" は "%04d%02d%02d" に書き換えちゃってもかまわないでしょうか?
0522nobodyさん
2005/06/22(水) 13:33:30ID:???手元の本に載ってなければマニュアルを読めばいいじゃない。
http://search.cpan.org/~nwclark/perl-5.8.7/pod/perlfunc.pod#sprintf
英語が苦手なら駱駝本を買えばいいじゃない。
>>7
> "%.4d/%.2d/%.2d" → 20050622 となるのはどうしてなんでしょうか
$year + 1900 を 4 桁の精度に丸めると 2005 、$mon + 1 を 2 桁の精度に
丸めて ( d は整数型指定子なので) 0 パディングすると 06 、$day を 2 桁
の精度に丸めると 22 、それぞれ当てはめて 2005/06/22
> "%.4d/%.2d/%.2d" は "%04d%02d%02d" に書き換えちゃってもかまわない
> でしょうか?
スラッシュが無くなっても構わないならご自由に。
0523nobodyさん
2005/06/22(水) 15:55:25ID:pDQou/2TPermission denied on server. (chmod)とでます。
その上のフォルダは変えられたのですが・・・
上記のエラーはどういう意味なんでしょうか?
0524521
2005/06/22(水) 16:18:22ID:???ありがとうございます。
URL先読んでだいぶ分かりました。
そして手元の本を見直したら、
「.」の後の数値の意味に「文字列の最大幅」というのがちゃんと載ってました。orz
「5.2」のように「.」には必ず前後に数値がないといけないと思い込んでしまってました。
>スラッシュが無くなっても構わないならご自由に。
そうですね、下はスラッシュを入れてますね。気がつかなかった・・・
これは
$day = sprintf("%04d%02d%02d", $year+1900, $mon+1,$day);
$day =~ s/(\d{4})(\d{2})(\d{2})/$1\/$2\/$3/;
とやっておこうと思います。
どうもありがとうございました。
0525nobodyさん
2005/06/22(水) 16:51:26ID:???初心者質問スレが無くなって不便だな…。代わりはここでいいんだろうか。
CGIとかPerlとか超初心者なんだけど、
http://pc8.2ch.net/test/read.cgi/php/995618200/
Perl に関係無い話は上記スレへ。
>>524
"%04d/%02d/%02d"
0527nobodyさん
2005/06/22(水) 17:53:22ID:???hint:
sprintf("%04d%02d%02d", $year, $mon, $day); #20050622
sprintf("%04d/%02d/%02d", $year, $mon, $day); #2005/06/22
sprintf("%04d年%02d月%02d日", $year, $mon, $day); #2005年06月22日
0528nobodyさん
2005/06/22(水) 18:12:51ID:???hint:
$hoge = "ほげ〜ほげ〜ほげ〜<br>お〜れ〜は%s\<br>ガ〜キだいしょ〜うっとくらあ";
$hoge = sprintf($hoge, 'ジャイアン');
0529nobodyさん
2005/06/22(水) 18:46:41ID:VvFC8JSFmy $delete_url = sprintf ("%s?choice=delete;id=%d", url (), $row->{id});
print br (), br (),
"$row->{t} $row->{status}",
" [", a ({-href => $edit_url}, "Edit"), "]",
" [", a ({-href => $delete_url}, "Delete"), "]",
br (), "\n",
"$row->{content}\n";
1行目のsprintfで文字列を指定して、出力しているのはわかります。
しかし、括弧内の意味がわかりません。変数"id"について、URLを指定しているらしい
ですが、よくわかりません。
どっかに詳しく解説している、サイトとかありませんかね?
0530nobodyさん
2005/06/22(水) 18:51:23ID:???0531524,521
2005/06/22(水) 19:10:41ID:???ええと、わざわざ後からスラッシュを入れる方式(>524)にした理由は、
配布されてるあるCGIをカスタマイズしていたら、
そのCGIには日付を取得するサブルーチン(>521の上)があって
ほとんどの部分でそのサブルーチンを利用しているのに、
一カ所だけ利用していない(>521の下)部分があって、
どうしてこの部分では利用して無いのか?他と違うデータなのか?
というのが始まりだったんです。
ちなみにそのCGIの他の箇所で「2005/06/22」形式のデータが必要な時は、
サブルーチンで「20050622」形式のデータを取得した後
s/(\d{4})(\d{2})(\d{2})/$1\/$2\/$3/;
をやってましたので、それに揃えようかと。
0532nobodyさん
2005/06/22(水) 21:23:12ID:SO7tDhegOSはRedhatなんですけど
0533nobodyさん
2005/06/22(水) 21:57:46ID:???0534nobodyさん
2005/06/23(木) 00:40:06ID:???・ID(10バイト程)を入力してもらう
・IDを受け取ったプログラムはIDを一行ごとに入力してある
ファイルを順次読み込み(読みオンリーでオープン)
該当するIDがあるかどうかチェックする。
(対象のIDは5千件程度)
というWebを作りたいんですが、読み込みオンリーで
オープンしておけば一度に10人とか同じチェック側の
プログラムを動かしてもロックかかったりしてパフォーマンス
が落ちることはない?それともプログラム中で条件式(if?)
の中で固定でチェックした方がいいのでしょうか?
0535nobodyさん
2005/06/23(木) 00:54:13ID:???0536nobodyさん
2005/06/23(木) 00:57:09ID:???0538nobodyさん
2005/06/23(木) 01:40:39ID:???0539nobodyさん
2005/06/23(木) 01:58:38ID:dskomwuHスレを教えてくれてありがとうございました
0540nobodyさん
2005/06/23(木) 02:32:10ID:???処理を速攻で終わらせてメモリを開放してあげるほうが重要かと。sleepとか使っちゃダメ。
・・・10人同時って、ほんとにそんな状況発生するのかな?
0541nobodyさん
2005/06/23(木) 15:11:47ID:???CGIを改造中なのですが、知恵を貸してください。
ログの情報を「○番目の要素でソートして表示する」と言うのをしたいのですが、うまくできません。
他のCGIからソート部分だろうと思われるものをコピッて手を加えたのですが、ダメです。
open(IN,"$logfile") || &error("Open Error : $logfile");
@data = <IN>;
close(IN);
@tmp = map {(split /<>/)[3]} @data;
@slist = @data[sort {$tmp[$b] cmp $tmp[$a]} 0 .. $#tmp];
$i=0;
$flag=0;
while (@slist) {
($no,$date,$name,$genre,$com,$kousi,$day,$w1,$w2,$w3,$w4,$w5,$w6,$w7,$time,$mony,$tail,$w,$h) = split(/<>/);
---------
$genreにソートしたいもの(g_1,g_2,g_3〜)が入っていて、それを元に並べ替えしたいんです。
この状態で動作させると、変数が入っていない表が無限に続いてしまいます。
どこが間違っているのでしょうか? お願いします。
0542nobodyさん
2005/06/23(木) 16:03:51ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_do_I_sort_an_array_by_anyth
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1077525387/
【 スクリプト改造依頼スレ 】(丸投げ) part3
http://pc8.2ch.net/test/read.cgi/php/1105046286/
0543nobodyさん
2005/06/23(木) 16:06:01ID:AbvQdhd4use CGI;
$cookie = $cgi->cookie(-name => 'hoge',
-value => 'fuga',
-expires => '+1h',
);
print $cgi->header(-cookie=>$cookie);
この結果は
Set-Cookie: hoge=fuga; path=/; expires=Thu, 23-Jun-2005 07:21:10 GMT Date: Thu, 23 Jun 2005 06:21:10 GMT Content-Type: text/html; charset=ISO-8859-1
のようになりうまくクッキーを取得したようです。
しかし、上のクッキーを取得するために
print $cookie = $cgi->cookie(-name=>'hoge');
と記述しましたが、何も値が入ってませんでした。
cgi.pmを使用してクッキーを取得するにはどのようにしたらよいのでしょうか
0544nobodyさん
2005/06/23(木) 17:34:51ID:???<q cite="http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod">
クッキーを取り出すには、cookie()メソッドを-valueパラメータなしで
呼び出すことによって名前で要求します:
use CGI;
$query = new CGI;
$riddle = $query->cookie('riddle_name');
%answers = $query->cookie('answers');
</q>
0546nobodyさん
2005/06/23(木) 20:57:35ID:???原文が段落あるんだろうから、blockquote のがいいけど。
blockquote だと p とか pre とかも入れないといけないけど。
0547nobodyさん
2005/06/23(木) 22:19:04ID:???まぁ5000件くらいじゃ大丈夫だと思う。
もっと多い場合の対処法としては
データファイルをソートしておく→IDが存在しない時早く終れる。
IDの頭文字別にデータファイルを用意する→個々のデータファイルが小さくなるから早く処理が終わる。
0548nobodyさん
2005/06/24(金) 05:19:50ID:kge0P1YB他の方が製作したCGIに次のような記述がありました。
$\ = "\n";
print "<html>";
print "<body>";
print "<p>test</p>";
print "</body>";
print "</html>";
$\ = "";
これの最初の $\ = "\n"; についての質問です。
これは、恐らくHTMLソースの改行が目的であることは分かりますが、
$\ とはどういった変数なのでしょうか?
また、同じように使える特殊な変数はあるのでしょうか?
検索エンジンで必死に調べたのですが、「$\」で絞り込むのは厳しいようで…。
ご教示お願いします。
0552nobodyさん
2005/06/24(金) 12:27:48ID:QTITokL2掲示板などのようにcgiやphpなどで動的に表示が変わるページを
ページが表示されてからソースの表示をした時に見られるような
htmlソースでダウンロードしたいのですが、やり方がわかりません。
また、niftyのサーバで動かしたいので特殊なモジュールも使用できないので
それでも可能な方法があれば教えて下さい。
本当にやりたい事はその先で、そのソースをまたperlで解析して
テキストを表示するというものです。
ダウンロードしたファイルからそのテキストをただ表示する部分は出来ているので
ダウンロードの部分を教えて下さい。
宜しくお願いします。
0553nobodyさん
2005/06/24(金) 12:41:15ID:???>WEBページを読み込みたいのですが可能でしょうか?
http://pc.2ch.net/php/kako/1037/10377/1037797479.html>>5
>前すれ>>991
>Socketを使わないとむりぽ。
>がむばってネ。
がむばってネ。
おとなしくLWPとか使うのがいいんだけど。niftyなんぞ無視して。
http://pc.2ch.net/php/kako/1037/10377/1037797479.html>>9
>LWP::Simpleモジュールが入っているなら
>perldoc lwpcookして出てくる文書読んでみるとやり方出てるよ。
>
>use LWP::Simple;
>getstore "http//:www.yahoo.co.jp", "yahoo.html";
>みたいな感じ。
がむばってネ。
0554nobodyさん
2005/06/24(金) 13:17:47ID:???まじめな話、もう少し日本語を勉強せよ
0555nobodyさん
2005/06/24(金) 15:58:04ID:/NGYg1v6LWP::Simpleモジュールも入っていないようです。
自PCでActiveperlを実行した時は
HTTP::Lite;モジュールを使ったのですが、
これもNiftyでは使えないようです。
0556nobodyさん
2005/06/24(金) 16:01:15ID:???ということで使いたきゃ自分で必要なもの全部揃えてアップして使いなさい。
0557548
2005/06/24(金) 17:18:12ID:???ご回答ありがとうございました。
Perlの特殊変数のページ非常に参考になりました。
難しくて全てを理解するまでは時間がかかりそうですが、
とりあえず気になったことが分かって嬉しいです。
0558あ
2005/06/24(金) 17:24:31ID:L251Ppfjパッケージ内でグローバルな宣言をされた変数って、それぞれ別にNewで生成されたオブジェクト変数ごとで固有に持たせる方法はありますか?
$a = new foo;
$b = new foo;
fooは内部のmyグローバル変数 s をもってて、set メソッドで代入しgetメソッドで取り出せるとします。
$a->set(100);
$b->set(200);
とすると、
print $a->get;
で 200 と返ってきてしまいます…
javaそのほかのようにインスタンスごとの固有値は持たせられないのでしょうか?基本的で申し訳ありませんがよろしくご教授ください。
0559nobodyさん
2005/06/24(金) 17:25:44ID:???初歩的な質問宜しいでしょうか?
perlで文字列の長さを取得する関数って
ないのでしょうか?
my $len = strlen('auaua');
^^^^^こんなの、、、
0560nobodyさん
2005/06/24(金) 17:31:04ID:???0562559
2005/06/24(金) 17:46:00ID:???わーい
本当にありがとーございますっ
0563あ
2005/06/24(金) 18:01:45ID:L251Ppfj言い方が変でした。すいません。
ようは、パッケージのインスタンスごとに、変数値を持たせられる方法が知りたいのです。同一のパッケージから生成したインスタンスごとでも
$a->get ⇒ 100
$b->get ⇒ 200
のようにできるコーディングがどうすればいいかわかりません…
Perlではこのような動作の要求は無理なんでしょうか?
0566nobodyさん
2005/06/24(金) 18:20:36ID:???my $class = shift;
my $self = {};
bless ($self, $class);
}
sub set {
my $self = shift;
$self->{s} = shift;
}
sub get {
my $self = shift;
return $self->{s};
}
0567563
2005/06/24(金) 18:26:07ID:???ケータイからのカキコで必死だったためろくにsageませんでした;;
なるほどです。感謝!
0569nobodyさん
2005/06/24(金) 18:32:24ID:???0570nobodyさん
2005/06/24(金) 18:32:49ID:???始めの一文字が同じならtrueとしたいのですが
そのような関数もしくはやり方等ないのでしょうか?
昔
if( ($abc cmp $def) >1 ){:
このようなコード書いたような記憶はあるのですが、、、
0571nobodyさん
2005/06/24(金) 18:39:48ID:???if (substr ($abc, 0 , 1) eq substr ($def, 0 , 1)) { 〜 }
0572nobodyさん
2005/06/24(金) 21:10:46ID:???0573nobodyさん
2005/06/25(土) 00:44:36ID:???0574nobodyさん
2005/06/25(土) 01:22:00ID:???でもそれでファイルには書けないんだけどさ。
0575nobodyさん
2005/06/25(土) 01:29:56ID:???0576nobodyさん
2005/06/25(土) 02:58:57ID:???cgi-lib.plのReadParseで読み込んだデータ
$in{'hoge'} (中身はチェックボックスで選択された複数のデータが入っています)があります。
print $in{'hoge'};とすると
あああ いいい ううう えええ おおお かかか ききき くくく・・・のように半角スペース区切りのデータが出ますが、
これを
あああ・いいい・ううう(改行)
えええ・おおお・かかか(改行)
ききき・くくく
のように、3の倍数個目のデータには改行を、それ以外には中黒「・」で区切るようにして表示したいのです。
単純に区切り文字を他の文字に全て置き換えすることなら出来るのですが、ちょっと複雑になるとお手上げです。
ご教示よろしくお願いします。
0577nobodyさん
2005/06/25(土) 03:06:46ID:VyiiD8SR半角スペース区切りだっけ?
普通に split して for文使うとかはどうよ
0578nobodyさん
2005/06/25(土) 03:57:59ID:???例えば、区切りとしてじゃなく、各データのケツに改行とか中黒が着いてると考える。
つまり「3の倍数個目か」「最後のデータか」「それ以外」かで後ろに何をprintするか分岐したらいい。
ループの中にif文2個書いてもいいし、最後だけが例外的なのを利用してループが最後のデータ直前で終わるようにしてもいい。
0579nobodyさん
2005/06/25(土) 04:46:44ID:???$_ = "あああ\0いいい\0ううう\0えええ\0おおお\0かかか\0ききき\0くくく";
while (/([^\0]*)\0([^\0]*)\0?([^\0]*)\0?/g) {
print $1, ($2 ne '' && '・'. $2), ($3 ne '' && '・'. $3), "\n";
}
とかな。
0580nobodyさん
2005/06/25(土) 05:24:23ID:???0581nobodyさん
2005/06/25(土) 14:43:44ID:???0582nobodyさん
2005/06/25(土) 15:04:05ID:???連続で申し訳ありませんが、これを実行すると
Can't use string ("") as a subroutine ref while "strict refs" at 〜
となってしまいます。find()をするとこうなるのですが、どこがおかしいのですか?
use Net::CIDR::Lite;
my $net = Net::CIDR::Lite->new;
my @airedgecidr = (
'221.119.8.0/24', '221.119.9.0/24'
);
foreach (@airedgcidr) {
$net->add($_);
}
$result = $net->find('221.119.8.1');
■ このスレッドは過去ログ倉庫に格納されています