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

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

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

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

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

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

過去ログやお勧めサイトは >>2-10
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:???
汚物を消毒したからといって、汚物のままなのでは?
0909nobodyさん2006/02/25(土) 21:51:05ID:???
消毒しても癒されない。
0910nobodyさん2006/02/25(土) 22:35:17ID:???
質問があります。
今Perlの勉強の為に掲示板を作ってるんですが、
例えば十バイト毎に段落を変えたい場合どうすれば良いのでしょうか?
なにとぞご教授下さい。
0911nobodyさん2006/02/25(土) 22:37:34ID:???
substr
0912nobodyさん2006/02/25(土) 22:40:48ID:???
>>910
It's 書き込みテスト

お前、これを10バイトで段落変えてみろ
0913nobodyさん2006/02/26(日) 00:33:33ID:???
S-JISなのかEUCなのかUTF-8なのかUTF-16なのかで(ry
0914nobodyさん2006/02/26(日) 00:39:08ID:???
>>910
1) 10バイトを別の文字列にコピー
2) その文字列を正規表現などで、正しい文字列かチェック
3) 正しくなければ、1バイト減らしてコピーして2)へ戻る
4) 正しければ終了
0915nobodyさん2006/02/26(日) 02:24:54ID:???
UCSだったr(ry
0916nobodyさん2006/02/26(日) 14:45:09ID:???
(ry
0917nobodyさん2006/02/26(日) 16:03:42ID:QDNmTDhH
すいません。perl初めてまだ数日の者ですので馬鹿みたいな質問
ですが宜しくお願い致します。

Q.関数の値を代入する際、サイズの制限はあるのでしょうか?
例えば私が考えているので
$test = "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">・・・";
などのように関数にそのままHTMLソースを入れているのですが結構なサイズ
になってしまうので不安です。
0918nobodyさん2006/02/26(日) 16:05:28ID:???
> すいません。perl初めてまだ数日の者ですので馬鹿みたいな質問
> ですが宜しくお願い致します。

ということにしたいのですね。:)

ちなみにどう「初め」たのか教えてください。
0919nobodyさん2006/02/26(日) 17:06:28ID:???
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

もちろんどこまで「結構なサイズ」が変数に代入できるかを試した上での質問だよな?
0920nobodyさん2006/02/26(日) 17:11:02ID:???
どうでもいいけど共有鯖でテストするなよ
自鯖でテストしろよ
0921nobodyさん2006/02/26(日) 17:24:37ID:???
>>917
多分、メモリが許す限り。
使用メモリに制限がかかっていたら、そこまで。
0922nobodyさん2006/02/26(日) 17:55:40ID:???
関数つか変数だろ?
0923nobodyさん2006/02/26(日) 18:01:28ID:???
うむ。みんなすごいな。
0924nobodyさん2006/02/26(日) 18:09:45ID:???
なんかもう全部の質問がネタに見えてきた
末期かな
0925nobodyさん2006/02/26(日) 18:23:15ID:???
御臨終です
0926nobodyさん2006/02/26(日) 18:57:50ID:???
>>920
ごめんなさい、自鯖というのは何でしょうか?
それでテストということは、テストを行う環境ということでしょうか?
0927nobodyさん2006/02/26(日) 19:40:19ID:???
http://pc8.2ch.net/mysv/
0928nobodyさん2006/02/26(日) 19:48:41ID:???
だってネタだし。
0929nobodyさん2006/02/26(日) 21:04:48ID:???
屑どもが・・・
0930nobodyさん2006/02/26(日) 21:54:22ID:???
IPアドレスを変化させてスキャンするようなものを書きたいのですがうまくいきません。
どのように書いたら良いのでしょうか?変数の選び方が間違っているのでしょうか?

ちなみに、現在は下のプログラムで、"192.168.0.1:80"をポートチェックしています。

for ($i = 0; $i<3; $i++)
{

$port=80;
$ip_add=192.168.0.1;
#↑の行を $ip_add=192.168.0.1+$i; みたいにしたい。

&CheckPort($portNo,$ip_add);

}
0931勉強中2006/02/26(日) 22:16:58ID:???
Perlでは、
「NULL」と「LOW-BALUE(1バイトの'00')」は
違うものなのでしょうか???
0932nobodyさん2006/02/26(日) 22:33:06ID:???
Perl使った事あるのでしょうか???
0933nobodyさん2006/02/26(日) 22:35:33ID:???
PerlにNULLなんてないよ。
0934 ◆TWARamEjuA NGNG
>>930
32bits整数にしちゃうと楽かも♪
0935nobodyさん2006/02/26(日) 22:57:08ID:???
ちなみに文字列とかにはヌル文字('¥0')使えるよ。
Cと違ってperlは文字列長を管理してるからヌル文字が境界にならない。

1文字だけの文字列を作っても、
内部ではreallocが多くならないように、長めにメモリが割り当てらる。
で、文字列長は1文字、とスカラ構造体のどっかに値が入る。
なので文字列にヌル文字入ってても平気。
0936nobodyさん2006/02/26(日) 23:59:32ID:???
何か知らんけど、気が済むまでスキャンしてろ。

my $port = 80;
for (my $x = 0; $x < 256; $x++) {
for (my $y= 0; $y < 256; $y++) {
my $ip_addr = sprintf("192.168.%d.%d", $x, $y);
CheckPort($port, $ipaddr);
}
}

0937nobodyさん2006/02/27(月) 00:22:17ID:???
痛いソース・・・
0938nobodyさん2006/02/27(月) 00:46:54ID:???
>>937
もっとマシに書ける?
わかりやすく、かつ、バグがない書き方だと思うけど。
0939nobodyさん2006/02/27(月) 01:17:08ID:???
以前に作った IP アドレスを10進数に変換する関数だけどつかってみてくらさい
ただ、自分の環境でしかテストしてないので間違いがあるかもしれないです

戻り値が 0 の場合はエラー判定してください

sub ip2dec{
  my($ip) = $_[0];
  my($basedec) = 256 * 256 * 256 * 256; # ベースとなる値
  my(@quadip) = (0, 0, 0, 0);
  my($ipdec) = 0; # 10進に変換された IP

  @quadip = split(/\./, $ip);
  # 全ての値が 0 〜 255 に収まってるかチェック
  for(my $i = 0; $i < 4; $i++){
    if(($quadip[$i] < 0) || ($quadip[$i] > 255)){
      return 0;
    }
  }
  for(my $i = 0; $i < 4; $i++){
    $basedec = $basedec / 256;
    $ipdec += $basedec * $quadip[$i];
  }
  return $ipdec;
}

0940nobodyさん2006/02/27(月) 01:17:53ID:???
>   my($ip) = $_[0];

shift 使えよ。
0941nobodyさん2006/02/27(月) 01:23:23ID:???
修正した
my($ip) = $_[0] || "";
0942nobodyさん2006/02/27(月) 01:29:03ID:???
>>939
取りあえずfor (my $x = 0; $x < 256; $x++)→for (0 .. 256)な。
0943nobodyさん2006/02/27(月) 01:29:05ID:???
それだと 0 が渡ってきたとき "" になるんだよね。
0944nobodyさん2006/02/27(月) 01:29:59ID:???
>>942
/16 用にネストしてるけど、どうするんだろう。
0945nobodyさん2006/02/27(月) 01:49:09ID:???
my @ip = (192, 168, 0, 0);

foreach(1..65537){
print join('.', @ip), "\n";

foreach(reverse @ip){
($_ = $_+1 & 255) and last;
}
}
0946nobodyさん2006/02/27(月) 01:52:39ID:???
そんなひねくれた書き方すると、バグ探しが面倒。

でさ、65537 って、0x10001 なんだけど。
0947nobodyさん2006/02/27(月) 01:58:31ID:???
>942
$x なんて使ってないし・・・

>943
my($ip) = $_[0] || "";
そこには書かれてないけど
if(!$ip){ return 0; }
で抜けるようにした


ちなみに
&ip2dec("220.110.54.66");
みたく呼ばれることを想定
0948ヽ(´ー`)ノ ◆.ogCuANUcE 2006/02/27(月) 01:59:20ID:???
黙って Socket::inet_aton() か Socket6::inet_pton() 使えよ。
0949nobodyさん2006/02/27(月) 02:00:59ID:???
あるものに頼ってばかりいると「思いつく力」 が欠けてくるので
出来るところは自分で書いた次第です
09509452006/02/27(月) 02:02:33ID:???
my $ip = unpack("N", pack("C4", (192, 168, 0, 0)));

foreach(0..65536){
print join('.', unpack("C4", pack("N", $ip+$_))), "\n";
}

>>946
ただのカウンタだから。
カウントする回数は適当にどうぞ。
0951nobodyさん2006/02/27(月) 02:02:44ID:???
>>942
すごいスーパーハカーですね。

for ($x = 0; $x < 256; $x++)
と
for $x (0 .. 256)

って同じ結果を得られるんですかね?

0952nobodyさん2006/02/27(月) 02:03:39ID:???
>>944
そんならfor my $x (0 .. 256)でOKですぅ〜。
0953nobodyさん2006/02/27(月) 02:04:32ID:???
気付いても黙っていてあげるのもやさしさですよ?
0954nobodyさん2006/02/27(月) 02:05:17ID:???
>952
それでforのなかで$xが扱えるの?
いい事しりました
0955nobodyさん2006/02/27(月) 02:06:48ID:???
>>951
うっせ!そんなので下らない文字レスするなハゲ!あああ、私が悪うござんした。ケアレスミスぐらい多めに見ろやハゲ。
0956nobodyさん2006/02/27(月) 02:07:28ID:???
何気に人が多いでつね。
デスマ中でつか?
0957nobodyさん2006/02/27(月) 02:08:31ID:???
必死に文献探してやっと間違いが分かったくせして・・・
0958nobodyさん2006/02/27(月) 02:11:54ID:???
いやー、釣れた釣れた
0959nobodyさん2006/02/27(月) 02:12:47ID:???
大体、釣れたって後から宣言する奴は返す言葉がなくなった奴だな。
09609452006/02/27(月) 02:14:36ID:???
>>958
これ忘れ物ですよ。
ttp://images-jp.amazon.com/images/P/4759222197.09.LZZZZZZZ.jpg
0961nobodyさん2006/02/27(月) 02:21:18ID:???
書くソースもつまらなければ返しもつまらないな
0962nobodyさん2006/02/27(月) 03:10:33ID:???
初心者が集まって下らないことを言いあってる糞スレはここでつか?
0963nobodyさん2006/02/27(月) 07:31:56ID:???
&#65;をAにデコードするのはどうすればいいですか?
0964nobodyさん2006/02/27(月) 08:37:23ID:???
my $string = "???";
$string =~ s/?([0-9]+);/chr($1)/eg;
print $string; #ABC
0965nobodyさん2006/02/27(月) 08:38:12ID:???
1行目みすった。
my $string = "&#65;&#66;&#67;"
0966nobodyさん2006/02/27(月) 09:47:10ID:???
2行目も
0967nobodyさん2006/02/27(月) 09:59:42ID:???
ほんとこのスレ初心者ばっかでワロタ
0968nobodyさん2006/02/27(月) 10:15:42ID:???
↑初心者
0969nobodyさん2006/02/27(月) 23:11:57ID:???
perlにて以下のような事は実装可能でしょうか。
可能であれば教えてくらはい。

ページAからページBに遷移した場合は1としてカウントし、
ページB内で何度更新しても1としてカウントする。
ページBからブラウザの戻るボタンを押してページAに戻り
再びページBに戻ってきた場合は1としてカウントする。

ただし、ページAはこちらでは操作出来ない(弄くれない)ものとする。

 
最初はリファラーチェックすればいけるかなぁと思ったんですが
ページAから遷移した状態のページBで何度更新してもページAの
リファラーが返っていたのでタメポですた。
何かいい案があれば教えてくらはいませ〜。
0970nobodyさん2006/02/27(月) 23:27:41ID:???
ページAでクッキーセットしてページBでクッキー削除
なのでページBでリロードしてもクッキーが取得できないのでカウントアップしない

ってのはどうだろか
0971nobodyさん2006/02/27(月) 23:34:59ID:???
セッション
0972nobodyさん2006/02/27(月) 23:39:18ID:???
>>970
レスありが�d

しかしながら>>969で書かせて頂きましたように
ページAはこちらでは操作出来ません。
よってページAでクッキーをセットってのが不可能となります。

またクッキーやJavaScript等は一切使えません。
そこ(ページAやページB)へアクセスしてくるのが
クッキーやJavaScriptに対応したものだけとは限らない為です。

わがまま言ってすいません。
0973nobodyさん2006/02/27(月) 23:46:22ID:???
こちらでは操作できないページAって、
早い話が「他人のサイト」扱いだと思えばいいの?
0974nobodyさん2006/02/27(月) 23:50:10ID:???
>>973
そのとおりです。
0975nobodyさん2006/02/27(月) 23:51:05ID:???
セッション使ったリロードチェックでやってる事と同じ事をすれば良い。
基本だから、セッション、リロードチェック辺りでぐぐって。
Bで毎回uniq IDを生成するんだよ。
0976nobodyさん2006/02/27(月) 23:51:34ID:???
んじゃログファイルにIP保存して戻るボタン押した時にそのIP削除&ロケーションで戻してあげな。
リロードしてそのIPあったらカウントしないってのはどう
0977nobodyさん2006/02/27(月) 23:52:53ID:???
>>972
CookieやJSオフにしているユーザのことを考えるなら、
リファラを送らないように設定しているユーザも考えることになると思うが。
0978nobodyさん2006/02/27(月) 23:57:02ID:???
変数 $testの内容が、同じディレクトリにあるtest.datにしたいのですが、出来るのでしょうか。
簡単すぎるのか、検索では出てきません。
よろしくお願いします。
09799692006/02/27(月) 23:59:40ID:???
>>975
了解です。
いろいろとググりましたが
もっとググってみます。

>>976
>>戻るボタン押した時にそのIP削除

知識不足で申し訳ないです。↑はどのようにやればいいんでしょうか?

>>977
確かにそうですね。
ごめんなさい。
0980nobodyさん2006/02/28(火) 00:00:59ID:???
>>978
検索語に何を使っているのか気になる。
ttp://www.google.co.jp/search?q=perl+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB
0981nobodyさん2006/02/28(火) 00:16:04ID:???
>>979
PHPのサンプルを見ると分かるかもね。
「セッション リロード対策」とかでググって。
そこまでやるかは別だけど。
0982nobodyさん2006/02/28(火) 00:37:08ID:???
>>979
<form action="cgiファイル" method=post>
<input type=hidden name=mode value=back2A>
<input type=submit value="Aに戻る">
</form>

--------
上で呼んだcgiファイル(Bでもいいや)で
・IPをログファイルから読み込んで削除
・最後にLocationでAに飛ばす
0983nobodyさん2006/02/28(火) 16:43:39ID:???
次スレ待ち保守
09849782006/02/28(火) 23:58:59ID:???
>>980 perl 外部ファイル などで検索して、この方法にたどり着いたのですが、できなかったので、質問させていただきました。
でも、いまやって見たら、無事にできました。 ありがとうございました。
0985nobodyさん2006/03/01(水) 13:00:29ID:042Ft4VL
http://tama.s68.xrea.com/tool/resize.html
ここみたいに画像を加工するツールを作りたいんですが、perlだけでできますかね?
0986nobodyさん2006/03/01(水) 13:08:50ID:???
Image::Magick 使えばかんたん。
0987nobodyさん2006/03/01(水) 13:49:58ID:???
Perl+sendmailのメールフォームなのですが、
無事送信出来る時と出来ない時があるのは、
Perlの書き方がまずいのでしょうか?
ググってみたものの、送信できない事はよくあるようですが、
(注意書きで「送信できない場合は[email protected]までご連絡ください」のような)
原因は何なんでしょうか?
0988nobodyさん2006/03/01(水) 13:58:52ID:???
どんなコードなのかわかんないから、まずいかどうかも原因もわかんないけど

> (注意書きで「送信できない場合は[email protected]までご連絡ください」のような)

これは action="mailto:〜" で片づけてる場合が多いんじゃないのかな。
あと、JavaScriptが効いてないと送信できないサイトでも見かけた。
0989nobodyさん2006/03/01(水) 14:05:37ID:???
Web サーバの error_log とかメールサーバの maillog は見れないの?
0990nobodyさん2006/03/01(水) 14:09:58ID:???
Perl使ってます
画像処理にimagemagicとGDと2種類あるようですが、
グラフとか書きたいならGD
グラフを書くこと以外ならImageMagic
っていう認識でいんでしょか?
09919872006/03/01(水) 14:35:24ID:???
>>988
ソース見てもらうのは悪いかなと思てたのですが…
うpしましうた。
※設定部分は省いてあります
http://up.spawn.jp/file/up12772.txt
ちなみに、JavaScriptは使ってません。

>>989
見れます。で、見てみました。
が、どうやら入力フォーム→確認画面までは到達し、その後送信ボタンを押しても何の反応もしなく
エラーすらも発生しないようなのです。
なので、それらしいログはなかったです。(まだざっと見ですが)


セキュティソフトとかが悪さしてる場合があるらしいですが、
4分の1の人が送れないらしいので、
さすがに問題は別なのかなと思ってます。
0992nobodyさん2006/03/01(水) 15:21:35ID:???
出力してる HTML が不完全とかは?
レス数が950を超えています。1000を超えると書き込みができなくなります。