পার্ল পতাকা -পি, -পি, -পি, -উ, -ডি, -আই, -t?


107

আমি বিভিন্ন পতাকা সহ পার্ল কোড বা স্ক্রিপ্ট চালানোর প্রচুর উপায় দেখেছি। যাইহোক, আমি যখন প্রতিটি পতাকাটির অর্থ কী তা গুগল করার চেষ্টা করি, আমি সাধারণত জেনেরিক পার্ল সাইটগুলিতে ফলাফল পাই এবং পতাকাগুলি বা তাদের ব্যবহার সম্পর্কিত কোনও নির্দিষ্ট তথ্য সেখানে পাওয়া যায় না।

নীচে আমি প্রায়শই ফ্ল্যাগগুলির মুখোমুখি হই এবং সেগুলির অর্থ কী তা আমার কাছে কোনও ধারণা নেই:

  • perl -pe
  • perl -pi
  • perl -p
  • perl -w
  • perl -d
  • perl -i
  • perl -t

আমি যদি তাদের কাছে এর অর্থ কী এবং কিছু তাদের জন্য কেস ব্যবহার করে তা আমাকে জানান বা কমপক্ষে আমাকে তাদের অর্থ সন্ধান করার জন্য কোনও উপায় বলুন তবে আমি অত্যন্ত কৃতজ্ঞ হব।


21
পার্ল সম্পর্কে প্রাথমিক উত্তরের জন্য গুগলিং আপনাকে প্রায়শই কিছু সত্যিকারের অসহায় সাইটগুলিতে নিয়ে যায়। সর্বদা পার্লের নিজস্ব ডকুমেন্টেশনগুলি প্রথমে পরীক্ষা করুন।
ysth


2
Seconded। এই ক্ষেত্রে, perldoc perlrunসব কম্যান্ড-লাইন অপশন পার্ল গ্রহণ একটি তালিকা আছে।
শেরম পেন্ডলি

1
গুগল সমস্যা: বিয়োগ চিহ্নটি গুগল দ্বারা ব্যাখ্যা করা হয়েছে যার অর্থ "এই শব্দটি বাদ দিন"। এই আচরণটি এড়ানোর জন্য বিয়োগ চিহ্নটি কোট ইন শব্দটি রাখুন।
রজার ক্রুয়েজার

উত্তর:


147

হ্যাঁ, Google যতিচিহ্ন আপ খুঁজছেন এবং, দুর্ভাগ্যবশত, পার্ল জন্য কুখ্যাতিপূর্ণভাবে কঠিন করে বেশিরভাগ যতিচিহ্ন দিয়ে গঠিত হবে বলে মনে হচ্ছে :-)

কমান্ড লাইন সুইচ সব বিস্তারিত করছে perlrun । (কল করে কমান্ড লাইন থেকে উপলব্ধ perldoc perlrun)

সংক্ষেপে বিকল্পগুলির মধ্যে যাচ্ছি, একে একে:

-p: আপনার কমান্ডের চারপাশে একটি মুদ্রণ লুপ স্থাপন করে যাতে এটি প্রতিটিটির উপরে কাজ করে
    স্ট্যান্ডার্ড ইনপুট লাইন। পার্ল এর বেশিরভাগ ক্ষেত্রেই পরাজিত করতে পারে Used
    ক্ষমতা এবং সরলতার দিক দিয়ে প্যান্টগুলি বন্ধ করে দেয় :-)
-n: আপনার কমান্ডের চারপাশে একটি অ-প্রিন্টিং লুপ স্থাপন করে।
-e: আপনি বরং যুক্তি হিসাবে প্রোগ্রাম সরবরাহ করার অনুমতি দেয়
    একটি ফাইলের চেয়ে। আপনার কোনও স্ক্রিপ্ট তৈরি করতে হবে না
    প্রতিটি ছোট পার্ল ওয়ান-লাইনারের জন্য ফাইল করুন।
