telldir#
מחזיר את מיקום הקריאה הנוכחי של מטפל ספרייה כטוקן אטום.
telldir מדווח היכן ה־readdir הבא על DIRHANDLE יחזור. הערך המוחזר הוא סימנייה, לא offset של בתים: מסרו אותו בחזרה ל־seekdir כדי לחדש איטרציה באותה רשומה, או השליכו אותו. למספר אין משמעות אריתמטית - הוא אינו אינדקס לתוך הספרייה, לא ספירת רשומות שנקראו, ולא בר־השוואה בין מטפלי ספרייה. התייחסו אליו כפי שהייתם מתייחסים לערך־ההחזרה של tell על מטפל קובץ: אטום לכם, משמעותי רק ל־seekdir התואם.
תקציר#
telldir DIRHANDLE
מה מקבלים בחזרה#
מספר שלם בהצלחה, undef בכישלון (לדוגמה, אם DIRHANDLE אינו מטפל ספרייה פתוח). המספר השלם מובטח לבצע נסיעה חזור דרך seekdir רק על אותו מטפל ספרייה פתוח; סגירה ופתיחה מחדש של הספרייה מבטלת כל טוקן שהוחזר קודם לכן.
opendir my $dh, $path or die "opendir $path: $!";
my $pos = telldir $dh;
# ... readdir a few entries ...
seekdir $dh, $pos; # back to where $pos was taken
מצב גלובלי שהוא נוגע בו#
קובע את $! בכישלון.
דוגמאות#
סימון של מיקום, ואז חזרה אליו:
opendir my $dh, "." or die "opendir: $!";
readdir $dh; # consume "."
my $mark = telldir $dh;
my @rest = readdir $dh; # drain the rest
seekdir $dh, $mark;
my @again = readdir $dh; # same entries as @rest
closedir $dh;
רישום של טוקן לפני כל רשומה כדי שתוכלו לחזור אחורה צעד אחד:
opendir my $dh, $path or die "opendir $path: $!";
my $prev;
while (defined(my $entry = readdir $dh)) {
last if $entry eq "STOP";
$prev = telldir $dh; # position *after* the current entry
}
seekdir $dh, $prev if defined $prev;
החזרה לאחור להתחלה עדיף לבצע עם rewinddir מאשר על־ידי זכירת הטוקן מלפני ה־readdir הראשון:
opendir my $dh, $path or die "opendir $path: $!";
my @first_pass = readdir $dh;
rewinddir $dh; # cleaner than seekdir $dh, $start_token
my @second_pass = readdir $dh;
בדיקה לכישלון באופן מפורש כאשר המטפל עלול להיות סגור:
my $pos = telldir $dh;
defined $pos or die "telldir failed: $!";
מקרי קצה#
הטוקן אטום. אל תשוו, תוסיפו, תפחיתו, או תשמרו את הערך. הוא תקף רק עבור
seekdirעל אותו מטפל ספרייה פתוח באותו תהליך.לא פורטבילי בין מטפלים. שתי קריאות
opendirעל אותה ספרייה מפיקות מטפלים בלתי־תלויים; טוקן מאחד הוא חסר משמעות לאחר.לא יציב על־פני
closedir/opendir. פתיחה מחדש של הספרייה מתחילה איטרציה רעננה; טוקנים ישנים אינם מתייחסים יותר לדבר.דחיסת ספרייה. אם מערכת הקבצים הבסיסית או תהליך אחר משנים את הספרייה (מוסיפים, מסירים, או משנים שמות של רשומות) בין
telldirל־seekdirהתואם, המיקום המחודש עלול לדלג על רשומות, לחזור על רשומות, או לנחות על רשומה שונה מזו שסומנה במקור. זוהי תכונה של זוגtelldir(3)/seekdir(3)של ספריית ה־C, ואין זה משהו ש־Perl מטשטש מעליו. צלמו את הספרייה עםreaddirלרשימה אם אתם צריכים יציבות.Bareword מול מטפל סקלר.
telldir DHו־telldir $dhשניהם פועלים. צורת ה־bareword היא גלובל של חבילה; צורת הסקלר מחזיקה הפניה למטפל ספרייה אנונימי שנוצר על־ידיopendir my $dh, ....
הבדלים מ־upstream#
תואם מלא ל־upstream Perl 5.42.
ראו גם#
seekdir- הצרכן היחיד של טוקןtelldir; משחזר אתDIRHANDLEלמיקום המסומןreaddir- האיטרטור שעל מיקומוtelldirמדווח; מקדם את הסמן ש־telldirצופה בוrewinddir- זול יותר מ־seekdirלטוקן תחילת־זרם כשרק רוצים לעבור על הספרייה שובopendir- יוצר את ה־DIRHANDLEש־telldirמתשאל; כל טוקןtelldirקשור לקריאת open אחתclosedir- מבטל כל טוקןtelldirעבור המטפלtell- האנלוג למטפל קובץ; אותו חוזה טוקן־אטום, קריאת מערכת בסיסית שונה