В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Существует несколько путей:
$0
в настоящее время выполняющийся сценарий в соответствии с POSIX, относительно текущего рабочего каталога, если сценарий в или ниже CWDcwd()
, getcwd()
и abs_path()
обеспечиваются Cwd
модуль и говорит Вам, откуда скрипт запускаетсяFindBin
обеспечивает $Bin
& $RealBin
переменные, которые обычно являются путем к выполняющемуся сценарию; этот модуль также обеспечивает $Script
& $RealScript
это - название сценария__FILE__
фактический файл, что интерпретатор Perl имеет дело с во время компиляции, включая ее полный путь.Я видел первые три ($0
, Cwd
модуль и FindBin
модуль), перестали работать под mod_perl
эффектно, производя бесполезный вывод такой как '.'
или пустая строка. В таких средах я использую __FILE__
и получите путь от того использования File::Basename
модуль:
use File::Basename;
my $dirname = dirname(__FILE__);
На *отклоняют, у Вас, вероятно, есть команда "whereis", которая ищет Ваш $PATH, ища двоичный файл с именем. Если 0$ не содержат имя полного пути, работание whereis $scriptname и сохранение результата в переменную должны сказать Вам, где сценарий расположен.
Имейте Вас попробованный:
$ENV{'SCRIPT_NAME'}
или
use FindBin '$Bin';
print "The script is located in $Bin.\n";
Это действительно зависит от того, как это называют и если это - CGI или выполняемый от нормальной оболочки, и т.д.
Use File::Spec;
File::Spec->rel2abs( __FILE__ );
perlfaq8 отвечает на очень похожий вопрос с использованием rel2abs()
функция на $0
. Та функция может быть найдена в File::Spec.
Некоторый короткий фон:
К сожалению, Unix API не предоставляет под управлением программе полный путь к исполняемому файлу. На самом деле программа, выполняющая Ваш, может обеспечить то, что она хочет в поле, которое обычно говорит Вашу программу, каково это. Существуют, как все ответы указывают, различная эвристика для нахождения вероятных кандидатов. Но не что иное как поиск всей файловой системы будет всегда работать, и даже который перестанет работать, если исполняемый файл будет перемещен или удален.
Но Вы не хотите исполняемый файл Perl, который является тем, что на самом деле работает, но сценарий, который он выполняет. И Perl должен знать, где сценарий должен найти его. Это хранит это в __FILE__
, в то время как $0
от Unix API. Это может все еще быть относительным путем, поэтому взять предложение Mark's и канонизировать его с File::Spec->rel2abs( __FILE__ );
Вы могли использовать FindBin, Cwd, File::Basename или комбинацию их. Они - все в основном распределении Perl IIRC.
Я использовал Cwd в прошлом:
Cwd:
use Cwd qw(abs_path);
my $path = abs_path($0);
print "$path\n";
Я думаю модуль, который Вы ищете, FindBin:
#!/usr/bin/perl
use FindBin;
$0 = "stealth";
print "The actual path to this is: $FindBin::Bin/$FindBin::Script\n";
0$ обычно являются названием Вашей программы, таким образом, как насчет этого?
use Cwd 'abs_path';
print abs_path($0);
Кажется мне, что это должно работать, как abs_path знает, используете ли Вы относительный или полный путь.
Обновление Для любого читающего это несколько лет спустя, необходимо прочитать ответ Drew. Это намного лучше, чем мой.
Получение полного пути к $0
или __FILE__
то, что Вы хотите. Единственная проблема состоит в том, если кто-то сделал a chdir()
и $0
было относительно - затем необходимо получить полный путь в a BEGIN{}
предотвратить любые неожиданности.
FindBin
попытки пойти один лучше и унизиться вокруг в $PATH
для чего-то соответствующего basename($0)
, но существуют времена, когда это делает слишком удивительные вещи (конкретно: когда файл "прямо перед Вами" в cwd.)
File::Fu
имеет File::Fu->program_name
и File::Fu->program_dir
для этого.
В Windows с помощью dirname
и abs_path
вместе работал лучше всего на меня.
use File::Basename;
use Cwd qw(abs_path);
# absolute path of the directory containing the executing script
my $abs_dirname = dirname(abs_path([110]));
print "\ndirname(abs_path(\[110])) -> $abs_dirname\n";
вот то, почему:
# this gives the answer I want in relative path form, not absolute
my $rel_dirname = dirname(__FILE__);
print "dirname(__FILE__) -> $rel_dirname\n";
# this gives the slightly wrong answer, but in the form I want
my $full_filepath = abs_path([111]);
print "abs_path(\[111]) -> $full_filepath\n";