-i: আপনার ইনপুট ফাইলটিকে জায়গায় স্থান পরিবর্তন করে (এর ব্যাকআপ তৈরি করে
    মূল)। {অনুলিপি ছাড়াই ফাইলগুলি সংশোধন করা সহজ,
    মুছুন-আসল, নাম পরিবর্তন করুন} প্রক্রিয়া।
-w: কিছু সতর্কতা সক্রিয় করে। যে কোনও ভাল পার্ল কোডার এটি ব্যবহার করবে।
-ড: পার্ল ডিবাগারের নিচে চলে। আপনার পার্ল কোডটি ডিবাগ করার জন্য,
    স্পষ্টত।
-টি: নির্দিষ্ট "কলঙ্কিত" (সন্দেহজনক) কোডকে সতর্কতা হিসাবে বিবেচনা করে (যথাযথ)
    কলঙ্ক মোড এই সন্দেহজনক কোডটিতে ত্রুটি ঘটবে)। গরুর মাংস ব্যবহার করতেন
    পার্ল সুরক্ষা আপ, বিশেষত যখন অন্যের জন্য কোড চালাচ্ছেন
    ব্যবহারকারী যেমন সেটুয়েড স্ক্রিপ্ট বা ওয়েব স্টাফ।

1
আমি উল্লেখ করেছি যে আপনি উল্লেখ করেছেন perldoc perlrun। আমি আমার উত্তর মুছে ফেলেছি। :-)
অ্যালান হাগই আলাভি

4
-wসাধারণত এড়ানো হবে, কারণ এটি সিপিএএন মডিউলগুলি সহ সতর্কতার সাথে মাথায় রেখে লেখা হয়নি এমন সমস্ত কোডের জন্য সতর্কতা সক্ষম করে । ফলাফলগুলি বেশ চমত্কার শোরগোলের পাশাপাশি বেশ অকেজো।
সন্ধ্যা

9
-wসাধারণত এড়ানো হয়, তবে এটি use warningsআপনার নিজের কোড সহ প্রতিস্থাপন করা উচিত ।
প্লাসপ্লাস

6
@ ডুসকুফ: সাধারণভাবে আমি সম্মত হই, এবং আমি use warningsআমার নিজস্ব কোডে করি, তবে -আর এর একটি ব্যবহার রয়েছে - এটি নিম্ন-লিখিত সিপিএএন মডিউলগুলিকে আগাছা ফেলতে সহায়তা করে। :-)
শেরম পেন্ডলি

2
@ ইয়ানবাইটেক আর্গুমেন্টগুলি যে অতিরিক্ত প্যারামিটার নিতে পারে / অবশ্যই সংকোচিত তালিকার মধ্যে থাকতে পারে না। -iব্যাকআপ জন্য একটি এক্সটেনশন লাগে। -eএকটি পার্ল কমান্ড নেয়। ইন -0ep আপনি Perl কহন যে 'P' একটি আর্গুমেন্ট পরিবর্তে একটি Perl কমান্ড। এটি মোটেও ভাল কাজ করবে না।
tjd

10

-pপতাকা মূলত সহ স্ক্রিপ্টের রান

while (<>) {
# exec here
}
continue {
    print or die "-p destination: $!\n";
}

-e আপনাকে স্ক্রিপ্ট পাস করতে দেয় STDIN

perl -e '$x = "Hello world!\n"; print $x;'

-iদোভাষীকে নির্দেশ দেয় যে STDINএক্সিকিউটিভ স্ক্রিপ্ট দ্বারা প্রেরিত সমস্ত ডেটা অন্তর্ভুক্ত করতে হবে।

-wএকই হিসাবে use warnings;, তবে স্থানীয় সুযোগের চেয়ে বিশ্বব্যাপী

-d পার্ল ডিবাগার চালায়


