2010-08-25 15 views
11

मैं अपनी स्क्रिप्ट को एक टिप्पणी के रूप में आंतरिक रूप से संशोधन की अंतिम तिथि का ट्रैक रखना चाहता हूं। क्या यह संभव है? ऐसा लगता है कि इसे तारीख को पकड़ने और फिर अपनी स्क्रिप्ट फ़ाइल को एक संलग्न करने के लिए खोलने की आवश्यकता होगी, डेटा लिखें और फ़ाइल को सहेजें।क्या एक पर्ल स्क्रिप्ट स्वयं संशोधित कर सकती है?

धन्यवाद कभी, महान उत्तरदाताओं एक और सभी। कोड स्निपेट GreenMatt द्वारा छोड़ा मैं एक साथ इस फेंक दिया के आधार पर ...

#!/usr/bin/perl -w 

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime time; 
$year += 1900; 
$mon +=1; 

open SELF, ">> letterhome.pl" or die "Unable to open self"; 
#print SELF "# ran/modified at " . join(' ', localtime(time)) . "\n"; 
print SELF "# ran/modified at $hour:$min:$sec on $mon/$mday/$year.\n"; 
close(SELF); 

# ran/modified at 31 48 23 24 7 110 2 235 1 
# unformated result of using localtime(time) 

#Results using formated time/date 
# ran/modified at 0:1:43 on 8/25/2010. 
# ran/modified at 0:2:40 on 8/25/2010. 
# ran/modified at 0:4:35 on 8/25/2010. 
+2

लगता है जैसे आप पहले ही जानते हैं कि यह कैसे करें। यदि यह यूनिक्स/लिनक्स बॉक्स पर एक पर्ल स्क्रिप्ट है तो अनुमतियां एक समस्या नहीं होनी चाहिए, अगर यह विंडोज बॉक्स पर है तो यह आपको फ़ाइल के उपयोग के रूप में नहीं होने दे सकता है। – John

+1

फाइल सिस्टम आमतौर पर मेटाडेटा के रूप में संग्रहीत अंतिम संशोधन समय संग्रहीत करते हैं। यदि ओएस क्या करता है वह वही नहीं है जो आप चाहते हैं, तो आप मेटाडेटा को संशोधित कर सकते हैं, इसे स्रोत कोड में टिप्पणी के अंदर स्टोर करने की आवश्यकता नहीं है। यह विंडोज और लिनक्स दोनों के तहत काम करेगा। –

+1

@ जॉन: दोस्त, अगर आप उस सटीक टिप्पणी को उत्तर के रूप में रखते हैं, तो मैं इसे वोट दूंगा, और शायद इसे स्वीकार किया जाएगा। –

उत्तर

6

यह संभव है, लेकिन यह है कि यह एक अच्छा विचार नहीं है। एक बात के लिए, यह तब तक अपडेट नहीं होगा जब तक आप इसे नहीं चलाते।

यदि आप एक अच्छा संपादक का उपयोग कर रहे हैं, तो फ़ाइल को सहेजते समय स्वचालित रूप से टाइमस्टैम्प डालने का कोई तरीका हो सकता है। उदाहरण के लिए, मैंने write-contents-hooks का उपयोग कर HTML फ़ाइलों में ऐसा करने के लिए Emacs सेट अप किया है। (यह पर्ल कोड के साथ काम करने के लिए कुछ संशोधन की आवश्यकता होगी, लेकिन cjm-misc.el में cjm-html-timestamp आप एक प्रारंभिक बिंदु देना होगा।)

+0

आप बिल्कुल सही हैं! मुझे एहसास होना चाहिए था कि मैंने कभी भी पोस्ट बनाया है, जो मुझे निम्न ग्रेड बुखार चलाने के दौरान पोस्ट करने के लिए सिखाएगा। मुझे लगता है कि कुछ परिस्थितियों में यह स्क्रिप्ट के भीतर निष्पादन की अंतिम तिथि को ट्रैक करने के लिए उपयोगी हो सकता है। हालांकि एक अच्छा लॉग prefered विधि प्रतीत होता है।धन्यवाद, मैं आपके जवाब की तीव्रता की सराहना करता हूं! – jwhalen72

+0

'jwhalen72' टिप्पणियां नहीं पढ़ सकता है, लेकिन' cjm' करता है :) – vol7ron

+0

