私はいくつかのチュートリアルを調べましたが、それでも私が間違っていることを理解できません。以下のコードを(.pl Perlファイルで、実行可能ファイルとして)試しています:
#!/usr/bin/Perl
Perl -e 'print "Hello";'
このスクリプトを実行すると、次のようになります。
コンパイルエラーのため、/ home/user1/Desktop/file_backups.plの実行が中止されました。
(Perlを使用してLinuxコマンドラインを呼び出すのは初めてです。)
Perl
は、Perlスクリプト内の有効なコマンドではありません。そのファイルに.shスクリプトとして名前を付け、Shebang行で#!/bin/bash
を使用した場合、それは機能しますが、Perlを呼び出すためだけにbashファイルを作成することはあまり意味がありません(なぜPerlを直接呼び出さないのですか?)
コマンドラインとやり取りしたいとおっしゃっていたので、ここでは、@ARGV
配列を介してPerl内のコマンドラインオプションを取得できることを説明します。 ( perldoc perlvar を参照してください。)
試してください:
#!/usr/bin/Perl
# This is a comment ~~~
# This script will be run as a Perl script
# since 'Perl' isn't a keyword or function in Perl
# something like this must fail:
#
# Perl -e 'print "Hello";'
#
# The following should work.
print "Hello"; print " World\n";
または、シェルスクリプトでPerlコードを実行する場合:
#!/bin/sh
# That's a Bash script ~~~
# It's just a command line in a file ...
Perl -e 'print "Hello World";'
バックグラウンド: #!
は インタプリタディレクティブ です。
コマンドが実行されると、インタープリターの実行に変換されます。
コマンドラインで入力するだけです(ファイルではありません)
Perl -e 'print "Hello World\n";'
これは、ワンライナーにとって本当に良いことです。長いスクリプトには独自のファイルが必要です...
これはうまくいくはずです。 ;)内の単一引用符の外側の二重引用符
Perl -e "print 'Hello'"
あなたはこれをやろうとしているかもしれません:
system("/usr/bin/Perl -e 'print \"Hello!\\\\n\";'");
あなたが反対を探していると言ったので、これはあなたが意味することかもしれません:
# vi stdin.pl
# cat stdin.pl
#!/usr/bin/Perl
while(<STDIN>)
{
if( /^hello/ ){ print "Hello back to ya!\n"; }
}
# chmod 0777 stdin.pl
# ./stdin.pl
foo
hello
Hello back to ya!
#
次の入力があるとします。
$ for i in a b c; do echo "$ i is $ i"> $ i; done $ cat a b c a is a b is b c is c
大文字はずっと優れていることを誰もが知っています!
Perl -i.bak -pe '$ _ = uc' a b c
だから今
$ cat abc A IS A B IS B C IS C
しかし、これをupcase
と呼ばれるコマンドで実行したいのですが、それは簡単です!
#! /usr/bin/Perl -pi.bak
$_ = uc
職場で見る:
$ for i in a b c; do echo "$ i is $ i"> $ i; done $ cat abc a is a b is b c is c $です。/upcase abc $!cat cat abc A IS A B IS B C IS C
同様の質問への回答 からのその他のヒント:
-e
オプションは、実行するPerlコード(コマンドラインのスクリプトと考えることができます)を導入するため、それをドロップし、コードを本体に貼り付けます。シバン(-p
)行に#!
を残します。一般に、シバン行のオプションの最大1つの「束」に固執するのが最も安全です。さらに必要な場合は、常に同等のものを
BEGIN {}
ブロック内にスローできます。実行ビットをオンにすることを忘れないでください!
chmod +x script-name
あなたが変換したい実際のワンライナーを与えなかったので、私は幅広い一般的な答えをしなければなりませんでした。質問を編集して、目的に合わせて具体的にすると、より役立つ回答が得られます。