2
-wঠিক একইরকম নয় use warnings, দ্বিতীয়টি স্থানীয় ফাইলের জন্য স্কোপ করা হয়েছে
প্লাসপ্লাস

প্লাসপ্লাস, সত্য, প্যাচিং উত্তর।
জেলিও

2
আর্গুমেন্ট হিসাবে স্ক্রিপ্টটি পাস করা এটি STDIN এ পাস করার মতো নয়। -i আর্গুমেন্ট তালিকা থেকে ফাইল নাম নেয়, স্টিডিন নয়। যদিও এসটিডিএন প্রায়শই নিয়ন্ত্রণকারী টার্মিনালের সাথে যুক্ত থাকে এবং স্টিল পড়ে এবং শেল থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় এবং আর্গুমেন্ট তালিকাটি পার্লে সেট করে, তারা একই জিনিস নয়।
উইলিয়াম পার্সেল

8

অন্যরা পার্লরুনের কথা বলেছেন। আপনি যদি বি :: ডিপার্স ব্যবহার করেন তবে আপনি এর অর্থ কী তা দেখতে পারেন (বেশিরভাগ জিনিসের জন্য):

$ perl -MO=Deparse   -p  -e 1
LINE: while (defined($_ = <ARGV>)) {
    '???';
}
continue {
    die "-p destination: $!\n" unless print $_;
}
-e syntax OK

1 টি '???' দ্বারা প্রতিনিধিত্ব করা হয়েছে, কারণ এটি দূরে অপ্টিমাইজড রয়েছে।

$ perl -MO=Deparse   -p -i  -e 1
BEGIN { $^I = ""; }
LINE: while (defined($_ = <ARGV>)) {
    '???';
}
continue {
    die "-p destination: $!\n" unless print $_;
}
-e syntax OK

আমি সেট পছন্দ করি

$ perl -MO=Deparse   -p -i.bak  -e 1
BEGIN { $^I = ".bak"; }
LINE: while (defined($_ = <ARGV>)) {
    '???';
}
continue {
    die "-p destination: $!\n" unless print $_;
}
-e syntax OK

তবে মনে রাখবেন, <ARGV> 2-টি যুক্তি খোলা ব্যবহার করে, সুতরাং এমন ফাইলের নাম নেই যা দিয়ে শুরু > <বা শেষ / দিয়ে শুরু হবে |


4

এছাড়াও একটি গুরুত্বপূর্ণ পতাকা রয়েছে -nযা তালিকায় উল্লেখ নেই।

-nযেমনটি কাজ করে -p, কেবল এটি $_ডিফল্টরূপে মুদ্রণ করে না । এটি পাঠ্য ফাইলগুলি ফিল্টার করতে খুব কার্যকর হতে পারে।

এইভাবে পার্ল grep | sedএকক এক-লাইনারে প্রতিস্থাপন করতে পারে ।

উদাহরণ স্বরূপ:

perl -ne 'print "$1\n" if /Messages read: (\d+)/' <my_input.txt

"বার্তাগুলি পড়ুন:" এর পরে প্রাপ্ত প্রতিটি পূর্ণসংখ্যার মান মুদ্রণ করে এবং আরও কিছু না।


এটি আরও সরল করা যেতে পারে। "মুদ্রণ" $ 1 \ n "" দরকার নেই। পরিবর্তে আপনি কেবল "মুদ্রণ" ব্যবহার করতে পারেন।
9-10

না এটি পারে না, ( ) এর print $1মতো নয় । printprint $_
rustyx

এটি করতে পারে: echo abc | perl -nw -e "print if (1)"মুদ্রণ করবে abc$1রেফারেন্সের দরকার নেই ।

@ ডিভোরডেলিজিয়াম: হ্যাঁ, তবে পুরো লাইনটি মুদ্রণ করতে চায় না, তবে কেবল নিয়মিত প্রকাশের সাথে মিলে যায়।
ইনগো ব্লিচমিড্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.