लॉल ... मैंने टिप्पणियां पढ़ीं, चौंकाने वाली एक और चीज पूरी तरह से है;) btw ... आपकी टिप्पणी "गति पर लड़कियों" संदर्भ की तरह लगता है .. – jwhalen72

-1

ऐसा लगता है कि आप पहले से ही पता है कि यह कैसे करना है। यदि यह एक यूनिक्स/लिनक्स बॉक्स पर एक पर्ल स्क्रिप्ट है तो अनुमतियाँ एक मुद्दा नहीं होना चाहिए, अगर यह एक खिड़कियों बॉक्स पर है यह आपको अंदर आने नहीं हो सकता है फ़ाइल के रूप में उपयोग में है

- जॉन

1

निम्नलिखित ने फ्रीबीएसडी सिस्टम पर काम किया। यह अंत में संलग्न होता है, जो आपको स्वीकार्य लगता है, लेकिन फ़ाइल के भीतर परिवर्तनों को दस्तावेज करने के "सामान्य" तरीके के अनुरूप नहीं है - कम से कम मेरे लिए, जैसा कि मैंने लगभग हमेशा शुरुआत में किया है। आप शायद दिनांक/समय प्रदर्शित होने के तरीके को बदलना चाहेंगे।

#!/usr/bin/perl -w 
open SELF, ">> selfModify.pl" or die "Unable to open self"; 
print SELF "# ran/modified at " . join(' ', localtime()) . "\n"; 
close(SELF); 

चाहे यह बुद्धिमान है या नहीं, मैं आपके लिए निर्णय लेने के लिए छोड़ दूंगा।

+0

मैंने टाइमस्टैम्प को एक और अधिक पठनीय प्रारूप में डालने के लिए थोड़ा जोड़ा ... सुनिश्चित नहीं है कि इसे मेरे विंडोज पीसी पर चलने वाले स्ट्रॉबेरी पर्ल के साथ क्या करना है या यदि यह बस है कि "लोकलटाइम (टाइम) फ़ंक्शन कैसे काम करता है ... – jwhalen72

+0

'लोकलटाइम (समय)' आपके लिए व्यर्थ 'लोकलटाइम() 'कॉल' टाइम' है। –

+0

@ ब्रैड गिल्बर्ट: ऐसा लगता है कि आप सही हैं। मैंने जवाब संशोधित किया। – GreenMatt

7

आप अपने संस्करण नियंत्रण प्रणाली को स्वचालित रूप से ऐसा करने के लिए प्राप्त कर सकते हैं।

लेकिन यदि आप संस्करण नियंत्रण का उपयोग कर रहे हैं तो यह चरण वास्तव में पहले स्थान पर नहीं है।

+2

अच्छा, यह आपके वीसी पर निर्भर करता है। कीवर्ड विस्तार नहीं करते हैं। (ठीक है, यह कर सकता है, लेकिन स्थापित करने के लिए यह छोटा नहीं है और अनुशंसित नहीं है।) – cjm

3

उत्तर के रूप में मेरी टिप्पणी जोड़ने का अनुरोध करके।

लगता है जैसे आप पहले ही जानते हैं कि यह कैसे करें। यदि यह यूनिक्स/लिनक्स बॉक्स पर एक पर्ल स्क्रिप्ट है तो अनुमतियां एक समस्या नहीं होनी चाहिए, अगर यह विंडोज बॉक्स पर है तो यह आपको फ़ाइल के उपयोग के रूप में नहीं होने दे सकता है।

1
#! /usr/bin/env perl 
use warnings; 
use strict; 
use autodie; 

{ 
    open my $self, '>>', $0; 
    my $time = localtime; 
    print {$self} "# ran on $time\n"; 
} 

__END__ 
# ran on Wed Aug 25 16:41:05 2010 
+0

अच्छा! यह दिलचस्प है कि मुद्रित होने पर var कैसे अच्छा प्रारूप "बुध 25 अगस्त 16:41:05 2010" उत्पन्न करता है, जबकि कब सीधे "प्रिंट लोकलटाइम" के रूप में आह्वान किया गया यह "21411925711032361" उत्पन्न करता है – jwhalen72

+0

'लोकटाइम 'एक चर नहीं है, यह एक सबराउटिन है। 'प्रिंट स्केलर लोकटाइम' एक ही परिणाम देगा। –

संबंधित मुद्दे