• 締切済み

標準関数printの動作をカスタマイズしたい

mod_perl環境下でprintが$r->print()で置き換えられるのと同様に、通常のスクリプトでCORE::printの動作を変更する方法ってありますか? 例えば、s/java/perl/ を噛ましてから出力するようにする方法を教えて下さい。 mainパッケージだけではなく、他のモジュール内から呼ばれる標準関数のprintにも影響させたいです。

noname#9662
noname#9662
  • Perl
  • 回答数2
  • ありがとう数1

みんなの回答

回答No.2

>例えば、s/java/perl/ を噛ましてから出力するようにする方法を教えて下さい。 #1の方も回答されているように、print本体をカスタマイズすることは「基本的には不可能」だと思った方がいいです。 何らかの処理を噛ませてからprintするには sub my_print{ my $tmp = $_[0]; # 含まれるすべての「java」という文字列を「perl」に置換 $tmp =~s/java/perl/g; print $tmp; } といった関数を作って、各ファイルからrequireしてやるのが一番スマートに思えます。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

CORE::print は、置き換えができません。

関連するQ&A

  • Perlで自分自身の関数名を知るには?

    Perlで、自分自身の関数名を知る方法はあるでしょうか? sub testfunc { print FUNCNAME } &testfunc; 例えば、上記のようなコードを実行すると、testfunc という出力が得られるような FUNCNAME のような関数やモジュールがあるか、と言い換えてもいいかもしれません。 以上よろしくお願いします。

    • ベストアンサー
    • Perl
  • `ls`標準出力はどこにいった?

    質問が続いて恐縮なのですが、お願いします。 perlスクリプトでshellコマンドを呼び出したとき、 (以下、#!/usr/bin/perl は省略) $y=`ls`; print $y; では結果がターミナルに表示される print `ls`; でも表示される しかし、単に `ls` では何も表示されない。 `ls`; print $_; でも何も表示されない。 `ls [存在しないファイル]` では標準エラーが表示される。 いったい `ls` の標準出力はどこに格納されるのでしょうか?

    • ベストアンサー
    • Perl
  • 標準モジュール(Archive::Zip)について

    あるLinux環境にてperlの標準モジュールであるArchive::Zip を使用しようとしたらできなくて「you may need to install・・・」 のようなメッセージが出てきました。 下記コマンドでインストールされているモジュールを表示させてみたのですがZipは無いようでした。Zipってperlをインストールする標準モジュールではないのでしょうか? find `perl -e 'print "@INC"'` -name '*.pm' -print

    • ベストアンサー
    • Perl
  • C言語のprint関数の質問なんですが、

    C言語のprint関数の質問なんですが、 "/n"を文字として標準出力するためにはどのような書き方をしなければならないのですか? よろしくお願いします。

  • オーバーライドについて

    perlの出力結果を加工するため、ラクダ本を読んでprint関数のオーバーライドに挑戦したのですが、 どうしてもうまくいきません。 BEGIN { *CORE::GLOBAL::print = sub{ 1 }; }; print 2; の様にやっても、2が出力されてしまいます。 他の関数ではこの方法で動くようでした。 printはオーバーライドできないのでしょうか。 マニアックな質問かもしれませんが、よろしくお願いします。

    • ベストアンサー
    • Perl
  • 日付の差を求める関数はないでしょうか。

    日付の差を求める関数はないでしょうか。 SQLのDATEDIFFのような単純明快な関数があればいいなぁと思っています。 できれば、Perlの組み込み関数か、標準モジュールで・・・x_x

    • ベストアンサー
    • Perl
  • 標準関数が見つからない

    こんにちは、honiyonです。  希に、space$や trim$といった標準関数に対して「プロジェクト、又はライブラリが見つかりません。」というエラーで出ます。   これは一体何が原因なのでしょうか?  対応のしようがなく本当に困っています(+_+)  開き直してもだめ、再起動かけてもだめです。 プロジェクトファイルの何か設定が壊れるのでしょうか。 同症状を体験した友人は「適当にいじっていたら直った」といっていますが...(^^;  これが発生するパターンとして、他のコンピュータでプロジェクトを修正し、自分のコンピュータに移してきた時に発生する事があるようです。  また、似た症状で、同プロジェクト内にある、他モジュールで public宣言しているにも関わらず、変数が見えなくなる事もあります。  環境は、VB6.0(SP5), Win2K です。  編集した他PCは、VB6.0, Win2Kです。  よろしくお願いします(..

  • mod_perlで動作していることを画面上に表示させたい。

    Apache2(Win)でmod_perlをインストールをして、VirtualHostを使っております。 aサイトでは、mod_perlなし bサイトでは、mod_perlあり アクセスして早くなった感じはあまりしませんが、 mod_perlで正しく動作しているという確認をしたいのですが、わかる方法はありますか?

    • ベストアンサー
    • Perl
  • mod_perlでファイルが開けない

    拡張子.plをapacheのmod_perl2で動作するようにしました。 printでHTMLタグの出力などはできますが、openすると403になります。その403も、何かよく分からない英文と同時に表示されていました。 httpd.confで.plを普通のCGIで動作させたならopenできたので、mod_perl2を使うとopenできなくなるということまでは分かりました。 openできるようにするためにはどのようなことを試せばよいですか?

  • メインルーチンの変数をモジュールに渡す

    Perlの勉強をし始めの者なんで、恥ずかしい質問ですけど・・・ モジュールの使い方です。 以下のプログラムではTest_module.pmで定義した変数$testをメインルーチンでprintしています。 ***** メインルーチン *****  #perl /usr/bin/perl  use Test_module;  our $test=10;  print $Test_module::test; ***** Test_module.pm *****  package Test_module;  our $test=10;  1; これはちゃんと動いています。 ところが逆にメインルーチンで定義した変数$testをTest_module.pmに渡そうとすると、うまくいきません。 以下のプログラムをどう直せばいいのでしょうか。 ***** メインルーチン *****  #perl /usr/bin/perl  use Test_module;  our $test=10;  &Test_module::print_test(); ***** Test_module.pm *****  package Test_module;  sub print_test {  print $Main::test;  }  1;

    • ベストアンサー
    • Perl

専門家に質問してみよう