Perl 5.8.8で 'say'を使うにはどうすればいいですか?

私はいくつかのレビューと修正が必要なプロジェクト(PHP/MySQL)に割り当てられています。 その一部として、私たちが得るすべての変数の正しさをチェックする予定です GETとPOSTを介して。我々はいくつかのphpとtplファイルを持っています コードのすべての行のすべてのthouthandsので、それは検索するのは痛いだろう すべての$ _GET [...]と$ _POST [...]は手動で参照します。だから私はこれをやってみました:

find . -name "*.php" -or -name "*.tpl" |
xargs perl -ne 'use feature say; say $1 while m/(\$_(GET|POST)\[[\s]*[\S]+[\s]*\])/g;' |
sort -u

基本的には、すべての$ _GET [...]と$ _POST [...]のリストを作成します。 プロジェクトを開き、そこから繰り返した値を削除します。しかし、それは動作しませんでした 開発マシンでperl 5.8.8をサポートしていないので 5.10+の機能 'say'、システム管理者はアップグレードが 望ましくない。なぜ私は分からないが、彼は上司だ。

だから、「say」を他のコードに置き換える方法や、 他のツールを使ったPerl?

3
@TLP:通常、システム管理者のエコシステムの脆弱性と関係があるが、私が言ったことは誰にも言わない;)
追加された 著者 Zaid,
@TLP:2つは重なるかもしれない、はい:)
追加された 著者 Zaid,
システム管理者がいつもそう言います するのはなぜですか?
追加された 著者 TLP,
@ Zaid Egosystem?
追加された 著者 TLP,
あなたはperlの代わりにegrepを使うことができます。
追加された 著者 daniel kullmann,

4 答え

say をエミュレートするのはとても簡単だということを忘れないでください。

sub say { print @_, "\n" }

Perlコードの先頭に追加して、通常どおりに使用してください。

13
追加された

Perl 5.10では 'print'の代わりに 'say'が追加され、自動的に改行を出力に追加します。したがって、あなたは "

say "hello";

...書くのではなく、

print "hello\n";

単に使用機​​能を削除するだけです; 'say $ 1'を次のように置き換えます。

print "$1\n";
10
追加された
ありがとう、それは素晴らしいです!
追加された 著者 G. Kashtanov,

8進数のない -l <​​/ code>オプションは、print文の最後に改行を追加します。 perlrun から:

は自動改行処理を有効にします。 2つの別々の効果があります。   まず、$ /(入力レコード区切り文字)を自動的に変換します。   -nまたは-pとともに使用します。次に、$ \(出力レコード   区切り文字)の値がoctnumになるようにして、すべてのprint文   その区切り文字が再び追加されます。 octnumを省略すると、$ \   $/の現在の値に変更します。

そう..

perl -lne ... print $1 ...

say を置き換えます。

6
追加された

しかし、5.10以上の機能をサポートしていない私の開発マシン上でperl 5.8.8を使用していたので動作しませんでした。

Perl 5.8.8が2006年1月31日にリリースされました。それ以来、5.10,5.10.1,5.12,5.12.1,5.12.2,5.12.3,5.12.4,5.14,5.14.1,5.14 .2、...私は時代遅れかもしれない。 5.8.8が出て以来、3つのメジャーリビジョン(5.10,5.12,5.14)が修正されています。推奨されていないサイクルが発生したため、コードをクリーンアップするのに役立つ経験はありませんでした。

シンプルなソリューションはアップグレードすることです。

システム管理者は、アップグレードは望ましくないと言いました。理由はわかりませんが、

など?彼はボスのようではない...

彼は上司です。

ああ。

まあ、私はボスが愚かで間違っていると聞いてもよく知られている人ではありません。そして再び、私は私のやり方を決して唱えていません:-)

あなたの上司がシステムperlのアップグレードに関わっているなら、彼は正しいのです。それは望ましくない。 (私は新しいディストリビューションをお勧めしますが、AIXを使用している場合は、より新しいAIXがまだ古いレベルのperlを出荷しています。)しかしperlをアップグレードするだけでシステムのperlをアップグレードする必要はありません。

複数のperlをインストールすることができます。あなたが/ usr/bin/perlに触れていない限り、システムperlであるべきではないはずです。 〜/ perl/$バージョンにperls 5.8.8,5.10.1,5.12.0,5.12.1,5.12.2,5.14.0,5.14.1,5.14.2をすべてインストールして、〜/ perl5.8.8は5.8.8 perlバイナリへのシンボリックリンクです)、今では新しい機能のために開発 perlsを使うことができますが、古いPerlでテストすることはできます必要。そして、自分のホームディレクトリにインストールしているので、私はsysadminにアクセスする必要はありません。 Linuxでなければ、コンパイラが必要です 。 (Linux上でさえ、いくつかの開発パッケージがインストールされている必要があるかもしれません(例えば、SLES上では、コンパイルするためにRPMを追加する必要があります)。彼はそれに対して警告するのが正しい)。

3
追加された
また、さまざまなバージョン間で簡単に切り替えることができるように設計された perlbrew がありますが、ベンダー提供のバージョンはそのままです。
追加された 著者 JRFerguson,